KI

[c++] passive system

Por Kilowog, 10 de jun. de 2016 em Linguagens de Programação

tfs 0.4
147
18.3k
KilowogK
14 de junho de 2016 às 14:05
1 hora atrás, boxxer321 disse:

ceetros pode postar a versão 0.3.6?

Pode sim, sem problema nenhum. A ideia do topico é ajudar a todos, não ganhar +rep.

dalvorsnD
14 de junho de 2016 às 14:33

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.

KilowogK
14 de junho de 2016 às 14:45
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?

dalvorsnD
14 de junho de 2016 às 14:55
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.

KilowogK
14 de junho de 2016 às 14:56
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?

dalvorsnD
14 de junho de 2016 às 15:03
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();    }

 

KilowogK
14 de junho de 2016 às 15:11
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.

Yan LiimaY
14 de junho de 2016 às 15:11
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.

KilowogK
14 de junho de 2016 às 15:12

@dalvorsn eu consigo pegar um uid pelo guid? Digamos, tem uma função facil que dá isso e tal?

dalvorsnD
14 de junho de 2016 às 15:16
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

nociamN
14 de junho de 2016 às 18:10

o certo é o que o da dalvorsn falo ao deslogar o player ainda ficaria na lista.

boxxer321B
14 de junho de 2016 às 19:55
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?

Luga03L
15 de junho de 2016 às 19:15

Deu certo @Kilowog ?? Diz ae as novidades

Luga03L
17 de junho de 2016 às 12:06

@Kilowog Novidades?

JosegvbJ
17 de junho de 2016 às 13:42

acho que o @Ceetros tb deberia falar, pidiu permiçao do autor do topico pra postar, ele deu mas o ceetros nao respondeu mais