void ARX_EQUIPMENT_UnEquipAllPlayer() { for(long i = 0; i < MAX_EQUIPED; i++) { if(ValidIONum(player.equiped[i])) { ARX_EQUIPMENT_UnEquip(entities.player(), entities[player.equiped[i]]); } } ARX_PLAYER_ComputePlayerFullStats(); }
void ARX_EQUIPMENT_Equip(Entity * target, Entity * toequip) { if(!target || !toequip || target != entities.player()) return; EntityHandle validid = EntityHandle(); for(size_t i = 0; i < entities.size(); i++) { const EntityHandle handle = EntityHandle(i); Entity * e = entities[handle]; if(e == toequip) { validid = handle; break; } } if(validid == EntityHandle()) return; RemoveFromAllInventories(toequip); toequip->show = SHOW_FLAG_ON_PLAYER; // on player if(toequip == DRAGINTER) Set_DragInter(NULL); if(toequip->type_flags & (OBJECT_TYPE_DAGGER | OBJECT_TYPE_1H | OBJECT_TYPE_2H |OBJECT_TYPE_BOW)) { if(ValidIONum(player.equiped[EQUIP_SLOT_WEAPON])) ARX_EQUIPMENT_UnEquip(target, entities[player.equiped[EQUIP_SLOT_WEAPON]]); player.equiped[EQUIP_SLOT_WEAPON] = validid; if(toequip->type_flags & OBJECT_TYPE_BOW) EERIE_LINKEDOBJ_LinkObjectToObject(target->obj, toequip->obj, "weapon_attach", "test", toequip); else EERIE_LINKEDOBJ_LinkObjectToObject(target->obj, toequip->obj, "weapon_attach", "primary_attach", toequip); if((toequip->type_flags & (OBJECT_TYPE_2H | OBJECT_TYPE_BOW)) && ValidIONum(player.equiped[EQUIP_SLOT_SHIELD])) ARX_EQUIPMENT_UnEquip(target, entities[player.equiped[EQUIP_SLOT_SHIELD]]); } else if(toequip->type_flags & OBJECT_TYPE_SHIELD) { if(ValidIONum(player.equiped[EQUIP_SLOT_SHIELD])) ARX_EQUIPMENT_UnEquip(target, entities[player.equiped[EQUIP_SLOT_SHIELD]]); player.equiped[EQUIP_SLOT_SHIELD] = validid; EERIE_LINKEDOBJ_LinkObjectToObject(target->obj, toequip->obj, "shield_attach", "shield_attach", toequip); if(ValidIONum(player.equiped[EQUIP_SLOT_WEAPON])) { if(entities[player.equiped[EQUIP_SLOT_WEAPON]]->type_flags & (OBJECT_TYPE_2H | OBJECT_TYPE_BOW)) ARX_EQUIPMENT_UnEquip(target, entities[player.equiped[EQUIP_SLOT_WEAPON]]); } } else if(toequip->type_flags & OBJECT_TYPE_RING) { // check first, if not already equiped if (!((ValidIONum(player.equiped[EQUIP_SLOT_RING_LEFT]) && (toequip == entities[player.equiped[EQUIP_SLOT_RING_LEFT]])) || (ValidIONum(player.equiped[EQUIP_SLOT_RING_RIGHT]) && (toequip == entities[player.equiped[EQUIP_SLOT_RING_RIGHT]])))) { long willequip = -1; if(player.equiped[EQUIP_SLOT_RING_LEFT] == EntityHandle()) willequip = EQUIP_SLOT_RING_LEFT; if(player.equiped[EQUIP_SLOT_RING_RIGHT] == EntityHandle()) willequip = EQUIP_SLOT_RING_RIGHT; if(willequip == -1) { if(bRing) { if(ValidIONum(player.equiped[EQUIP_SLOT_RING_RIGHT])) ARX_EQUIPMENT_UnEquip(target, entities[player.equiped[EQUIP_SLOT_RING_RIGHT]]); willequip = EQUIP_SLOT_RING_RIGHT; } else { if(ValidIONum(player.equiped[EQUIP_SLOT_RING_LEFT])) ARX_EQUIPMENT_UnEquip(target, entities[player.equiped[EQUIP_SLOT_RING_LEFT]]); willequip = EQUIP_SLOT_RING_LEFT; } bRing = !bRing; } player.equiped[willequip] = validid; } } else if(toequip->type_flags & OBJECT_TYPE_ARMOR) { if(ValidIONum(player.equiped[EQUIP_SLOT_ARMOR])) ARX_EQUIPMENT_UnEquip(target, entities[player.equiped[EQUIP_SLOT_ARMOR]]); player.equiped[EQUIP_SLOT_ARMOR] = validid; } else if(toequip->type_flags & OBJECT_TYPE_LEGGINGS) { if(ValidIONum(player.equiped[EQUIP_SLOT_LEGGINGS])) ARX_EQUIPMENT_UnEquip(target, entities[player.equiped[EQUIP_SLOT_LEGGINGS]]); player.equiped[EQUIP_SLOT_LEGGINGS] = validid; } else if(toequip->type_flags & OBJECT_TYPE_HELMET) { if(ValidIONum(player.equiped[EQUIP_SLOT_HELMET])) ARX_EQUIPMENT_UnEquip(target, entities[player.equiped[EQUIP_SLOT_HELMET]]); player.equiped[EQUIP_SLOT_HELMET] = validid; } if(toequip->type_flags & (OBJECT_TYPE_HELMET | OBJECT_TYPE_ARMOR | OBJECT_TYPE_LEGGINGS)) ARX_EQUIPMENT_RecreatePlayerMesh(); ARX_PLAYER_ComputePlayerFullStats(); }