From 1cf5283dcf00022cefaf15d8d2ee4907ac8bdb7c Mon Sep 17 00:00:00 2001 From: Cahyadi Ramadhan Togihon Date: Wed, 21 Aug 2013 16:47:39 +0700 Subject: [PATCH] - Added GD_ITEMEMERGENCYCALL skill for Emergencycall Scroll items (12968, 12969, 12970). - Change hardcoded delay time 'guild_skill_relog_delay' for guild skill (conf/battle/guild.conf). --- conf/battle/guild.conf | 6 +++--- db/item_delay.txt | 7 ++++++- db/pre-re/item_db.txt | 6 +++--- db/pre-re/skill_cast_db.txt | 2 ++ db/pre-re/skill_castnodex_db.txt | 11 ++++++----- db/pre-re/skill_db.txt | 3 ++- db/pre-re/skill_require_db.txt | 11 ++++++----- db/re/item_db.txt | 6 +++--- db/re/skill_cast_db.txt | 2 ++ db/re/skill_castnodex_db.txt | 11 ++++++----- db/re/skill_db.txt | 3 ++- db/re/skill_require_db.txt | 1 + src/common/mmo.h | 3 ++- src/map/battle.c | 2 +- src/map/guild.c | 10 +++++----- src/map/skill.c | 26 ++++++++++++++++++++------ 16 files changed, 70 insertions(+), 40 deletions(-) diff --git a/conf/battle/guild.conf b/conf/battle/guild.conf index 234c739944..1713111d40 100644 --- a/conf/battle/guild.conf +++ b/conf/battle/guild.conf @@ -16,9 +16,9 @@ guild_exp_limit: 50 // Maximum castles one guild can own (0 = unlimited) guild_max_castles: 0 -// Activate guild skills delay by relog? (Note 1) -// Official setting is "yes", otherwise allow guild leaders to relog to cancel the 5 minute delay. -guild_skill_relog_delay: yes +// Activate guild skills delay by relog? +// Official setting is 5 minutes (300000 ms), otherwise allow guild leaders to relog to cancel the 5 minute delay. +guild_skill_relog_delay: 300000 // Damage adjustments for WOE battles against defending Guild monsters (Note 2) castle_defense_rate: 100 diff --git a/db/item_delay.txt b/db/item_delay.txt index ec9d9c0206..e81ce60734 100644 --- a/db/item_delay.txt +++ b/db/item_delay.txt @@ -21,4 +21,9 @@ 11522,1000 // Red_Raffle_Sap 11523,2000 // Yellow_Raffle_Sap 11524,3000 // White_Raffle_Sap -11525,5000 // Mora_Hip_Tea \ No newline at end of file +11525,5000 // Mora_Hip_Tea + +// FIXE ME! I assume the delay like GD_ITEMEMERGENCYCALL cooldown time +12968,300000 // Emergency_Scroll1 +12969,300000 // Emergency_Scroll2 +12970,300000 // Emergency_Scroll3 diff --git a/db/pre-re/item_db.txt b/db/pre-re/item_db.txt index e8e252adcc..b2d3bef205 100644 --- a/db/pre-re/item_db.txt +++ b/db/pre-re/item_db.txt @@ -5275,9 +5275,9 @@ 12965,Emergency_Box1,Emergency Level 1 Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12968,1; },{},{} 12966,Emergency_Box2,Emergency Level 2 Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12969,1; },{},{} 12967,Emergency_Box3,Emergency Level 3 Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12970,1; },{},{} -12968,Emergency_Scroll1,Emergency Level 1 Scroll,11,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "GD_EMERGENCYCALL",1; },{},{} -12969,Emergency_Scroll2,Emergency Level 2 Scroll,11,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "GD_EMERGENCYCALL",1; },{},{} -12970,Emergency_Scroll3,Emergency Level 3 Scroll,11,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "GD_EMERGENCYCALL",1; },{},{} +12968,Emergency_Scroll1,Emergency Level 1 Scroll,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ unitskilluseid getcharid(3),"GD_ITEMEMERGENCYCALL",1; },{},{} +12969,Emergency_Scroll2,Emergency Level 2 Scroll,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ unitskilluseid getcharid(3),"GD_ITEMEMERGENCYCALL",2; },{},{} +12970,Emergency_Scroll3,Emergency Level 3 Scroll,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ unitskilluseid getcharid(3),"GD_ITEMEMERGENCYCALL",3; },{},{} 12971,Teleport_Box1,Teleport Scroll Box 1,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12977,10; },{},{} 12972,Teleport_Box2,Teleport Scroll Box 2,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12978,10; },{},{} 12973,Teleport_Box3,Teleport Scroll Box 3,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 12979,10; },{},{} diff --git a/db/pre-re/skill_cast_db.txt b/db/pre-re/skill_cast_db.txt index 725757ea7f..683af14e28 100644 --- a/db/pre-re/skill_cast_db.txt +++ b/db/pre-re/skill_cast_db.txt @@ -1915,4 +1915,6 @@ 10012,10000,0,0,0,300000,0 //-- GD_EMERGENCYCALL 10013,5000,0,0,0,300000,0 +//-- GD_ITEMEMERGENCYCALL +10015,0,0,0,0,300000,0 //========================================== diff --git a/db/pre-re/skill_castnodex_db.txt b/db/pre-re/skill_castnodex_db.txt index 3c5e9166ea..91917968e3 100644 --- a/db/pre-re/skill_castnodex_db.txt +++ b/db/pre-re/skill_castnodex_db.txt @@ -40,11 +40,6 @@ 2536,7,7 //ALL_GUARDIAN_RECALL 2537,0,7 //ALL_ODINS_POWER -10010,3 //GD_BATTLEORDER -10011,3 //GD_REGENERATION -10012,6 //GD_RESTORE -10013,7 //GD_EMERGENCYCALL - // Mercenary Skills 8214,7 //MA_CHARGEARROW 8215,7 //MA_SHARPSHOOTING @@ -57,3 +52,9 @@ 8235,7 //MER_SCAPEGOAT 8238,7 //MER_KYRIE 8240,7 //MER_INCAGI + +// Guild Skills +10010,3 //GD_BATTLEORDER +10011,3 //GD_REGENERATION +10012,6 //GD_RESTORE +10013,7 //GD_EMERGENCYCALL diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index 0a9606f344..ad00776857 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -1194,6 +1194,7 @@ 8441,5,6,1,2,0,1,1,1,no,0,0,0,magic,0,0x0, EL_ROCK_CRUSHER_ATK,Rock Launcher Attack 8442,9,6,1,2,0,1,1,-5,no,0,0,0,weapon,0,0x0, EL_STONE_RAIN,Stone Rain +//Guild Skills 10000,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0,0x0, GD_APPROVAL,Official Guild Approval 10001,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0,0x0, GD_KAFRACONTRACT,Kafra Contract 10002,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0,0x0, GD_GUARDRESEARCH,Guardian Research @@ -1209,4 +1210,4 @@ 10012,0,0,4,0,0x3,15,1,0,yes,0,0x10,0,none,0,0x0, GD_RESTORE,Restoration 10013,0,0,4,0,0x3,0,1,0,yes,0,0x10,0,none,0,0x0, GD_EMERGENCYCALL,Urgent Call 10014,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0,0x0, GD_DEVELOPMENT,Permanent Development -//10015,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0,0x0, GD_ITEMEMERGENCYCALL,Unknown Skill +10015,0,0,4,0,0x3,0,3,0,yes,0,0x10,0,none,0,0x0, GD_ITEMEMERGENCYCALL,Item Emergency Call diff --git a/db/pre-re/skill_require_db.txt b/db/pre-re/skill_require_db.txt index a0a5e7dd94..bb29f3d7bd 100644 --- a/db/pre-re/skill_require_db.txt +++ b/db/pre-re/skill_require_db.txt @@ -820,11 +820,6 @@ 3027,0,0,55:60:65:70:75 ,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //OB_OBOROGENSOU#Oboro Gensou# 3029,0,0,20:30:40:50:60,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //OB_AKAITSUKI#Akaitsuki# -10010,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_BATTLEORDER## -10011,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_REGENERATION## -10012,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_RESTORE## -10013,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_EMERGENCYCALL## - 8001,0,0,13:16:19:22:25,0,0,0,99,0,0,none,0,545,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //HLIF_HEAL 8002,0,0,20:25:30:35:40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //HLIF_AVOID 8004,0,0,100,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //HLIF_CHANGE @@ -949,3 +944,9 @@ 8440,0,0,60,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //EL_ROCK_CRUSHER#Rock Launcher# 8441,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //EL_ROCK_CRUSHER_ATK#Rock Launcher Attack# 8442,0,0,80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //EL_STONE_RAIN#Stone Rain# + +// Guild Skills +10010,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_BATTLEORDER## +10011,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_REGENERATION## +10012,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_RESTORE## +10013,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_EMERGENCYCALL## diff --git a/db/re/item_db.txt b/db/re/item_db.txt index e305272758..de30528e42 100644 --- a/db/re/item_db.txt +++ b/db/re/item_db.txt @@ -6243,9 +6243,9 @@ 12965,Emergency_Box1,Emergency Level 1 Scroll Box,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12968,1; },{},{} 12966,Emergency_Box2,Emergency Level 2 Scroll Box,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12969,1; },{},{} 12967,Emergency_Box3,Emergency Level 3 Scroll Box,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12970,1; },{},{} -12968,Emergency_Scroll1,Emergency Level 1 Scroll,11,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "GD_EMERGENCYCALL",1; },{},{} -12969,Emergency_Scroll2,Emergency Level 2 Scroll,11,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "GD_EMERGENCYCALL",1; },{},{} -12970,Emergency_Scroll3,Emergency Level 3 Scroll,11,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "GD_EMERGENCYCALL",1; },{},{} +12968,Emergency_Scroll1,Emergency Level 1 Scroll,11,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ unitskilluseid getcharid(3),"GD_ITEMEMERGENCYCALL",1; },{},{} +12969,Emergency_Scroll2,Emergency Level 2 Scroll,11,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ unitskilluseid getcharid(3),"GD_ITEMEMERGENCYCALL",2; },{},{} +12970,Emergency_Scroll3,Emergency Level 3 Scroll,11,2,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ unitskilluseid getcharid(3),"GD_ITEMEMERGENCYCALL",3; },{},{} 12971,Teleport_Box1,Teleport Scroll Box 1,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12977,10; },{},{} 12972,Teleport_Box2,Teleport Scroll Box 2,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12978,10; },{},{} 12973,Teleport_Box3,Teleport Scroll Box 3,18,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12979,10; },{},{} diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt index eae2a9a81c..1cece0589d 100644 --- a/db/re/skill_cast_db.txt +++ b/db/re/skill_cast_db.txt @@ -1924,4 +1924,6 @@ 10012,10000,0,0,0,300000,0,0 //-- GD_EMERGENCYCALL 10013,5000,0,0,0,300000,0,0 +//-- GD_ITEMEMERGENCYCALL +10015,0,0,0,0,300000,0,-1 //========================================== diff --git a/db/re/skill_castnodex_db.txt b/db/re/skill_castnodex_db.txt index c01f0c4336..07c756bd5c 100644 --- a/db/re/skill_castnodex_db.txt +++ b/db/re/skill_castnodex_db.txt @@ -41,11 +41,6 @@ 2537,0,7 //ALL_ODINS_POWER 3035,7,7 //ECLAGE_RECALL -10010,3 //GD_BATTLEORDER -10011,3 //GD_REGENERATION -10012,6 //GD_RESTORE -10013,7 //GD_EMERGENCYCALL - // Mercenary Skills 8214,7 //MA_CHARGEARROW 8215,7 //MA_SHARPSHOOTING @@ -58,3 +53,9 @@ 8235,7 //MER_SCAPEGOAT 8238,7 //MER_KYRIE 8240,7 //MER_INCAGI + +// Guild Skills +10010,3 //GD_BATTLEORDER +10011,3 //GD_REGENERATION +10012,6 //GD_RESTORE +10013,7 //GD_EMERGENCYCALL diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index 43582719f8..a891d90867 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -1240,6 +1240,7 @@ 8441,5,6,1,2,0,1,1,1,no,0,0,0,magic,0,0x0, EL_ROCK_CRUSHER_ATK,Rock Launcher Attack 8442,9,6,1,2,0,1,1,-5,no,0,0,0,weapon,0,0x0, EL_STONE_RAIN,Stone Rain +//Guild Skills 10000,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0,0x0, GD_APPROVAL,Official Guild Approval 10001,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0,0x0, GD_KAFRACONTRACT,Kafra Contract 10002,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0,0x0, GD_GUARDRESEARCH,Guardian Research @@ -1255,4 +1256,4 @@ 10012,0,0,4,0,0x3,15,1,0,yes,0,0x10,0,none,0,0x0, GD_RESTORE,Restoration 10013,0,0,4,0,0x3,0,1,0,yes,0,0x10,0,none,0,0x0, GD_EMERGENCYCALL,Urgent Call 10014,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0,0x0, GD_DEVELOPMENT,Permanent Development -//10015,0,0,0,0,0,0,1,0,no,0,0x10,0,none,0,0x0, GD_ITEMEMERGENCYCALL,Unknown Skill +10015,0,0,4,0,0x3,0,3,0,yes,0,0x10,0,none,0,0x0, GD_ITEMEMERGENCYCALL,Item Emergency Call diff --git a/db/re/skill_require_db.txt b/db/re/skill_require_db.txt index fa7e8bb942..743f57a57a 100644 --- a/db/re/skill_require_db.txt +++ b/db/re/skill_require_db.txt @@ -989,3 +989,4 @@ 10011,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_REGENERATION## 10012,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_RESTORE## 10013,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_EMERGENCYCALL## +10015,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GD_ITEMEMERGENCYCALL## diff --git a/src/common/mmo.h b/src/common/mmo.h index 5beb5dc0ec..57730b3424 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -569,7 +569,7 @@ enum { //Change Member Infos GMI_LEVEL, }; -enum { +enum e_guild_skill { GD_SKILLBASE=10000, GD_APPROVAL=10000, GD_KAFRACONTRACT=10001, @@ -586,6 +586,7 @@ enum { GD_RESTORE=10012, GD_EMERGENCYCALL=10013, GD_DEVELOPMENT=10014, + GD_ITEMEMERGENCYCALL=10015, GD_MAX, }; diff --git a/src/map/battle.c b/src/map/battle.c index 0cb2a8338c..81d3f00690 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -6537,7 +6537,7 @@ static const struct _battle_data { { "chase_range_rate", &battle_config.chase_range_rate, 100, 0, INT_MAX, }, { "gtb_sc_immunity", &battle_config.gtb_sc_immunity, 50, 0, INT_MAX, }, { "guild_max_castles", &battle_config.guild_max_castles, 0, 0, INT_MAX, }, - { "guild_skill_relog_delay", &battle_config.guild_skill_relog_delay, 0, 0, 1, }, + { "guild_skill_relog_delay", &battle_config.guild_skill_relog_delay, 300000, 0, INT_MAX, }, { "emergency_call", &battle_config.emergency_call, 11, 0, 31, }, { "atcommand_spawn_quantity_limit", &battle_config.atc_spawn_quantity_limit, 100, 0, INT_MAX, }, { "atcommand_slave_clone_limit", &battle_config.atc_slave_clone_limit, 25, 0, INT_MAX, }, diff --git a/src/map/guild.c b/src/map/guild.c index 890fdbff38..a0a86b3e82 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -515,7 +515,7 @@ int guild_recv_info(struct guild *sg) //If the guild master is online the first time the guild_info is received, //that means he was the first to join, so apply guild skill blocking here. if( battle_config.guild_skill_relog_delay ) - guild_block_skill(sd, 300000); + guild_block_skill(sd, battle_config.guild_skill_relog_delay); //Also set the guild master flag. sd->guild = g; @@ -720,7 +720,7 @@ void guild_member_joined(struct map_session_data *sd) sd->state.gmaster_flag = g; // prevent Guild Skills from being used directly after relog if( battle_config.guild_skill_relog_delay ) - guild_block_skill(sd, 300000); + guild_block_skill(sd, battle_config.guild_skill_relog_delay); } i = guild_getindex(g, sd->status.account_id, sd->status.char_id); if (i == -1) @@ -1818,8 +1818,9 @@ int guild_gm_changed(int guild_id, int account_id, int char_id) if (g->member[0].sd && g->member[0].sd->fd) { clif_displaymessage(g->member[0].sd->fd, msg_txt(g->member[pos].sd,679)); //"You have become the Guild Master!" g->member[0].sd->state.gmaster_flag = g; - //Block his skills for 5 minutes to prevent abuse. - guild_block_skill(g->member[0].sd, 300000); + //Block his skills to prevent abuse. + if (battle_config.guild_skill_relog_delay) + guild_block_skill(g->member[0].sd, battle_config.guild_skill_relog_delay); } // announce the change to all guild members @@ -2144,7 +2145,6 @@ void guild_flag_remove(struct npc_data *nd) { cursor++; } - } /** diff --git a/src/map/skill.c b/src/map/skill.c index 385bbcf4cf..4791c14b50 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -613,6 +613,7 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd) } break; case GD_EMERGENCYCALL: + case GD_ITEMEMERGENCYCALL: if ( !(battle_config.emergency_call&((agit_flag || agit2_flag)?2:1)) || !(battle_config.emergency_call&(map[m].flag.gvg || map[m].flag.gvg_castle?8:4)) || @@ -7498,24 +7499,36 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } break; case GD_EMERGENCYCALL: + case GD_ITEMEMERGENCYCALL: { - int dx[9]={-1, 1, 0, 0,-1, 1,-1, 1, 0}; - int dy[9]={ 0, 0, 1,-1, 1,-1,-1, 1, 0}; - int j = 0; + int8 dx[9] = {-1, 1, 0, 0,-1, 1,-1, 1, 0}; + int8 dy[9] = { 0, 0, 1,-1, 1,-1,-1, 1, 0}; + uint8 j = 0, calls = 0, called = 0; struct guild *g; // i don't know if it actually summons in a circle, but oh well. ;P g = sd?sd->state.gmaster_flag:guild_search(status_get_guild_id(src)); if (!g) break; + + if (skill_id == GD_ITEMEMERGENCYCALL) + switch (skill_lv) { + case 1: calls = 7; break; + case 2: calls = 12; break; + case 3: calls = 20; break; + default: calls = 0; break; + } + clif_skill_nodamage(src,bl,skill_id,skill_lv,1); - for(i = 0; i < g->max_member; i++, j++) { - if (j>8) j=0; + for (i = 0; i < g->max_member && (!calls || (calls && called < calls)); i++, j++) { + if (j > 8) + j = 0; if ((dstsd = g->member[i].sd) != NULL && sd != dstsd && !dstsd->state.autotrade && !pc_isdead(dstsd)) { if (map[dstsd->bl.m].flag.nowarp && !map_flag_gvg2(dstsd->bl.m)) continue; if(map_getcell(src->m,src->x+dx[j],src->y+dy[j],CELL_CHKNOREACH)) dx[j] = dy[j] = 0; pc_setpos(dstsd, map_id2index(src->m), src->x+dx[j], src->y+dy[j], CLR_RESPAWN); + called++; } } if (sd) @@ -13165,6 +13178,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id return 0; } case GD_EMERGENCYCALL: + case GD_ITEMEMERGENCYCALL: // other checks were already done in skillnotok() if (!sd->status.guild_id || !sd->state.gmaster_flag) return 0; @@ -17897,7 +17911,7 @@ int skill_block_check(struct block_list *bl, sc_type type , uint16 skill_id) { switch(skill_id){ case TF_HIDING: case AS_CLOAKING: case GC_CLOAKINGEXCEED: case SC_SHADOWFORM: case MI_HARMONIZE: case CG_MARIONETTE: case AL_TELEPORT: case TF_BACKSLIDING: - case RA_CAMOUFLAGE: case ST_CHASEWALK: case GD_EMERGENCYCALL: + case RA_CAMOUFLAGE: case ST_CHASEWALK: case GD_EMERGENCYCALL: case GD_ITEMEMERGENCYCALL: return 1; // needs more info } break;