浏览代码

Changed Normal and Cash Food statuses so they do not stack and overwrite the other if the level (val1) is the same or higher. (bugreport:4519)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14437 54d463be-8e91-2dee-dedb-b68131a5f0ec
Paradox924X 14 年之前
父节点
当前提交
6f582c37ab
共有 2 个文件被更改,包括 97 次插入0 次删除
  1. 1 0
      Changelog-Trunk.txt
  2. 96 0
      src/map/status.c

+ 1 - 0
Changelog-Trunk.txt

@@ -1,6 +1,7 @@
 Date	Added
 
 2010/11/01
+	* Changed Normal and Cash Food statuses so they do not stack and overwrite the other if the level (val1) is the same or higher. (bugreport:4519) [Paradox924X]
 	* Modified certain atcommands to use 64 bit arithmetic before capping a value to correct boundary logic for overflowing values. [Paradox924X]
 2010/10/21
 	* Removed unused 'indoors' mapflag. [Gepard]

+ 96 - 0
src/map/status.c

@@ -4913,6 +4913,54 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 		if( bl->type != BL_MER )
 			return 0; // Stats only for Mercenaries
 	break;
+	case SC_STRFOOD:
+		if (sc->data[SC_FOOD_STR_CASH] && sc->data[SC_FOOD_STR_CASH]->val1 > sc->data[type]->val1)
+			return 0;
+	break;
+	case SC_AGIFOOD:
+		if (sc->data[SC_FOOD_AGI_CASH] && sc->data[SC_FOOD_AGI_CASH]->val1 > sc->data[type]->val1)
+			return 0;
+	break;
+	case SC_VITFOOD:
+		if (sc->data[SC_FOOD_VIT_CASH] && sc->data[SC_FOOD_VIT_CASH]->val1 > sc->data[type]->val1)
+			return 0;
+	break;
+	case SC_INTFOOD:
+		if (sc->data[SC_FOOD_INT_CASH] && sc->data[SC_FOOD_INT_CASH]->val1 > sc->data[type]->val1)
+			return 0;
+	break;
+	case SC_DEXFOOD:
+		if (sc->data[SC_FOOD_DEX_CASH] && sc->data[SC_FOOD_DEX_CASH]->val1 > sc->data[type]->val1)
+			return 0;
+	break;
+	case SC_LUKFOOD:
+		if (sc->data[SC_FOOD_LUK_CASH] && sc->data[SC_FOOD_LUK_CASH]->val1 > sc->data[type]->val1)
+			return 0;
+	break;
+	case SC_FOOD_STR_CASH:
+		if (sc->data[SC_STRFOOD] && sc->data[SC_STRFOOD]->val1 > sc->data[type]->val1)
+			return 0;
+	break;
+	case SC_FOOD_AGI_CASH:
+		if (sc->data[SC_AGIFOOD] && sc->data[SC_AGIFOOD]->val1 > sc->data[type]->val1)
+			return 0;
+	break;
+	case SC_FOOD_VIT_CASH:
+		if (sc->data[SC_VITFOOD] && sc->data[SC_VITFOOD]->val1 > sc->data[type]->val1)
+			return 0;
+	break;
+	case SC_FOOD_INT_CASH:
+		if (sc->data[SC_INTFOOD] && sc->data[SC_INTFOOD]->val1 > sc->data[type]->val1)
+			return 0;
+	break;
+	case SC_FOOD_DEX_CASH:
+		if (sc->data[SC_DEXFOOD] && sc->data[SC_DEXFOOD]->val1 > sc->data[type]->val1)
+			return 0;
+	break;
+	case SC_FOOD_LUK_CASH:
+		if (sc->data[SC_LUKFOOD] && sc->data[SC_LUKFOOD]->val1 > sc->data[type]->val1)
+			return 0;
+	break;
 	}
 
 	//Check for BOSS resistances
@@ -5034,6 +5082,54 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
 		status_change_end(bl,SC_BLESSING,-1);
 		status_change_end(bl,SC_INCREASEAGI,-1);
 		break;
+	case SC_STRFOOD:
+		if (sc->data[SC_FOOD_STR_CASH] && sc->data[SC_FOOD_STR_CASH]->val1 <= sc->data[type]->val1)
+			status_change_end(bl,SC_FOOD_STR_CASH,-1);
+		break;
+	case SC_AGIFOOD:
+		if (sc->data[SC_FOOD_AGI_CASH] && sc->data[SC_FOOD_AGI_CASH]->val1 <= sc->data[type]->val1)
+			status_change_end(bl,SC_FOOD_AGI_CASH,-1);
+		break;
+	case SC_VITFOOD:
+		if (sc->data[SC_FOOD_VIT_CASH] && sc->data[SC_FOOD_VIT_CASH]->val1 <= sc->data[type]->val1)
+			status_change_end(bl,SC_FOOD_VIT_CASH,-1);
+		break;
+	case SC_INTFOOD:
+		if (sc->data[SC_FOOD_INT_CASH] && sc->data[SC_FOOD_INT_CASH]->val1 <= sc->data[type]->val1)
+			status_change_end(bl,SC_FOOD_INT_CASH,-1);
+		break;
+	case SC_DEXFOOD:
+		if (sc->data[SC_FOOD_DEX_CASH] && sc->data[SC_FOOD_DEX_CASH]->val1 <= sc->data[type]->val1)
+			status_change_end(bl,SC_FOOD_DEX_CASH,-1);
+		break;
+	case SC_LUKFOOD:
+		if (sc->data[SC_FOOD_LUK_CASH] && sc->data[SC_FOOD_LUK_CASH]->val1 <= sc->data[type]->val1)
+			status_change_end(bl,SC_FOOD_LUK_CASH,-1);
+		break;
+	case SC_FOOD_STR_CASH:
+		if (sc->data[SC_STRFOOD] && sc->data[SC_STRFOOD]->val1 <= sc->data[type]->val1)
+			status_change_end(bl,SC_STRFOOD,-1);
+		break;
+	case SC_FOOD_AGI_CASH:
+		if (sc->data[SC_AGIFOOD] && sc->data[SC_AGIFOOD]->val1 <= sc->data[type]->val1)
+			status_change_end(bl,SC_AGIFOOD,-1);
+		break;
+	case SC_FOOD_VIT_CASH:
+		if (sc->data[SC_VITFOOD] && sc->data[SC_VITFOOD]->val1 <= sc->data[type]->val1)
+			status_change_end(bl,SC_VITFOOD,-1);
+		break;
+	case SC_FOOD_INT_CASH:
+		if (sc->data[SC_INTFOOD] && sc->data[SC_INTFOOD]->val1 <= sc->data[type]->val1)
+			status_change_end(bl,SC_INTFOOD,-1);
+		break;
+	case SC_FOOD_DEX_CASH:
+		if (sc->data[SC_DEXFOOD] && sc->data[SC_DEXFOOD]->val1 <= sc->data[type]->val1)
+			status_change_end(bl,SC_DEXFOOD,-1);
+		break;
+	case SC_FOOD_LUK_CASH:
+		if (sc->data[SC_LUKFOOD] && sc->data[SC_LUKFOOD]->val1 <= sc->data[type]->val1)
+			status_change_end(bl,SC_LUKFOOD,-1);
+		break;
 	}
 
 	//Check for overlapping fails