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:
aleos89 2014-04-04 15:36:36 -04:00
parent bcf73f5be3
commit e2d2494e13
12 changed files with 212 additions and 78 deletions

View File

@ -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
@ -2520,7 +2522,7 @@ SI_BS_REPAIRWEAPON_OPERATOR 813
SI_GET_MAILBOX 814 SI_GET_MAILBOX 814
SI_JUMPINGCLAN 815 SI_JUMPINGCLAN 815
SI_JP_OTP 816 SI_JP_OTP 816
e_gasp 0 e_gasp 0
e_what 1 e_what 1
e_ho 2 e_ho 2

View File

@ -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 ===========================

View File

@ -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

View File

@ -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 ===========================

View File

@ -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

View File

@ -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)

View File

@ -46,8 +46,8 @@ struct login_session_data {
///Struct describing 1 char-serv attach to us ///Struct describing 1 char-serv attach to us
struct mmo_char_server { struct mmo_char_server {
char name[20]; ///char-serv name char name[20]; ///char-serv name
int fd; ///char-serv socket (well actually file descriptor) int fd; ///char-serv socket (well actually file descriptor)
uint32 ip; ///char-serv IP uint32 ip; ///char-serv IP
uint16 port; ///char-serv rt uint16 port; ///char-serv rt
uint16 users; /// user count on this server uint16 users; /// user count on this server
uint16 type; /// 0=normal, 1=maintenance, 2=over 18, 3=paying, 4=P2P uint16 type; /// 0=normal, 1=maintenance, 2=over 18, 3=paying, 4=P2P
@ -55,9 +55,9 @@ 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
}; };
struct Login_Config { struct Login_Config {

View File

@ -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;

View File

@ -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,

View File

@ -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,7 +12632,10 @@ 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:
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_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);
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);
sg->limit=DIFF_TICK(tick,sg->tick)+1500 + sg->limit=DIFF_TICK(tick,sg->tick)+1500 +
@ -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;
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);
} }
else clif_changetraplook(bl, UNT_USED_TRAPS);
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);
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;
} }

View File

@ -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));

View File

@ -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,