Public feed
#380067
bool Spell::DidHit(uint64 target)
{
Creature *u_victim = NULL;
Player *p_victim = NULL;
switch(UINT32_LOPART(GUID_HIPART(target)))
{
case HIGHGUID_UNIT:
u_victim = sObjHolder.GetObject<Creature>(target);
case HIGHGUID_PLAYER:
p_victim = sObjHolder.GetObject<Player>(target);
}
float resistPvP[4]={96.0f,95.0f,94.0f,87.0f};
float resistPvE[4]={96.0f,95.0f,94.0f,89.0f};
int32 lvldiff = 0;
float resistchance = 1.0f;
float miscchance = 0.0f;
float AverageResistance = 0.0f;
bool pvp = false;
if(!u_victim && !p_victim)
return false;
if(!p_caster)
return false;
if(p_caster && p_victim) //PvP
{
pvp = true;
miscchance = 7.0f;
}
else
miscchance = 11.0f;
if(p_victim)
lvldiff = p_victim->getLevel() - p_caster->getLevel();
else
lvldiff = u_victim->getLevel() - p_caster->getLevel();
if(lvldiff < 0)
lvldiff = 0;
if(lvldiff < 3)
{
if(pvp)
resistchance = resistPvP[lvldiff];
else
resistchance = resistPvE[lvldiff];
}
else
{
if(pvp)
resistchance = resistPvP[3] - ((lvldiff-3)*7);
else
resistchance = resistPvE[3] - ((lvldiff-3)*11);
}
if(resistchance < 0)
resistchance = 0;
if(Rand(resistchance))
return true;
return false;
}