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(target); case HIGHGUID_PLAYER: p_victim = sObjHolder.GetObject(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; }