Jelajahi Sumber

- Updated some Guild WoE rules to behave as explained here: http://www.eathena.ws/board/index.php?showtopic=146581
- Removed the nosave mapflags from the Guild Castles, as per the previously linked topic.
- Added some missing map_freeblock_lock calls to castend_pos and castend_id functions to prevent (rather unlikely) dangling pointer crashes.
- Improved the debug message when the npc_scriptcont npc IDs don't match.


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

skotlex 18 tahun lalu
induk
melakukan
4d2c2543b6
6 mengubah file dengan 42 tambahan dan 37 penghapusan
  1. 3 1
      Changelog-Trunk.txt
  2. 3 0
      conf-tmpl/Changelog.txt
  3. 24 24
      conf-tmpl/mapflag/nosave.txt
  4. 3 8
      src/map/guild.c
  5. 3 4
      src/map/npc.c
  6. 6 0
      src/map/skill.c

+ 3 - 1
Changelog-Trunk.txt

@@ -3,7 +3,9 @@ Date	Added
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
-
+2007/04/09
+	* Updated some Guild WoE rules to behave as explained here:
+	  http://www.eathena.ws/board/index.php?showtopic=146581 [Skotlex]
 2007/04/08
 	* Fixed the platform-specific stricmp compilation problem
 	* Fixed inverted vending tax equation (!) and made it more precise

+ 3 - 0
conf-tmpl/Changelog.txt

@@ -1,5 +1,8 @@
 Date	Added
 
