public override void Execute(string[] command, NecClient client, ChatMessage message, List <ChatResponse> responses) { Logger.Debug($"Entering"); if (command[0] == null) { responses.Add(ChatResponse.CommandError(client, $"Invalid argument: {command[0]}")); } Logger.Debug($"command [0]"); int.TryParse(command[1], out int x); int.TryParse(command[2], out int y); int.TryParse(command[3], out int z); switch (command[0]) { case "dagger": Item item = null; if (y == 0) { RecvCharaUpdateAlignment charAlign = new RecvCharaUpdateAlignment(1); _server.Router.Send(charAlign, client); item = SendItemInstanceUnidentified(client, 10200101, x, (int)ITEM_TYPE.DAGGER, "Dagger"); } else { item = SendItemInstance(client, 10200101, (int)ITEM_TYPE.DAGGER, "Dagger"); } if (item == null) { return; } Logger.Debug($"dagger instanceId [{item.InstanceId}]"); break; case "healpot": Item healItem = null; if (y == 0) { healItem = SendItemInstanceUnidentified(client, 50100101, x, (int)ITEM_TYPE.DRUG, "Heal Pot"); } else { //healItem = SendItemInstance(client, "Test"); } Logger.Debug($"dagger instanceId [{healItem.InstanceId}]"); break; case "create": Item createItem = null; if (y == 0) { createItem = SendItemInstanceUnidentified(client, x, 1, y, ""); } else { //createItem = SendItemInstance(client, "Test"); } Logger.Debug($"dagger instanceId [{createItem.InstanceId}]"); break; case "draw": RecvPartyNotifyAddDrawItem itemMsg = new RecvPartyNotifyAddDrawItem((ulong)x, 30.0F, 0); _server.Router.Send(itemMsg, client); break; case "getitema": IBuffer resa = BufferProvider.Provide(); //recv_normal_system_message = 0xAE2B, resa.WriteInt32(x); resa.WriteCString(command[3]); resa.WriteByte((byte)y); Router.Send(client, (ushort)AreaPacketId.recv_party_notify_get_item, resa, ServerType.Area); break; case "getitemm": IBuffer resm = BufferProvider.Provide(); //recv_normal_system_message = 0xAE2B, resm.WriteInt32(x); resm.WriteCString(command[3]); resm.WriteByte((byte)y); Router.Send(client, (ushort)MsgPacketId.recv_party_notify_get_item, resm, ServerType.Msg); break; case "soulitem": IBuffer res19 = BufferProvider.Provide(); res19.WriteInt32(Util.GetRandomNumber(62000001, 62000015)); //soul_dispitem.csv Router.Send(client, (ushort)AreaPacketId.recv_soul_dispitem_notify_data, res19, ServerType.Area); break; case "soulmat": for (int i = 0; i < x; i++) { IBuffer res20 = BufferProvider.Provide(); res20.WriteInt32(Util.GetRandomNumber(998000, 1000000)); res20.WriteFloat(client.Character.X); //X res20.WriteFloat(client.Character.Y); //Y res20.WriteFloat(client.Character.Z); //Z res20.WriteFloat(client.Character.X + Util.GetRandomNumber(-300, 300)); //X res20.WriteFloat(client.Character.Y + Util.GetRandomNumber(-300, 200)); //Y res20.WriteFloat(client.Character.Z + 10); //Z res20.WriteByte((byte)Util.GetRandomNumber(0, 255)); res20.WriteInt32(Util.GetRandomNumber(0, 199999)); res20.WriteInt32(Util.GetRandomNumber(0, 199999)); res20.WriteInt32(Util.GetRandomNumber(0, 199999)); res20.WriteInt32(Util.GetRandomNumber(0, 1000)); // bitmask 0bxxxxx1 = arch 0bxxxxx0 = no arch y = Util.GetRandomNumber(1, 4); if (y == 1) { Router.Send(client, (ushort)AreaPacketId.recv_data_notify_goldobject_data, res20, ServerType.Area); } res20.WriteInt32(Util.GetRandomNumber(0, 199999)); if (y == 2) { Router.Send(client, (ushort)AreaPacketId.recv_data_notify_soulmaterialobject_data, res20, ServerType.Area); } if (y == 3) { Router.Send(client, (ushort)AreaPacketId.recv_data_notify_itemobject_data, res20, ServerType.Area); } } break; case "physics": IBuffer res21 = BufferProvider.Provide(); res21.WriteInt64(x); //item instance id res21.WriteInt16((short)y); //item's attack stat Router.Send(client, (ushort)AreaPacketId.recv_item_update_physics, res21, ServerType.Area); break; case "leatherguard": case "lg": if (y == 0) { item = SendItemInstanceUnidentified(client, 100101, x, (int)ITEM_TYPE.HELMET, "Leather Guard"); } else { item = SendItemInstance(client, 100101, (int)ITEM_TYPE.HELMET, "Leather Guard"); } if (item == null) { return; } Logger.Debug($"dagger instanceId [{item.InstanceId}]"); break; case "rottenleathermail": case "rlm": if (x == 0) { item = SendItemInstanceUnidentified(client, 200110, 1, y, "Rotten Leather Mail"); } else { item = SendItemInstance(client, 200110, (int)ITEM_TYPE.COAT, "Rotten Leather Mail"); } if (item == null) { return; } Logger.Debug($"dagger instanceId [{item.InstanceId}]"); break; case "buff": Buff[] selfBuffs = new Buff[1]; Buff testBuff = new Buff(); testBuff.buffId = x; testBuff.unknown1 = y; testBuff.unknown2 = z; selfBuffs[0] = testBuff; RecvSelfBuffNotify selfBuff = new RecvSelfBuffNotify(selfBuffs); _server.Router.Send(selfBuff, client); break; case "itemt": IBuffer res = BufferProvider.Provide(); res.WriteUInt64(invItem.InstanceId); res.WriteInt16((short)x); Router.Send(client, (ushort)AreaPacketId.recv_0x746F, res, ServerType.Area); break; case "testitem": Item item1 = SendItemInstanceUnidentified(client, 10200101, 1, (int)ITEM_TYPE.DAGGER, "Dagger"); RecvItemTest recvTest = new RecvItemTest((ulong)item1.InstanceId, (ushort)x, (uint)y, (uint)z); Router.Send(recvTest, client); break; default: Logger.Error($"There is no recv of type : {command[0]} "); break; } }
public override void Handle(NecClient client, NecPacket packet) { int instanceID = packet.Data.ReadInt32(); Logger.Debug($"{client.Character.Name} is {client.Character.Alignmentid}"); IBuffer res = null; //res2.WriteInt32(instanceID); //Router.Send(client, (ushort) AreaPacketId.recv_loot_access_object_r, res2, ServerType.Area); res = BufferProvider.Provide(); res.WriteInt32(instanceID); Router.Send(client, (ushort)AreaPacketId.recv_loot_access_object_r, res, ServerType.Area); MonsterSpawn monster = client.Map.GetMonsterByInstanceId((uint)instanceID); DropTables dropTable = new DropTables(_server); DropItem dropItem = dropTable.GetLoot(monster.MonsterId); if (dropItem == null) { return; } InventoryItem invItem = client.Character.GetNextInventoryItem(_server, (byte)dropItem.NumItems, dropItem.Item); if (invItem == null) { res = BufferProvider.Provide(); res.WriteInt32(-207); Router.Send(client, (ushort)AreaPacketId.recv_loot_access_object_r, res, ServerType.Area); RecvNormalSystemMessage noSpace = new RecvNormalSystemMessage("Inventory is full!!!!"); _server.Router.Send(noSpace, client); return; } string lootMsg = $"Looted {dropItem.NumItems} {dropItem.Item.Name} from {monster.Name}."; Logger.Debug($"Loot is {dropItem.NumItems} of {dropItem.Item.Id}"); if (dropItem.Item.Id == 1) { client.Character.AdventureBagGold += dropItem.NumItems; RecvSelfMoneyNotify addMoney = new RecvSelfMoneyNotify(client.Character.AdventureBagGold); Router.Send(addMoney, client); } else { res = null; res = BufferProvider.Provide(); //res.WriteInt64(dropItem.Item.Id); //Item Object Instance ID res.WriteUInt64(dropItem.Item.InstanceId); //Item Object Instance ID res.WriteCString(dropItem.Item.Name); //Name //res.WriteInt32(dropItem.Item.IconType); res.WriteInt32(dropItem.Item.IconType); //item type res.WriteInt32(0); res.WriteByte((byte)dropItem.NumItems); //Number of items res.WriteInt32(0); //Item status 0 = identified res.WriteInt32(dropItem.Item.Id); //Item icon 50100301 = camp res.WriteByte(0); res.WriteByte(0); res.WriteByte(0); res.WriteInt32(0); res.WriteByte(0); res.WriteByte(0); res.WriteByte(0); res.WriteByte(0); res.WriteByte(0); res.WriteByte(1); // bool res.WriteByte(0); res.WriteByte(0); res.WriteByte(0); res.WriteByte(0); res.WriteByte(0); res.WriteByte(invItem.StorageType); // 0 = adventure bag. 1 = character equipment res.WriteByte(invItem.StorageId); // 0~2 res.WriteInt16(invItem.StorageSlot); // bag index res.WriteInt32( 0); //bit mask. This indicates where to put items. e.g. 01 head 010 arm 0100 feet etc (0 for not equipped) res.WriteInt64(0); res.WriteInt32(0); Router.Send(client, (ushort)AreaPacketId.recv_item_instance_unidentified, res, ServerType.Area); } RecvMonsterStateUpdateNotify monsterState = new RecvMonsterStateUpdateNotify((uint)instanceID, 1); Router.Send(client.Map, monsterState); if (dropItem.Item.Id != 1) { //RecvPartyNotifyGetItem itemMsg = new RecvPartyNotifyGetItem(dropItem.Item.Id, dropItem.Item.Name, (byte)dropItem.NumItems); RecvPartyNotifyAddDrawItem itemMsg = new RecvPartyNotifyAddDrawItem(dropItem.Item.InstanceId, 30.0F, 0); _server.Router.Send(itemMsg, client); } }