Jelajahi Sumber

- Changed the npc_id mismatch warning to be more informative.
- Modified @monster command to use map_search_freecell (prevents mobs spawning on non-walkable tiles)
- Modified @nuke to invoke skill_cast_nodamage_id instead of the damage_id version (fixes sprite and splash damage for the skill)
- Corrected Venom Knife's requiring two knives per use.


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

skotlex 19 tahun lalu
induk
melakukan
e5ee6b1fc0
5 mengubah file dengan 19 tambahan dan 28 penghapusan
  1. 4 0
      Changelog-Trunk.txt
  2. 1 0
      db/Changelog.txt
  3. 1 1
      db/skill_require_db.txt
  4. 12 26
      src/map/atcommand.c
  5. 1 1
      src/map/npc.c

+ 4 - 0
Changelog-Trunk.txt

@@ -4,6 +4,10 @@ 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/04/16
+	* Modified @monster command to use map_search_freecell (prevents mobs
+	  spawning on non-walkable tiles) [Skotlex]
+	* Modified @nuke to invoke skill_cast_nodamage_id instead of the damage_id
+	  version (fixes sprite and splash damage for the skill) [Skotlex]
 	* Fixed char-sql server still reading the old lanconfig format rather than
 	  the new one. [Skotlex]
 	* Removed water_height.txt reading (since it is always done from the rsw

+ 1 - 0
db/Changelog.txt

@@ -27,6 +27,7 @@
 
 =========================
 04/16
+	* Corrected Venom Knife's requiring two knives per use. [Skotlex]
 	* Adjusted more delays/speed of Lighthalzen mobs thanks to Tharis [Playtester]
 	* Fixed Job_Equip values for all one-handed-swords thanks to Haplo [Playtester]
 	* Fixed wrong effect 4175,Poisonous_Toad_Card [Lupus]

+ 1 - 1
db/skill_require_db.txt

@@ -434,7 +434,7 @@
 
 1001,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//KN_CHARGEATK#チャ?[ジアタック#
 1002,0,0,15,0,0,0,99,0,0,shield,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//CR_SHRINK#シュリンク#
-1004,0,0,15,0,0,0,99,2,1,none,0,1771,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AS_VENOMKNIFE#ベナムナイフ#
+1004,0,0,15,0,0,0,99,2,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//AS_VENOMKNIFE#ベナムナイフ#
 1005,0,0,25,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RG_CLOSECONFINE#ク�??[ズコンファイン#
 1006,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WZ_SIGHTBLASTER#サイトブラスタ?[#
 1007,0,0,30,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//SA_CREATECON#エルレ�?ンタルコンバ?[タ?サ造#

+ 12 - 26
src/map/atcommand.c

@@ -3386,10 +3386,9 @@ int atcommand_monster(
 	char monster[NAME_LENGTH];
 	int mob_id;
 	int number = 0;
-	int x = 0, y = 0;
 	int count;
-	int i, j, k;
-	int mx, my, range;
+	int i, k, range;
+	short mx, my;
 	nullpo_retr(-1, sd);
 
 	memset(name, '\0', sizeof(name));
@@ -3400,14 +3399,14 @@ int atcommand_monster(
 			clif_displaymessage(fd, msg_table[80]); // Give a display name and monster name/id please.
 			return -1;
 	}
-	if (sscanf(message, "\"%23[^\"]\" %23s %d %d %d", name, monster, &number, &x, &y) > 1 ||
-		sscanf(message, "%23s \"%23[^\"]\" %d %d %d", monster, name, &number, &x, &y) > 1) {
+	if (sscanf(message, "\"%23[^\"]\" %23s %d", name, monster, &number) > 1 ||
+		sscanf(message, "%23s \"%23[^\"]\" %d", monster, name, &number) > 1) {
 		//All data can be left as it is.
-	} else if ((count=sscanf(message, "%23s %d %23s %d %d", monster, &number, name, &x, &y)) > 1) {
+	} else if ((count=sscanf(message, "%23s %d %23s", monster, &number, name)) > 1) {
 		//Here, it is possible name was not given and we are using monster for it.
 		if (count < 3) //Blank mob's name.
 			name[0] = '\0';
-	} else if (sscanf(message, "%23s %23s %d %d %d", name, monster, &number, &x, &y) > 1) {
+	} else if (sscanf(message, "%23s %23s %d", name, monster, &number) > 1) {
 		//All data can be left as it is.
 	} else if (sscanf(message, "%23s", monster) > 0) {
 		//As before, name may be already filled.
@@ -3437,29 +3436,17 @@ int atcommand_monster(
 		strcpy(name, "--ja--");
 
 	// If value of atcommand_spawn_quantity_limit directive is greater than or equal to 1 and quantity of monsters is greater than value of the directive
-	if (battle_config.atc_spawn_quantity_limit >= 1 && number > battle_config.atc_spawn_quantity_limit)
+	if (battle_config.atc_spawn_quantity_limit && number > battle_config.atc_spawn_quantity_limit)
 		number = battle_config.atc_spawn_quantity_limit;
 
 	if (battle_config.etc_log)
-		ShowInfo("%s monster='%s' name='%s' id=%d count=%d (%d,%d)\n", command, monster, name, mob_id, number, x, y);
+		ShowInfo("%s monster='%s' name='%s' id=%d count=%d (%d,%d)\n", command, monster, name, mob_id, number, sd->bl.x, sd->bl.y);
 
 	count = 0;
-	range = (int)sqrt(number) / 2;
-	range = range * 2 + 5; // calculation of an odd number (+ 4 area around)
+	range = (int)sqrt(number) +2; // calculation of an odd number (+ 4 area around)
 	for (i = 0; i < number; i++) {
-		j = 0;
-		k = 0;
-		while(j++ < 8 && k == 0) { // try 8 times to spawn the monster (needed for close area)
-			if (x <= 0)
-				mx = sd->bl.x + (rand() % range - (range / 2));
-			else
-				mx = x;
-			if (y <= 0)
-				my = sd->bl.y + (rand() % range - (range / 2));
-			else
-				my = y;
-			k = mob_once_spawn((struct map_session_data*)sd, "this", mx, my, name, mob_id, 1, "");
-		}
+		map_search_freecell(&sd->bl, 0, &mx,  &my, range, range, 0);
+		k = mob_once_spawn(sd, "this", mx, my, name, mob_id, 1, "");
 		count += (k != 0) ? 1 : 0;
 	}
 
@@ -6005,8 +5992,7 @@ int atcommand_nuke(
 
 	if ((pl_sd = map_nick2sd(atcmd_player_name)) != NULL) {
 		if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can kill only lower or same GM level
-			clif_skill_nodamage(&pl_sd->bl, &pl_sd->bl, NPC_SELFDESTRUCTION, -1, 1);
-			skill_castend_damage_id(&pl_sd->bl, &pl_sd->bl, NPC_SELFDESTRUCTION, 99, gettick(), 0);
+			skill_castend_nodamage_id(&pl_sd->bl, &pl_sd->bl, NPC_SELFDESTRUCTION, 99, gettick(), 0);
 			clif_displaymessage(fd, msg_table[109]); // Player has been nuked!
 		} else {
 			clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player.

+ 1 - 1
src/map/npc.c

@@ -1072,7 +1072,7 @@ int npc_scriptcont(struct map_session_data *sd,int id)
 	nullpo_retr(1, sd);
 
 	if (id!=sd->npc_id){
-		ShowWarning("npc_scriptcont: sd->npc_id is not id.\n");
+		ShowWarning("npc_scriptcont: sd->npc_id (%d) is not id (%d).\n", sd->npc_id, id);
 		return 1;
 	}
 	if (npc_checknear(sd,id)){