浏览代码

Corrected Enchant Arms for older clients (#4484)

* Follow up to 754274b.
* Resolved the status icon not clearing for each element.
Thanks to @Daegaladh!
Aleos 5 年之前
父节点
当前提交
beec1c2766
共有 2 个文件被更改,包括 18 次插入8 次删除
  1. 0 5
      src/map/clif.cpp
  2. 18 3
      src/map/status.cpp

+ 0 - 5
src/map/clif.cpp

@@ -5999,11 +5999,6 @@ void clif_status_change_sub(struct block_list *bl, int id, int type, int flag, t
 
 	nullpo_retv(bl);
 
-#if PACKETVER < 20151104
-	if (type == EFST_WEAPONPROPERTY)
-		type = EFST_ATTACK_PROPERTY_NOTHING + val1; // Assign status icon for older clients
-#endif
-
 #if PACKETVER >= 20120618
 	if (flag && battle_config.display_status_timers)
 		WBUFW(buf,0) = 0x983;

+ 18 - 3
src/map/status.cpp

@@ -11731,8 +11731,16 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		calc_flag&=~SCB_BODY;
 	}*/
 
-	if(!(flag&SCSTART_NOICON) && !(flag&SCSTART_LOADED && StatusDisplayType[type]))
-		clif_status_change(bl,StatusIconChangeTable[type],1,tick,(val_flag&1)?val1:1,(val_flag&2)?val2:0,(val_flag&4)?val3:0);
+	if (!(flag&SCSTART_NOICON) && !(flag&SCSTART_LOADED && StatusDisplayType[type])) {
+		int status_icon = StatusIconChangeTable[type];
+
+#if PACKETVER < 20151104
+		if (status_icon == EFST_WEAPONPROPERTY)
+			status_icon = EFST_ATTACK_PROPERTY_NOTHING + val1; // Assign status icon for older clients
+#endif
+
+		clif_status_change(bl, status_icon, 1, tick, (val_flag & 1) ? val1 : 1, (val_flag & 2) ? val2 : 0, (val_flag & 4) ? val3 : 0);
+	}
 
 	// Used as temporary storage for scs with interval ticks, so that the actual duration is sent to the client first.
 	if( tick_time )
@@ -12830,7 +12838,14 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
 	}*/
 
 	// On Aegis, when turning off a status change, first goes the sc packet, then the option packet.
-	clif_status_change(bl,StatusIconChangeTable[type],0,0,0,0,0);
+	int status_icon = StatusIconChangeTable[type];
+
+#if PACKETVER < 20151104
+	if (status_icon == EFST_WEAPONPROPERTY)
+		status_icon = EFST_ATTACK_PROPERTY_NOTHING + sce->val1; // Assign status icon for older clients
+#endif
+
+	clif_status_change(bl,status_icon,0,0,0,0,0);
 
 	if( opt_flag&8 ) // bugreport:681
 		clif_changeoption2(bl);