|
@@ -9846,24 +9846,35 @@ bool pc_equipitem(struct map_session_data *sd,short n,int req_pos,bool equipswit
|
|
|
clif_notify_bindOnEquip(sd,n);
|
|
|
}
|
|
|
|
|
|
- if(pos == EQP_ACC) { //Accesories should only go in one of the two,
|
|
|
+ if(pos == EQP_ACC) { //Accessories should only go in one of the two.
|
|
|
pos = req_pos&EQP_ACC;
|
|
|
- if (pos == EQP_ACC) //User specified both slots..
|
|
|
+ if (pos == EQP_ACC) //User specified both slots.
|
|
|
pos = equip_index[EQI_ACC_R] >= 0 ? EQP_ACC_L : EQP_ACC_R;
|
|
|
- }
|
|
|
|
|
|
- if(pos == EQP_ARMS && id->equip == EQP_HAND_R) { //Dual wield capable weapon.
|
|
|
+ for (i = 0; i < sd->inventory_data[n]->slot; i++) { // Accessories that have cards that force equip location
|
|
|
+ if (!sd->inventory.u.items_inventory[n].card[i])
|
|
|
+ continue;
|
|
|
+
|
|
|
+ struct item_data *card_data = itemdb_exists(sd->inventory.u.items_inventory[n].card[i]);
|
|
|
+
|
|
|
+ if (card_data) {
|
|
|
+ int card_pos = card_data->equip;
|
|
|
+
|
|
|
+ if (card_pos == EQP_ACC_L || card_pos == EQP_ACC_R) {
|
|
|
+ pos = card_pos; // Use the card's equip position
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if(pos == EQP_ARMS && id->equip == EQP_HAND_R) { //Dual wield capable weapon.
|
|
|
pos = (req_pos&EQP_ARMS);
|
|
|
if (pos == EQP_ARMS) //User specified both slots, pick one for them.
|
|
|
pos = equip_index[EQI_HAND_R] >= 0 ? EQP_HAND_L : EQP_HAND_R;
|
|
|
- }
|
|
|
-
|
|
|
- if(pos == EQP_SHADOW_ACC) { // Shadow System
|
|
|
+ } else if(pos == EQP_SHADOW_ACC) { // Shadow System
|
|
|
pos = req_pos&EQP_SHADOW_ACC;
|
|
|
if (pos == EQP_SHADOW_ACC)
|
|
|
pos = equip_index[EQI_SHADOW_ACC_L] >= 0 ? EQP_SHADOW_ACC_R : EQP_SHADOW_ACC_L;
|
|
|
- }
|
|
|
- if(pos == EQP_SHADOW_ARMS && id->equip == EQP_SHADOW_WEAPON) {
|
|
|
+ } else if(pos == EQP_SHADOW_ARMS && id->equip == EQP_SHADOW_WEAPON) {
|
|
|
pos = (req_pos&EQP_SHADOW_ARMS);
|
|
|
if( pos == EQP_SHADOW_ARMS )
|
|
|
pos = (equip_index[EQI_SHADOW_WEAPON] >= 0 ? EQP_SHADOW_SHIELD : EQP_SHADOW_WEAPON);
|