Jump to content
×
×
  • Create New...
  • 0

Problem With KnockBack


CaNNab1S

Question

 

 

1. Description of the problem / Question :

I have a problem with knockback monsters and players as well.

 

2. SysErr ( Client / Server ) / SysLog ( Server )

-

 

3. How to reproduce it ?

               If i hit a player or a monster, it doesen't knockback, i have a video

               I try as a normal player without GM and it's same.

             A help for you:

            - i didn't change anything in ActorInstanceBase.Cpp or InstanceBase.cpp or char.cpp or char.h in the function m_fSyncTime. or bool IS_HUGE_RACE(unsigned int vnum)

 

 

4. Screenshots ?

https://gyazo.com/32fea58f54fe440d6b772b90376b6f83

 

Thanks, Sincerly,
KinKade

 

  • Metin2 Dev 3
Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0
  • Nitro Booster

Here is your problem.

Change

	int iRet;

	if(iRet != BATTLE_NONE)
	{
		pkVictim->SetSyncOwner(this);
	
		if (pkVictim->CanBeginFight())
			pkVictim->BeginFight(this);
	}

With

	pkVictim->SetSyncOwner(this);

	if (pkVictim->CanBeginFight())
		pkVictim->BeginFight(this);

	int iRet;

 

  • Love 1
Link to comment
Share on other sites

  • 0
bool CHARACTER::Attack(LPCHARACTER pkVictim, BYTE bType)
{
#ifdef FIX_ATTACK_SAFEZONE
    SECTREE    *sectree = NULL;
    SECTREE    *vsectree = NULL;
    sectree = GetSectree();
    vsectree = pkVictim->GetSectree();

    if (sectree && vsectree){
        if (sectree->IsAttr(GetX(), GetY(), ATTR_BANPK) || vsectree->IsAttr(pkVictim->GetX(), pkVictim->GetY(), ATTR_BANPK)) {
            if (GetDesc()) {
                LogManager::instance().HackLog("ANTISAFEZONE", this);
                GetDesc()->DelayedDisconnect(3);
            }
        }
    }
#endif

    #ifdef ENABLE_SUPPORT_SYSTEM
    if (pkVictim && pkVictim->IsSupport())
    {
    ChatPacket(CHAT_TYPE_INFO, "Nu poti ataca!");
    return false;
    }
    #endif

    if (!CanMove())
        return false;

    // CASTLE
    if (IS_CASTLE_MAP(GetMapIndex()) && false == castle_can_attack(this, pkVictim))
        return false;
    // CASTLE    

    // @fixme131 kirito
    if (!battle_is_attackable(this, pkVictim))
        return false;

    DWORD dwCurrentTime = get_dword_time();

    if (IsPC())
    {
        if (IS_SPEED_HACK(this, pkVictim, dwCurrentTime))
            return false;

        if (bType == 0 && dwCurrentTime < GetSkipComboAttackByTime())
            return false;
    }
    else
    {
        MonsterChat(MONSTER_CHAT_ATTACK);
    }
    int iRet;

    if(iRet != BATTLE_NONE)
    {        
        pkVictim->SetSyncOwner(this);
    
        if (pkVictim->CanBeginFight())
            pkVictim->BeginFight(this);
    }
    if (bType == 0)
    {
        //
        // 일반 공격
        //
        switch (GetMobBattleType())
        {
            case BATTLE_TYPE_MELEE:
            case BATTLE_TYPE_POWER:
            case BATTLE_TYPE_TANKER:
            case BATTLE_TYPE_SUPER_POWER:
            case BATTLE_TYPE_SUPER_TANKER:
                iRet = battle_melee_attack(this, pkVictim);
                break;

            case BATTLE_TYPE_RANGE:
                FlyTarget(pkVictim->GetVID(), pkVictim->GetX(), pkVictim->GetY(), HEADER_CG_FLY_TARGETING);
                iRet = Shoot(0) ? BATTLE_DAMAGE : BATTLE_NONE;
                break;

            case BATTLE_TYPE_MAGIC:
                FlyTarget(pkVictim->GetVID(), pkVictim->GetX(), pkVictim->GetY(), HEADER_CG_FLY_TARGETING);
                iRet = Shoot(1) ? BATTLE_DAMAGE : BATTLE_NONE;
                break;

            default:
                sys_err("Unhandled battle type %d", GetMobBattleType());
                iRet = BATTLE_NONE;
                break;
        }
    }
    else
    {
        if (IsPC() == true)
        {
            if (dwCurrentTime - m_dwLastSkillTime > 1500)
            {
                sys_log(1, "HACK: Too long skill using term. Name(%s) PID(%u) delta(%u)",
                        GetName(), GetPlayerID(), (dwCurrentTime - m_dwLastSkillTime));
                return false;
            }
        }

        sys_log(1, "Attack call ComputeSkill %d %s", bType, pkVictim?pkVictim->GetName():"");
        iRet = ComputeSkill(bType, pkVictim);
    }

    if (iRet == BATTLE_DAMAGE || iRet == BATTLE_DEAD)
    {
        OnMove(true);
        pkVictim->OnMove();

        // only pc sets victim null. For npc, state machine will reset this.
        if (BATTLE_DEAD == iRet && IsPC())
            SetVictim(NULL);

        return true;
    }

    return false;
}

 

The function is identical to a server on which it works

Edited by CaNNab1S
Link to comment
Share on other sites

  • 0
  • Nitro Booster
3 minutes ago, CaNNab1S said:

It works now. Thank you very much. Can you tell me if the function is ok now ?

OLD:  https://gyazo.com/321526473369b28638cedb770a7464be

NEW: https://gyazo.com/88a3f1c245832b1353846f94d050b9f8

Yes, that's correct.

  • Love 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Activity

    1. 0

      Looking for Someone to create the queries etc for armors and weapons

    2. 13

      Official Private Shop Search

    3. 944

      [40250] Reference Serverfile + Client + Src [15 Available Languages]

    4. 79

      GUI Teleport System

    5. 0

      inventory slot marking system cant compile

    6. 8

      Inventory Bug

    7. 63

      Metin2 Dev - Changelogs

  • Recently Browsing

    • No registered users viewing this page.

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.