Jelajahi Sumber

-Follow up r17244 r17229 typo on blewcount handler
-Follow up r17242 upd Cmakefile for cmake build
-Apply Baalberith fix for chan system leaks, thx =)

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

glighta 12 tahun lalu
induk
melakukan
53d1292de4
4 mengubah file dengan 37 tambahan dan 36 penghapusan
  1. 5 27
      src/map/map.c
  2. 4 8
      src/map/skill.c
  3. 2 0
      src/map/sql/CMakeLists.txt
  4. 26 1
      src/map/unit.c

+ 5 - 27
src/map/map.c

@@ -1699,32 +1699,7 @@ int map_quit(struct map_session_data *sd) {
 		elemental_clean_effect(sd->ed);
 		unit_remove_map(&sd->ed->bl,CLR_TELEPORT);
 	}
-
-	if( raChSys.ally && sd->status.guild_id ) {
-		struct guild *g = sd->guild, *sg;
-		if( g ) {
-			if( idb_exists(((struct raChSysCh *)g->channel)->users, sd->status.char_id) )
-				clif_chsys_left((struct raChSysCh *)g->channel,sd);
-			for (i = 0; i < MAX_GUILDALLIANCE; i++) {
-				if( g->alliance[i].guild_id && (sg = guild_search(g->alliance[i].guild_id) ) ) {
-					if( idb_exists(((struct raChSysCh *)sg->channel)->users, sd->status.char_id) )
-						clif_chsys_left((struct raChSysCh *)sg->channel,sd);
-					break;
-				}
-			}
-		}
-	}
-
-	if( sd->channel_count ) {
-		uint8 ch_count = sd->channel_count;
-		for( i = 0; i < ch_count; i++ ) {
-			if( sd->channels[i] != NULL )
-				clif_chsys_left(sd->channels[i],sd);
-		}
-		if( raChSys.closing )
-			aFree(sd->channels);
-	}
-
+	
 	unit_remove_map_pc(sd,CLR_TELEPORT);
 
 	if( map[sd->bl.m].instance_id ) { // Avoid map conflicts and warnings on next login
@@ -3593,8 +3568,11 @@ void do_final(void)
 	// remove all objects on maps
 	for (i = 0; i < map_num; i++) {
 		ShowStatus("Cleaning up maps [%d/%d]: %s..."CL_CLL"\r", i+1, map_num, map[i].name);
-		if (map[i].m >= 0)
+		if (map[i].m >= 0) {
 			map_foreachinmap(cleanup_sub, i, BL_ALL);
+			if( map[i].channel != NULL )
+				clif_chsys_delete((struct raChSysCh *)map[i].channel);
+		}
 	}
 	ShowStatus("Cleaned up %d maps."CL_CLL"\n", map_num);
 

+ 4 - 8
src/map/skill.c

@@ -2470,8 +2470,8 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
 		if(rnd()%100 > (1 + skill_lv) ) dmg.blewcount = 0;
 		break;
 	default:
-		if(damage < dmg.div_ && skill_lv != CH_PALMSTRIKE)
-			dmg.blewcount = 0; //only pushback when it hit
+		if(damage < dmg.div_ && skill_id != CH_PALMSTRIKE)
+			dmg.blewcount = 0; //only pushback when it hit for other
 		break;
 	}
 	switch(skill_id){
@@ -3374,10 +3374,6 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
 							( sc && sc->option&OPTION_HIDE ) ){
 							skill_blown(src,target,skill_get_blewcount(skl->skill_id, skl->skill_lv), -1, 0x0 );
 							break;
-						} else if( tsc && tsc->data[SC_SAFETYWALL] ){
-							skill_attack(skl->type,src,src,target,skl->skill_id,skl->skill_lv,tick,skl->flag);
-							skill_blown(src,target,skill_get_blewcount(skl->skill_id, skl->skill_lv), -1, 0x0 );
-							break;
 						}
 					}
 				default:
@@ -12330,7 +12326,7 @@ static int skill_unit_effect (struct block_list* bl, va_list ap)
 			skill_unit_onout(unit,bl,tick);
 
 		if( flag&4 )
