Browse Source

- Reloading scripts will no longer eliminate mobs with no respawn data. Watch out for duplicating Treasure Boxes?
- Some cleaning of npc_final
- Made speed_add_rate a linearly stacking increase.
- Corrected a possible overflow when using show_mob_info to display the mob's up as a percent.
- Corrected the documentation for checkoption/checkoption1/checkoption2


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

skotlex 18 years ago
parent
commit
ee19937202
5 changed files with 46 additions and 37 deletions
  1. 8 0
      Changelog-Trunk.txt
  2. 25 22
      doc/script_commands.txt
  3. 5 1
      src/map/clif.c
  4. 7 13
      src/map/npc.c
  5. 1 1
      src/map/pc.c

+ 8 - 0
Changelog-Trunk.txt

@@ -5,6 +5,14 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 
 
 
 2006/09/18
 2006/09/18
+	* @reloadscript scripts will no longer eliminate mobs with no respawn data.
+	  But watch out for possible bugs (I think someone mentioned 1 extra
+	  treasure box will spawn when you use it? This needs testing!) [Skotlex]
+	* Made speed_add_rate a linearly stacking increase. [Skotlex]
+	* Corrected a possible overflow when using show_mob_info to display the
+	  mob's up as a percent. [Skotlex]
+	* Corrected the documentation for checkoption/checkoption1/checkoption2
+	  [Skotlex]
 	* Reenabled client requesting to self mute, as the whole knockback packet
 	* Reenabled client requesting to self mute, as the whole knockback packet
 	  issues of the past which were causing players to mute themselves when being
 	  issues of the past which were causing players to mute themselves when being
 	  knockback is no longer there. [Skotlex]
 	  knockback is no longer there. [Skotlex]

+ 25 - 22
doc/script_commands.txt

@@ -2731,7 +2731,25 @@ it is better to use 'checkcart','checkfalcon','checkpeco' and other similar
 functions, but there are some options which you cannot get at this way. They 
 functions, but there are some options which you cannot get at this way. They 
 return 1 if the option is set and 0 if the option is not set.
 return 1 if the option is set and 0 if the option is not set.
 
 
-Option numbers valid for the first version of this command are:
+Option numbers valid for the first (option) version of this command are:
+
+0x1    - Sight in effect.
+0x2    - Hide in effect.
+0x4    - Cloaking in effect.
+0x8    - Cart number 1 present.
+0x10   - Falcon present.
+0x20   - Peco Peco present.
+0x40   - GM Perfect Hide in effect.
+0x80   - Cart number 2 present.
+0x100  - Cart number 3 present.
+0x200  - Cart number 4 present.
+0x400  - Cart number 5 present.
+0x800  - Orc head present.
+0x1000 - The character is wearing a wedding sprite.
+0x2000 - Ruwach is in effect.
+0x4000 - Chasewalk in effect.
+
+Option numbers valid for the second version (opt1) of this command are:
 
 
 1  - Petrified.
 1  - Petrified.
 2  - Frozen.
 2  - Frozen.
@@ -2739,7 +2757,7 @@ Option numbers valid for the first version of this command are:
 4  - Sleeping.
 4  - Sleeping.
 6	- Petrifying (the state where you can still walk)
 6	- Petrifying (the state where you can still walk)
 
 
-Option numbers valid for the second version of this command are:
+Option numbers valid for the third version (opt2) of this command are:
 
 
 1 - Poisoned.
 1 - Poisoned.
 2 - Cursed.
 2 - Cursed.
@@ -2747,32 +2765,17 @@ Option numbers valid for the second version of this command are:
 8 - Signum Crucis (plays a howl-like sound effect, but otherwise no visible effects are displayed)
 8 - Signum Crucis (plays a howl-like sound effect, but otherwise no visible effects are displayed)
 16 - Blinded.
 16 - Blinded.
 
 
-Option numbers valid for the third version of this command are:
-
-1    - Sight in effect.
-2    - Hide in effect.
-4    - Cloaking in effect.
-8    - Falcon present.
-64   - GM Perfect Hide in effect.
-128  - Cart number 2 present.
-256  - Cart number 3 present.
-512  - Cart number 4 present.
-1024 - Cart number 5 present.
-2048 - Orc head present.
-4096 - The character is wearing a wedding sprite.
-8192 - Ruwach is in effect.
-16384 - Chasewalk in effect.
-
-Option numbers are bitmasks - add up option numbers to check for all of them 
-being present at the same time in one go.
+Option numbers (except for opt1) are bitmasks - you can add them up to check
+ for several states, but the functions will return true if at least one of them
+ is in effect.
 
 
 'setoption' will set options on the invoking character. There are no second and 
 'setoption' will set options on the invoking character. There are no second and 
