[C++] Monsters Passive System (No-bugs)

Tony Araujo

OrochiElf
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 27/02/13Posts: 446Gênero: Masculino

[C++] Monsters Passive System

testado: TFS - 0.3.6 (porém acredito que funcione em outros)

autor: Tony Araújo (OrochiElf)

 

Eai galera, tranquilão? Estou eu aqui novamente, e hoje eu vou compartilhar com vocês um sistema que eu vejo muitas pessoas pedindo e buscando ajuda (principalmente no meu inbox kkkkk), seria ele o sistema de monstros passivos, que consiste naquela criatura que só ataca o jogador que o atacou, caso contrário ele fica andando normalmente. O sistema foi desenvolvido em cima do código do TFS 0.3.6, porém caso instale prestando bastante atenção em outras versões, funcione, talvez seja necessário mudar algum código, porém bem simples.

Bom, vamos ao sistema.

 

Em creature.cpp, procure pela função:

bool Creature::setAttackedCreature(Creature* creature)

 

 

E altere esta condição:

    if(attackedCreature)
    {
        onAttackedCreature(attackedCreature);
        attackedCreature->onAttacked();
    }

 

Por esta:

    if(attackedCreature)
    {
        onAttackedCreature(attackedCreature);
        attackedCreature->onAttacked();
        attackedCreature->addDamagePoints(this, 0);
    }

 

 

Procure pela função:

void Creature::addDamagePoints(Creature* attacker, int32_t damagePoints)

 

 

E troque por esta:

 

 

 


void Creature::addDamagePoints(Creature* attacker, int32_t damagePoints)
{
    uint32_t attackerId = 0;
    if(attacker)
        attackerId = attacker->isPlayerSummon() ? attacker->getMaster()->getID() : attacker->getID();

    CountMap::iterator it = damageMap.find(attackerId);
    if(it != damageMap.end())
    {
        it->second.ticks = OTSYS_TIME();
        if(damagePoints > 0)
            it->second.total += damagePoints;
    }
    else
        damageMap[attackerId] = CountBlock_t(damagePoints);

    if(damagePoints > 0)
        lastHitCreature = attackerId;
}
 

 

 

 

Agora vá em monster.cpp e procure pela função:

void Monster::onThink(uint32_t interval)

 

 

E dentro dela, procure pela condição:

else if(!targetList.empty())

 

E troque por esta:

    else if(!targetList.empty())
    {
        if(!followCreature || !hasFollowPath)
            searchTarget();
    }

 

Procure pela função:

bool Monster::selectTarget(Creature* creature)

 

E troque por esta:

 

 


bool Monster::selectTarget(Creature* creature)
{
#ifdef __DEBUG__
    std::cout << "Selecting target... " << std::endl;
#endif
    if(!isTarget(creature))
        return false;

    uint32_t targetId = creature->isPlayerSummon() ? creature->getMaster()->getID() : creature->getID();
    if(!isHostile() && !hasBeenAttacked(targetId))
        return false;    

    CreatureList::iterator it = std::find(targetList.begin(), targetList.end(), creature);
    if(it == targetList.end())
    {
        //Target not found in our target list.
#ifdef __DEBUG__
        std::cout << "Target not found in targetList." << std::endl;
#endif
        return false;
    }

    if(setAttackedCreature(creature))
        Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::checkCreatureAttack, &g_game, getID())));

    return setFollowCreature(creature, true);
}
 

 

 

Bom galera, espero que gostem e que façam bom uso. Qualquer bug ou problema, comenta aí pra eu resolver.

 

9LVIahZ.gif

Tony Araújo :happy:

Walox

Deetrax
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 05/04/18Posts: 95Gênero: MasculinoChar no Tibia: Deetrax

Muito bom cara! Parabéns em ^^ 

Vai ajudar muito os OTADMINS.

 

E que venha contribuindo mais e mais com a comunidade ❤️ 

