Advertisement
Guest User

Untitled

a guest
Apr 21st, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.18 KB | None | 0 0
  1. void __fastcall ProvocationOfBlow(IChar IPlayer, int pPacket, int pPos)
  2. {
  3.     int pSkill = IPlayer.GetSkillPointer(42);
  4.  
  5.     if (IPlayer.IsValid() && pSkill)
  6.     {
  7.         ISkill xSkill((void*)pSkill);
  8.         int nSkillGrade = xSkill.GetGrade();
  9.         int nTargetID = 0, nMana = 0; char bType = 0; void *pTarget = 0;
  10.         CPacket::Read((char*)pPacket, (char*)pPos, "bd", &bType, &nTargetID);
  11.  
  12.         if (bType == 0 && nTargetID)
  13.             pTarget = CPlayer::FindPlayer(nTargetID);
  14.  
  15.         if (bType == 1 && nTargetID)
  16.             pTarget = CMonster::FindMonster(nTargetID);
  17.  
  18.         if (bType >= 2)
  19.             return;
  20.  
  21.         if (pTarget && nSkillGrade && IPlayer.IsValid())
  22.         {
  23.             if (nSkillGrade <= 1)
  24.                 nMana = 220;
  25.             else if (nSkillGrade == 2)
  26.                 nMana = 242;
  27.             else if (nSkillGrade == 3)
  28.                 nMana = 266;
  29.             else if (nSkillGrade == 4)
  30.                 nMana = 292;
  31.             else if (nSkillGrade >= 5)
  32.                 nMana = 320;
  33.  
  34.             if (IPlayer.IsOnline() && CPlayer::IsWState((int)IPlayer.GetOffset(), 12))
  35.                 return;
  36.  
  37.             if (IPlayer.GetCurMp() < nMana)
  38.                 return;
  39.  
  40.             if (pTarget == IPlayer.GetOffset())
  41.                 return;
  42.  
  43.             if (pTarget && IPlayer.IsOnline())
  44.             {
  45.                 IChar Target(pTarget);
  46.  
  47.                 if (!IPlayer.IsInRange(Target,300))
  48.                     return;
  49.  
  50.                 int Around = IPlayer.GetObjectListAround(2);
  51.  
  52.                 while(Around)
  53.                 {
  54.                     IChar Object((void*)*(DWORD*)Around);
  55.  
  56.                     if (Object.IsValid() && IPlayer.IsValid() && (*(int (__thiscall **)(int, int, DWORD))(*(DWORD *)IPlayer.GetOffset() + 176))((int)IPlayer.GetOffset(), (int)Object.GetOffset(), 0))
  57.                     {
  58.                         int nDmg = (IPlayer.GetAttack() * KPOBMul) + (nSkillGrade * CTools::Rate(KPOBMin,KPOBMax));
  59.  
  60.                         if (Object.GetType() == 0)
  61.                             nDmg = nDmg * KPOBReduce / 100;
  62.  
  63.                         IPlayer.OktayDamageArea(Object,nDmg,42);
  64.  
  65.                         if (Object.IsValid() && IPlayer.IsValid() && Object.GetCurHp() > nDmg && Object.GetType() == 1 && !CSMap::IsOnTile(*(void **)((int)Object.Offset + 320), (int)Object.Offset + 332, 1048576))
  66.                             CMonsterReal::AddHostility(Object.GetOffset(),(int)IPlayer.GetOffset(),nDmg*2,0);
  67.  
  68.                     }
  69.  
  70.                     Around = CBaseList::Pop((void*)Around);
  71.                 }
  72.  
  73.                 IPlayer._ShowBattleAnimation(Target, 42);
  74.                 IPlayer.SetDirection(Target);
  75.                 IPlayer.DecreaseMana(nMana);
  76.             }
  77.         }
  78.     }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement