Преглед на файлове

* [Optimized]:
- buildin_npcshopitem memory allocation to calculate before reallocating.

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

Lance преди 19 години
родител
ревизия
c165ff1eb6
променени са 2 файла, в които са добавени 10 реда и са изтрити 5 реда
  1. 3 0
      Changelog-Trunk.txt
  2. 7 5
      src/map/script.c

+ 3 - 0
Changelog-Trunk.txt

@@ -4,6 +4,9 @@ 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/06/12
+	* [Optimized]:
+	  - buildin_npcshopitem memory allocation to calculate before reallocating.
+	    [Lance]
 	* Made guild member exp an unsigned int. [Skotlex]
 	* Various cleanups to the npc clicking related functions. Should fix quite
 	  some possible crashes from crafted packets. [Skotlex]

+ 7 - 5
src/map/script.c

@@ -10119,7 +10119,7 @@ int buildin_npcshopitem(struct script_state *st)
 	struct npc_data *nd= NULL;
 	int n = 0;
 	int i = 3;
-	int itemid, value;
+	int itemid, value, amount;
 
 	char* npcname = conv_str(st, & (st->stack->stack_data[st->start + 2]));
 	nd = npc_name2id(npcname);
@@ -10129,11 +10129,13 @@ int buildin_npcshopitem(struct script_state *st)
 #endif
 
 	if(nd && nd->bl.subtype==SHOP){
+		amount = (st->end-2)/2;
+		// st->end - 2 = nameid + value # ... / 2 = number of items ... + 1 just in case
 		nd = (struct npc_data *)aRealloc(nd,sizeof(struct npc_data) +
-			sizeof(nd->u.shop_item[0]) * (MAX_SHOPITEM + 1));
+			sizeof(nd->u.shop_item[0]) * amount);
 
 		// Reset sell list.
-		for(;nd->u.shop_item[n].nameid && n < MAX_SHOPITEM; n++){
+		for(;nd->u.shop_item[n].nameid && n < amount; n++){
 			nd->u.shop_item[n].nameid = 0;
 			nd->u.shop_item[n].value = 0;
 		}
@@ -10150,8 +10152,8 @@ int buildin_npcshopitem(struct script_state *st)
 			n++;
 		}
 
-		nd = (struct npc_data *)aRealloc(nd,sizeof(struct npc_data) +
-			sizeof(nd->u.shop_item[0]) * n);
+		//nd = (struct npc_data *)aRealloc(nd,sizeof(struct npc_data) +
+		//	sizeof(nd->u.shop_item[0]) * n);
 
 		map_addiddb(&nd->bl);