Eu alertei que ocorreriam problemas por usar o guid, o deathlist passou a salvar o guid ao invez do uid, logicamente onde mais ele acessa deve tentar encontrar pelo uid alternativamente. Para fazer sem ser assim, teria que criar um outro array, talvez seja até mais trabalhoso.
- Fórum
- OTServ
- Recursos
- Linguagens de Programação
- [c++] passive system
11 minutos atrás, dalvorsn disse:Eu alertei que ocorreriam problemas por usar o guid, o deathlist passou a salvar o guid ao invez do uid, logicamente onde mais ele acessa deve tentar encontrar pelo uid alternativamente. Para fazer sem ser assim, teria que criar um outro array, talvez seja até mais trabalhoso.
em vez de usar o guid será que não consigo usar o uid não? No função do target ou do addDamage?
8 minutes ago, Kilowog said:
em vez de usar o guid será que não consigo usar o uid não? No função do target ou do addDamage?
Não adiantaria, porque o uid é temporario, quando o player deslogar esse uid perde referencia.
Agora, dalvorsn disse:Não adiantaria, porque o uid é temporario, quando o player deslogar esse uid perde referencia.
Mas ele só deslogaria quando saisse de Battle não? Come seria a ideia da lista?
Just now, Kilowog said:
Mas ele só deslogaria quando saisse de Battle não? Come seria a ideia da lista?
A lista permanece enquanto o monstro estiver vivo, te dar um exemplo de algo que aconteceria, se eu ataco o pokemon e corro, espero o battle e deslogo, e eu volto perto dele novamente, ele ja nao vai mais reconhecer que esse player atacou ele porque ele relogou. Caso ele morra aconteceria a mesma coisa.
Se isso que foi citado acima não é problema, então basta modificar para:
uint32_t id = creature->getID(); if(creature->getMaster() && creature->getMaster()->getPlayer()) id = creature->getMaster()->getID(); if (isPassive() && !hasBeenAttacked(id)) { return false; }
e
void CreatureaddDamagePoints(Creature* attacker, int32_t damagePoints){ if(damagePoints < 0) return; uint32_t attackerId = 0; if(attacker){ if(attacker->getMaster() && attacker->getMaster()->getPlayer()) attackerId = attacker->getMaster()->getID(); else attackerId = attacker->getID(); }
2 minutos atrás, dalvorsn disse:A lista permanece enquanto o monstro estiver vivo, te dar um exemplo de algo que aconteceria, se eu ataco o pokemon e corro, espero o battle e deslogo, e eu volto perto dele novamente, ele ja nao vai mais reconhecer que esse player atacou ele porque ele relogou. Caso ele morra aconteceria a mesma coisa.
Se isso que foi citado acima não é problema, então basta modificar para:
uint32_t id = creature->getID(); if(creature->getMaster() && creature->getMaster()->getPlayer()) id = creature->getMaster()->getID(); if (isPassive() && !hasBeenAttacked(id)) { return false; }
e
void CreatureaddDamagePoints(Creature* attacker, int32_t damagePoints){ if(damagePoints < 0) return; uint32_t attackerId = 0; if(attacker){ if(attacker->getMaster() && attacker->getMaster()->getPlayer()) attackerId = attacker->getMaster()->getID(); else attackerId = attacker->getID(); }
Entendi, seria como eu pretendia fazer inicialmente quando vi o problema, com lista.
Porém meu conhecimento é bom em Java e não tanto em C++, são linguagens parecidas porém as lib são diferentes. Vou dá uma estudada nesse conceito da lista e ver o que consigo fazer, mas sua solução é uma boa também.
info
Grupo: Diretor
Registrado: 12/05/12
Posts: 818
Reputação: +578
Gênero: Masculino
Char no Tibia: [ADM] Night

6 minutos atrás, dalvorsn disse:A lista permanece enquanto o monstro estiver vivo, te dar um exemplo de algo que aconteceria, se eu ataco o pokemon e corro, espero o battle e deslogo, e eu volto perto dele novamente, ele ja nao vai mais reconhecer que esse player atacou ele porque ele relogou. Caso ele morra aconteceria a mesma coisa.
Se isso que foi citado acima não é problema, então basta modificar para:
uint32_t id = creature->getID(); if(creature->getMaster() && creature->getMaster()->getPlayer()) id = creature->getMaster()->getID(); if (isPassive() && !hasBeenAttacked(id)) { return false; }
e
void CreatureaddDamagePoints(Creature* attacker, int32_t damagePoints){ if(damagePoints < 0) return; uint32_t attackerId = 0; if(attacker){ if(attacker->getMaster() && attacker->getMaster()->getPlayer()) attackerId = attacker->getMaster()->getID(); else attackerId = attacker->getID(); }
Como isso seria um problema? na verdade esse seria o modo correto, na minha opinião é bem melhor.
@dalvorsn eu consigo pegar um uid pelo guid? Digamos, tem uma função facil que dá isso e tal?
5 minutes ago, Kilowog said:@dalvorsn eu consigo pegar um uid pelo guid? Digamos, tem uma função facil que dá isso e tal?
Sim, facilmente.
C++
g_game.getPlayerByGUID(guid)
Lua
getPlayerByGUID(guid)
Editado Junho 14 por dalvorsn
o certo é o que o da dalvorsn falo ao deslogar o player ainda ficaria na lista.
info
Grupo: Conde
Registrado: 03/11/11
Posts: 714
Reputação: +67
Gênero: Masculino
Char no Tibia: esqueci 20+

5 horas atrás, Kilowog disse:Pode sim, sem problema nenhum. A ideia do topico é ajudar a todos, não ganhar +rep.
@Ceetros poderia disponibilizar pra versão 0.3.6?
info
Grupo: Conde
Registrado: 14/04/15
Posts: 956
Reputação: +333
Gênero: Masculino

Deu certo @Kilowog ?? Diz ae as novidades
info
Grupo: Conde
Registrado: 14/04/15
Posts: 956
Reputação: +333
Gênero: Masculino

@Kilowog Novidades?





info
Grupo: Campones
Registrado: 23/12/15
Posts: 33
Reputação: +21
Gênero: Masculino
Pode sim, sem problema nenhum. A ideia do topico é ajudar a todos, não ganhar +rep.