Ir para conteúdo

Featured Replies

Postado

Pessoal criei uma spell com o efeito GHOST, funciona perfeitamente porém se o player estiver em PARTY, ele é removido automaticamente dela. Tentei solucionar indo em PARTY.CPP e adicionando o seguinte parâmetro na função "bool Party::leave(Player* player)":

 

Spoiler

    if(player->isGhost())
        return false;

 

Com isso consegui que não remova a PARTY quando o player usar a magia, porém ocasionou outro problema que mesmo se o player deslogar ou morrer estando no modo GHOST da magia ele não perde a PARTY, e ainda por cima se outro player da PARTY deslogar ou morrer nesse período em que o player que estava de GHOST estiver deslogado o servidor crasha...

 

Acho que se adicionar uma verificação para que o player esteja logado nessa parte "if(player->isGhost())" ficaria perfeito, porém eu procurei e não achei, alguém poderia me ajudar com essa parte ?

 

O tópico usado para criar essa spell foi esse do @LeoTKhttps://tibiaking.com/forums/topic/96803-system-ghost-complementação-sem-debug/

  • Respostas 8
  • Visualizações 1.2k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • @Naze@WooX Consegui resolver, obrigado por tentarem ajudar !   O problema não estava na função "leaveparty", e sim no própio comando do GHOST, pesquisei mais a fundo e vi que o própio comand

  • Este tópico foi movido para a seção de Suporte Otserv Alternativo

Postado

Este tópico foi movido para a seção de Suporte Otserv Alternativo

 

 

 

 

 

                                                                                                                                                     tumblr_nwmv2z4VEM1ujiquxo1_100.gif.2db64bb36f0f565e68ff2a90cb98f439.gif.59f4c4cf234d2f6906621cac0553a862.gif

https://github.com/italoxxx1

 

Postado

Manda a função completa.

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Postado

PARTY.CPP:

Spoiler

bool Party::leave(Player* player)
{
    if(!isPlayerMember(player) && player != leader)
        return false;
    
    if(player->isGhost())
        return false;

    bool missingLeader = false;
    if(leader == player)
    {
        if(!memberList.empty())
        {
            if(memberList.size() == 1 && inviteList.empty())
                missingLeader = true;
            else
                passLeadership(memberList.front());
        }
        else
            missingLeader = true;
    }

    //since we already passed the leadership, we remove the player from the list
    PlayerVector::iterator it = std::find(memberList.begin(), memberList.end(), player);
    if(it != memberList.end())
        memberList.erase(it);

    it = std::find(inviteList.begin(), inviteList.end(), player);
    if(it != inviteList.end())
        inviteList.erase(it);

    player->setParty(NULL);
    player->sendClosePrivate(CHANNEL_PARTY);

    player->sendTextMessage(MSG_INFO_DESCR, "Você saiu da party.");
    player->sendPlayerIcons(player);

    updateSharedExperience();
    updateIcons(player);
    clearPlayerPoints(player);

    char buffer[105];
    sprintf(buffer, "%s deixou a party.", player->getName().c_str());

    broadcastMessage(MSG_INFO_DESCR, buffer);
    if(missingLeader || canDisband())
        disband();

    return true;
}

 

SPELL:

Spoiler

function talk_ghost(cid)

if not isCreature(cid) then return true end

if getPlayerStorageValue(cid, 137884) == 3 then
setPlayerGroupId(cid, 3)
else
if getPlayerStorageValue(cid, 137884) < 1 then
setPlayerGroupId(cid, 1)
end
end

doCreatureExecuteTalkAction(cid, "!ghost", TRUE)
local cidposi = {x = getCreaturePos(cid).x, y = getCreaturePos(cid).y, z = getCreaturePos(cid).z}

end

function onCastSpell(cid, var)

setPlayerGroupId(cid, 2)

local efeito = {x = getCreaturePos(cid).x + 1, y = getCreaturePos(cid).y, z = getCreaturePos(cid).z}
doSendMagicEffect(efeito, 217)
doCreatureExecuteTalkAction(cid, "!ghost", TRUE)
addEvent(talk_ghost, 5000, cid)

return true
end

 

Editado por Standard (veja o histórico de edições)

Postado

@Standard Manda como ficou a spell também.

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo