Browse Source

- Adjusted skill_castfix_sc so that Suffragium will get consumed even on instant cast skills, but Memorize won't.
- Adjusted map_countoncell to receive the BL_* defines currently used instead of 0 to signal all.
- BladeStop will now end when either of the characters is moved (knocked out?) around.
- Moved the Zeny penalty code from respawn to pc_dead.


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

skotlex 19 years ago
parent
commit
7100c9aa21
4 changed files with 24 additions and 20 deletions
  1. 5 0
      Changelog-Trunk.txt
  2. 6 5
      src/map/map.c
  3. 7 11
      src/map/pc.c
  4. 6 4
      src/map/skill.c

+ 5 - 0
Changelog-Trunk.txt

@@ -4,6 +4,11 @@ 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.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 
 2006/07/24
 2006/07/24
+	* Adjusted skill_castfix_sc so that Suffragium will get consumed even on
+	  instant cast skills, but Memorize won't. [Skotlex]
+	* BladeStop will now end when either of the characters is moved (knocked
+	  out?) around. [Skotlex]
+	* Moved the Zeny penalty code from respawn to pc_dead. [Skotlex]
 	* Added a check to prevent Deluge/Volcano/Violent Gale from being placed on
 	* Added a check to prevent Deluge/Volcano/Violent Gale from being placed on
 	  top of each other. Reverted the previous 'fix' where atk was being
 	  top of each other. Reverted the previous 'fix' where atk was being
 	  increased based on armor element rather than element of attack. [Skotlex]
 	  increased based on armor element rather than element of attack. [Skotlex]

+ 6 - 5
src/map/map.c

@@ -498,6 +498,8 @@ int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick) {
 				status_change_end(bl, SC_CLOSECONFINE, -1);
 				status_change_end(bl, SC_CLOSECONFINE, -1);
 			if (sc->data[SC_CLOSECONFINE2].timer != -1)
 			if (sc->data[SC_CLOSECONFINE2].timer != -1)
 				status_change_end(bl, SC_CLOSECONFINE2, -1);
 				status_change_end(bl, SC_CLOSECONFINE2, -1);
+			if (sc->data[SC_BLADESTOP].timer != -1)
+				status_change_end(bl, SC_BLADESTOP, -1);
 		}
 		}
 	}
 	}
 	if (moveblock) map_delblock_sub(bl,0);
 	if (moveblock) map_delblock_sub(bl,0);
@@ -575,21 +577,20 @@ int map_count_oncell(int m, int x, int y, int type) {
 	bx = x/BLOCK_SIZE;
 	bx = x/BLOCK_SIZE;
 	by = y/BLOCK_SIZE;
 	by = y/BLOCK_SIZE;
 
 
-	if (type == 0 || type != BL_MOB)
+	if (type&~BL_MOB)
 	{
 	{
 		bl = map[m].block[bx+by*map[m].bxs];
 		bl = map[m].block[bx+by*map[m].bxs];
 		c = map[m].block_count[bx+by*map[m].bxs];
 		c = map[m].block_count[bx+by*map[m].bxs];
 		for(i=0;i<c && bl;i++,bl=bl->next)
 		for(i=0;i<c && bl;i++,bl=bl->next)
-			if(bl->x == x && bl->y == y && bl->type == (type?type:BL_PC)) count++;
+			if(bl->x == x && bl->y == y && bl->type&type) count++;
 	}
 	}
 	
 	
-	if (type == 0 || type == BL_MOB)
+	if (type&BL_MOB)
 	{
 	{
 		bl = map[m].block_mob[bx+by*map[m].bxs];
 		bl = map[m].block_mob[bx+by*map[m].bxs];
 		c = map[m].block_mob_count[bx+by*map[m].bxs];
 		c = map[m].block_mob_count[bx+by*map[m].bxs];
-		for(i=0;i<c && bl;i++,bl=bl->next){
+		for(i=0;i<c && bl;i++,bl=bl->next)
 			if(bl->x == x && bl->y == y) count++;
 			if(bl->x == x && bl->y == y) count++;
-		}
 	}
 	}
 	return count;
 	return count;
 }
 }

+ 7 - 11
src/map/pc.c

@@ -297,16 +297,6 @@ int pc_setrestartvalue(struct map_session_data *sd,int type) {
 	}
 	}
 	/* removed exp penalty on spawn [Valaris] */
 	/* removed exp penalty on spawn [Valaris] */
 
 
