• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Linux absorb system on shielding bug !

beliar34

Member
Joined
Feb 28, 2012
Messages
307
Solutions
7
Reaction score
11
Error in putty when compiling :
Code:
game.cpp: In member function 'Item* Game::findItemOfType(Cylinder*, uint16_t, bool, int32_t)':
game.cpp:1580:10: warning: converting 'false' to pointer type 'Item*' [-Wconversion-null]
game.cpp: In member function 'bool Game::combatChangeHealth(CombatType_t, Creature*, Creature*, int32_t, bool)':
game.cpp:4118:37: error: 'damage' was not declared in this scope
game.cpp:4123:29: error: 'damage' was not declared in this scope
make[1]: *** [game.o] Error 1

Code :
Code:
bool Game::combatChangeHealth(CombatType_t combatType, Creature* attacker, Creature* target,
    int32_t healthChange, bool force/* = false*/)
{
    const Position& targetPos = target->getPosition();
    if(healthChange > 0)
    {
        if(!force && target->getHealth() <= 0)
            return false;

        bool deny = false;
        CreatureEventList statsChangeEvents = target->getCreatureEvents(CREATURE_EVENT_STATSCHANGE);
        for(CreatureEventList::iterator it = statsChangeEvents.begin(); it != statsChangeEvents.end(); ++it)
        {
            if(!(*it)->executeStatsChange(target, attacker, STATSCHANGE_HEALTHGAIN, combatType, healthChange))
                deny = true;
        }

        if(deny)
            return false;
>>> here starts absorb script
                    if(combatType == COMBAT_PHYSICALDAMAGE && target && target->getPlayer()) 
                    { 
                        double absorbPower = 0, damageChange = 0;
                        int32_t skillShield = target->getPlayer()->getSkill(SKILL_SHIELD, SKILL_LEVEL); 
                        if(skillShield >= 15) 
                        {
                            absorbPower = (std::floor(skillShield / 5) - 3) * 3;
                            damageChange = std::ceil((damage * absorbPower) / 100);
                        }                       
    
                        if((int32_t)damageChange != 0) 
                        { 
                            damage -= (int32_t)damageChange; 
                            char buffer[150]; 
                            sprintf(buffer, "%d hitpoint%s has been absorbed by your defense.", (int32_t)damageChange, ((int32_t)damageChange == 1 ? "" : "s")); 
    
                            target->getPlayer()->sendTextMessage(MSG_EVENT_DEFAULT, buffer); 
                        } 
                    }
 
Back
Top