• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天行健 君子當自強而不息

            Controlling Players and Characters(37)

            Whenever a character needs updating, rendering, or what have you, a pointer to
            the linked list of characters is needed in order to iterate the list. Either that or
            maybe your application needs access to the character data. Either way, the following
            functions will help you out:

                sCharacter* get_root_char()
                {
                    
            return m_root_char;
                }

                sCharacter* get_char(
            long id)
                {
                    
            for(sCharacter* character = m_root_char; character != NULL; character = character->next)
                    {
                        
            if(id == character->id)
                            
            return character;
                    }

                    
            return NULL;
                }

            During specific functions, it becomes necessary for characters (such as monsters)
            to make sure that they can see another character before attacking or casting a spell.
            A function of your design is required to verify that such a line of sight is clear.
            Returning a value of true states that a character is in sight of another one:


                virtual bool line_of_sight(sCharacter* source, sCharacter* target,
                                           
            float source_x, float source_y, float source_z,
                                           
            float target_x, float target_y, float target_z)
                {
                    
            // make sure there is a line of sight between characters.

                    
            return true;
                }

            When the character controller (or outside code) needs one of the character’s abilities,
            it needs to retrieve it with the following group of functions. These functions
            take into account the various modifiers such as status ailments and equipped items:


                long get_to_hit(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            long to_hit = character->char_def.to_hit;

                    
            if(character->ailments & AILMENT_BLIND)
                        to_hit *= 0.75f;

                    
            if(character->ailments & AILMENT_HAWKEYE)
                        to_hit *= 1.5f;

                    
            return to_hit;
                }

                
            long get_agility(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            long agility = character->char_def.agility;

                    
            if(character->ailments & AILMENT_CLUMSY)
                        agility *= 0.75f;

                    
            if(character->ailments & AILMENT_SUREFOOTED)
                        agility *= 1.5f;

                    
            return agility;
                }

                
            long get_attack(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            long attack = character->char_def.attack;

                    
            // adjust attack based on item value
                    if(character->char_def.weapon != -1 && m_mil)
                        attack *= (m_mil[character->char_def.weapon].value / 100.0f + 1.0f);

                    
            if(character->ailments & AILMENT_WEAK)
                        attack *= 0.5f;

                    
            if(character->ailments & AILMENT_STRONG)
                        attack *= 1.5f;

                    
            return attack;
                }
                
                
            long get_defense(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            long defense = character->char_def.defense;

                    
            if(character->char_def.armor != -1 && m_mil)
                        defense *= (m_mil[character->char_def.armor].value / 100.0f + 1.0f);

                    
            if(character->char_def.shield != -1 && m_mil)
                        defense *= (m_mil[character->char_def.shield].value / 100.0f + 1.0f);

                    
            if(character->ailments & AILMENT_WEAK)
                        defense *= 0.5f;

                    
            if(character->ailments & AILMENT_STRONG)
                        defense *= 1.5f;

                    
            if(defense < 0)     // boudns check
                        defense = 0;

                    
            return defense;
                }

                
            long get_resistance(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            long resistance = character->char_def.resistance;

                    
            if(character->ailments & AILMENT_ENCHANTED)
                        resistance *= 0.5f;

                    
            if(character->ailments & AILMENT_BARRIER)
                        resistance *= 1.5f;

                    
            return resistance;
                }

                
            long get_mental(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            long mental = character->char_def.mental;

                    
            if(character->ailments & AILMENT_DUMBFOUNDED)
                        mental *= 0.5f;

                    
            return mental;
                }

                
            float get_speed(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0.0f;

                    
            float speed = character->char_def.speed;

                    
            if(character->ailments & AILMENT_SLOW)
                        speed *= 0.5f;

                    
            if(character->ailments & AILMENT_FAST)
                        speed *= 1.5f;

                    
            if(speed < 1.0f)    // bounds check
                        speed = 1.0f;

                    
            return speed;
                }

                
            float get_charge_rate(const sCharacter* character)
                {
                    
            if(character == NULL)
                        
            return 0;

                    
            float charge_rate = character->char_def.charge_rate;

                    
            if(character->ailments & AILMENT_SLOW)
                        charge_rate *= 0.75f;

                    
            if(character->ailments & AILMENT_FAST)
                        charge_rate *= 1.5f;

                    
            return charge_rate;
                }

            posted on 2007-12-04 19:05 lovedday 閱讀(245) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            91精品国产综合久久香蕉 | 色8久久人人97超碰香蕉987| 2021最新久久久视精品爱| 久久婷婷国产剧情内射白浆| 性高湖久久久久久久久| 国产婷婷成人久久Av免费高清| 国产精品久久久久久久 | 少妇高潮惨叫久久久久久| 亚洲精品无码久久久久久| 国产亚洲精品自在久久| 欧美日韩精品久久久免费观看| 久久WWW免费人成一看片| 久久九九全国免费| 97久久国产露脸精品国产| 99久久精品久久久久久清纯| 一本色道久久88精品综合| 99久久精品费精品国产| 久久精品国产网红主播| 无码任你躁久久久久久老妇| 国产精品久久久福利| 久久99九九国产免费看小说| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 欧美亚洲色综久久精品国产| 久久香蕉国产线看观看猫咪?v| 久久精品国产第一区二区三区| 区久久AAA片69亚洲| 久久精品亚洲男人的天堂| 嫩草影院久久国产精品| 日日噜噜夜夜狠狠久久丁香五月| 久久中文精品无码中文字幕 | 无码精品久久一区二区三区| 天天爽天天爽天天片a久久网| 久久精品无码专区免费东京热| 亚洲va中文字幕无码久久| 一本综合久久国产二区| 久久久久久免费视频| 久久婷婷人人澡人人爽人人爱| 中文字幕精品久久| 久久久精品人妻一区二区三区蜜桃| 久久精品无码一区二区app| 精品久久综合1区2区3区激情|