-	if(type&2 && (sd->class_&MAPID_UPPERMASK) != MAPID_NOVICE && battle_config.zeny_penalty > 0 && !map[sd->bl.m].flag.nozenypenalty) {
-		int zeny = (int)((double)sd->status.zeny * (double)battle_config.zeny_penalty / 10000.);
-		if(zeny < 1) zeny = 1;
-		if (sd->status.zeny > zeny)
-			sd->status.zeny -= zeny;
-		else
-			sd->status.zeny = 0;
-		clif_updatestatus(sd,SP_ZENY);
-	}
-
 	return 0;
 	return 0;
 }
 }
 
 
@@ -4902,7 +4892,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
 		if (battle_config.death_penalty_base > 0) {
 		if (battle_config.death_penalty_base > 0) {
 			switch (battle_config.death_penalty_type) {
 			switch (battle_config.death_penalty_type) {
 				case 1:
 				case 1:
-					base_penalty += (unsigned int) ((double)pc_nextbaseexp(sd) * (double)battle_config.death_penalty_base/10000);
+					base_penalty = (unsigned int) ((double)pc_nextbaseexp(sd) * (double)battle_config.death_penalty_base/10000);
 				break;
 				break;
 				case 2:
 				case 2:
 					base_penalty = (unsigned int) ((double)sd->status.base_exp * (double)battle_config.death_penalty_base/10000);
 					base_penalty = (unsigned int) ((double)sd->status.base_exp * (double)battle_config.death_penalty_base/10000);
@@ -4939,6 +4929,12 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
 				clif_updatestatus(sd,SP_JOBEXP);
 				clif_updatestatus(sd,SP_JOBEXP);
 			}
 			}
 		}
 		}
+		if(battle_config.zeny_penalty > 0 && !map[sd->bl.m].flag.nozenypenalty)
+	  	{
+			base_penalty = (unsigned int)((double)sd->status.zeny * (double)battle_config.zeny_penalty / 10000.);
+			if(base_penalty)
+				pc_payzeny(sd, base_penalty);
+		}
 	}
 	}
 
 
 	if(map[sd->bl.m].flag.pvp_nightmaredrop){ // Moved this outside so it works when PVP isnt enabled and during pk mode [Ancyker]
 	if(map[sd->bl.m].flag.pvp_nightmaredrop){ // Moved this outside so it works when PVP isnt enabled and during pk mode [Ancyker]

+ 6 - 4
src/map/skill.c

@@ -7053,7 +7053,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
 		
 		
 		// GXは重なっていたら3HITしない
 		// GXは重なっていたら3HITしない
 		if ((skillid==CR_GRANDCROSS || skillid==NPC_GRANDDARKNESS) && !battle_config.gx_allhit)
 		if ((skillid==CR_GRANDCROSS || skillid==NPC_GRANDDARKNESS) && !battle_config.gx_allhit)
-			ts->tick += sg->interval*(map_count_oncell(bl->m,bl->x,bl->y,0)-1);
+			ts->tick += sg->interval*(map_count_oncell(bl->m,bl->x,bl->y,BL_CHAR)-1);
 	}
 	}
 	//Temporarily set magic power to have it take effect. [Skotlex]
 	//Temporarily set magic power to have it take effect. [Skotlex]
 	if (sg->state.magic_power && sc && sc->data[SC_MAGICPOWER].timer == -1)
 	if (sg->state.magic_power && sc && sc->data[SC_MAGICPOWER].timer == -1)
@@ -8582,14 +8582,16 @@ int skill_castfix_sc (struct block_list *bl, int time)
 {
 {
 	struct status_change *sc = status_get_sc(bl);
 	struct status_change *sc = status_get_sc(bl);
 
 
-//	if (time <= 0) return 0; //Reports say that Suffragium should be consumed even on instant cast skills [Skotlex]
-	
 	if (sc && sc->count) {
 	if (sc && sc->count) {
 		if (sc->data[SC_SUFFRAGIUM].timer != -1) {
 		if (sc->data[SC_SUFFRAGIUM].timer != -1) {
 			time -= time * (sc->data[SC_SUFFRAGIUM].val1 * 15) / 100;
 			time -= time * (sc->data[SC_SUFFRAGIUM].val1 * 15) / 100;
 			status_change_end(bl, SC_SUFFRAGIUM, -1);
 			status_change_end(bl, SC_SUFFRAGIUM, -1);
 		}
 		}
-		if (sc->data[SC_MEMORIZE].timer != -1) {
+
+		if (time <= 0)
+			return 0; //Only Suffragium gets consumed even if time is 0
+	
+		if (sc->data[SC_MEMORIZE].timer != -1 && time > 0) {
 			time>>=1;
 			time>>=1;
 			if ((--sc->data[SC_MEMORIZE].val2) <= 0)
 			if ((--sc->data[SC_MEMORIZE].val2) <= 0)
 				status_change_end(bl, SC_MEMORIZE, -1);
 				status_change_end(bl, SC_MEMORIZE, -1);