viewing paste critical | C

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
--- src/map/battle.h
    int scritical_set;
    int scritical_ratio_skill;
    int scritical_ratio_magic;
    int scritical_dmg_skill;
    int scritical_dmg_magic;
--- src/map/battle.c
    { "scritical_set",                      &battle_config.scritical_set,                   1,      0,      3,              },
    { "scritical_ratio_skill",              &battle_config.scritical_ratio_skill,           0,      0,      100,            },
    { "scritical_ratio_magic",              &battle_config.scritical_ratio_magic,           0,      0,      100,            },
    { "scritical_dmg_skill",                &battle_config.scritical_dmg_skill,             5000,   1,      INT_MAX,        },
    { "scritical_dmg_magic",                &battle_config.scritical_dmg_magic,             5000,   1,      INT_MAX,        },
--- src/map/skill.c
//Checks if 'bl' should reflect back a spell cast by 'src'.
//type is the type of magic attack: 0: indirect (aoe), 1: direct (targetted)
int skill_magic_reflect(struct block_list* src, struct block_list* bl, int type) {
    struct status_change *sc = status->get_sc(bl);
    struct map_session_data* sd = BL_CAST(BL_PC, bl);
 
    if( sc && sc->data[SC_KYOMU] ) // Nullify reflecting ability
        return  0;
 
    // item-based reflection
    if( sd && sd->bonus.magic_damage_return && type && rnd()%100 < sd->bonus.magic_damage_return )
        return 1;
 
    if( is_boss(src) )
        return 0;
 
    // status-based reflection
    if( !sc || sc->count == 0 )
        return 0;
 
    if( sc->data[SC_MAGICMIRROR] && rnd()%100 < sc->data[SC_MAGICMIRROR]->val2 )
        return 1;
 
    if( sc->data[SC_KAITE] && (src->type == BL_PC || status->get_lv(src) <= 80) )
    {// Kaite only works against non-players if they are low-level.
        clif->specialeffect(bl, 438, AREA);
        if( --sc->data[SC_KAITE]->val2 <= 0 )
            status_change_end(bl, SC_KAITE, INVALID_TIMER);
        return 2;
    }
 
    return 0;
}
--- src/map/skill.c
            case SR_FALLENEMPIRE:
                if( pc->checkskill(sd, SR_TIGERCANNON) > 0 || pc->checkskill(sd, SR_GATEOFHELL) > 0 )
                    combo = 1;
                break;
        }
//scritical_set
        if (battle_config.scritical_set > 0 && damage > 0 && (src->type == BL_PC || battle->get_master(src)->type == BL_PC))
        {
            switch (battle_config.scritical_set){
            case 1:
                if (skill_get_type(skill_id) == BF_WEAPON)
                    scri_flag = true;
                break;
            case 2:
                if (skill_get_type(skill_id) == BF_MAGIC)
                    scri_flag = true;
                break;
            case 3:
                if (skill_get_type(skill_id) == BF_MISC)
                    scri_flag = false;
                else
                    scri_flag = true;
                break;
            default:
                scri_flag = false;
                break;
            }
            if (scri_flag = true)
            {
                int m_cri = 0;
                if (skill_get_type(skill_id) == BF_WEAPON)
                {
                    if (battle_config.scritical_ratio_skill > 0)
                        m_cri = battle_config.scritical_ratio_skill;
                    else
                    {
                        if (sd == NULL)
                            m_cri = cap_value(map->id2sd(battle->get_master(src)->id)->battle_status.cri / 10, 1, 100);
                        else
                            m_cri = cap_value(sd->battle_status.cri / 10, 1, 100);
                    }
                    if ((rnd() % 100 < m_cri) && (battle_config.scritical_dmg_skill > 0))
                    {
                        scri_flag = true;
                        damage += (damage * battle_config.scritical_dmg_skill) / 10000;
                    }
                    else
                        scri_flag = false;
                }
                else if (skill_get_type(skill_id) == BF_MAGIC)
                {
                    if (battle_config.scritical_ratio_magic > 0)
                        m_cri = battle_config.scritical_ratio_magic;
                    else
                    {
                        if (sd == NULL)
                            m_cri = cap_value(map->id2sd(battle->get_master(src)->id)->battle_status.cri / 10, 1, 100);
                        else
                            m_cri = cap_value(sd->battle_status.cri / 10, 1, 100);
                    }
                    if ((rnd() % 100 < m_cri) && (battle_config.scritical_dmg_magic > 0))
                    {
                        scri_flag = true;
                        damage += (damage * battle_config.scritical_dmg_magic) / 10000;
                    }
                    else
                        scri_flag = false;
                }
                
            }
            
        }
--- src/map/skill.h
/**
 * Enumerations
 **/
//critical_magic
int skill_mcri_hit(int tid, unsigned int tick, int _damage, intptr_t data);
int skill_mcri_kill_delay(int tid, unsigned int tick, int id, intptr_t data);
//critical_magic
//Constants to identify the skill's inf value:
Viewed 1063 times, submitted by Guest.