segura meu REP+

boxxer321

Yamborghini
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 03/11/11Posts: 714Gênero: MasculinoChar no Tibia: esqueci 20+

O Pokémon vira agressivo para todos os jogadores ou somente para qm atacou?

Tony Araujo

OrochiElf
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 27/02/13Posts: 446Gênero: Masculino
Agora, boxxer321 disse:

O Pokémon vira agressivo para todos os jogadores ou somente para qm atacou?

Somente pra quem atacou.

Tony Araújo :happy:

Ayron5

avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 26/08/15Posts: 239
2 horas atrás, Tony Araujo disse:

[C++] Monsters Passive System

testado: TFS - 0.3.6 (porém acredito que funcione em outros)

autor: Tony Araújo (OrochiElf)

 

Eai galera, tranquilão? Estou eu aqui novamente, e hoje eu vou compartilhar com vocês um sistema que eu vejo muitas pessoas pedindo e buscando ajuda (principalmente no meu inbox kkkkk), seria ele o sistema de monstros passivos, que consiste naquela criatura que só ataca o jogador que o atacou, caso contrário ele fica andando normalmente. O sistema foi desenvolvido em cima do código do TFS 0.3.6, porém caso instale prestando bastante atenção em outras versões, funcione, talvez seja necessário mudar algum código, porém bem simples.

Bom, vamos ao sistema.

 

Em creature.cpp, procure pela função:

bool Creature::setAttackedCreature(Creature* creature)

 

 

E altere esta condição:

    if(attackedCreature)
    {
        onAttackedCreature(attackedCreature);
        attackedCreature->onAttacked();
    }

 

Por esta:

    if(attackedCreature)
    {
        onAttackedCreature(attackedCreature);
        attackedCreature->onAttacked();
        attackedCreature->addDamagePoints(this, 0);
    }

 

 

Procure pela função:

void Creature::addDamagePoints(Creature* attacker, int32_t damagePoints)

 

 

E troque por esta:

  Mostrar conteúdo oculto

 

 


void Creature::addDamagePoints(Creature* attacker, int32_t damagePoints)
{
    uint32_t attackerId = 0;
    if(attacker)
        attackerId = attacker->isPlayerSummon() ? attacker->getMaster()->getID() : attacker->getID();

    CountMap::iterator it = damageMap.find(attackerId);
    if(it != damageMap.end())
    {
        it->second.ticks = OTSYS_TIME();
        if(damagePoints > 0)
            it->second.total += damagePoints;
    }
    else
        damageMap[attackerId] = CountBlock_t(damagePoints);

    if(damagePoints > 0)
        lastHitCreature = attackerId;
}
 

 

 

 

Agora vá em monster.cpp e procure pela função:

void Monster::onThink(uint32_t interval)

 

 

E dentro dela, procure pela condição:

else if(!targetList.empty())

 

E troque por esta:

    else if(!targetList.empty())
    {
        if(!followCreature || !hasFollowPath)
            searchTarget();
    }

 

Procure pela função:

bool Monster::selectTarget(Creature* creature)

 

E troque por esta:

  Mostrar conteúdo oculto

 


bool Monster::selectTarget(Creature* creature)
{
#ifdef __DEBUG__
    std::cout << "Selecting target... " << std::endl;
#endif
    if(!isTarget(creature))
        return false;

    uint32_t targetId = creature->isPlayerSummon() ? creature->getMaster()->getID() : creature->getID();
    if(!isHostile() && !hasBeenAttacked(targetId))
        return false;    

    CreatureList::iterator it = std::find(targetList.begin(), targetList.end(), creature);
    if(it == targetList.end())
    {
        //Target not found in our target list.
#ifdef __DEBUG__
        std::cout << "Target not found in targetList." << std::endl;
#endif
        return false;
    }

    if(setAttackedCreature(creature))
        Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::checkCreatureAttack, &g_game, getID())));

    return setFollowCreature(creature, true);
}
 

 

 

