Bug Fixes
* Fixed Main Frame Restructure not giving DEF bonus when wearing Madogear. (bugreport:8863) * Updated some more damage formulas for Kagerou skills. * Fixed critical damage bonus from Monster Transformation system. * Fixed Fire Trap and Ice Trap Burning/Freezing chance. * Cleaned up the visual effects for Ranger traps. * Odins Power now decreases DEF/MDEF by 40 at level 2. (bugreport:8869) * Added skill define for Overbrand's Plus Attack. * Fixed an issue with Overbrand's pierce damage placement. (bugreport:8856) * Fixed Unlimit not updating DEF/MDEF on players and increased the cooldown to 5 minutes. (bugreport:8870) * Few status icon updates. * Fixed two compile warnings when the VIP system is enabled.
This commit is contained in:
parent
bcf73f5be3
commit
e2d2494e13
@ -2486,6 +2486,8 @@ SI_ZONGZI_POUCH_TRANS 777
|
|||||||
SI_HEAT_BARREL_AFTER 778
|
SI_HEAT_BARREL_AFTER 778
|
||||||
SI_DECORATION_OF_MUSIC 779
|
SI_DECORATION_OF_MUSIC 779
|
||||||
SI_OVERSEAEXPUP 780
|
SI_OVERSEAEXPUP 780
|
||||||
|
SI_CLOWN_N_GYPSY_CARD 781
|
||||||
|
SI_OPEN_NPC_MARKET 782
|
||||||
SI_BEEF_RIB_STEW 783
|
SI_BEEF_RIB_STEW 783
|
||||||
SI_PORK_RIB_STEW 784
|
SI_PORK_RIB_STEW 784
|
||||||
SI_CHUSEOK_MONDAY 785
|
SI_CHUSEOK_MONDAY 785
|
||||||
|
@ -1271,7 +1271,7 @@
|
|||||||
2254,0,0,0,20000,15000,0
|
2254,0,0,0,20000,15000,0
|
||||||
|
|
||||||
//-- RA_UNLIMIT
|
//-- RA_UNLIMIT
|
||||||
5002,1000,500,0,60000,0,240000
|
5002,1000,500,0,60000,0,250000
|
||||||
//==========================================
|
//==========================================
|
||||||
|
|
||||||
//===== Mechanic ===========================
|
//===== Mechanic ===========================
|
||||||
|
@ -1084,6 +1084,7 @@
|
|||||||
2324,3,8,1,-1,0,0,5,3,yes,0,0,0,weapon,0,0x0, LG_HESPERUSLIT,Hesperus Lit
|
2324,3,8,1,-1,0,0,5,3,yes,0,0,0,weapon,0,0x0, LG_HESPERUSLIT,Hesperus Lit
|
||||||
2325,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, LG_INSPIRATION,Inspiration
|
2325,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, LG_INSPIRATION,Inspiration
|
||||||
2519,1,6,1,-1,0x2,0,5,1,yes,0,0,0,weapon,3:4:5:6:7,0x0, LG_OVERBRAND_BRANDISH,Overbrand Brandish
|
2519,1,6,1,-1,0x2,0,5,1,yes,0,0,0,weapon,3:4:5:6:7,0x0, LG_OVERBRAND_BRANDISH,Overbrand Brandish
|
||||||
|
2520,1,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0, LG_OVERBRAND_PLUSATK,Overbrand Plus Attack
|
||||||
|
|
||||||
//****
|
//****
|
||||||
// SR Sura
|
// SR Sura
|
||||||
|
@ -1269,7 +1269,7 @@
|
|||||||
//-- RA_ICEBOUNDTRAP
|
//-- RA_ICEBOUNDTRAP
|
||||||
2254,0,0,0,20000,15000,0,-1
|
2254,0,0,0,20000,15000,0,-1
|
||||||
//-- RA_UNLIMIT
|
//-- RA_UNLIMIT
|
||||||
5002,0,500,0,60000,0,240000,1000
|
5002,0,500,0,60000,0,250000,1000
|
||||||
//==========================================
|
//==========================================
|
||||||
|
|
||||||
//===== Mechanic ===========================
|
//===== Mechanic ===========================
|
||||||
|
@ -1084,6 +1084,7 @@
|
|||||||
2324,3,8,1,-1,0,0,5,3,yes,0,0,0,weapon,0,0x0, LG_HESPERUSLIT,Hesperus Lit
|
2324,3,8,1,-1,0,0,5,3,yes,0,0,0,weapon,0,0x0, LG_HESPERUSLIT,Hesperus Lit
|
||||||
2325,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, LG_INSPIRATION,Inspiration
|
2325,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, LG_INSPIRATION,Inspiration
|
||||||
2519,1,6,1,-1,0x2,0,5,1,yes,0,0,0,weapon,3:4:5:6:7,0x0, LG_OVERBRAND_BRANDISH,Overbrand Brandish
|
2519,1,6,1,-1,0x2,0,5,1,yes,0,0,0,weapon,3:4:5:6:7,0x0, LG_OVERBRAND_BRANDISH,Overbrand Brandish
|
||||||
|
2520,1,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0, LG_OVERBRAND_PLUSATK,Overbrand Plus Attack
|
||||||
|
|
||||||
//****
|
//****
|
||||||
// SR Sura
|
// SR Sura
|
||||||
|
@ -40,7 +40,7 @@ struct mmo_account {
|
|||||||
char pass[32+1]; // 23+1 for plaintext, 32+1 for md5-ed passwords
|
char pass[32+1]; // 23+1 for plaintext, 32+1 for md5-ed passwords
|
||||||
char sex; // gender (M/F/S)
|
char sex; // gender (M/F/S)
|
||||||
char email[40]; // e-mail (by default: a@a.com)
|
char email[40]; // e-mail (by default: a@a.com)
|
||||||
int group_id; // player group id
|
unsigned int group_id; // player group id
|
||||||
uint8 char_slots; // this accounts maximum character slots (maximum is limited to MAX_CHARS define in char server)
|
uint8 char_slots; // this accounts maximum character slots (maximum is limited to MAX_CHARS define in char server)
|
||||||
unsigned int state; // packet 0x006a value + 1 (0: compte OK)
|
unsigned int state; // packet 0x006a value + 1 (0: compte OK)
|
||||||
time_t unban_time; // (timestamp): ban time limit of the account (0 = no ban)
|
time_t unban_time; // (timestamp): ban time limit of the account (0 = no ban)
|
||||||
|
@ -55,7 +55,7 @@ struct mmo_char_server {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct client_hash_node {
|
struct client_hash_node {
|
||||||
int group_id; ///group
|
unsigned int group_id; ///group
|
||||||
uint8 hash[16]; ///hash required for that groupid or below
|
uint8 hash[16]; ///hash required for that groupid or below
|
||||||
struct client_hash_node *next; ///next entry
|
struct client_hash_node *next; ///next entry
|
||||||
};
|
};
|
||||||
|
@ -1983,10 +1983,10 @@ static int is_attack_piercing(struct Damage wd, struct block_list *src, struct b
|
|||||||
struct status_data *tstatus = status_get_status_data(target);
|
struct status_data *tstatus = status_get_status_data(target);
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
if( skill_id != PA_SACRIFICE && skill_id != CR_GRANDCROSS && skill_id != NPC_GRANDDARKNESS
|
if( skill_id != PA_SACRIFICE && skill_id != CR_GRANDCROSS && skill_id != NPC_GRANDDARKNESS
|
||||||
&& skill_id != PA_SHIELDCHAIN && skill_id != ASC_BREAKER ) // Renewal: Soul Breaker no longer gains ice pick effect and ice pick effect gets crit benefit [helvetica]
|
&& skill_id != PA_SHIELDCHAIN && skill_id != KO_HAPPOKUNAI && skill_id != ASC_BREAKER ) // Renewal: Soul Breaker no longer gains ice pick effect and ice pick effect gets crit benefit [helvetica]
|
||||||
#else
|
#else
|
||||||
if( skill_id != PA_SACRIFICE && skill_id != CR_GRANDCROSS && skill_id != NPC_GRANDDARKNESS
|
if( skill_id != PA_SACRIFICE && skill_id != CR_GRANDCROSS && skill_id != NPC_GRANDDARKNESS
|
||||||
&& skill_id != PA_SHIELDCHAIN && !is_attack_critical(wd, src, target, skill_id, skill_lv, false) )
|
&& skill_id != PA_SHIELDCHAIN && skill_id != KO_HAPPOKUNAI && !is_attack_critical(wd, src, target, skill_id, skill_lv, false) )
|
||||||
#endif
|
#endif
|
||||||
{ //Elemental/Racial adjustments
|
{ //Elemental/Racial adjustments
|
||||||
if( sd && (sd->right_weapon.def_ratio_atk_ele & (1<<tstatus->def_ele) || sd->right_weapon.def_ratio_atk_ele & (1<<ELE_ALL) ||
|
if( sd && (sd->right_weapon.def_ratio_atk_ele & (1<<tstatus->def_ele) || sd->right_weapon.def_ratio_atk_ele & (1<<ELE_ALL) ||
|
||||||
@ -2365,6 +2365,7 @@ static struct Damage battle_calc_element_damage(struct Damage wd, struct block_l
|
|||||||
|
|
||||||
switch( skill_id ) {
|
switch( skill_id ) {
|
||||||
case MC_CARTREVOLUTION: //Cart Revolution apply the element fix once more with neutral element
|
case MC_CARTREVOLUTION: //Cart Revolution apply the element fix once more with neutral element
|
||||||
|
case KO_BAKURETSU:
|
||||||
wd.damage = battle_attr_fix(src, target, wd.damage, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
wd.damage = battle_attr_fix(src, target, wd.damage, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||||
break;
|
break;
|
||||||
case GS_GROUNDDRIFT:
|
case GS_GROUNDDRIFT:
|
||||||
@ -2728,6 +2729,10 @@ struct Damage battle_calc_skill_base_damage(struct Damage wd, struct block_list
|
|||||||
ATK_ADDRATE(wd.damage, wd.damage2, sd->bonus.crit_atk_rate);
|
ATK_ADDRATE(wd.damage, wd.damage2, sd->bonus.crit_atk_rate);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if(is_attack_critical(wd, src, target, skill_id, skill_lv, false) && sc && sc->data[SC_MTF_CRIDAMAGE]) {
|
||||||
|
ATK_ADDRATE(wd.damage, wd.damage2, 25);
|
||||||
|
RE_ALLATK_ADDRATE(wd, 25); //Temporary it should be 'bonus.crit_atk_rate'
|
||||||
|
}
|
||||||
if(sd->status.party_id && (skill=pc_checkskill(sd,TK_POWER)) > 0) {
|
if(sd->status.party_id && (skill=pc_checkskill(sd,TK_POWER)) > 0) {
|
||||||
if( (i = party_foreachsamemap(party_sub_count, sd, 0)) > 1 ) { // exclude the player himself [Inkfish]
|
if( (i = party_foreachsamemap(party_sub_count, sd, 0)) > 1 ) { // exclude the player himself [Inkfish]
|
||||||
ATK_ADDRATE(wd.damage, wd.damage2, 2*skill*i);
|
ATK_ADDRATE(wd.damage, wd.damage2, 2*skill*i);
|
||||||
@ -3624,26 +3629,36 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
|
|||||||
skillratio += 700;
|
skillratio += 700;
|
||||||
break;
|
break;
|
||||||
case KO_JYUMONJIKIRI:
|
case KO_JYUMONJIKIRI:
|
||||||
skillratio += -100 + 150 * skill_lv;
|
skillratio = 150 * skill_lv;
|
||||||
|
RE_LVL_DMOD(120);
|
||||||
|
if(tsc && tsc->data[SC_JYUMONJIKIRI])
|
||||||
|
skillratio += skill_lv * status_get_lv(src);
|
||||||
break;
|
break;
|
||||||
case KO_HUUMARANKA:
|
case KO_HUUMARANKA:
|
||||||
skillratio += -100 + 150 * skill_lv + sstatus->dex/2 + sstatus->agi/2; // needs more info
|
skillratio = 150 * skill_lv + sstatus->agi + sstatus->dex + (sd ? pc_checkskill(sd,NJ_HUUMA) * 100 : 0);
|
||||||
break;
|
break;
|
||||||
case KO_SETSUDAN:
|
case KO_SETSUDAN:
|
||||||
skillratio += 100 * (skill_lv-1);
|
skillratio += 100 * (skill_lv-1);
|
||||||
|
RE_LVL_DMOD(100);
|
||||||
|
if(tsc && tsc->data[SC_SPIRIT])
|
||||||
|
skillratio += 200 * tsc->data[SC_SPIRIT]->val1;
|
||||||
break;
|
break;
|
||||||
case KO_BAKURETSU:
|
case KO_BAKURETSU:
|
||||||
skillratio = 50 * skill_lv * (sd?pc_checkskill(sd,NJ_TOBIDOUGU):10);
|
skillratio = (sd ? pc_checkskill(sd,NJ_TOBIDOUGU) : 1) * (50 + sstatus->dex / 4) * skill_lv * 4 / 10;
|
||||||
|
RE_LVL_DMOD(120);
|
||||||
|
skillratio += 10 * (sd ? sd->status.job_level : 1);
|
||||||
|
break;
|
||||||
|
case KO_MAKIBISHI:
|
||||||
|
skillratio = 20 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case MH_NEEDLE_OF_PARALYZE:
|
case MH_NEEDLE_OF_PARALYZE:
|
||||||
skillratio += 600 + 100 * skill_lv;
|
skillratio += 600 + 100 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case MH_STAHL_HORN:
|
case MH_STAHL_HORN:
|
||||||
skillratio += 400 + 100 * skill_lv * status_get_lv(src);
|
skillratio += 400 + 100 * skill_lv * status_get_lv(src) / 150;
|
||||||
skillratio = skillratio/100; //@TODO uv1 factor need to be confirmed
|
|
||||||
break;
|
break;
|
||||||
case MH_LAVA_SLIDE:
|
case MH_LAVA_SLIDE:
|
||||||
skillratio += -100 + 70 * skill_lv;
|
skillratio = 70 * skill_lv;
|
||||||
break;
|
break;
|
||||||
case MH_SONIC_CRAW:
|
case MH_SONIC_CRAW:
|
||||||
skillratio = 40 * skill_lv;
|
skillratio = 40 * skill_lv;
|
||||||
@ -3797,16 +3812,6 @@ static int battle_calc_skill_constant_addition(struct Damage wd, struct block_li
|
|||||||
else
|
else
|
||||||
atk += ( status_get_lv(target) * 50 ); //mobs
|
atk += ( status_get_lv(target) * 50 ); //mobs
|
||||||
break;
|
break;
|
||||||
case KO_SETSUDAN:
|
|
||||||
if( tsc && tsc->data[SC_SPIRIT] ){
|
|
||||||
#ifdef RENEWAL
|
|
||||||
atk = ((wd.equipAtk + wd.weaponAtk + wd.statusAtk + wd.masteryAtk) * (10*tsc->data[SC_SPIRIT]->val1)) / 100;// +10% custom value.
|
|
||||||
#else
|
|
||||||
atk = (int) ((wd.damage) * (10*tsc->data[SC_SPIRIT]->val1)) / 100;// +10% custom value.
|
|
||||||
#endif
|
|
||||||
status_change_end(target,SC_SPIRIT,INVALID_TIMER);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return atk;
|
return atk;
|
||||||
}
|
}
|
||||||
@ -4741,8 +4746,6 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
|
|||||||
if(is_attack_critical(wd, src, target, skill_id, skill_lv, false)) {
|
if(is_attack_critical(wd, src, target, skill_id, skill_lv, false)) {
|
||||||
if(sd) { // check for player so we don't crash out, monsters don't have bonus crit rates [helvetica]
|
if(sd) { // check for player so we don't crash out, monsters don't have bonus crit rates [helvetica]
|
||||||
wd.damage = (int)floor((double)(wd.damage * 1.4 * (100 + sd->bonus.crit_atk_rate)) / 100);
|
wd.damage = (int)floor((double)(wd.damage * 1.4 * (100 + sd->bonus.crit_atk_rate)) / 100);
|
||||||
if (sc && sc->data[SC_MTF_CRIDAMAGE]) // Monster Transformation Bonus
|
|
||||||
wd.damage *= (int)1.25;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
wd.damage = (int)floor((double)wd.damage * 1.4);
|
wd.damage = (int)floor((double)wd.damage * 1.4);
|
||||||
@ -4795,11 +4798,9 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
|
|||||||
// skills forced to neutral gain benefits from weapon element
|
// skills forced to neutral gain benefits from weapon element
|
||||||
// but final damage is considered "neutral" and resistances are applied again
|
// but final damage is considered "neutral" and resistances are applied again
|
||||||
switch (skill_id) {
|
switch (skill_id) {
|
||||||
case GN_CARTCANNON: // Cart Cannon gets forced to element of cannon ball (neutral or holy/shadow/ghost)
|
|
||||||
wd.damage = battle_attr_fix(src, target, wd.damage, (sd && sd->bonus.arrow_ele) ? sd->bonus.arrow_ele : ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
|
||||||
break;
|
|
||||||
case MC_CARTREVOLUTION: // Cart Revolution gets forced to neutral element
|
case MC_CARTREVOLUTION: // Cart Revolution gets forced to neutral element
|
||||||
case MO_INVESTIGATE:
|
case MO_INVESTIGATE:
|
||||||
|
case KO_BAKURETSU:
|
||||||
wd.damage = battle_attr_fix(src, target, wd.damage, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
wd.damage = battle_attr_fix(src, target, wd.damage, ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||||
break;
|
break;
|
||||||
case CR_SHIELDBOOMERANG:
|
case CR_SHIELDBOOMERANG:
|
||||||
@ -4835,6 +4836,9 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case GN_CARTCANNON: // Cart Cannon gets forced to element of cannon ball (neutral or holy/shadow/ghost)
|
||||||
|
wd.damage = battle_attr_fix(src, target, wd.damage, (sd && sd->bonus.arrow_ele) ? sd->bonus.arrow_ele : ELE_NEUTRAL, tstatus->def_ele, tstatus->ele_lv);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// perform multihit calculations
|
// perform multihit calculations
|
||||||
@ -5886,9 +5890,6 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
|
|||||||
//[{( Hell Plant Skill Level x Casters Base Level ) x 10 } + {( Casters INT x 7 ) / 2 } x { 18 + ( Casters Job Level / 4 )] x ( 5 / ( 10 - Summon Flora Skill Level ))
|
//[{( Hell Plant Skill Level x Casters Base Level ) x 10 } + {( Casters INT x 7 ) / 2 } x { 18 + ( Casters Job Level / 4 )] x ( 5 / ( 10 - Summon Flora Skill Level ))
|
||||||
md.damage = ( skill_lv * status_get_lv(src) * 10 ) + ( status_get_int(src) * 7 / 2 ) * ( 18 + (sd?sd->status.job_level:0) / 4 ) * ( 5 / (10 - ((sd) ? pc_checkskill(sd,AM_CANNIBALIZE) : skill_get_max(AM_CANNIBALIZE))) );
|
md.damage = ( skill_lv * status_get_lv(src) * 10 ) + ( status_get_int(src) * 7 / 2 ) * ( 18 + (sd?sd->status.job_level:0) / 4 ) * ( 5 / (10 - ((sd) ? pc_checkskill(sd,AM_CANNIBALIZE) : skill_get_max(AM_CANNIBALIZE))) );
|
||||||
break;
|
break;
|
||||||
case KO_MAKIBISHI:
|
|
||||||
md.damage = 20 * skill_lv;
|
|
||||||
break;
|
|
||||||
case RL_B_TRAP:
|
case RL_B_TRAP:
|
||||||
md.damage = (200 + status_get_int(src) + status_get_dex(src)) * skill_lv * 10; //(custom)
|
md.damage = (200 + status_get_int(src) + status_get_dex(src)) * skill_lv * 10; //(custom)
|
||||||
break;
|
break;
|
||||||
@ -6825,6 +6826,9 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
|
|||||||
case ASC_METEORASSAULT:
|
case ASC_METEORASSAULT:
|
||||||
case RG_RAID:
|
case RG_RAID:
|
||||||
case MC_CARTREVOLUTION:
|
case MC_CARTREVOLUTION:
|
||||||
|
case HT_CLAYMORETRAP:
|
||||||
|
case RA_ICEBOUNDTRAP:
|
||||||
|
case RA_FIRINGTRAP:
|
||||||
#endif
|
#endif
|
||||||
state |= BCT_ENEMY;
|
state |= BCT_ENEMY;
|
||||||
strip_enemy = 0;
|
strip_enemy = 0;
|
||||||
|
@ -73,6 +73,12 @@ enum item_itemid {
|
|||||||
ITEMID_PHRACON = 1010,
|
ITEMID_PHRACON = 1010,
|
||||||
ITEMID_EMVERETARCON = 1011,
|
ITEMID_EMVERETARCON = 1011,
|
||||||
ITEMID_TRAP = 1065,
|
ITEMID_TRAP = 1065,
|
||||||
|
ITEMID_GHOSTRING_CARD = 4047,
|
||||||
|
ITEMID_PHREEONI_CARD = 4121,
|
||||||
|
ITEMID_MISTRESS_CARD = 4132,
|
||||||
|
ITEMID_ORC_LORD_CARD = 4135,
|
||||||
|
ITEMID_ORC_HERO_CARD = 4143,
|
||||||
|
ITEMID_TAO_GUNKA_CARD = 4302,
|
||||||
ITEMID_STRANGE_EMBRYO = 6415,
|
ITEMID_STRANGE_EMBRYO = 6415,
|
||||||
ITEMID_STONE = 7049,
|
ITEMID_STONE = 7049,
|
||||||
ITEMID_FIRE_BOTTLE = 7135,
|
ITEMID_FIRE_BOTTLE = 7135,
|
||||||
|
115
src/map/skill.c
115
src/map/skill.c
@ -1314,7 +1314,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
|
|||||||
break;
|
break;
|
||||||
case RA_FIRINGTRAP:
|
case RA_FIRINGTRAP:
|
||||||
case RA_ICEBOUNDTRAP:
|
case RA_ICEBOUNDTRAP:
|
||||||
sc_start(src,bl, (skill_id == RA_FIRINGTRAP) ? SC_BURNING:SC_FREEZING, 40 + 10 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv));
|
sc_start(src,bl, (skill_id == RA_FIRINGTRAP) ? SC_BURNING:SC_FREEZING, 50 + 10 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv));
|
||||||
break;
|
break;
|
||||||
case NC_PILEBUNKER:
|
case NC_PILEBUNKER:
|
||||||
if( rnd()%100 < 25 + 15*skill_lv ) {
|
if( rnd()%100 < 25 + 15*skill_lv ) {
|
||||||
@ -1497,11 +1497,14 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
|
|||||||
case EL_TYPOON_MIS:
|
case EL_TYPOON_MIS:
|
||||||
sc_start(src,bl,SC_SILENCE,10*skill_lv,skill_lv,skill_get_time(skill_id,skill_lv));
|
sc_start(src,bl,SC_SILENCE,10*skill_lv,skill_lv,skill_get_time(skill_id,skill_lv));
|
||||||
break;
|
break;
|
||||||
case KO_JYUMONJIKIRI: // needs more info
|
case KO_JYUMONJIKIRI:
|
||||||
sc_start(src,bl,SC_JYUMONJIKIRI,25,skill_lv,skill_get_time(skill_id,skill_lv));
|
sc_start(src,bl,SC_JYUMONJIKIRI,100,skill_lv,skill_get_time(skill_id,skill_lv));
|
||||||
|
break;
|
||||||
|
case KO_SETSUDAN:
|
||||||
|
status_change_end(bl,SC_SPIRIT,INVALID_TIMER);
|
||||||
break;
|
break;
|
||||||
case KO_MAKIBISHI:
|
case KO_MAKIBISHI:
|
||||||
sc_start(src,bl, SC_STUN, 100, skill_lv, skill_get_time2(skill_id,skill_lv));
|
sc_start(src,bl, SC_STUN, 10 * skill_lv, skill_lv, skill_get_time2(skill_id,skill_lv));
|
||||||
break;
|
break;
|
||||||
case MH_LAVA_SLIDE:
|
case MH_LAVA_SLIDE:
|
||||||
if (tsc && !tsc->data[SC_BURNING]) sc_start4(src,bl, SC_BURNING, 10 * skill_lv, skill_lv, 1000, src->id, 0, skill_get_time(skill_id, skill_lv));
|
if (tsc && !tsc->data[SC_BURNING]) sc_start4(src,bl, SC_BURNING, 10 * skill_lv, skill_lv, 1000, src->id, 0, skill_get_time(skill_id, skill_lv));
|
||||||
@ -4039,9 +4042,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
case WM_SEVERE_RAINSTORM_MELEE:
|
case WM_SEVERE_RAINSTORM_MELEE:
|
||||||
case WM_GREAT_ECHO:
|
case WM_GREAT_ECHO:
|
||||||
case GN_SLINGITEM_RANGEMELEEATK:
|
case GN_SLINGITEM_RANGEMELEEATK:
|
||||||
case KO_JYUMONJIKIRI:
|
|
||||||
case KO_SETSUDAN:
|
case KO_SETSUDAN:
|
||||||
case KO_KAIHOU:
|
|
||||||
case GC_DARKCROW:
|
case GC_DARKCROW:
|
||||||
case RL_MASS_SPIRAL:
|
case RL_MASS_SPIRAL:
|
||||||
case RL_SLUGSHOT:
|
case RL_SLUGSHOT:
|
||||||
@ -4520,6 +4521,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
case AB_HIGHNESSHEAL:
|
case AB_HIGHNESSHEAL:
|
||||||
case AB_DUPLELIGHT_MAGIC:
|
case AB_DUPLELIGHT_MAGIC:
|
||||||
case WM_METALICSOUND:
|
case WM_METALICSOUND:
|
||||||
|
case KO_KAIHOU:
|
||||||
case MH_ERASER_CUTTER:
|
case MH_ERASER_CUTTER:
|
||||||
skill_attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag);
|
skill_attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag);
|
||||||
break;
|
break;
|
||||||
@ -5152,6 +5154,30 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case KO_JYUMONJIKIRI: {
|
||||||
|
short x, y;
|
||||||
|
short dir = map_calc_dir(src,bl->x,bl->y);
|
||||||
|
|
||||||
|
if (dir > 0 && dir < 4)
|
||||||
|
x = 2;
|
||||||
|
else if (dir > 4)
|
||||||
|
x = -2;
|
||||||
|
else
|
||||||
|
x = 0;
|
||||||
|
if (dir > 2 && dir < 6)
|
||||||
|
y = 2;
|
||||||
|
else if (dir == 7 || dir < 2)
|
||||||
|
y = -2;
|
||||||
|
else
|
||||||
|
y = 0;
|
||||||
|
if (unit_movepos(src,bl->x + x,bl->y + y,1,1)) {
|
||||||
|
clif_slide(src,bl->x + x,bl->y + y);
|
||||||
|
clif_fixpos(src); //The official server send these two packts.
|
||||||
|
skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case EL_FIRE_BOMB:
|
case EL_FIRE_BOMB:
|
||||||
case EL_FIRE_WAVE:
|
case EL_FIRE_WAVE:
|
||||||
case EL_WATER_SCREW:
|
case EL_WATER_SCREW:
|
||||||
@ -11178,7 +11204,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
|||||||
struct s_skill_nounit_layout *layout = skill_get_nounit_layout(skill_id,skill_lv,src,x,y,dir);
|
struct s_skill_nounit_layout *layout = skill_get_nounit_layout(skill_id,skill_lv,src,x,y,dir);
|
||||||
|
|
||||||
for( i = 0; i < layout->count; i++ )
|
for( i = 0; i < layout->count; i++ )
|
||||||
map_foreachincell(skill_area_sub,src->m,x+layout->dx[i],y+layout->dy[i],BL_CHAR,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|SD_ANIMATION|1,skill_castend_damage_id);
|
map_foreachincell(skill_area_sub,src->m,src->x+layout->dx[i],src->y+layout->dy[i],BL_CHAR,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|SD_ANIMATION|1,skill_castend_damage_id);
|
||||||
skill_addtimerskill(src,gettick() + status_get_amotion(src),0,0,0,LG_OVERBRAND_BRANDISH,skill_lv,dir,flag);
|
skill_addtimerskill(src,gettick() + status_get_amotion(src),0,0,0,LG_OVERBRAND_BRANDISH,skill_lv,dir,flag);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -12606,6 +12632,9 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
|
|||||||
case UNT_FLASHER:
|
case UNT_FLASHER:
|
||||||
case UNT_FREEZINGTRAP:
|
case UNT_FREEZINGTRAP:
|
||||||
case UNT_FIREPILLAR_ACTIVE:
|
case UNT_FIREPILLAR_ACTIVE:
|
||||||
|
if( sg->unit_id == UNT_FIRINGTRAP || sg->unit_id == UNT_ICEBOUNDTRAP || sg->unit_id == UNT_CLAYMORETRAP )
|
||||||
|
map_foreachinrange(skill_trap_splash,&src->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag|BL_SKILL|~BCT_SELF, &src->bl,tick);
|
||||||
|
else
|
||||||
map_foreachinrange(skill_trap_splash,&src->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &src->bl,tick);
|
map_foreachinrange(skill_trap_splash,&src->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &src->bl,tick);
|
||||||
if (sg->unit_id != UNT_FIREPILLAR_ACTIVE)
|
if (sg->unit_id != UNT_FIREPILLAR_ACTIVE)
|
||||||
clif_changetraplook(&src->bl, sg->unit_id==UNT_LANDMINE?UNT_FIREPILLAR_ACTIVE:UNT_USED_TRAPS);
|
clif_changetraplook(&src->bl, sg->unit_id==UNT_LANDMINE?UNT_FIREPILLAR_ACTIVE:UNT_USED_TRAPS);
|
||||||
@ -14510,15 +14539,16 @@ bool skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id,
|
|||||||
break;
|
break;
|
||||||
case KO_ZANZOU: {
|
case KO_ZANZOU: {
|
||||||
int c = 0;
|
int c = 0;
|
||||||
|
|
||||||
i = map_foreachinmap(skill_check_condition_mob_master_sub, sd->bl.m, BL_MOB, sd->bl.id, 2308, skill_id, &c);
|
i = map_foreachinmap(skill_check_condition_mob_master_sub, sd->bl.m, BL_MOB, sd->bl.id, 2308, skill_id, &c);
|
||||||
if( c >= skill_get_maxcount(skill_id,skill_lv) || c != i)
|
if( c >= skill_get_maxcount(skill_id,skill_lv) || c != i) {
|
||||||
{
|
|
||||||
clif_skill_fail(sd , skill_id, USESKILL_FAIL_LEVEL, 0);
|
clif_skill_fail(sd , skill_id, USESKILL_FAIL_LEVEL, 0);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
status = &sd->battle_status;
|
status = &sd->battle_status;
|
||||||
|
|
||||||
require = skill_get_requirement(sd,skill_id,skill_lv);
|
require = skill_get_requirement(sd,skill_id,skill_lv);
|
||||||
@ -16007,18 +16037,23 @@ int skill_detonator(struct block_list *bl, va_list ap)
|
|||||||
case UNT_CLUSTERBOMB:
|
case UNT_CLUSTERBOMB:
|
||||||
case UNT_FIRINGTRAP:
|
case UNT_FIRINGTRAP:
|
||||||
case UNT_ICEBOUNDTRAP:
|
case UNT_ICEBOUNDTRAP:
|
||||||
if( unit_id == UNT_TALKIEBOX )
|
switch(unit_id) {
|
||||||
{
|
case UNT_TALKIEBOX:
|
||||||
clif_talkiebox(bl,unit->group->valstr);
|
clif_talkiebox(bl,unit->group->valstr);
|
||||||
unit->group->val2 = -1;
|
unit->group->val2 = -1;
|
||||||
}
|
break;
|
||||||
else
|
case UNT_CLAYMORETRAP:
|
||||||
|
case UNT_FIRINGTRAP:
|
||||||
|
case UNT_ICEBOUNDTRAP:
|
||||||
|
map_foreachinrange(skill_trap_splash,bl,skill_get_splash(unit->group->skill_id,unit->group->skill_lv),unit->group->bl_flag|BL_SKILL|~BCT_SELF,bl,unit->group->tick);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
map_foreachinrange(skill_trap_splash,bl,skill_get_splash(unit->group->skill_id,unit->group->skill_lv),unit->group->bl_flag,bl,unit->group->tick);
|
map_foreachinrange(skill_trap_splash,bl,skill_get_splash(unit->group->skill_id,unit->group->skill_lv),unit->group->bl_flag,bl,unit->group->tick);
|
||||||
|
}
|
||||||
clif_changetraplook(bl,unit_id == UNT_FIRINGTRAP ? UNT_DUMMYSKILL : UNT_USED_TRAPS);
|
clif_changetraplook(bl, UNT_USED_TRAPS);
|
||||||
unit->group->unit_id = UNT_USED_TRAPS;
|
unit->group->unit_id = UNT_USED_TRAPS;
|
||||||
unit->group->limit = DIFF_TICK(gettick(),unit->group->tick) +
|
unit->group->limit = DIFF_TICK(gettick(),unit->group->tick) +
|
||||||
(unit_id == UNT_TALKIEBOX ? 5000 : (unit_id == UNT_CLUSTERBOMB || unit_id == UNT_ICEBOUNDTRAP? 2500 : 1500) );
|
(unit_id == UNT_TALKIEBOX ? 5000 : (unit_id == UNT_CLUSTERBOMB || unit_id == UNT_ICEBOUNDTRAP? 2500 : (unit_id == UNT_FIRINGTRAP ? 0 : 1500)) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -16224,12 +16259,6 @@ static int skill_trap_splash (struct block_list *bl, va_list ap)
|
|||||||
case UNT_ELECTRICSHOCKER:
|
case UNT_ELECTRICSHOCKER:
|
||||||
clif_skill_damage(src,bl,tick,0,0,-30000,1,sg->skill_id,sg->skill_lv,5);
|
clif_skill_damage(src,bl,tick,0,0,-30000,1,sg->skill_id,sg->skill_lv,5);
|
||||||
break;
|
break;
|
||||||
case UNT_FIRINGTRAP:
|
|
||||||
case UNT_ICEBOUNDTRAP:
|
|
||||||
case UNT_CLUSTERBOMB:
|
|
||||||
if( ss != bl )
|
|
||||||
skill_attack(BF_MISC,ss,src,bl,sg->skill_id,sg->skill_lv,tick,sg->val1|SD_LEVEL);
|
|
||||||
break;
|
|
||||||
case UNT_MAGENTATRAP:
|
case UNT_MAGENTATRAP:
|
||||||
case UNT_COBALTTRAP:
|
case UNT_COBALTTRAP:
|
||||||
case UNT_MAIZETRAP:
|
case UNT_MAIZETRAP:
|
||||||
@ -16241,6 +16270,38 @@ static int skill_trap_splash (struct block_list *bl, va_list ap)
|
|||||||
skill_addtimerskill(ss,tick+50,bl->id,0,0,WM_REVERBERATION_MELEE,sg->skill_lv,BF_WEAPON,0); // for proper skill delay animation when use with Dominion Impulse
|
skill_addtimerskill(ss,tick+50,bl->id,0,0,WM_REVERBERATION_MELEE,sg->skill_lv,BF_WEAPON,0); // for proper skill delay animation when use with Dominion Impulse
|
||||||
skill_addtimerskill(ss,tick+250,bl->id,0,0,WM_REVERBERATION_MAGIC,sg->skill_lv,BF_MAGIC,0);
|
skill_addtimerskill(ss,tick+250,bl->id,0,0,WM_REVERBERATION_MAGIC,sg->skill_lv,BF_MAGIC,0);
|
||||||
break;
|
break;
|
||||||
|
case UNT_FIRINGTRAP:
|
||||||
|
case UNT_ICEBOUNDTRAP:
|
||||||
|
if( src->id == bl->id ) break;
|
||||||
|
if( bl->type == BL_SKILL ) {
|
||||||
|
struct skill_unit *su = (struct skill_unit *)bl;
|
||||||
|
if( unit->group->unit_id == UNT_USED_TRAPS )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case UNT_CLUSTERBOMB:
|
||||||
|
if( ss != bl )
|
||||||
|
skill_attack(BF_MISC,ss,src,bl,sg->skill_id,sg->skill_lv,tick,sg->val1|SD_LEVEL);
|
||||||
|
break;
|
||||||
|
case UNT_CLAYMORETRAP:
|
||||||
|
if( src->id == bl->id ) break;
|
||||||
|
if( bl->type == BL_SKILL ) {
|
||||||
|
struct skill_unit *su = (struct skill_unit *)bl;
|
||||||
|
switch( su->group->unit_id ){
|
||||||
|
case UNT_CLAYMORETRAP:
|
||||||
|
case UNT_LANDMINE:
|
||||||
|
case UNT_BLASTMINE:
|
||||||
|
case UNT_SHOCKWAVE:
|
||||||
|
case UNT_SANDMAN:
|
||||||
|
case UNT_FLASHER:
|
||||||
|
case UNT_FREEZINGTRAP:
|
||||||
|
case UNT_FIRINGTRAP:
|
||||||
|
case UNT_ICEBOUNDTRAP:
|
||||||
|
clif_changetraplook(bl, UNT_USED_TRAPS);
|
||||||
|
su->group->limit = DIFF_TICK(gettick(),su->group->tick) + 1500;
|
||||||
|
su->group->unit_id = UNT_USED_TRAPS;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
skill_attack(skill_get_type(sg->skill_id),ss,src,bl,sg->skill_id,sg->skill_lv,tick,0);
|
skill_attack(skill_get_type(sg->skill_id),ss,src,bl,sg->skill_id,sg->skill_lv,tick,0);
|
||||||
break;
|
break;
|
||||||
@ -18292,16 +18353,18 @@ static int skill_destroy_trap( struct block_list *bl, va_list ap ) {
|
|||||||
|
|
||||||
if (su->alive && (sg = su->group) && skill_get_inf2(sg->skill_id)&INF2_TRAP) {
|
if (su->alive && (sg = su->group) && skill_get_inf2(sg->skill_id)&INF2_TRAP) {
|
||||||
switch( sg->unit_id ) {
|
switch( sg->unit_id ) {
|
||||||
case UNT_LANDMINE:
|
|
||||||
case UNT_CLAYMORETRAP:
|
case UNT_CLAYMORETRAP:
|
||||||
|
case UNT_FIRINGTRAP:
|
||||||
|
case UNT_ICEBOUNDTRAP:
|
||||||
|
map_foreachinrange(skill_trap_splash,&su->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag|BL_SKILL|~BCT_SELF, &su->bl,tick);
|
||||||
|
break;
|
||||||
|
case UNT_LANDMINE:
|
||||||
case UNT_BLASTMINE:
|
case UNT_BLASTMINE:
|
||||||
case UNT_SHOCKWAVE:
|
case UNT_SHOCKWAVE:
|
||||||
case UNT_SANDMAN:
|
case UNT_SANDMAN:
|
||||||
case UNT_FLASHER:
|
case UNT_FLASHER:
|
||||||
case UNT_FREEZINGTRAP:
|
case UNT_FREEZINGTRAP:
|
||||||
case UNT_CLUSTERBOMB:
|
case UNT_CLUSTERBOMB:
|
||||||
case UNT_FIRINGTRAP:
|
|
||||||
case UNT_ICEBOUNDTRAP:
|
|
||||||
map_foreachinrange(skill_trap_splash,&su->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &su->bl,tick);
|
map_foreachinrange(skill_trap_splash,&su->bl, skill_get_splash(sg->skill_id, sg->skill_lv), sg->bl_flag, &su->bl,tick);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -620,7 +620,7 @@ void initChangeTables(void)
|
|||||||
add_sc( RA_VERDURETRAP , SC_ELEMENTALCHANGE );
|
add_sc( RA_VERDURETRAP , SC_ELEMENTALCHANGE );
|
||||||
add_sc( RA_FIRINGTRAP , SC_BURNING );
|
add_sc( RA_FIRINGTRAP , SC_BURNING );
|
||||||
set_sc_with_vfx( RA_ICEBOUNDTRAP, SC_FREEZING , SI_FROSTMISTY , SCB_NONE );
|
set_sc_with_vfx( RA_ICEBOUNDTRAP, SC_FREEZING , SI_FROSTMISTY , SCB_NONE );
|
||||||
set_sc( RA_UNLIMIT , SC_UNLIMIT , SI_UNLIMIT , SCB_NONE );
|
set_sc( RA_UNLIMIT , SC_UNLIMIT , SI_UNLIMIT , SCB_DEF|SCB_DEF2|SCB_MDEF|SCB_MDEF2 );
|
||||||
|
|
||||||
/* Mechanic */
|
/* Mechanic */
|
||||||
set_sc( NC_ACCELERATION , SC_ACCELERATION , SI_ACCELERATION , SCB_SPEED );
|
set_sc( NC_ACCELERATION , SC_ACCELERATION , SI_ACCELERATION , SCB_SPEED );
|
||||||
@ -942,19 +942,24 @@ void initChangeTables(void)
|
|||||||
StatusIconChangeTable[SC_CURSED_SOIL] = SI_CURSED_SOIL;
|
StatusIconChangeTable[SC_CURSED_SOIL] = SI_CURSED_SOIL;
|
||||||
StatusIconChangeTable[SC_UPHEAVAL] = SI_UPHEAVAL;
|
StatusIconChangeTable[SC_UPHEAVAL] = SI_UPHEAVAL;
|
||||||
|
|
||||||
StatusIconChangeTable[SC_PUSH_CART] = SI_ON_PUSH_CART;
|
|
||||||
StatusIconChangeTable[SC_REBOUND] = SI_REBOUND;
|
StatusIconChangeTable[SC_REBOUND] = SI_REBOUND;
|
||||||
StatusIconChangeTable[SC_MONSTER_TRANSFORM] = SI_MONSTER_TRANSFORM;
|
StatusIconChangeTable[SC_MONSTER_TRANSFORM] = SI_MONSTER_TRANSFORM;
|
||||||
|
StatusIconChangeTable[SC_ALL_RIDING] = SI_ALL_RIDING;
|
||||||
|
StatusIconChangeTable[SC_PUSH_CART] = SI_ON_PUSH_CART;
|
||||||
|
StatusIconChangeTable[SC_MTF_ASPD] = SI_MTF_ASPD;
|
||||||
|
StatusIconChangeTable[SC_MTF_RANGEATK] = SI_MTF_RANGEATK;
|
||||||
|
StatusIconChangeTable[SC_MTF_MATK] = SI_MTF_MATK;
|
||||||
|
StatusIconChangeTable[SC_MTF_MLEATKED] = SI_MTF_MLEATKED;
|
||||||
|
StatusIconChangeTable[SC_MTF_CRIDAMAGE] = SI_MTF_CRIDAMAGE;
|
||||||
StatusIconChangeTable[SC_MOONSTAR] = SI_MOONSTAR;
|
StatusIconChangeTable[SC_MOONSTAR] = SI_MOONSTAR;
|
||||||
StatusIconChangeTable[SC_SUPER_STAR] = SI_SUPER_STAR;
|
StatusIconChangeTable[SC_SUPER_STAR] = SI_SUPER_STAR;
|
||||||
StatusIconChangeTable[SC_STRANGELIGHTS] = SI_STRANGELIGHTS;
|
|
||||||
StatusIconChangeTable[SC_DECORATION_OF_MUSIC] = SI_DECORATION_OF_MUSIC;
|
|
||||||
StatusIconChangeTable[SC_BURNING] = SI_BURNT;
|
StatusIconChangeTable[SC_BURNING] = SI_BURNT;
|
||||||
|
|
||||||
StatusIconChangeTable[SC_H_MINE] = SI_H_MINE;
|
StatusIconChangeTable[SC_H_MINE] = SI_H_MINE;
|
||||||
StatusIconChangeTable[SC_QD_SHOT_READY] = SI_E_QD_SHOT_READY;
|
StatusIconChangeTable[SC_QD_SHOT_READY] = SI_E_QD_SHOT_READY;
|
||||||
StatusIconChangeTable[SC_HEAT_BARREL_AFTER] = SI_HEAT_BARREL_AFTER;
|
StatusIconChangeTable[SC_HEAT_BARREL_AFTER] = SI_HEAT_BARREL_AFTER;
|
||||||
|
StatusIconChangeTable[SC_STRANGELIGHTS] = SI_STRANGELIGHTS;
|
||||||
|
StatusIconChangeTable[SC_DECORATION_OF_MUSIC] = SI_DECORATION_OF_MUSIC;
|
||||||
StatusIconChangeTable[SC_QUEST_BUFF1] = SI_QUEST_BUFF1;
|
StatusIconChangeTable[SC_QUEST_BUFF1] = SI_QUEST_BUFF1;
|
||||||
StatusIconChangeTable[SC_QUEST_BUFF2] = SI_QUEST_BUFF2;
|
StatusIconChangeTable[SC_QUEST_BUFF2] = SI_QUEST_BUFF2;
|
||||||
StatusIconChangeTable[SC_QUEST_BUFF3] = SI_QUEST_BUFF3;
|
StatusIconChangeTable[SC_QUEST_BUFF3] = SI_QUEST_BUFF3;
|
||||||
@ -1045,15 +1050,16 @@ void initChangeTables(void)
|
|||||||
StatusChangeFlagTable[SC_EXTRACT_SALAMINE_JUICE] |= SCB_ASPD;
|
StatusChangeFlagTable[SC_EXTRACT_SALAMINE_JUICE] |= SCB_ASPD;
|
||||||
StatusChangeFlagTable[SC_DEFSET] |= SCB_DEF;
|
StatusChangeFlagTable[SC_DEFSET] |= SCB_DEF;
|
||||||
StatusChangeFlagTable[SC_MDEFSET] |= SCB_MDEF;
|
StatusChangeFlagTable[SC_MDEFSET] |= SCB_MDEF;
|
||||||
|
StatusChangeFlagTable[SC_WEDDING] |= SCB_SPEED;
|
||||||
|
StatusChangeFlagTable[SC_ALL_RIDING] |= SCB_SPEED;
|
||||||
|
StatusChangeFlagTable[SC_PUSH_CART] |= SCB_SPEED;
|
||||||
|
StatusChangeFlagTable[SC_MTF_ASPD] |= SCB_ASPD|SCB_HIT;
|
||||||
|
StatusChangeFlagTable[SC_MTF_MATK] |= SCB_MATK;
|
||||||
|
StatusChangeFlagTable[SC_MTF_MLEATKED] |= SCB_ALL;
|
||||||
StatusChangeFlagTable[SC_MOONSTAR] |= SCB_NONE;
|
StatusChangeFlagTable[SC_MOONSTAR] |= SCB_NONE;
|
||||||
StatusChangeFlagTable[SC_SUPER_STAR] |= SCB_NONE;
|
StatusChangeFlagTable[SC_SUPER_STAR] |= SCB_NONE;
|
||||||
StatusChangeFlagTable[SC_STRANGELIGHTS] |= SCB_NONE;
|
StatusChangeFlagTable[SC_STRANGELIGHTS] |= SCB_NONE;
|
||||||
StatusChangeFlagTable[SC_DECORATION_OF_MUSIC] |= SCB_NONE;
|
StatusChangeFlagTable[SC_DECORATION_OF_MUSIC] |= SCB_NONE;
|
||||||
|
|
||||||
StatusChangeFlagTable[SC_MTF_ASPD] = SCB_ASPD|SCB_HIT;
|
|
||||||
StatusChangeFlagTable[SC_MTF_MATK] = SCB_MATK;
|
|
||||||
StatusChangeFlagTable[SC_MTF_MLEATKED] |= SCB_ALL;
|
|
||||||
|
|
||||||
StatusChangeFlagTable[SC_QUEST_BUFF1] |= SCB_BATK|SCB_MATK;
|
StatusChangeFlagTable[SC_QUEST_BUFF1] |= SCB_BATK|SCB_MATK;
|
||||||
StatusChangeFlagTable[SC_QUEST_BUFF2] |= SCB_BATK|SCB_MATK;
|
StatusChangeFlagTable[SC_QUEST_BUFF2] |= SCB_BATK|SCB_MATK;
|
||||||
StatusChangeFlagTable[SC_QUEST_BUFF3] |= SCB_BATK|SCB_MATK;
|
StatusChangeFlagTable[SC_QUEST_BUFF3] |= SCB_BATK|SCB_MATK;
|
||||||
@ -3327,7 +3333,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
|
|||||||
status->def = cap_value(i, DEFTYPE_MIN, DEFTYPE_MAX);
|
status->def = cap_value(i, DEFTYPE_MIN, DEFTYPE_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pc_isriding(sd) && pc_checkskill(sd, NC_MAINFRAME) > 0)
|
if(pc_ismadogear(sd) && pc_checkskill(sd, NC_MAINFRAME) > 0)
|
||||||
status->def += 20 + (pc_checkskill(sd, NC_MAINFRAME) * 20);
|
status->def += 20 + (pc_checkskill(sd, NC_MAINFRAME) * 20);
|
||||||
|
|
||||||
#ifndef RENEWAL
|
#ifndef RENEWAL
|
||||||
@ -5560,7 +5566,7 @@ static defType status_calc_def(struct block_list *bl, struct status_change *sc,
|
|||||||
if(sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 2)
|
if(sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 2)
|
||||||
def += 50;
|
def += 50;
|
||||||
if(sc->data[SC_ODINS_POWER])
|
if(sc->data[SC_ODINS_POWER])
|
||||||
def -= 20;
|
def -= 20 * sc->data[SC_ODINS_POWER]->val1;
|
||||||
if( sc->data[SC_ANGRIFFS_MODUS] )
|
if( sc->data[SC_ANGRIFFS_MODUS] )
|
||||||
def -= 30 + 20 * sc->data[SC_ANGRIFFS_MODUS]->val1;
|
def -= 30 + 20 * sc->data[SC_ANGRIFFS_MODUS]->val1;
|
||||||
if(sc->data[SC_STONEHARDSKIN])
|
if(sc->data[SC_STONEHARDSKIN])
|
||||||
@ -5733,7 +5739,7 @@ static defType status_calc_mdef(struct block_list *bl, struct status_change *sc,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (sc->data[SC_ODINS_POWER])
|
if (sc->data[SC_ODINS_POWER])
|
||||||
mdef -= 20;
|
mdef -= 20 * sc->data[SC_ODINS_POWER]->val1;
|
||||||
if(sc->data[SC_UNLIMIT])
|
if(sc->data[SC_UNLIMIT])
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@ -9877,6 +9883,31 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|||||||
if (!map_flag_gvg(bl->m))
|
if (!map_flag_gvg(bl->m))
|
||||||
unit_stop_walking(bl, 1);
|
unit_stop_walking(bl, 1);
|
||||||
break;
|
break;
|
||||||
|
/* Show Buff Icons */
|
||||||
|
case SC_ITEMSCRIPT:
|
||||||
|
if (sd) {
|
||||||
|
switch (val1) {
|
||||||
|
case ITEMID_GHOSTRING_CARD:
|
||||||
|
clif_status_change(bl, SI_ARMOR_PROPERTY, 1, tick, 0, 0, 0);
|
||||||
|
break;
|
||||||
|
case ITEMID_PHREEONI_CARD:
|
||||||
|
clif_status_change(bl, SI_FOODHIT, 1, tick, 0, 0, 0);
|
||||||
|
break;
|
||||||
|
case ITEMID_MISTRESS_CARD:
|
||||||
|
clif_status_change(bl, SI_MVPCARD_MISTRESS, 1, tick, 0, 0, 0);
|
||||||
|
break;
|
||||||
|
case ITEMID_ORC_LORD_CARD:
|
||||||
|
clif_status_change(bl, SI_MVPCARD_ORCLORD, 1, tick, 0, 0, 0);
|
||||||
|
break;
|
||||||
|
case ITEMID_ORC_HERO_CARD:
|
||||||
|
clif_status_change(bl, SI_MVPCARD_ORCHERO, 1, tick, 0, 0, 0);
|
||||||
|
break;
|
||||||
|
case ITEMID_TAO_GUNKA_CARD:
|
||||||
|
clif_status_change(bl, SI_MVPCARD_TAOGUNKA, 1, tick, 0, 0, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set option as needed.
|
// Set option as needed.
|
||||||
@ -10778,6 +10809,30 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
|
|||||||
case SC_FULL_THROTTLE:
|
case SC_FULL_THROTTLE:
|
||||||
sc_start(bl, bl, SC_REBOUND, 100, sce->val1, skill_get_time2(ALL_FULL_THROTTLE, sce->val1));
|
sc_start(bl, bl, SC_REBOUND, 100, sce->val1, skill_get_time2(ALL_FULL_THROTTLE, sce->val1));
|
||||||
break;
|
break;
|
||||||
|
case SC_ITEMSCRIPT:
|
||||||
|
if (sd) {
|
||||||
|
switch (sce->val1) {
|
||||||
|
case ITEMID_GHOSTRING_CARD:
|
||||||
|
clif_status_load(bl, SI_ARMOR_PROPERTY, 0);
|
||||||
|
break;
|
||||||
|
case ITEMID_PHREEONI_CARD:
|
||||||
|
clif_status_load(bl, SI_FOODHIT, 0);
|
||||||
|
break;
|
||||||
|
case ITEMID_MISTRESS_CARD:
|
||||||
|
clif_status_load(bl, SI_MVPCARD_MISTRESS, 0);
|
||||||
|
break;
|
||||||
|
case ITEMID_ORC_LORD_CARD:
|
||||||
|
clif_status_load(bl, SI_MVPCARD_ORCLORD, 0);
|
||||||
|
break;
|
||||||
|
case ITEMID_ORC_HERO_CARD:
|
||||||
|
clif_status_load(bl, SI_MVPCARD_ORCHERO, 0);
|
||||||
|
break;
|
||||||
|
case ITEMID_TAO_GUNKA_CARD:
|
||||||
|
clif_status_load(bl, SI_MVPCARD_TAOGUNKA, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SC_HEAT_BARREL:
|
case SC_HEAT_BARREL:
|
||||||
if (sd)
|
if (sd)
|
||||||
sc_start(bl,bl,SC_HEAT_BARREL_AFTER,100,sce->val1,skill_get_time2(RL_HEAT_BARREL, sce->val1));
|
sc_start(bl,bl,SC_HEAT_BARREL_AFTER,100,sce->val1,skill_get_time2(RL_HEAT_BARREL, sce->val1));
|
||||||
|
@ -1482,6 +1482,8 @@ enum si_type {
|
|||||||
SI_HEAT_BARREL_AFTER = 778,
|
SI_HEAT_BARREL_AFTER = 778,
|
||||||
SI_DECORATION_OF_MUSIC = 779,
|
SI_DECORATION_OF_MUSIC = 779,
|
||||||
SI_OVERSEAEXPUP = 780,
|
SI_OVERSEAEXPUP = 780,
|
||||||
|
SI_CLOWN_N_GYPSY_CARD = 781,
|
||||||
|
SI_OPEN_NPC_MARKET = 782,
|
||||||
SI_BEEF_RIB_STEW = 783,
|
SI_BEEF_RIB_STEW = 783,
|
||||||
SI_PORK_RIB_STEW = 784,
|
SI_PORK_RIB_STEW = 784,
|
||||||
SI_CHUSEOK_MONDAY = 785,
|
SI_CHUSEOK_MONDAY = 785,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user