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

C++ Skull system, help me do this

Jpstafe

Well-Known Member
Joined
Aug 8, 2011
Messages
507
Reaction score
68
atm in downgraded versions it work like this
A = WHITE SKULL worls
B = YELLOW SKULL worls
C = NO_SKULL << need to add pz lock for it via config.lua since the guy is not getting pz lock if attaks back

Guy A attacks guy C. Guy c attacks guy A back. but guy C ain't getting PZLOCK. not working
guy B attack guy A and guy B get yellow and pz lock. its working

Lua:
void Player::onAttackedCreature(Creature* target, bool addFightTicks /* = true */)
{
    Creature::onAttackedCreature(target);

    if (target->getZone() == ZONE_PVP) {
        return;
    }

    if (target == this) {
        if (addFightTicks) {
            addInFightTicks();
        }
        return;
    }

    if (hasFlag(PlayerFlag_NotGainInFight)) {
        return;
    }

    Player* targetPlayer = target->getPlayer();
    if (targetPlayer && !isPartner(targetPlayer) && !isGuildMate(targetPlayer)) {
        if (!pzLocked && g_game.getWorldType() == WORLD_TYPE_PVP_ENFORCED) {
            pzLocked = true;
            sendIcons();
        }

        targetPlayer->addInFightTicks();

        if (getSkull() == SKULL_NONE && getSkullClient(targetPlayer) == SKULL_YELLOW) {
            addAttacked(targetPlayer);
            targetPlayer->sendCreatureSkull(this);
        } else {

            if (!targetPlayer->hasAttacked(this) || !g_config.getBoolean(ConfigManager::PZLOCK_SKULL_ATTACKER)) {
                if (!pzLocked && g_game.getWorldType() != WORLD_TYPE_PVP_ENFORCED) {
                    pzLocked = true;
                    sendIcons();
                }

                if (!Combat::isInPvpZone(this, targetPlayer) && !isInWar(targetPlayer)) {
                    addAttacked(targetPlayer);

                    if (targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE) {
                        setSkull(SKULL_WHITE);
                    }

                    if (getSkull() == SKULL_NONE) {
                        targetPlayer->sendCreatureSkull(this);
                    }
                }
            }

        }
    }

    if (addFightTicks) {
        addInFightTicks();
    }
}

i took the code from here
 
atm in downgraded versions it work like this
A = WHITE SKULL worls
B = YELLOW SKULL worls
C = NO_SKULL << need to add pz lock for it via config.lua since the guy is not getting pz lock if attaks back

Guy A attacks guy C. Guy c attacks guy A back. but guy C ain't getting PZLOCK. not working
guy B attack guy A and guy B get yellow and pz lock. its working

Lua:
void Player::onAttackedCreature(Creature* target, bool addFightTicks /* = true */)
{
    Creature::onAttackedCreature(target);

    if (target->getZone() == ZONE_PVP) {
        return;
    }

    if (target == this) {
        if (addFightTicks) {
            addInFightTicks();
        }
        return;
    }

    if (hasFlag(PlayerFlag_NotGainInFight)) {
        return;
    }

    Player* targetPlayer = target->getPlayer();
    if (targetPlayer && !isPartner(targetPlayer) && !isGuildMate(targetPlayer)) {
        if (!pzLocked && g_game.getWorldType() == WORLD_TYPE_PVP_ENFORCED) {
            pzLocked = true;
            sendIcons();
        }

        targetPlayer->addInFightTicks();

        if (getSkull() == SKULL_NONE && getSkullClient(targetPlayer) == SKULL_YELLOW) {
            addAttacked(targetPlayer);
            targetPlayer->sendCreatureSkull(this);
        } else {

            if (!targetPlayer->hasAttacked(this) || !g_config.getBoolean(ConfigManager::PZLOCK_SKULL_ATTACKER)) {
                if (!pzLocked && g_game.getWorldType() != WORLD_TYPE_PVP_ENFORCED) {
                    pzLocked = true;
                    sendIcons();
                }

                if (!Combat::isInPvpZone(this, targetPlayer) && !isInWar(targetPlayer)) {
                    addAttacked(targetPlayer);

                    if (targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE) {
                        setSkull(SKULL_WHITE);
                    }

                    if (getSkull() == SKULL_NONE) {
                        targetPlayer->sendCreatureSkull(this);
                    }
                }
            }

        }
    }

    if (addFightTicks) {
        addInFightTicks();
    }
}

i took the code from here
 
