private void SendItems(NecClient client, int[] itemIds) { ItemSpawnParams[] spawmParams = new ItemSpawnParams[itemIds.Length]; for (int i = 0; i < itemIds.Length; i++) { spawmParams[i] = new ItemSpawnParams(); spawmParams[i].itemStatuses = ItemStatuses.Identified; } ItemService itemService = new ItemService(client.character); List <ItemInstance> items = itemService.SpawnItemInstances(ItemZoneType.AdventureBag, itemIds, spawmParams); RecvSituationStart recvSituationStart = new RecvSituationStart(2); router.Send(client, recvSituationStart.ToPacket()); foreach (ItemInstance itemInstance in items) { _Logger.Debug(itemInstance.type.ToString()); RecvItemInstance recvItemInstance = new RecvItemInstance(client, itemInstance); router.Send(client, recvItemInstance.ToPacket()); } RecvSituationEnd recvSituationEnd = new RecvSituationEnd(); router.Send(client, recvSituationEnd.ToPacket()); }
public override void Handle(NecClient client, NecPacket packet) { ItemService itemService = new ItemService(client.character); int result = 0; int instanceId = packet.data.ReadInt32(); MonsterSpawn monster = client.map.GetMonsterByInstanceId((uint)instanceId); _Logger.Debug($"{client.character.name} is trying to loot object {instanceId}. Inventory Space {client.character.itemLocationVerifier.GetTotalFreeSpace(ItemZoneType.AdventureBag)}"); ItemLocation nextOpenLocation = client.character.itemLocationVerifier.NextOpenSlot(ItemZoneType.AdventureBag); if (monster == null) { result = -10; } else if (monster.loot.itemCountRng == 0) { result = -1; } else if (nextOpenLocation.zoneType == ItemZoneType.InvalidZone) { result = -207; //expand to all inventory. TODO } IBuffer res2 = BufferProvider.Provide(); res2.WriteInt32(result); router.Send(client, (ushort)AreaPacketId.recv_loot_access_object_r, res2, ServerType.Area); //LOOT, -1, I don't have anything. , SYSTEM_WARNING, //LOOT, -10, no route target, SYSTEM_WARNING, //LOOT, -207, There is no space in the inventory. , SYSTEM_WARNING, //LOOT, -1500, no root authority. , SYSTEM_WARNING, if (result == 0) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(2); router.Send(client, (ushort)AreaPacketId.recv_situation_start, res, ServerType.Area); int itemId = monster.loot.dropTableItemSerialIds[monster.loot.itemCountRng]; ItemSpawnParams spawmParam = new ItemSpawnParams(); spawmParam.itemStatuses = ItemStatuses.Identified; ItemInstance itemInstance = itemService.SpawnItemInstance(ItemZoneType.AdventureBag, itemId, spawmParam); _Logger.Debug(itemInstance.type.ToString()); RecvItemInstance recvItemInstance = new RecvItemInstance(client, itemInstance); router.Send(client, recvItemInstance.ToPacket()); monster.loot.itemCountRng--; //decrement available items res = BufferProvider.Provide(); router.Send(client, (ushort)AreaPacketId.recv_situation_end, res, ServerType.Area); } }
public void LoadInventory(NecClient client, NecServer server) { ItemService itemService = new ItemService(client.character); List <ItemInstance> ownedItems = itemService.LoadOwneditemInstances(server); foreach (ItemInstance itemInstance in ownedItems) { if (itemInstance.statuses.HasFlag(ItemStatuses.Unidentified)) { RecvItemInstanceUnidentified recvItemInstanceUnidentified = new RecvItemInstanceUnidentified(client, itemInstance); router.Send(client, recvItemInstanceUnidentified.ToPacket()); _Logger.Debug($" Unidentified item : {itemInstance.location.zoneType}"); } else { RecvItemInstance recvItemInstance = new RecvItemInstance(client, itemInstance); router.Send(client, recvItemInstance.ToPacket()); } } }
public override void Handle(NecClient client, NecPacket packet) { byte index = packet.data.ReadByte(); ulong price = packet.data.ReadUInt64(); byte count = packet.data.ReadByte(); client.character.adventureBagGold -= count * price; server.database.UpdateCharacter(client.character); RecvSelfMoneyNotify recvSelfMoneyNotify = new RecvSelfMoneyNotify(client, client.character.adventureBagGold); router.Send(recvSelfMoneyNotify, client); if (client.character.shopItemIndex != null) { int itemId = client.character.shopItemIndex[index]; ItemSpawnParams spawmParam = new ItemSpawnParams(); spawmParam.itemStatuses = ItemStatuses.Identified; spawmParam.quantity = count; ItemService itemService = new ItemService(client.character); ItemInstance itemInstance = itemService.SpawnItemInstance(ItemZoneType.AdventureBag, itemId, spawmParam); RecvSituationStart recvSituationStart = new RecvSituationStart(2); router.Send(client, recvSituationStart.ToPacket()); RecvItemInstance recvItemInstance = new RecvItemInstance(client, itemInstance); router.Send(client, recvItemInstance.ToPacket()); RecvSituationEnd recvSituationEnd = new RecvSituationEnd(); router.Send(client, recvSituationEnd.ToPacket()); } IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); router.Send(client, (ushort)AreaPacketId.recv_shop_buy_r, res, ServerType.Area); }
public override void Execute(string[] command, NecClient client, ChatMessage message, List <ChatResponse> responses) { if (command.Length < 1) { responses.Add(ChatResponse.CommandError(client, "To few arguments")); return; } if (!int.TryParse(command[0], out int itemId)) { responses.Add(ChatResponse.CommandError(client, $"Invalid Number: {command[0]}")); return; } if (client.character == null) { responses.Add(ChatResponse.CommandError(client, "Character is null")); return; } if (!server.settingRepository.itemInfo.ContainsKey(itemId)) { responses.Add(ChatResponse.CommandError(client, $"ItemId: '{itemId}' does not exist")); return; } ItemSpawnParams spawmParam = new ItemSpawnParams(); spawmParam.itemStatuses = ItemStatuses.Identified; if (command.Length > 1 && command[1] == "u") { spawmParam.itemStatuses = ItemStatuses.Unidentified; } ItemService itemService = new ItemService(client.character); ItemInstance itemInstance = itemService.SpawnItemInstance(ItemZoneType.AdventureBag, itemId, spawmParam); byte itemZoneOverride = 0; IBuffer res = BufferProvider.Provide(); res.WriteInt32(2); router.Send(client, (ushort)AreaPacketId.recv_situation_start, res, ServerType.Area); if (command.Length > 1 && command[1] == "u") { if (command.Length > 2 && command[2] != "") { itemZoneOverride = byte.Parse(command[2]); } else { itemZoneOverride = (byte)itemInstance.location.zoneType; } _Logger.Debug(itemInstance.type.ToString()); RecvItemInstanceUnidentified recvItemInstanceUnidentified = new RecvItemInstanceUnidentified(client, itemInstance); router.Send(client, recvItemInstanceUnidentified.ToPacket()); } else { _Logger.Debug(itemInstance.type.ToString()); RecvItemInstance recvItemInstance = new RecvItemInstance(client, itemInstance); router.Send(client, recvItemInstance.ToPacket()); } res = BufferProvider.Provide(); router.Send(client, (ushort)AreaPacketId.recv_situation_end, res, ServerType.Area); }
private void RandomItemGuy(NecClient client, NpcSpawn npcSpawn) { ItemSpawnParams spawmParam = new ItemSpawnParams(); spawmParam.itemStatuses = ItemStatuses.Unidentified; ItemService itemService = new ItemService(client.character); ItemInstance itemInstance = null; IBuffer res = BufferProvider.Provide(); res.WriteInt32(2); router.Send(client, (ushort)AreaPacketId.recv_situation_start, res, ServerType.Area); ItemLocation nextOpenLocation = client.character.itemLocationVerifier.NextOpenSlot(ItemZoneType.AdventureBag); if (nextOpenLocation.zoneType == ItemZoneType.InvalidZone) { res = BufferProvider.Provide(); res.WriteCString($"Your Adventure Bag is full. Go away already! {client.soul.name}"); // Length 0xC01 router.Send(client, (ushort)AreaPacketId.recv_event_system_message, res, ServerType.Area); // show system message on middle of the screen. } else { if (client.character.eventSelectExecCode == 0) { List <ItemInfoSetting> weaponlist = new List <ItemInfoSetting>(); foreach (ItemInfoSetting weapon in server.settingRepository.itemInfo.Values) { if ((weapon.id > 10100101) & (weapon.id < 15300101)) { weaponlist.Add(weapon); } } int baseId = weaponlist[Util.GetRandomNumber(0, weaponlist.Count)].id; itemInstance = itemService.SpawnItemInstance(ItemZoneType.AdventureBag, baseId, spawmParam); RecvItemInstanceUnidentified recvItemInstanceUnidentified = new RecvItemInstanceUnidentified(client, itemInstance); router.Send(client, recvItemInstanceUnidentified.ToPacket()); } else if (client.character.eventSelectExecCode == 1) { List <ItemInfoSetting> armorList = new List <ItemInfoSetting>(); foreach (ItemInfoSetting armor in server.settingRepository.itemInfo.Values) { if ((armor.id > 16100101) & (armor.id < 30499901)) { armorList.Add(armor); } } int baseId = armorList[Util.GetRandomNumber(0, armorList.Count)].id; itemInstance = itemService.SpawnItemInstance(ItemZoneType.AdventureBag, baseId, spawmParam); RecvItemInstanceUnidentified recvItemInstanceUnidentified = new RecvItemInstanceUnidentified(client, itemInstance); router.Send(client, recvItemInstanceUnidentified.ToPacket()); } else if (client.character.eventSelectExecCode == 2) { //50401040,Moist Cudgel int baseId = 50401040; //This can select from a small array of items, and a small array of custom names spawmParam.itemStatuses = ItemStatuses.Identified; itemInstance = itemService.SpawnItemInstance(ItemZoneType.AdventureBag, baseId, spawmParam); RecvItemInstance recvItemInstance = new RecvItemInstance(client, itemInstance); router.Send(client, recvItemInstance.ToPacket()); } if (itemInstance == null) { res = BufferProvider.Provide(); res.WriteCString("Better Luck Next Time. I ran out of items!"); // Length 0xC01 router.Send(client, (ushort)AreaPacketId.recv_event_system_message, res, ServerType.Area); // show system message on middle of the screen. res = BufferProvider.Provide(); router.Send(client, (ushort)AreaPacketId.recv_situation_end, res, ServerType.Area); RecvEventEnd(client); //End The Event return; } res = BufferProvider.Provide(); res.WriteCString($"Enjoy your new Super {itemInstance.unidentifiedName}"); // Length 0xC01 router.Send(client, (ushort)AreaPacketId.recv_event_system_message, res, ServerType.Area); // show system message on middle of the screen. } res = BufferProvider.Provide(); router.Send(client, (ushort)AreaPacketId.recv_situation_end, res, ServerType.Area); RecvEventEnd(client); //End The Event }