private void HandleMapItemClick(OldMapItem mi) { if ((_mainCharacter.ID != mi.OwningPlayerID && mi.OwningPlayerID != 0) && (mi.IsNPCDrop && (DateTime.Now - mi.DropTime).TotalSeconds <= OldWorld.Instance.NPCDropProtectTime) || (!mi.IsNPCDrop && (DateTime.Now - mi.DropTime).TotalSeconds <= OldWorld.Instance.PlayerDropProtectTime)) { OldCharacter charRef = _parentMapRenderer.GetOtherPlayerByID((short)mi.OwningPlayerID); EOResourceID msg = charRef == null ? EOResourceID.STATUS_LABEL_ITEM_PICKUP_PROTECTED : EOResourceID.STATUS_LABEL_ITEM_PICKUP_PROTECTED_BY; string extra = charRef == null ? "" : charRef.Name; EOGame.Instance.Hud.SetStatusLabel(EOResourceID.STATUS_LABEL_TYPE_INFORMATION, msg, extra); } else { var item = OldWorld.Instance.EIF[mi.ItemID]; if (!EOGame.Instance.Hud.InventoryFits(mi.ItemID)) { EOGame.Instance.Hud.SetStatusLabel(EOResourceID.STATUS_LABEL_TYPE_INFORMATION, EOResourceID.STATUS_LABEL_ITEM_PICKUP_NO_SPACE_LEFT); } else if (_mainCharacter.Weight + item.Weight * mi.Amount > _mainCharacter.MaxWeight) { EOGame.Instance.Hud.SetStatusLabel(EOResourceID.STATUS_LABEL_TYPE_WARNING, EOResourceID.DIALOG_ITS_TOO_HEAVY_WEIGHT); } else if (!_game.API.GetItem(mi.UniqueID)) //server validates drop protection anyway { EOGame.Instance.DoShowLostConnectionDialogAndReturnToMainMenu(); } } }
private void _handleItemDrop(OldPacket pkt) { if (OnDropItem == null) { return; } short _id = pkt.GetShort(); int _amount = pkt.GetThree(); int characterAmount = pkt.GetInt(); //amount remaining for the character OldMapItem item = new OldMapItem { ItemID = _id, Amount = _amount, UniqueID = pkt.GetShort(), X = pkt.GetChar(), Y = pkt.GetChar(), //turn off drop protection since main player dropped it DropTime = DateTime.Now.AddSeconds(-5), IsNPCDrop = false, OwningPlayerID = 0 //id of 0 means the currently logged in player owns it }; byte characterWeight = pkt.GetChar(), characterMaxWeight = pkt.GetChar(); //character adjusted weights OnDropItem(characterAmount, characterWeight, characterMaxWeight, item); }
private void _dropItem(int characterAmount, byte weight, byte maxWeight, OldMapItem item) { OldWorld.Instance.ActiveMapRenderer.AddMapItem(item); if (characterAmount >= 0) //will be -1 when another player drops { OldWorld.Instance.MainPlayer.ActiveCharacter.UpdateInventoryItem(item.ItemID, characterAmount, weight, maxWeight); var rec = OldWorld.Instance.EIF[item.ItemID]; m_game.Hud.AddChat(ChatTab.System, "", $"{OldWorld.GetString(EOResourceID.STATUS_LABEL_ITEM_DROP_YOU_DROPPED)} {item.Amount} {rec.Name}", ChatIcon.DownArrow); m_game.Hud.SetStatusLabel(EOResourceID.STATUS_LABEL_TYPE_INFORMATION, EOResourceID.STATUS_LABEL_ITEM_DROP_YOU_DROPPED, $" {item.Amount} {rec.Name}"); } }
private void _handleItemAdd(OldPacket pkt) { if (OnDropItem == null) { return; } OldMapItem item = new OldMapItem { ItemID = pkt.GetShort(), UniqueID = pkt.GetShort(), Amount = pkt.GetThree(), X = pkt.GetChar(), Y = pkt.GetChar(), DropTime = DateTime.Now, IsNPCDrop = false, OwningPlayerID = -1 //another player dropped. drop protection says "Item protected" w/o player name }; OnDropItem(-1, 0, 0, item); }