PZLOCK_SKULL_ATTACKER = true
config.lua
Yes i have it enabled, The guy that attaks the white skull player back does not get pzlock
only the ones that have not recieved attack from the white skull ( the ones that get yellow skulls gets pz lock)
 
Try it...
With this modification, if Guy C has no skull (SKULL_NONE) and PZLOCK_NO_SKULL_ATTACKER is set to true in the config.lua file, he will receive a PZ lock when attacking Guy A back. If PZLOCK_NO_SKULL_ATTACKER is set to false, Guy C will not receive a PZ lock in this case.

config.lua
Lua:
PZLOCK_NO_SKULL_ATTACKER = true -- Set to true to enable PZ lock for players with no skull attacking back

The code:
C++:
if (!targetPlayer->hasAttacked(this) || !g_config.getBoolean(ConfigManager::PZLOCK_SKULL_ATTACKER)) {
    if (!pzLocked && g_game.getWorldType() != WORLD_TYPE_PVP_ENFORCED) {
        pzLocked = true;
        sendIcons();
    }

    if (!Combat::isInPvpZone(this, targetPlayer) && !isInWar(targetPlayer)) {
        addAttacked(targetPlayer);

        if (targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE) {
            setSkull(SKULL_WHITE);
        }

        if (getSkull() == SKULL_NONE) {
            targetPlayer->sendCreatureSkull(this);
        }
    }
}

Modify:
C++:
if ((!targetPlayer->hasAttacked(this) && getSkull() == SKULL_NONE && g_config.getBoolean(ConfigManager::PZLOCK_NO_SKULL_ATTACKER)) ||
    (!targetPlayer->hasAttacked(this) && g_config.getBoolean(ConfigManager::PZLOCK_SKULL_ATTACKER))) {
    if (!pzLocked && g_game.getWorldType() != WORLD_TYPE_PVP_ENFORCED) {
        pzLocked = true;
        sendIcons();
    }

    if (!Combat::isInPvpZone(this, targetPlayer) && !isInWar(targetPlayer)) {
        addAttacked(targetPlayer);

        if (targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE) {
            setSkull(SKULL_WHITE);
        }

        if (getSkull() == SKULL_NONE) {
            targetPlayer->sendCreatureSkull(this);
        }
    }
}
 