Bom galera, espero que gostem e que façam bom uso. Qualquer bug ou problema, comenta aí pra eu resolver.

 

9LVIahZ.gif

Muito bom brother! Eu consegui esse mesmo resultado usando outro tutorial antigamente kkk Vai ajudar muita gente, parabéns! Reputado+! 

                                                                  

                                                                    Meus tópicos         

                                                                   Se ajudei você deixe seu Rep! para fortalecer a amizade ^^

                                                                                        Vamos ajudar o fórum a crescer mais.

                                                                

                                                                                             ----- NPC que vende informação -----

                                                                                          -----Baú Que dá Outfit se tiver Level -----

                                                                    

FlamesAdmin

avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 28/01/12Posts: 1550Gênero: Masculino

#off

parece que teremos um server svke aqui?

 

#topic

belo trabalho

[Show off] Mapping Pokémon (OLD)

[PDA] Pokeball Icon System

 

 

[Mapping] Mapinha Johto = Para conferir, clique Aqui
[Mapping] Outland RockPara conferir, clique Aqui
[Mapping] Centro Pokémon de Cinnabar e cidade de Hamlin(PxG) Para conferir, clique Aqui
[Mapping] Antigo Trade Center(PvP) do PxG Para conferir, clique Aqui
[PDA] Reformulação do level das magias e level dos Pokemons Para conferir, clique Aqui
[PDA] Comando de Clan sem task = Para conferir, clique Aqui
[Utilitário] OT Restarter by: Gabrielbsales(Featzen) Para conferir, clique Aqui
[Database] Descriptografia MD5 & SHA1 = Para conferir, clique Aqui
[Scripting] Level Máximo = Para conferir, clique Aqui

 

Tony Araujo

OrochiElf
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 27/02/13Posts: 446Gênero: Masculino
3 horas atrás, Ayron5 disse:

Muito bom brother! Eu consegui esse mesmo resultado usando outro tutorial antigamente kkk Vai ajudar muita gente, parabéns! Reputado+! 

De nada brother. Eu lembro, tinha um tutorial antigo, porém eu vi muita gente tendo muita dificuldade pra instalar, e o código também tava um pouco confuso. Daí resolvi postar esse aqui pra galera

 

24 minutos atrás, FlamesAdmin disse:

#off

parece que teremos um server svke aqui?

 

#topic

belo trabalho

Temos sim brother kkkkk, www.facebook.com/oldPokemonOT

inclusive to fazendo open test nele hoje. Se quiser aparecer por lá. Volta as 17h

 

Obrigado mano ;D

Tony Araújo :happy:

FlamesAdmin

avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 28/01/12Posts: 1550Gênero: Masculino

@Tony Araujo

opa, se der apareço sim. Vai ser uma honra

[Show off] Mapping Pokémon (OLD)

[PDA] Pokeball Icon System

 

 

[Mapping] Mapinha Johto = Para conferir, clique Aqui
[Mapping] Outland RockPara conferir, clique Aqui
[Mapping] Centro Pokémon de Cinnabar e cidade de Hamlin(PxG) Para conferir, clique Aqui
[Mapping] Antigo Trade Center(PvP) do PxG Para conferir, clique Aqui
[PDA] Reformulação do level das magias e level dos Pokemons Para conferir, clique Aqui
[PDA] Comando de Clan sem task = Para conferir, clique Aqui
[Utilitário] OT Restarter by: Gabrielbsales(Featzen) Para conferir, clique Aqui
[Database] Descriptografia MD5 & SHA1 = Para conferir, clique Aqui
[Scripting] Level Máximo = Para conferir, clique Aqui

 

XZero

avatar
Cavaleiro
Cavaleiro

INFOS

Grupo: CavaleiroRegistrado: 04/03/17Posts: 164Gênero: Masculino

