func (p *Player) Equipped(item gameObjectsBase.Itemer) bool { for _, slot := range p.slots { if slot.item != nil && slot.item.GetID() == item.GetID() { return true } } return false }
func (p *Player) getSlotByItem(item gameObjectsBase.Itemer) int { var slot int = consts.SLOT_DEFAULT for i, s := range p.slots { if s.item != nil && (s.item.GetID() == item.GetID()) { slot = i break } } return slot }
func (p *Player) MoveItem(item gameObjectsBase.Itemer, to_cell int) bool { if owner := item.GetOwner(); (owner != nil && owner.GetID() != p.GetID()) || p.Equipped(item) { return false } from_cell := p.Inventory.GetPlace(item.GetID()) if from_cell == to_cell { return true } else { db := connect.CreateConnect() _, err := db.Exec("CALL move_item(?, ?, ?)", p.DBId, from_cell, to_cell) if err == nil { p.Inventory.MoveItem(item, from_cell, to_cell) } return err == nil } }
func (p *Player) RestoreSlot(item gameObjectsBase.Itemer, slotIota int) { p.Inventory.RestoreItem(item) p.slots[slotIota].item = item if ok, s := p.getNearbySlot(slotIota, item.GetItemSubtype()); ok { if p.slots[s].item != nil { p.slots[s].item = nil } // p.slots[s].item = item } item.EquipItem(p.Inventory) item.SetOwner(p) }
func (p *Player) DropItem(item gameObjectsBase.Itemer, amount int) (int, gameObjectsBase.Itemer) { db := connect.CreateConnect() place, new_item := p.ActiveObject.DropItem(item, amount) if s := p.getSlotByItem(item); s != consts.SLOT_DEFAULT { if item.GetAmount()-amount <= 0 { p.slots[s].item = nil } db.Exec("CALL dec_user_slot_amount(?, ?, ?, ?)", p.DBId, item.GetKindId(), s, amount) } else { db.Exec("CALL dec_user_item_amount(?, ?, ?, ?)", p.DBId, item.GetKindId(), place, amount) } return place, new_item }
func (p *Player) PickUpItem(item gameObjectsBase.Itemer) (bool, gameObjectsBase.Itemer) { var err error = nil db := connect.CreateConnect() place, i := p.AddItem(item) if item.IsHeapItem() && place == -1 { _, err = db.Exec("CALL inc_user_slot_amount(?, ?, ?, ?)", p.DBId, item.GetKindId(), p.getSlotByItemType(item.GetItemType()), item.GetAmount()) } else { _, err = db.Exec("CALL inc_user_item_amount(?, ?, ?, ?)", p.DBId, item.GetKindId(), place, item.GetAmount()) } if err != nil { // fmt.Println(err) } return err == nil, i }
func (p *Player) DeleteItem(item gameObjectsBase.Itemer, amount int) (bool, gameObjectsBase.Itemer) { var ( i gameObjectsBase.Itemer = item res bool = false ) db := connect.CreateConnect() var place int place, i = p.Inventory.DeleteItem(item, amount) if s := p.getSlotByItem(item); s != consts.SLOT_DEFAULT { if item.GetAmount() <= 0 { p.slots[s].item = nil i = nil } _, err := db.Exec("CALL dec_user_slot_amount(?, ?, ?, ?)", p.DBId, item.GetKindId(), s, amount) res = err == nil } else { _, err := db.Exec("CALL dec_user_item_amount(?, ?, ?, ?)", p.DBId, item.GetKindId(), place, amount) res = err == nil } return res, i }
func (il *itemList) deleteItem(i gameObjectsBase.Itemer) { delete(il.items, i.GetID()) }
func (il *itemList) addItem(i gameObjectsBase.Itemer) { il.items[i.GetID()] = i }
func (p *Player) IsEquippedItem(item gameObjectsBase.Itemer) bool { return (item.GetID() == p.fist.GetID() && (p.slots[consts.SLOT_LEFT_HAND].item == nil || p.slots[consts.SLOT_RIGHT_HAND].item == nil)) || item.IsEquipped() }
func (p *Player) CanPickUp(item gameObjectsBase.Itemer) bool { return p.Inventory.GetWeight()+item.GetWeight() <= p.GetCapacity() }
func (p *Player) Equip(item gameObjectsBase.Itemer, slotIota int) (int, consts.JsonType) { var res consts.JsonType = nil slot := p.slots[slotIota] if slot == nil || !slot.isSuitableType(item.GetItemType()) { return consts.BADSLOT, res } if item.GetItemClass() != consts.ITEM_CLASS_GARMENT || p.Equipped(item) { return consts.BADID, res } p.Unequip(slotIota) db := connect.CreateConnect() _, err := db.Exec("CALL equip_item(?, ?, ?, ?)", p.DBId, item.GetKindId(), item.EquipItem(p.Inventory), slotIota) if err == nil { if ok, s := p.getNearbySlot(slotIota, item.GetItemSubtype()); ok { if p.slots[s].item != nil && p.slots[s].item.GetID() != item.GetID() { p.Unequip(s) } res = consts.JsonType{} res[consts.SlotNameMapping[s]] = item.GetID() p.slots[s].item = nil } else { p.Unequip(slotIota) } slot.item = item } if err == nil { return consts.OK, res } else { return consts.BADID, res } }
func (p *Player) RestoreItem(item gameObjectsBase.Itemer, place int) { p.Inventory.RestoreItem(item, place) item.SetOwner(p) }