Browse Source

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

Cahyadi Ramadhan Togihon 11 years ago
parent
commit
1cf5283dcf

+ 3 - 3
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

+ 6 - 1
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
+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

+ 3 - 3
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; },{},{}

+ 2 - 0
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
 //==========================================

+ 6 - 5
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

+ 2 - 1
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

+ 6 - 5
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##

+ 3 - 3
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; },{},{}

+ 2 - 0
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
 //==========================================

+ 6 - 5
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

+ 2 - 1
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

+ 1 - 0
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##

+ 2 - 1
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,
 };
 

+ 1 - 1
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,        },

+ 5 - 5
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++;
 	}
-
 }
 
 /**

+ 20 - 6
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;