tried this. does not work
Lua:
if (!targetPlayer->hasAttacked(this) ||  getSkull() == SKULL_NONE && !g_config.getBoolean(ConfigManager::PZLOCK_SKULL_ATTACKER)) { 
                if (!pzLocked && g_game.getWorldType() != WORLD_TYPE_PVP_ENFORCED) {
                    pzLocked = true;
                    sendIcons();

tried this too, does not work either
Code:
if (!targetPlayer->hasAttacked(this) && getSkull() == SKULL_NONE || !g_config.getBoolean(ConfigManager::PZLOCK_SKULL_ATTACKER)) { 
                if (!pzLocked && g_game.getWorldType() != WORLD_TYPE_PVP_ENFORCED) {
                    pzLocked = true;
                    sendIcons()
 
Last edited:
tried this. does not work
Lua:
if (!targetPlayer->hasAttacked(this) ||  getSkull() == SKULL_NONE && !g_config.getBoolean(ConfigManager::PZLOCK_SKULL_ATTACKER)) {
                if (!pzLocked && g_game.getWorldType() != WORLD_TYPE_PVP_ENFORCED) {
                    pzLocked = true;
                    sendIcons();

tried this too, does not work either
Code:
if (!targetPlayer->hasAttacked(this) && getSkull() == SKULL_NONE || !g_config.getBoolean(ConfigManager::PZLOCK_SKULL_ATTACKER)) {
                if (!pzLocked && g_game.getWorldType() != WORLD_TYPE_PVP_ENFORCED) {
                    pzLocked = true;
                    sendIcons()
I think I already send to you what you want or it doesnt work?
 
sadly is not working this is my code
Lua:
void Player::onAttackedCreature(Creature* target, bool addFightTicks /* = true */)
{
    Creature::onAttackedCreature(target);

    if (target->getZone() == ZONE_PVP) {
        return;
    }

    if (target == this) {
        if (addFightTicks) {
            addInFightTicks();
        }
        return;
    }

    if (hasFlag(PlayerFlag_NotGainInFight)) {
        return;
    }

    Player* targetPlayer = target->getPlayer();
    if (targetPlayer && !isPartner(targetPlayer) && !isGuildMate(targetPlayer)) {
        if (!pzLocked && g_game.getWorldType() == WORLD_TYPE_PVP_ENFORCED) {
            pzLocked = true;
            sendIcons();
        }

        targetPlayer->addInFightTicks();

        if (getSkull() == SKULL_NONE && getSkullClient(targetPlayer) == SKULL_YELLOW) {
            addAttacked(targetPlayer);
            targetPlayer->sendCreatureSkull(this);
            /*} else if (!targetPlayer->hasAttacked(this)) {
                if (!pzLocked) {
                    pzLocked = true;
                    sendIcons();
                }

                if (!Combat::isInPvpZone(this, targetPlayer) && !isInWar(targetPlayer)) {*/
                //addAttacked(targetPlayer);

                /*if (targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE) {
                    setSkull(SKULL_WHITE);*/
        }
        else {
            if (!targetPlayer->hasAttacked(this) || !g_config.getBoolean(ConfigManager::PZLOCK_SKULL_ATTACKER)) { //AGREGADO SKULL OLD SYSTEM
                if (!pzLocked && g_game.getWorldType() != WORLD_TYPE_PVP_ENFORCED) {
                    pzLocked = true;
                    sendIcons();
                }//AGREGADO SKULL OLD SYSTEM

                /*if (getSkull() == SKULL_NONE) {
                    targetPlayer->sendCreatureSkull(this);*/
                if (!Combat::isInPvpZone(this, targetPlayer) && !isInWar(targetPlayer)) {//AGREGADO SKULL OLD SYSTEM
                    addAttacked(targetPlayer);

                    if (targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE) {
                        setSkull(SKULL_WHITE);
                    }

                    if (getSkull() == SKULL_NONE) {
                        targetPlayer->sendCreatureSkull(this);
                    }//AGREGADO SKULL OLD SYSTEM  VA CON EL COMMIT ANTERIOR Add configurable yellow skull behavior (old tibia style) (#66)
                }
            }
        }
    }

    if (addFightTicks) {
        addInFightTicks();
    }
}
 
Last edited:
sadly is not working this is my code
Lua:
void Player::onAttackedCreature(Creature* target, bool addFightTicks /* = true */)
{
    Creature::onAttackedCreature(target);

    if (target->getZone() == ZONE_PVP) {
        return;
    }

    if (target == this) {
        if (addFightTicks) {
            addInFightTicks();
        }
        return;
    }

    if (hasFlag(PlayerFlag_NotGainInFight)) {
        return;
    }

    Player* targetPlayer = target->getPlayer();
    if (targetPlayer && !isPartner(targetPlayer) && !isGuildMate(targetPlayer)) {
        if (!pzLocked && g_game.getWorldType() == WORLD_TYPE_PVP_ENFORCED) {
            pzLocked = true;
            sendIcons();
        }

        targetPlayer->addInFightTicks();

        if (getSkull() == SKULL_NONE && getSkullClient(targetPlayer) == SKULL_YELLOW) {
            addAttacked(targetPlayer);
            targetPlayer->sendCreatureSkull(this);
            /*} else if (!targetPlayer->hasAttacked(this)) {
                if (!pzLocked) {
                    pzLocked = true;
                    sendIcons();
                }

                if (!Combat::isInPvpZone(this, targetPlayer) && !isInWar(targetPlayer)) {*/
                //addAttacked(targetPlayer);

                /*if (targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE) {
                    setSkull(SKULL_WHITE);*/
        }
        else {
            if (!targetPlayer->hasAttacked(this) || !g_config.getBoolean(ConfigManager::PZLOCK_SKULL_ATTACKER)) { //AGREGADO SKULL OLD SYSTEM
                if (!pzLocked && g_game.getWorldType() != WORLD_TYPE_PVP_ENFORCED) {
                    pzLocked = true;
                    sendIcons();
                }//AGREGADO SKULL OLD SYSTEM

                /*if (getSkull() == SKULL_NONE) {
                    targetPlayer->sendCreatureSkull(this);*/
                if (!Combat::isInPvpZone(this, targetPlayer) && !isInWar(targetPlayer)) {//AGREGADO SKULL OLD SYSTEM
                    addAttacked(targetPlayer);

                    if (targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE) {
                        setSkull(SKULL_WHITE);
                    }

                    if (getSkull() == SKULL_NONE) {
                        targetPlayer->sendCreatureSkull(this);
                    }//AGREGADO SKULL OLD SYSTEM  VA CON EL COMMIT ANTERIOR Add configurable yellow skull behavior (old tibia style) (#66)
                }
            }
        }
    }

    if (addFightTicks) {
        addInFightTicks();
    }
}
Post in thread 'How to make monster deal damage to monster in tfs 1.5 nekiro' TFS 1.X+ - How to make monster deal damage to monster in tfs 1.5 nekiro (https://otland.net/threads/how-to-make-monster-deal-damage-to-monster-in-tfs-1-5-nekiro.282892/post-2709104)


Only to know: dont use player from same account to test, use two or more acc
 
ok now is working but the player that is attacking back to the white skull is recieving yellow skull
if the player has been attacked by white skull and he attacks back he should get pz but no yellow skull
only the player that attacks white skull should recieve yellow skull ( if he has no recieved attacks from white skull guy)
or im wrong?
 
Last edited:
ok now is working but the player that is attacking back to the white skull is recieving yellow skull
if the player has been attacked by white skull and he attacks back he should get pz but no yellow skull
only the player that attacks white skull should recieve yellow skull ( if he has no recieved attacks from white skull guy)
or im wrong?
you're right, but, tested here and working fine.

I copied this code from nostalrius, here is the code that I compiled, i dont get whats wrong with your server, maybe client diference(here 7.72):

C:
void Player::onAttackedCreature(Creature* target, bool addFightTicks /* = true */)
{
    Creature::onAttackedCreature(target);

    if (target->getZone() == ZONE_PVP) {
        return;
    }

    if (target == this) {
        if (addFightTicks) {
            addInFightTicks();
        }
        return;
    }

    if (hasFlag(PlayerFlag_NotGainInFight)) {
        return;
    }

    Player* targetPlayer = target->getPlayer();
    if (targetPlayer) { /* old > (targetPlayer && !isPartner(targetPlayer) && !isGuildMate(targetPlayer))*/
        if (!pzLocked && g_game.getWorldType() != WORLD_TYPE_PVP_ENFORCED) {
            pzLocked = true;
            sendIcons();
        }

        targetPlayer->addInFightTicks();
       
        if (!isPartner(targetPlayer)) {
            if (getSkull() == SKULL_NONE && getSkullClient(targetPlayer) == SKULL_YELLOW) {
                addAttacked(targetPlayer);
                targetPlayer->sendCreatureSkull(this);
       
            } else {
                if (!targetPlayer->hasAttacked(this)) {
                    if (!Combat::isInPvpZone(this, targetPlayer) && !isInWar(targetPlayer)) {
                        addAttacked(targetPlayer);
                        if (targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE) {
                            setSkull(SKULL_WHITE);
                        }
                    }
                   
                    if (getSkull() == SKULL_NONE) {
                        targetPlayer->sendCreatureSkull(this);
                    }
                }
            }
        }
    }       

    if (addFightTicks) {
        addInFightTicks();
    }
}
 
you're right, but, tested here and working fine.

I copied this code from nostalrius, here is the code that I compiled, i dont get whats wrong with your server, maybe client diference(here 7.72):

C:
void Player::onAttackedCreature(Creature* target, bool addFightTicks /* = true */)
{
    Creature::onAttackedCreature(target);

    if (target->getZone() == ZONE_PVP) {
        return;
    }

    if (target == this) {
        if (addFightTicks) {
            addInFightTicks();
        }
        return;
    }

    if (hasFlag(PlayerFlag_NotGainInFight)) {
        return;
    }

    Player* targetPlayer = target->getPlayer();
    if (targetPlayer) { /* old > (targetPlayer && !isPartner(targetPlayer) && !isGuildMate(targetPlayer))*/
        if (!pzLocked && g_game.getWorldType() != WORLD_TYPE_PVP_ENFORCED) {
            pzLocked = true;
            sendIcons();
        }

        targetPlayer->addInFightTicks();
      
        if (!isPartner(targetPlayer)) {
            if (getSkull() == SKULL_NONE && getSkullClient(targetPlayer) == SKULL_YELLOW) {
                addAttacked(targetPlayer);
                targetPlayer->sendCreatureSkull(this);
      
            } else {
                if (!targetPlayer->hasAttacked(this)) {
                    if (!Combat::isInPvpZone(this, targetPlayer) && !isInWar(targetPlayer)) {
                        addAttacked(targetPlayer);
                        if (targetPlayer->getSkull() == SKULL_NONE && getSkull() == SKULL_NONE) {
                            setSkull(SKULL_WHITE);
                        }
                    }
                  
                    if (getSkull() == SKULL_NONE) {
                        targetPlayer->sendCreatureSkull(this);
                    }
                }
            }
        }
    }      

    if (addFightTicks) {
        addInFightTicks();
    }
}
haha it work as it should, no need any config.lua feature. thank you
 
Back
Top