public static GW_ItemSlotBase CreateItem(int nItemID, bool bRandStats = true) { if (nItemID <= 0) { return(null); } // TODO test the below if (ItemConstants.GetInventoryType(nItemID) != InventoryType.Equip) { GW_ItemSlotBase item; if (ItemConstants.IsPet(nItemID)) { item = new GW_ItemSlotPet(nItemID); ((GW_ItemSlotPet)item).nRemainLife = 7776000; } else { item = new GW_ItemSlotBundle(nItemID); } if (item.Template is null) { throw new ArgumentOutOfRangeException(nameof(nItemID), "Doesn't exist in data files."); } if (ItemConstants.IsRechargeableItem(item.nItemID)) { item.nNumber = (short)item.Template.SlotMax; } else { item.nNumber = 1; } item.tDateExpire = DateTime.MaxValue; return(item); } if (bRandStats) { return(CreateVariableStatEquip(nItemID)); } return(CreateNormalStatEquip(nItemID)); }
public CPet(int dwParentId, short nItemPOS, GW_ItemSlotPet gwPetItem) { this.dwParentId = dwParentId; liPetLockerSN = gwPetItem.liCashItemSN; liSN = gwPetItem.liSN; PetItemSlot = nItemPOS; tLastUpdated = DateTime.Now; tRemainHungriness = DateTime.Now; dwTemplateID = gwPetItem.nItemID; if (gwPetItem.sPetName.Length == 0) { gwPetItem.sPetName = MasterManager.StringData[StringDataType.Item][dwTemplateID].Name; } }
public bool ActivatePet(GW_ItemSlotPet gwPetItem, short nItemPOS, byte nIdx) { if (gwPetItem is null) { gwPetItem = Parent.InventoryCash.Get(nItemPOS) as GW_ItemSlotPet; } if (gwPetItem is null) { return(false); // retard passing invalid slot } CPet cPet = new CPet(dwParentID, nItemPOS, gwPetItem); cPet.Position.ResetPosTo(Parent.Position); cPet.nIdx = nIdx; Pets[nIdx] = cPet; Parent.Field.Broadcast(cPet.MakeEnterFieldPacket()); Parent.Modify.UpdatePetLocker(); return(true); }
public void UpdatePetItem(GW_ItemSlotPet pItemPet, short nPOS) { aChangeLog.Add(new InventoryOperationRemove(InventoryType.Cash, nPOS)); aChangeLog.Add(new InventoryOperationAdd(InventoryType.Cash, nPOS, pItemPet)); }