浏览代码

update

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@779 54d463be-8e91-2dee-dedb-b68131a5f0ec
amber 20 年之前
父节点
当前提交
2c64ba96d0
共有 6 个文件被更改,包括 22 次插入22 次删除
  1. 1 0
      Changelog.txt
  2. 4 7
      Dev/bugs.txt
  3. 12 0
      src/map/map.c
  4. 1 0
      src/map/map.h
  5. 2 6
      src/map/pc.c
  6. 2 9
      src/map/storage.c

+ 1 - 0
Changelog.txt

@@ -1,5 +1,6 @@
 Date	Added
 12/24
+	* Fixed item-dup bug in storage and cart [MouseJstr]
 	* @skilltree was looking outside of the particular class
 	  of the char to see if they could do a skill [MouseJstr]
 	* Fixed a calc_skill_tree bug where too many skills were

+ 4 - 7
Dev/bugs.txt

@@ -55,17 +55,14 @@ Assigned:	N/A
 Progress:	0%
 
 Problem:	Item duping bug in storage...
-Assigned:	N/A
-Progress:	0%
+Assigned:	MouseJstr
+Progress:	100%
 	
 	Let's say you have 200 arrows and 100 Rosiotti arrow, you'll put 100 and 50 in storage
 	And you should end when you log back in with 100 of each on you and 100 and 50 in storage
 	Gain 50
 	Repeat
 
-	Lupus: heh i fixid similiar bug in DELITEM script command. i think it's the same bug in other function
-	so i'm in charge 
-
 Problem:	~40+ players connected.. and soon can't re-connect, they can enter password, but never see "select character" screen.
 Assigned:	N/A
 Progress:	0%
@@ -150,5 +147,5 @@ Progress:	0%
 
 Problem:	When you have UNNAMED Arrows and Named Arrows in the storage and take some arrows then it change amount of other items.
 		It happens because server doesn't recognize Named and Unnamed Stockable items (Elemental Gems, Iron, Steel, Holy Water, Arrows)
-Assigned:	N/A
-Progress:	0%
+Assigned:	MouseJstr
+Progress:	100%

+ 12 - 0
src/map/map.c

@@ -2476,3 +2476,15 @@ int do_init(int argc, char *argv[]) {
 
 	return 0;
 }
+
+int compare_item(struct item *a, struct item *b) {
+  return (
+          (a->nameid == b->nameid) &&
+          (a->identify == b->identify) &&
+          (a->refine == b->refine) &&
+          (a->attribute == b->attribute) &&
+          (a->card[0] == b->card[0]) &&
+          (a->card[1] == b->card[1]) &&
+          (a->card[2] == b->card[2]) &&
+          (a->card[3] == b->card[3]));
+}

+ 1 - 0
src/map/map.h

@@ -695,6 +695,7 @@ void map_deliddb(struct block_list *bl);
 int map_foreachiddb(int (*)(void*,void*,va_list),...);
 void map_addnickdb(struct map_session_data *);
 struct map_session_data * map_nick2sd(char*);
+int compare_item(struct item *a, struct item *b);
 
 // gatŠÖ˜A
 int map_getcell(int,int,int);

+ 2 - 6
src/map/pc.c

@@ -3213,9 +3213,7 @@ int pc_additem(struct map_session_data *sd,struct item *item_data,int amount)
 	if(!itemdb_isequip2(data)){
 		// ? 備品ではないので、?所有品なら個?のみ?化させる
 		for(i=0;i<MAX_INVENTORY;i++)
-		if(sd->status.inventory[i].nameid == item_data->nameid &&
-			sd->status.inventory[i].card[0] == item_data->card[0] && sd->status.inventory[i].card[1] == item_data->card[1] &&
-			sd->status.inventory[i].card[2] == item_data->card[2] && sd->status.inventory[i].card[3] == item_data->card[3]) {
+		if(compare_item(&sd->status.inventory[i], item_data)) {
 			if(sd->status.inventory[i].amount+amount > MAX_AMOUNT)
 				return 5;
 			sd->status.inventory[i].amount+=amount;
@@ -3450,9 +3448,7 @@ int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amoun
 	if(!itemdb_isequip2(data)){
 		// ? 備品ではないので、?所有品なら個?のみ?化させる
 		for(i=0;i<MAX_CART;i++){
-			if(sd->status.cart[i].nameid==item_data->nameid &&
-				sd->status.cart[i].card[0] == item_data->card[0] && sd->status.cart[i].card[1] == item_data->card[1] &&
-				sd->status.cart[i].card[2] == item_data->card[2] && sd->status.cart[i].card[3] == item_data->card[3]){
+			if(compare_item(&sd->status.cart[i], item_data)) {
 				if(sd->status.cart[i].amount+amount > MAX_AMOUNT)
 					return 1;
 				sd->status.cart[i].amount+=amount;

+ 2 - 9
src/map/storage.c

@@ -144,12 +144,7 @@ int storage_additem(struct map_session_data *sd,struct storage *stor,struct item
 	if(!itemdb_isequip2(data)){
 		// 装備品ではないので、既所有品なら個数のみ変化させる
 		for(i=0;i<MAX_STORAGE;i++){
-			if( stor->storage[i].nameid == item_data->nameid &&
-				stor->storage[i].identify == item_data->identify &&
-				stor->storage[i].refine == item_data->refine &&
-				stor->storage[i].attribute == item_data->attribute &&
-				stor->storage[i].card[0] == item_data->card[0] && stor->storage[i].card[1] == item_data->card[1] &&
-				stor->storage[i].card[2] == item_data->card[2] && stor->storage[i].card[3] == item_data->card[3]){
+			if( compare_item (&stor->storage[i], item_data)) {
 				if(stor->storage[i].amount+amount > MAX_AMOUNT)
 					return 1;
 				stor->storage[i].amount+=amount;
@@ -434,9 +429,7 @@ int guild_storage_additem(struct map_session_data *sd,struct guild_storage *stor
 	if(!itemdb_isequip2(data)){
 		// 装備品ではないので、既所有品なら個数のみ変化させる
 		for(i=0;i<MAX_GUILD_STORAGE;i++){
-			if(stor->storage[i].nameid == item_data->nameid &&
-				stor->storage[i].card[0] == item_data->card[0] && stor->storage[i].card[1] == item_data->card[1] &&
-				stor->storage[i].card[2] == item_data->card[2] && stor->storage[i].card[3] == item_data->card[3]){
+			if(compare_item(&stor->storage[i], item_data)) {
 				if(stor->storage[i].amount+amount > MAX_AMOUNT)
 					return 1;
 				stor->storage[i].amount+=amount;