-third versions of this command, so you can only change the values in the last
+third versions of this command, so you can only change the values in the first 
 list (cloak, cart, ruwach, etc). if flag is 1 (default when omitted),
 list (cloak, cart, ruwach, etc). if flag is 1 (default when omitted),
 the option will be added to what the character currently has; if 0, the option is removed. 
 the option will be added to what the character currently has; if 0, the option is removed. 
 
 
 This is definitely not a complete list of available option flag numbers. Ask a 
 This is definitely not a complete list of available option flag numbers. Ask a 
-core developer for the full list.
+core developer (or read the source: src/map/status.h) for the full list.
 
 
 ---------------------------------------
 ---------------------------------------
 
 

+ 5 - 1
src/map/clif.c

@@ -7861,7 +7861,11 @@ int clif_charnameack (int fd, struct block_list *bl)
 				if (battle_config.show_mob_info&1)
 				if (battle_config.show_mob_info&1)
 					str_p += sprintf(str_p, "HP: %u/%u | ", md->status.hp, md->status.max_hp);
 					str_p += sprintf(str_p, "HP: %u/%u | ", md->status.hp, md->status.max_hp);
 				if (battle_config.show_mob_info&2)
 				if (battle_config.show_mob_info&2)
-					str_p += sprintf(str_p, "HP: %d%% | ", 100*md->status.hp/md->status.max_hp);
+
+					str_p += sprintf(str_p, "HP: %d%% | ", 
+						md->status.max_hp > 10000?
+						md->status.hp/(md->status.max_hp/100):
+						100*md->status.hp/md->status.max_hp);
 				//Even thought mobhp ain't a name, we send it as one so the client
 				//Even thought mobhp ain't a name, we send it as one so the client
 				//can parse it. [Skotlex]
 				//can parse it. [Skotlex]
 				if (str_p != mobhp) {
 				if (str_p != mobhp) {

+ 7 - 13
src/map/npc.c

@@ -2811,7 +2811,9 @@ static int npc_cleanup_sub (struct block_list *bl, va_list ap) {
 		npc_unload((struct npc_data *)bl);
 		npc_unload((struct npc_data *)bl);
 		break;
 		break;
 	case BL_MOB:
 	case BL_MOB:
-		unit_free(bl,0);
+		//This is used only on reloading npcs, so let's not free spawn-once mobs. [Skotlex]
+		if (((TBL_MOB*)bl)->spawn)
+			unit_free(bl,0);
 		break;
 		break;
 	}
 	}
 
 
@@ -2903,21 +2905,13 @@ int do_final_npc(void)
 {
 {
 	int i;
 	int i;
 	struct block_list *bl;
 	struct block_list *bl;
-	struct npc_data *nd;
-	struct mob_data *md;
-	struct pet_data *pd;
 
 
 	for (i = START_NPC_NUM; i < npc_id; i++){
 	for (i = START_NPC_NUM; i < npc_id; i++){
 		if ((bl = map_id2bl(i))){
 		if ((bl = map_id2bl(i))){
-			if (bl->type == BL_NPC && (nd = (struct npc_data *)bl)){
-				npc_unload(nd);
-			} else if (bl->type == BL_MOB && (md = (struct mob_data *)bl)){
-				if (md->lootitem)
-					aFree(md->lootitem);
-				aFree(md);
-			} else if (bl->type == BL_PET && (pd = (struct pet_data *)bl)){
-				aFree(pd);
-			}
+			if (bl->type == BL_NPC)
+				npc_unload((struct npc_data *)bl);
+			else if (bl->type&(BL_MOB|BL_PET))
+				unit_free(bl, 0);
 		}
 		}
 	}
 	}
 
 

+ 1 - 1
src/map/pc.c

@@ -1472,7 +1472,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
 		break;
 		break;
 	case SP_SPEED_ADDRATE:	//Stackable increase
 	case SP_SPEED_ADDRATE:	//Stackable increase
 		if(sd->state.lr_flag != 2)
 		if(sd->state.lr_flag != 2)
-			sd->speed_add_rate = sd->speed_add_rate * (100-val)/100;
+			sd->speed_add_rate -= val;
 		break;
 		break;
 	case SP_ASPD:	//Raw increase
 	case SP_ASPD:	//Raw increase
 //		if(sd->state.lr_flag != 2)
 //		if(sd->state.lr_flag != 2)