+2007/04/09
+	* Removed the nosave mapflags from the Guild Castles
+	  (http://www.eathena.ws/board/index.php?showtopic=146581) [Skotlex]
 2007/04/03
 	* Added hom_setting&0x40, when set it clears the "can't reuse" skill delay
 	  when you vaporize a homunculus (set by default). [Skotlex]

+ 24 - 24
conf-tmpl/mapflag/nosave.txt

@@ -150,30 +150,30 @@ pvp_n_8-5	mapflag	nosave	SavePoint
 pvp_2vs2	mapflag	nosave	SavePoint
 
 //WoE Castles =================================
-aldeg_cas01	mapflag	nosave	SavePoint
-aldeg_cas02	mapflag	nosave	SavePoint
-aldeg_cas03	mapflag	nosave	SavePoint
-aldeg_cas04	mapflag	nosave	SavePoint
-aldeg_cas05	mapflag	nosave	SavePoint
-gefg_cas01	mapflag	nosave	SavePoint
-gefg_cas02	mapflag	nosave	SavePoint
-gefg_cas03	mapflag	nosave	SavePoint
-gefg_cas04	mapflag	nosave	SavePoint
-gefg_cas05	mapflag	nosave	SavePoint
-payg_cas01	mapflag	nosave	SavePoint
-payg_cas02	mapflag	nosave	SavePoint
-payg_cas03	mapflag	nosave	SavePoint
-payg_cas04	mapflag	nosave	SavePoint
-payg_cas05	mapflag	nosave	SavePoint
-prtg_cas01	mapflag	nosave	SavePoint
-prtg_cas02	mapflag	nosave	SavePoint
-prtg_cas03	mapflag	nosave	SavePoint
-prtg_cas04	mapflag	nosave	SavePoint
-prtg_cas05	mapflag	nosave	SavePoint
-nguild_alde	mapflag	nosave	SavePoint
-nguild_gef	mapflag	nosave	SavePoint
-nguild_pay	mapflag	nosave	SavePoint
-nguild_prt	mapflag	nosave	SavePoint
+//aldeg_cas01	mapflag	nosave	SavePoint
+//aldeg_cas02	mapflag	nosave	SavePoint
+//aldeg_cas03	mapflag	nosave	SavePoint
+//aldeg_cas04	mapflag	nosave	SavePoint
+//aldeg_cas05	mapflag	nosave	SavePoint
+//gefg_cas01	mapflag	nosave	SavePoint
+//gefg_cas02	mapflag	nosave	SavePoint
+//gefg_cas03	mapflag	nosave	SavePoint
+//gefg_cas04	mapflag	nosave	SavePoint
+//gefg_cas05	mapflag	nosave	SavePoint
+//payg_cas01	mapflag	nosave	SavePoint
+//payg_cas02	mapflag	nosave	SavePoint
+//payg_cas03	mapflag	nosave	SavePoint
+//payg_cas04	mapflag	nosave	SavePoint
+//payg_cas05	mapflag	nosave	SavePoint
+//prtg_cas01	mapflag	nosave	SavePoint
+//prtg_cas02	mapflag	nosave	SavePoint
+//prtg_cas03	mapflag	nosave	SavePoint
+//prtg_cas04	mapflag	nosave	SavePoint
+//prtg_cas05	mapflag	nosave	SavePoint
+//nguild_alde	mapflag	nosave	SavePoint
+//nguild_gef	mapflag	nosave	SavePoint
+//nguild_pay	mapflag	nosave	SavePoint
+//nguild_prt	mapflag	nosave	SavePoint
 
 //Guild Dungeons ==============================
 gld_dun01	mapflag	nosave	SavePoint

+ 3 - 8
src/map/guild.c

@@ -650,7 +650,7 @@ int guild_invite(struct map_session_data *sd,struct map_session_data *tsd)
 	}
 	if(tsd->status.guild_id>0 ||
 		tsd->guild_invite>0 ||
-		map[tsd->bl.m].flag.gvg_castle)
+		(agit_flag && map[tsd->bl.m].flag.gvg_castle))
 	{	//Can't invite people inside castles. [Skotlex]
 		clif_guild_inviteack(sd,0);
 		return 0;
@@ -784,7 +784,7 @@ int guild_leave(struct map_session_data *sd,int guild_id,
 
 	if(sd->status.account_id!=account_id ||
 		sd->status.char_id!=char_id || sd->status.guild_id!=guild_id ||
-		map[sd->bl.m].flag.gvg_castle) //Can't leave inside guild castles.
+		(agit_flag && map[sd->bl.m].flag.gvg_castle))
 		return 0;
 
 	intif_guild_leave(sd->status.guild_id, sd->status.account_id, sd->status.char_id,0,mes);
@@ -814,7 +814,7 @@ int guild_expulsion(struct map_session_data *sd,int guild_id,
   	//Can't leave inside guild castles.
 	if ((tsd = map_id2sd(account_id)) &&
 		tsd->status.char_id == char_id &&
-		map[tsd->bl.m].flag.gvg_castle)
+		(agit_flag && map[tsd->bl.m].flag.gvg_castle))
 		return 0;
 
 	for(i=0;i<g->max_member;i++){	// 所属しているか
@@ -1407,11 +1407,6 @@ int guild_opposition(struct map_session_data *sd,struct map_session_data *tsd)
 		return 0;
 	}
 
-	if(agit_flag)	{
-		clif_displaymessage(sd->fd,"You cannot make oppositions during Guild Wars!");
-		return 0;
-	}
-
 	for(i=0;i<MAX_GUILDALLIANCE;i++){	// すでに関係を持っているか確認
 		if(g->alliance[i].guild_id==tsd->status.guild_id){
 			if(g->alliance[i].opposition==1){	// すでに敵対

+ 3 - 4
src/map/npc.c

@@ -1206,10 +1206,9 @@ int npc_scriptcont(struct map_session_data *sd,int id)
 	if( id != sd->npc_id ){
 		TBL_NPC* nd_sd=(TBL_NPC*)map_id2bl(sd->npc_id);
 		TBL_NPC* nd=(TBL_NPC*)map_id2bl(id);
-		if( nd_sd && nd )
-			ShowWarning("npc_scriptcont: %s (sd->npc_id=%d) is not %s (id=%d).\n", nd_sd->name, sd->npc_id, nd->name, id);
-		else
-			ShowDebug("npc_scriptcont: Invalid npc ID, npc_id variable not cleared? %x (sd->npc_id=%d) is not %x (id=%d)\n", (int)nd_sd, sd->npc_id, (int)nd, id);
+		ShowDebug("npc_scriptcont: %s (sd->npc_id=%d) is not %s (id=%d).\n",
+			nd_sd?nd_sd->name:"'Unknown NPC'", sd->npc_id,
+		  	nd?nd->name:"'Unknown NPC'", id);
 		return 1;
 	}
 	

+ 6 - 0
src/map/skill.c

@@ -5720,6 +5720,8 @@ int skill_castend_id (int tid, unsigned int tick, int id, int data)
 		if(battle_config.skill_log && battle_config.skill_log&src->type)
 			ShowInfo("Type %d, ID %d skill castend id [id =%d, lv=%d, target ID %d)\n",
 				src->type, src->id, ud->skillid, ud->skilllv, target->id);
+
+		map_freeblock_lock();
 		if (skill_get_casttype(ud->skillid) == CAST_NODAMAGE)
 			skill_castend_nodamage_id(src,target,ud->skillid,ud->skilllv,tick,0);
 		else
@@ -5734,6 +5736,7 @@ int skill_castend_id (int tid, unsigned int tick, int id, int data)
 			else ud->skillid = 0; //mobs can't clear this one as it is used for skill condition 'afterskill'
 			ud->skilllv = ud->skilltarget = 0;
 		}
+		map_freeblock_unlock();
 		return 1;
 	} while(0);
 	//Skill failed.
@@ -5875,6 +5878,8 @@ int skill_castend_pos (int tid, unsigned int tick, int id, int data)
 		unit_stop_walking(src,1);
 		ud->canact_tick = tick + skill_delayfix(src, ud->skillid, ud->skilllv);
 		unit_set_walkdelay(src, tick, battle_config.default_skill_delay+skill_get_walkdelay(ud->skillid, ud->skilllv), 1);
+
+		map_freeblock_lock();
 		skill_castend_pos2(src,ud->skillx,ud->skilly,ud->skillid,ud->skilllv,tick,0);
 
 		if (ud->skilltimer == -1) {
@@ -5882,6 +5887,7 @@ int skill_castend_pos (int tid, unsigned int tick, int id, int data)
 			else ud->skillid = 0; //Non mobs can't clear this one as it is used for skill condition 'afterskill'
 			ud->skilllv = ud->skillx = ud->skilly = 0;
 		}
+		map_freeblock_unlock();
 		return 1;
 	} while(0);