Pārlūkot izejas kodu

- Fixed a possible crash due to the recent core.c upgrade.
- Changing setting the Guild Master from pc_authok to clif_parse_LoadEndAck so that it will not fail to set the gmaster flag when the first person of a guild to log on is the guild master.


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9347 54d463be-8e91-2dee-dedb-b68131a5f0ec

skotlex 18 gadi atpakaļ
vecāks
revīzija
9692efa6f0
5 mainītis faili ar 22 papildinājumiem un 20 dzēšanām
  1. 3 0
      Changelog-Trunk.txt
  2. 7 3
      src/common/core.c
  3. 10 0
      src/map/clif.c
  4. 2 15
      src/map/pc.c
  5. 0 2
      src/map/skill.c

+ 3 - 0
Changelog-Trunk.txt

@@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2006/11/28
+	* Changing setting the Guild Master from pc_authok to clif_parse_LoadEndAck
+	  so that it will not fail to set the gmaster flag when the first person of a
+	  guild to log on is the guild master. [Skotlex]
 	* Modified the way Storm Gust freeze's counter works. Now it checks for the
 	  caster of the Storm Gust, if it's the same as the previous hit, the counter
 	  is increased, otherwise, the ID is updated and the counter is changed to 1.

+ 7 - 3
src/common/core.c

@@ -227,9 +227,13 @@ int main (int argc, char **argv)
 
 	// initialise program arguments
 	{
-		char *p = SERVER_NAME = argv[0];
-		while ((p = strchr(p, '/')) != NULL || (p = strchr(p, '\\')) != NULL)
-			SERVER_NAME = ++p;
+		char *p1 = SERVER_NAME = argv[0];
+		char *p2 = p1;
+		while ((p1 = strchr(p2, '/')) != NULL || (p1 = strchr(p2, '\\')) != NULL)
+		{
+			SERVER_NAME = ++p1;
+			p2 = p1;
+		}
 		arg_c = argc;
 		arg_v = argv;
 		#ifndef SVNVERSION

+ 10 - 0
src/map/clif.c

@@ -8376,6 +8376,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
 
 	if(sd->state.connect_new) {
 		int lv;
+		struct guild *g;
 		sd->state.connect_new = 0;
 		clif_skillinfoblock(sd);
 		clif_updatestatus(sd,SP_NEXTBASEEXP);
@@ -8405,6 +8406,15 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
 		if(sd->hd)
 			merc_hom_init_timers(sd->hd);
 
+		if (sd->status.guild_id > 0 && !sd->state.gmaster_flag &&
+			(g=guild_search(sd->status.guild_id)) &&
+			strcmp(sd->status.name,g->master) == 0)
+		{	//Block Guild Skills to prevent logout/login reuse exploiting. [Skotlex]
+			guild_block_skill(sd, 300000);
+			//Also set the Guild Master flag.
+			sd->state.gmaster_flag = g;
+		}
+
 		//Delayed night effect on log-on fix for the glow-issue. Thanks to Larry.
 		if (night_flag && map[sd->bl.m].flag.nightenabled)
 			add_timer(gettick()+1000,clif_nighttimer,sd->bl.id,0);

+ 2 - 15
src/map/pc.c

@@ -565,7 +565,6 @@ int pc_isequip(struct map_session_data *sd,int n)
  */
 int pc_authok(struct map_session_data *sd, int login_id2, time_t connect_until_time, struct mmo_charstatus *st)
 {
-	struct guild *g;
 	int i;
 	unsigned long tick = gettick();
 
@@ -670,22 +669,10 @@ int pc_authok(struct map_session_data *sd, int login_id2, time_t connect_until_t
 	if (sd->status.hom_id > 0)	
 		intif_homunculus_requestload(sd->status.account_id, sd->status.hom_id);
 
-	// パ?ティ、ギルドデ?タの要求
 	if (sd->status.party_id > 0 && party_search(sd->status.party_id) == NULL)
 		party_request_info(sd->status.party_id);
-	if (sd->status.guild_id > 0)
-	{
-		if ((g = guild_search(sd->status.guild_id)) == NULL)
-			guild_request_info(sd->status.guild_id);
-		else if (strcmp(sd->status.name,g->master) == 0)
-		{	//Block Guild Skills to prevent logout/login reuse exploiting. [Skotlex]
-			guild_block_skill(sd, 300000);
-			//Also set the Guild Master flag.
-			sd->state.gmaster_flag = g;
-		}
-	}
-
-	// 通知
+	if (sd->status.guild_id > 0 && guild_search(sd->status.guild_id) == NULL)
+		guild_request_info(sd->status.guild_id);
 
 	clif_authok(sd);
 	map_addiddb(&sd->bl);

+ 0 - 2
src/map/skill.c

@@ -8355,8 +8355,6 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
 	case GD_EMERGENCYCALL:
 		if (!sd->status.guild_id || !sd->state.gmaster_flag)
 			return 0;
-		if (lv <= 0)
-			return 0;
 		break;
 
 	case GS_GLITTERING: