Jump to content

Attacking Pets System


Recommended Posts

  • 2 weeks later...

Corrected tabulation, code, include and english How-To :D

 

[HowTo]
 
Search in petsystem.h "void unmount();" and add this under :
bool            Attack(LPCHARACTER pkVictim = NULL);

It's look like this :

57e1f1668b.png
 
Then search "CPetActor* GetByVnum(DWORD vnum) const;"
and add this under :
void        LaunchAttack(LPCHARACTER pkVictim = NULL);

 

It's look like this :

 
fce8dd05ac.png
 
-> Save and then open PetSystem.cpp:
 
Search the "bool CPetActor::Update(DWORD deltaTime)" function

And replace it with this :

bool CPetActor::Update(DWORD deltaTime)
{
    bool bResult = false;

    if (m_pkOwner->IsDead() || (IsSummoned() && m_pkChar->IsDead())
            || NULL == ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID())
            || ITEM_MANAGER::instance().FindByVID(this->GetSummonItemVID())->GetOwner() != this->GetOwner()
            )
    {
        this->Unsummon();
        return true;
    }
    
    if (this->GetCharacter()->GetVictim())
    {
        bResult = this->Attack();
    }
 
    if (!bResult)
    {
    if (this->IsSummoned() && HasOption(EPetOption_Followable))
        bResult = this->_UpdateFollowAI();
    }
 
    return bResult;
}
 
Search the "void CPetActor::ClearBuff()" function
 
And add this function under :
 
bool CPetActor::Attack(LPCHARACTER pkVictim)
{
    if (pkVictim)
    {
        if (!pkVictim->IsMonster() || pkVictim->IsDead())
            return false;
 
        if (m_pkChar->GetVictim())
            return false;
    }
    else
    {
        pkVictim = m_pkChar->GetVictim();
 
        if (!pkVictim)
            return false;
    }
 
    m_pkChar->SetVictim(pkVictim);
 
    const PIXEL_POSITION& rkPetPos = m_pkChar->GetXYZ();
    const PIXEL_POSITION& rkVictimPos = pkVictim->GetXYZ();
 
    int iDistance = DISTANCE_APPROX(rkPetPos.x - rkVictimPos.x, rkPetPos.y - rkVictimPos.y);
 
    if (iDistance >= m_pkChar->GetMobAttackRange())
    {
        m_pkChar->Follow(pkVictim, m_pkChar->GetMobAttackRange());
    }
    else
    {
        if (get_dword_time() - m_pkChar->GetLastAttackTime() >= 3000)
        {
            if (m_pkChar->Attack(pkVictim))
            {
                m_pkChar->SendMovePacket(FUNC_ATTACK, 0, rkPetPos.x, rkPetPos.y, 0, get_dword_time());
                m_pkChar->SetLastAttacked(get_dword_time());
        }
 
    }
}
 
return true;
}

It will look like this:

 
a0b99abacf.png
 
Search "bool CPetSystem::Update(DWORD deltaTime)"
 
And add this above:
 
void CPetSystem::LaunchAttack(LPCHARACTER pkVictim)
{
    if (!pkVictim)
        return;
 
    for (itertype(m_petActorMap) it = m_petActorMap.begin(); it != m_petActorMap.end(); ++it)
    {
        CPetActor* pkPetActor = it->second;
        if (pkPetActor->IsSummoned())
            pkPetActor->Attack(pkVictim);
    }
}

 
It will look like this:
 
b5ab31cc31.png
 
Save and open "char_battle.cpp" :
 
Add a the begining :
 
#include "PetSystem.h"
 
Then search this function :
 
"bool CHARACTER::Attack(LPCHARACTER pkVictim, BYTE bType)"
 
And especially this part:
 
        // only pc sets victim null. For npc, state machine will reset this.
        if (BATTLE_DEAD == iRet && IsPC())
            SetVictim(NULL);
 
Add this under:
 
        if (BATTLE_DEAD != iRet && IsPC())
        {
            if (m_petSystem && m_petSystem->CountSummoned() > 0)
                m_petSystem->LaunchAttack(pkVictim);
        }
 
It will look like this:
 
90c9d5797d.png
 
Save and open "pvp.cpp"
 

Then search this function : "bool CPVPManager::CanAttack(LPCHARACTER pkChr, LPCHARACTER pkVictim)"

 
And add this under :
 
    if (pkChr->IsPet() && pkVictim->IsMonster())
    {
        return true;
    }
 
    if (pkChr->IsMonster() && pkVictim->IsPet())
    {
        return true;
    }
 
Like this:
8a379645c3.png

 

Recompile, and done :D

do this and give in mob proto damage minmax and pet don`t attck..stay and all

Edited by Metin2 Dev
Core X - External 2 Internal
Link to comment
Share on other sites

 

It is not complete.
Pet does not have life.
Monsters do not attack the petul.
Your pet will not die.
Pet does not revive.

 

Pet does have life,

monsters do attack the pet,

pet can die,

and if you re-use your pet-seal it will revive.

 

Maybe you should implement it and take a look by yourself before

creating statements. The video was made in a pre-stadium of

the release.

Link to comment
Share on other sites

  • Management

Isn't working with me...

 

When I die, the pet disappear...

 

It's from the quest or the code?

 

My quest is the official from the leak...

 

I changed quest and the pet still disappearing when I die, someone call tell me what is wrong?

 

I already take off the system to see if was working before, but happends the same...

raw

raw

Link to comment
Share on other sites

 

Isn't working with me...

 

When I die, the pet disappear...

 

It's from the quest or the code?

 

My quest is the official from the leak...

 

I changed quest and the pet still disappearing when I die, someone call tell me what is wrong?

 

I already take off the system to see if was working before, but happends the same...

 

 

Actually, the pet system is working with that way.If you want to remove that open PetSystem.cpp and remove this:

m_pkOwner->IsDead() || 
  • Love 1
Link to comment
Share on other sites

  • Management

 

 

Isn't working with me...

 

When I die, the pet disappear...

 

It's from the quest or the code?

 

My quest is the official from the leak...

 

I changed quest and the pet still disappearing when I die, someone call tell me what is wrong?

 

I already take off the system to see if was working before, but happends the same...

 

 

Actually, the pet system is working with that way.If you want to remove that open PetSystem.cpp and remove this:

m_pkOwner->IsDead() || 

 

Staying like this?

 

hXx6V0l.png

Edited by Metin2 Dev
Core X - External 2 Internal

raw

raw

Link to comment
Share on other sites

  • Management

Now when I die the pet follow the monster, but don't attack...

 

And when I die, when I click on the pet don't appear the menu and when I use the item don't happends nothing, I need to restart in Town if I want to use again...

raw

raw

Link to comment
Share on other sites

  • Former Staff

Now when I die the pet follow the monster, but don't attack...

 

And when I die, when I click on the pet don't appear the menu and when I use the item don't happends nothing, I need to restart in Town if I want to use again...

i'm not sure about this ....

 

add this to the CPetActor::_UpdateFollowAI() bool

	if (m_pkOwner->IsDead())
	{
		m_pkChar->SendMovePacket(FUNC_WAIT, 0, 0, 0, 0);
	}
Link to comment
Share on other sites

  • 2 weeks later...

Announcements



×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.