• 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!

Solved Monster no hit summon moster

Natan Beckman

Well-Known Member
Joined
Aug 1, 2010
Messages
548
Reaction score
52
Location
Teresina-PI/Br
The monster no attack summon moster:
Help
Code:
Code:
    else if(target->getMonster())
    {
        if(attacker->getMonster())
            return RET_YOUMAYNOTATTACKTHISCREATURE;

        if(!target->isAttackable())
            return RET_YOUMAYNOTATTACKTHISCREATURE;

        const Player* attackerPlayer = NULL;
        if((attackerPlayer = attacker->getPlayer()) || (attackerPlayer = attacker->getPlayerMaster()))
        {
            if(attackerPlayer->hasFlag(PlayerFlag_CannotAttackMonster))
                return RET_YOUMAYNOTATTACKTHISCREATURE;

            if(target->isPlayerSummon())
            {
                checkZones = true;
                if(g_game.getWorldType() == WORLDTYPE_OPTIONAL && !Combat::isInPvpZone(attacker, target)
                    && !attackerPlayer->isEnemy(target->getPlayerMaster(), true))
                    return RET_YOUMAYNOTATTACKTHISCREATURE;
            }
        }
    }

Complete code combat.cpp:
http://pastebin.com/b1whZ9dn
 
if(attacker->getMonster() && !attacker->getPlayerMaster())

Summ Sorry, i'm newbie how i add code?

Look:
Code:
    else if(target->getMonster())
    {
        if(attacker->getMonster() && !attacker->getPlayerMaster())
            return RET_YOUMAYNOTATTACKTHISCREATURE;
      
        if(attacker->getMonster())
            return RET_YOUMAYNOTATTACKTHISCREATURE;

        if(!target->isAttackable())
            return RET_YOUMAYNOTATTACKTHISCREATURE;

        const Player* attackerPlayer = NULL;
        if((attackerPlayer = attacker->getPlayer()) || (attackerPlayer = attacker->getPlayerMaster()))
        {
            if(attackerPlayer->hasFlag(PlayerFlag_CannotAttackMonster))
                return RET_YOUMAYNOTATTACKTHISCREATURE;

            if(target->isPlayerSummon())
            {
                checkZones = true;
                if(g_game.getWorldType() == WORLDTYPE_OPTIONAL && !Combat::isInPvpZone(attacker, target)
                    && !attackerPlayer->isEnemy(target->getPlayerMaster(), true))
                    return RET_YOUMAYNOTATTACKTHISCREATURE;
            }
        }
    }

OR

Code:
    else if(target->getMonster())
    {
        if(attacker->getMonster())
            return RET_YOUMAYNOTATTACKTHISCREATURE;

        if(!target->isAttackable())
            return RET_YOUMAYNOTATTACKTHISCREATURE;

        const Player* attackerPlayer = NULL;
        if(attacker->getMonster() && !attacker->getPlayerMaster())
        {
            if(attackerPlayer->hasFlag(PlayerFlag_CannotAttackMonster))
                return RET_YOUMAYNOTATTACKTHISCREATURE;

            if(target->isPlayerSummon())
            {
                checkZones = true;
                if(g_game.getWorldType() == WORLDTYPE_OPTIONAL && !Combat::isInPvpZone(attacker, target)
                    && !attackerPlayer->isEnemy(target->getPlayerMaster(), true))
                    return RET_YOUMAYNOTATTACKTHISCREATURE;
            }
        }
    }
 
if(attacker->getMonster() && !target->getPlayerMaster())
I ADD Summ, no solved:
Code:
    else if(target->getMonster())
    {
        if(attacker->getMonster() && !target->getPlayerMaster())
            return RET_YOUMAYNOTATTACKTHISCREATURE;
        
        if(attacker->getMonster())
            return RET_YOUMAYNOTATTACKTHISCREATURE;

        if(!target->isAttackable())
            return RET_YOUMAYNOTATTACKTHISCREATURE;

        const Player* attackerPlayer = NULL;
        if((attackerPlayer = attacker->getPlayer()) || (attackerPlayer = attacker->getPlayerMaster()))
        {
            if(attackerPlayer->hasFlag(PlayerFlag_CannotAttackMonster))
                return RET_YOUMAYNOTATTACKTHISCREATURE;

            if(target->isPlayerSummon())
            {
                checkZones = true;
                if(g_game.getWorldType() == WORLDTYPE_OPTIONAL && !Combat::isInPvpZone(attacker, target)
                    && !attackerPlayer->isEnemy(target->getPlayerMaster(), true))
                    return RET_YOUMAYNOTATTACKTHISCREATURE;
            }
        }
    }
 
Last edited:
After several tests.
I Solved:
Code:
    else if(target->getMonster())
    {
        if(attacker->getMonster() && !target->getPlayerMaster() && !attacker->getPlayerMaster())
            return RET_YOUMAYNOTATTACKTHISCREATURE;
           
        if(!target->isAttackable())
            return RET_YOUMAYNOTATTACKTHISCREATURE;

        const Player* attackerPlayer = NULL;
        if((attackerPlayer = attacker->getPlayer()) || (attackerPlayer = attacker->getPlayerMaster()))
        {
            if(attackerPlayer->hasFlag(PlayerFlag_CannotAttackMonster))
                return RET_YOUMAYNOTATTACKTHISCREATURE;

            if(target->isPlayerSummon())
            {
                checkZones = true;
                if(g_game.getWorldType() == WORLDTYPE_OPTIONAL && !Combat::isInPvpZone(attacker, target)
                    && !attackerPlayer->isEnemy(target->getPlayerMaster(), true))
                    return RET_YOUMAYNOTATTACKTHISCREATURE;
            }
        }
    }
 
Back
Top