Tem alguma função especifica para setar o pokémon para ser passivo ? Não cheguei a testar, mas creio que todos os pokémons ficam passivos certo ?

Tony Araujo

OrochiElf
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 27/02/13Posts: 446Gênero: Masculino
4 horas atrás, XZero disse:

Tem alguma função especifica para setar o pokémon para ser passivo ? Não cheguei a testar, mas creio que todos os pokémons ficam passivos certo ?

É aquela tag <flag hostile="0"/> do monster, se for 0, ele é passivo

Tony Araújo :happy:

psalex

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 02/07/19Posts: 5

fiz e não deu certo aqui, compilo a source sem erros, mas não deu nenhum resultado, mesmo colocando <flag hostile="0"/> no monster, ele continua agressivo.

FlamesAdmin

avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 28/01/12Posts: 1550Gênero: Masculino
1 hora atrás, psalex disse:

fiz e não deu certo aqui, compilo a source sem erros, mas não deu nenhum resultado, mesmo colocando <flag hostile="0"/> no monster, ele continua agressivo.

tenta colocar essas duas

<flag hostile="0"/>
<flag passive="0"/>

 

[Show off] Mapping Pokémon (OLD)

[PDA] Pokeball Icon System

 

 

[Mapping] Mapinha Johto = Para conferir, clique Aqui
[Mapping] Outland RockPara conferir, clique Aqui
[Mapping] Centro Pokémon de Cinnabar e cidade de Hamlin(PxG) Para conferir, clique Aqui
[Mapping] Antigo Trade Center(PvP) do PxG Para conferir, clique Aqui
[PDA] Reformulação do level das magias e level dos Pokemons Para conferir, clique Aqui
[PDA] Comando de Clan sem task = Para conferir, clique Aqui
[Utilitário] OT Restarter by: Gabrielbsales(Featzen) Para conferir, clique Aqui
[Database] Descriptografia MD5 & SHA1 = Para conferir, clique Aqui
[Scripting] Level Máximo = Para conferir, clique Aqui

 

FlamesAdmin

avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 28/01/12Posts: 1550Gênero: Masculino

Único problema no sistema é quando vc ataca o monstro passivo, sobe uma escada e espera uns 10 segundos +/- e desce, vc precisa atacar o monstro novamente

[Show off] Mapping Pokémon (OLD)

[PDA] Pokeball Icon System

 

 

[Mapping] Mapinha Johto = Para conferir, clique Aqui
[Mapping] Outland RockPara conferir, clique Aqui
[Mapping] Centro Pokémon de Cinnabar e cidade de Hamlin(PxG) Para conferir, clique Aqui
[Mapping] Antigo Trade Center(PvP) do PxG Para conferir, clique Aqui
[PDA] Reformulação do level das magias e level dos Pokemons Para conferir, clique Aqui
[PDA] Comando de Clan sem task = Para conferir, clique Aqui
[Utilitário] OT Restarter by: Gabrielbsales(Featzen) Para conferir, clique Aqui
[Database] Descriptografia MD5 & SHA1 = Para conferir, clique Aqui
[Scripting] Level Máximo = Para conferir, clique Aqui

 

sirvitor4

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 27/06/10Posts: 15Char no Tibia: MasterFurious

Compilei tudo certinho mas o pokemon continua hostil mesmo sem a flag hostil/passive(ou com) e mesmo com o passivepokemons comentado... Alguém tem um solução?

Base pokemasterx

Albe

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 10/12/19Posts: 36
Em 24/11/2019 em 00:38, sirvitor4 disse:

Compilei tudo certinho mas o pokemon continua hostil mesmo sem a flag hostil/passive(ou com) e mesmo com o passivepokemons comentado... Alguém tem um solução?

Base pokemasterx

Eu vi um servidor "pokemasterX" com pokemons passivos ONLINE (continua). Essa basa já não tem o sistema de passivos nela? (mesmo que aparentemente não esteja funcionando).