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 449 times, submitted by unknown.