Public feed #380067

Untitled

public text v1 · immutable
Raw Edit
·published 2007-03-03 19:11 UTC
rendered paste body
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;
}