• <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 閱讀(246) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            国产日韩久久免费影院| 狠狠色婷婷综合天天久久丁香| 久久99精品国产99久久6| 久久996热精品xxxx| 97精品伊人久久久大香线蕉 | 午夜精品久久久久久毛片| 久久99热只有频精品8| 久久精品女人天堂AV麻| 亚洲熟妇无码另类久久久| 国产叼嘿久久精品久久| 久久久噜噜噜久久熟女AA片| 久久e热在这里只有国产中文精品99 | 久久亚洲sm情趣捆绑调教| 青草影院天堂男人久久| 精品久久人人爽天天玩人人妻| 久久99国产亚洲高清观看首页| 精品久久久久久久久免费影院| 国产成人精品久久一区二区三区| 99久久做夜夜爱天天做精品| 亚洲乱亚洲乱淫久久| 国产精品久久久久jk制服| 一级做a爰片久久毛片毛片| 国内精品伊人久久久久影院对白| 亚洲精品无码久久一线| 久久午夜无码鲁丝片秋霞 | 久久精品国产亚洲AV高清热 | 久久精品国产一区| 69久久夜色精品国产69| 色诱久久久久综合网ywww| 精品国产乱码久久久久软件| 伊人色综合久久天天人守人婷| 国产精品美女久久久久AV福利| 久久成人国产精品二三区| 国内精品久久久久影院免费| 精品久久久久久国产潘金莲 | 久久精品国产精品亚洲精品| 香蕉久久av一区二区三区 | 久久久久国产亚洲AV麻豆| 精品久久久久久国产三级| 精品国产婷婷久久久| 久久综合视频网站|