-	  		skill_unit_onleft(skill_id, bl, tick);
+			skill_unit_onleft(skill_id, bl, tick);
 	}else if( !isTarget && flag&4 && ( group->state.song_dance&0x1 || ( group->src_id == bl->id && group->state.song_dance&0x2 ) ) ){
 		skill_unit_onleft(skill_id, bl, tick);//Ensemble check to terminate it.
 	}
@@ -15935,7 +15931,7 @@ int skill_unit_move (struct block_list *bl, unsigned int tick, int flag) {
 		for( i = 0; i < ARRAYLENGTH(skill_unit_temp); i++ )
 			if( skill_unit_temp[i] )
 				skill_unit_onleft(skill_unit_temp[i], bl, tick);
-	}
+			}
 
 	return 0;
 }

+ 2 - 0
src/map/sql/CMakeLists.txt

@@ -41,6 +41,7 @@ set( SQL_MAP_HEADERS
 	"${SQL_MAP_SOURCE_DIR}/trade.h"
 	"${SQL_MAP_SOURCE_DIR}/unit.h"
 	"${SQL_MAP_SOURCE_DIR}/vending.h"
+	"${SQL_MAP_SOURCE_DIR}/cashshop.h"
 	)
 set( SQL_MAP_SOURCES
 	"${SQL_MAP_SOURCE_DIR}/atcommand.c"
@@ -80,6 +81,7 @@ set( SQL_MAP_SOURCES
 	"${SQL_MAP_SOURCE_DIR}/trade.c"
 	"${SQL_MAP_SOURCE_DIR}/unit.c"
 	"${SQL_MAP_SOURCE_DIR}/vending.c"
+	"${SQL_MAP_SOURCE_DIR}/cashshop.c"
 	)
 set( DEPENDENCIES common_sql )
 set( LIBRARIES ${GLOBAL_LIBRARIES} )

+ 26 - 1
src/map/unit.c

@@ -334,7 +334,7 @@ int unit_walktoxy( struct block_list *bl, short x, short y, int flag)
 
 	if (flag&4 && DIFF_TICK(ud->canmove_tick, gettick()) > 0 &&
 		DIFF_TICK(ud->canmove_tick, gettick()) < 2000)
-  	{	// Delay walking command. [Skotlex]
+	{	// Delay walking command. [Skotlex]
 		add_timer(ud->canmove_tick+1, unit_delay_walktoxy_timer, bl->id, (x<<16)|(y&0xFFFF));
 		return 1;
 	}
@@ -2293,6 +2293,31 @@ int unit_free(struct block_list *bl, clr_type clrtype)
 			if( sd->duel_invite > 0 )
 				duel_reject(sd->duel_invite, sd);
 
+			if( raChSys.ally && sd->status.guild_id ) {
+				struct guild *g = sd->guild, *sg;
+				if( g ) {
+					if( idb_exists(((struct raChSysCh *)g->channel)->users, sd->status.char_id) )
+						clif_chsys_left((struct raChSysCh *)g->channel,sd);
+					for (i = 0; i < MAX_GUILDALLIANCE; i++) {
+						if( g->alliance[i].guild_id && (sg = guild_search(g->alliance[i].guild_id) ) ) {
+							if( idb_exists(((struct raChSysCh *)sg->channel)->users, sd->status.char_id) )
+								clif_chsys_left((struct raChSysCh *)sg->channel,sd);
+							break;
+						}
+					}
+				}
+			}
+
+			if( sd->channel_count ) {
+				uint8 ch_count = sd->channel_count;
+				for( i = 0; i < ch_count; i++ ) {
+					if( sd->channels[i] != NULL )
+						clif_chsys_left(sd->channels[i],sd);
+				}
+				if( raChSys.closing )
+					aFree(sd->channels);
+			}
+
 			// Notify friends that this char logged out. [Skotlex]
 			map_foreachpc(clif_friendslist_toggle_sub, sd->status.account_id, sd->status.char_id, 0);
 			party_send_logout(sd);