Postado Outubro 16, 2020 4 anos 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 @LeoTK: https://tibiaking.com/forums/topic/96803-system-ghost-complementação-sem-debug/
Postado Outubro 16, 2020 4 anos Este tópico foi movido para a seção de Suporte Otserv Alternativo https://github.com/italoxxx1
Postado Outubro 16, 2020 4 anos 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 Outubro 16, 2020 4 anos 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 Outubro 16, 2020 4 anos por Standard (veja o histórico de edições)
Postado Outubro 16, 2020 4 anos @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.