public override void Handle(NecClient client, NecPacket packet) { int PartyLeaderInstanceId = packet.Data.ReadInt32(); uint targetPartyInstanceId = packet.Data.ReadUInt32(); Logger.Debug($"{client.Character.Name}Applied to party {targetPartyInstanceId}"); Party myParty = Server.Instances.GetInstance(targetPartyInstanceId) as Party; NecClient myPartyLeaderClient = Server.Clients.GetByCharacterInstanceId(myParty.PartyLeaderId); IBuffer res = BufferProvider.Provide(); res.WriteUInt32(myParty.PartyLeaderId); Router.Send(client.Map, (ushort)AreaPacketId.recv_party_apply_r, res, ServerType.Area); IBuffer res2 = BufferProvider.Provide(); res2.WriteUInt32(client.Character.partyId); //Party ID? res2.WriteUInt32(client.Character.InstanceId); res2.WriteFixedString($"{client.Soul.Name}", 0x31); res2.WriteFixedString($"{client.Character.Name}", 0x5B); res2.WriteUInt32(client.Character.ClassId); res2.WriteByte(client.Character.Level); res2.WriteByte(2); //Criminal Status res2.WriteByte(1); //Beginner Protection (bool) res2.WriteByte(1); //Membership Status res2.WriteByte(1); Router.Send(myPartyLeaderClient, (ushort)MsgPacketId.recv_party_notify_apply, res2, ServerType.Msg); }
public override void Handle(NecClient client, NecPacket packet) { byte presetNum = packet.data.ReadByte(); string keyword = packet.data.ReadFixedString(0x49); //Fixed string of 0x49 or 0x49 bytes. byte option1 = packet.data.ReadByte(); byte option2 = packet.data.ReadByte(); byte option3 = packet.data.ReadByte(); byte option4 = packet.data.ReadByte(); int unknown = packet.data.ReadInt32(); short stat1 = packet.data.ReadInt16(); //Stat of some sorts? short stat2 = packet.data.ReadInt16(); //Stat of some sorts? long gold = packet.data.ReadInt64(); //Gold?? byte option5 = packet.data.ReadByte(); byte checkBox = packet.data.ReadByte(); //Bool byte option6 = packet.data.ReadByte(); //These are 3 separate bytes or a fixed string of 3 characters. byte option7 = packet.data.ReadByte(); // byte option8 = packet.data.ReadByte(); // long gold2 = packet.data.ReadInt64(); //Gold?? long gold3 = packet.data.ReadInt64(); //Gold?? string presetName = packet.data.ReadFixedString(0xC1); //Fixed string of 0xC1 or 0xC1 bytes. byte option9 = packet.data.ReadByte(); byte option10 = packet.data.ReadByte(); IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); router.Send(client, (ushort)AreaPacketId.recv_auction_regist_search_equipment_cond_r, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); Router.Send(client, (ushort)MsgPacketId.recv_base_login_r, res, ServerType.Msg); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); res.WriteByte(0); Router.Send(client, (ushort)AreaPacketId.recv_event_end, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { /*int32, unknown * int32, target client(character) id[i think this is the sends structure]*/ int unknown = packet.Data.ReadInt32(); uint targetInstanceId = packet.Data.ReadUInt32(); NecClient targetClient = Server.Clients.GetByCharacterInstanceId(targetInstanceId); targetClient.Character.partyRequest = client.Character.InstanceId; if (targetInstanceId == 0) { targetInstanceId = client.Character.InstanceId; } //band-aid for null reference errors while testing. to-do Delete this line. Logger.Debug( $"ID {client.Character.InstanceId} {client.Character.Name} sent a party invite to {targetClient.Character.Name} with instance ID {targetInstanceId}"); IBuffer res = BufferProvider.Provide(); res.WriteUInt32(targetInstanceId); Router.Send(client, (ushort)AreaPacketId.recv_party_invite_r, res, ServerType.Area); SendPartyNotifyInvite(client, targetInstanceId); }
public override void Handle(NecClient client, NecPacket packet) { uint newsUpdatedByInstanceId = packet.data.ReadUInt32(); string unionNews = packet.data.ReadCString(); //Max size 0x196? IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); //error check. 0 for success. See sys_msg.csv for all error check messages. /* * 0 Union news changed * GENERIC Failed to change the union news * -1709 You do not have permission to change the news * -1715 The news contained banned words */ router.Send(client, (ushort)MsgPacketId.recv_union_request_set_info_r, res, ServerType.Msg); //ToDo //L"network::proto_msg_implement_client::recv_union_notify_info()\n" //Permissions check for news updating based on 'newsUpdatedByInstanceId'. Returns 0 or 1709 //Naughty word scrubbing for 'banned words' returns 1715 IBuffer res2 = BufferProvider.Provide(); res2.WriteInt32(0); //Error check probably. 0 means success? res2.WriteCString($"{unionNews}"); //max size 0x196 router.Send(client.union.unionMembers, (ushort)MsgPacketId.recv_union_notify_info, res2, ServerType.Msg); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); Router.Send(client, (ushort)MsgPacketId.recv_system_register_error_report_r, res, ServerType.Msg); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(1); int numEntries = 2; res.WriteInt32(numEntries);//less than 0x1E for (int j = 0; j < numEntries; j++) { res.WriteFixedString("idk", 385); res.WriteInt64(1); res.WriteByte(1); res.WriteFixedString("idk_also", 385); for (int i = 0; i < 5; i++) { res.WriteByte(1); res.WriteInt32(1); res.WriteInt32(1); res.WriteInt32(1); res.WriteInt32(1); res.WriteInt32(1); } } res.WriteByte(1); res.WriteInt32(1); res.WriteFloat(1); Router.Send(client, (ushort)AreaPacketId.recv_quest_get_mission_quest_works_r, res); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); // there is no recv }
public override void Handle(NecClient client, NecPacket packet) { Party myParty = Server.Instances.GetInstance(client.Character.partyId) as Party; IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); Router.Send(client, (ushort)AreaPacketId.recv_party_disband_r, res, ServerType.Area);; Router.Send(myParty.PartyMembers, (ushort)AreaPacketId.recv_party_disband_r, res, ServerType.Area); IBuffer res2 = BufferProvider.Provide(); Router.Send(myParty.PartyMembers, (ushort)MsgPacketId.recv_party_notify_disband, res2, ServerType.Msg); foreach (NecClient partyClient in myParty.PartyMembers) { IBuffer res3 = BufferProvider.Provide(); res3.WriteUInt32(partyClient.Character.InstanceId); Router.Send(partyClient.Map, (ushort)AreaPacketId.recv_charabody_notify_party_leave, res3, ServerType.Area); Router.Send(partyClient, (ushort)AreaPacketId.recv_party_leave_r, res3, ServerType.Area); } myParty.PartyMembers.Clear(); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); Router.Send(client, (ushort)AreaPacketId.recv_charabody_access_start_r, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { uint applicantInstanceId = packet.Data.ReadUInt32(); //Could be a Party ID value hidden as character-who-made-it's value Logger.Debug( $"character {client.Character.Name} accepted Application to party from character Instance ID {applicantInstanceId}"); IBuffer res = BufferProvider.Provide(); res.WriteUInt32(applicantInstanceId); Router.Send(client, (ushort)AreaPacketId.recv_party_accept_to_apply_r, res, ServerType.Area); Party myParty = Server.Instances.GetInstance(client.Character.partyId) as Party; NecClient applicantClient = Server.Clients.GetByCharacterInstanceId(applicantInstanceId); myParty.Join(applicantClient); IBuffer res2 = BufferProvider.Provide(); Router.Send(applicantClient, (ushort)MsgPacketId.recv_party_notify_accept_to_apply, res2, ServerType.Msg); foreach (NecClient partyClient in myParty.PartyMembers) { //if (partyClient != client) { SendPartyNotifyAddMember(partyClient, myParty); } } SendCharaBodyNotifyPartyJoin(applicantClient, myParty.InstanceId); }
public override void Handle(NecClient client, NecPacket packet) { ItemZoneType fromZone = (ItemZoneType)packet.data.ReadByte(); byte fromBag = packet.data.ReadByte(); short fromSlot = packet.data.ReadInt16(); ItemZoneType toZone = (ItemZoneType)packet.data.ReadByte(); byte toBag = packet.data.ReadByte(); short toSlot = packet.data.ReadInt16(); byte quantity = packet.data.ReadByte(); _Logger.Debug($"fromStoreType byte [{fromZone}] toStoreType byte [{toZone}]"); _Logger.Debug($"fromBagId byte [{fromBag}] toBagId byte [{toBag}]"); _Logger.Debug($"fromSlot byte [{fromSlot}] toSlot[{toSlot}]"); _Logger.Debug($"itemCount [{quantity}]"); ItemLocation fromLoc = new ItemLocation(fromZone, fromBag, fromSlot); ItemLocation toLoc = new ItemLocation(toZone, toBag, toSlot); ItemService itemService = new ItemService(client.character); int error = 0; try { MoveResult moveResult = itemService.Move(fromLoc, toLoc, quantity); List <PacketResponse> responses = itemService.GetMoveResponses(client, moveResult); router.Send(client, responses); } catch (ItemException e) { error = (int)e.type; } RecvStorageDrawItem2 recvStorageDrawItem2 = new RecvStorageDrawItem2(client, error); router.Send(recvStorageDrawItem2); }
public override void Handle(NecClient client, NecPacket packet) { int channelId = packet.Data.ReadInt32(); if (channelId == -1) { Logger.Debug( "Escape button was selected to close channel select. channelId code == -0xFFFF => SendEventEnd"); SendEventEnd(client); return; } if (!Server.Maps.TryGet(client.Character.MapId, out Map map)) { Logger.Error($"MapId: {client.Character.MapId} does not exist"); return; } client.Character.Channel = channelId; map.EnterForce(client); SendEventEnd(client); IBuffer res2 = BufferProvider.Provide(); res2.WriteUInt32(client.Character.InstanceId); res2.WriteCString("IsThisMyChannel?????"); //Length to be Found Router.Send(Server.Clients.GetAll(), (ushort)AreaPacketId.recv_channel_notify, res2, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { ItemZoneType zone = (ItemZoneType)packet.data.ReadByte(); byte bag = packet.data.ReadByte(); short slot = packet.data.ReadInt16(); //9 bytes left TODO investigate, probably one is identify price which is irrelevant, check price server side ItemLocation location = new ItemLocation(zone, bag, slot); ItemService itemService = new ItemService(client.character); ItemInstance identifiedItem; int error = 0; try { identifiedItem = itemService.GetIdentifiedItem(location); RecvItemInstance recvItemInstance = new RecvItemInstance(client, identifiedItem); router.Send(recvItemInstance); identifiedItem.currentDurability = identifiedItem.maximumDurability; RecvItemUpdateDurability recvItemUpdateDurability = new RecvItemUpdateDurability(client, identifiedItem); router.Send(recvItemUpdateDurability); } catch (ItemException e) { error = (int)e.type; } RecvShopIdentify recvShopIdentify = new RecvShopIdentify(client, error); router.Send(recvShopIdentify); }
public override void Handle(NecClient client, NecPacket packet) { uint kickTargetInstanceId = packet.data.ReadUInt32(); IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); //Kick Reason? error check? probably error check router.Send(client, (ushort)AreaPacketId.recv_party_kick_r, res, ServerType.Area); NecClient targetClient = server.clients.GetByCharacterInstanceId(kickTargetInstanceId); router.Send(targetClient, (ushort)MsgPacketId.recv_party_notify_kick, BufferProvider.Provide(), ServerType.Msg); IBuffer res2 = BufferProvider.Provide(); res2.WriteUInt32(targetClient.character.instanceId); router.Send(targetClient.map, (ushort)AreaPacketId.recv_charabody_notify_party_leave, res2, ServerType.Area); Party myParty = server.instances.GetInstance(client.character.partyId) as Party; IBuffer res3 = BufferProvider.Provide(); res3.WriteInt32(1); //Remove Reason res3.WriteUInt32(targetClient.character.instanceId); //Instance ID router.Send(myParty.partyMembers, (ushort)MsgPacketId.recv_party_notify_remove_member, res3, ServerType.Msg); /* * PARTY_REMOVE 0 %s has left the party * PARTY_REMOVE 1 You have kicked %s from the party * PARTY_REMOVE 2 %s has been buried */ myParty.partyMembers.Remove(targetClient); }
public override void Handle(NecClient client, NecPacket packet) { int data = packet.data.ReadInt32(); _Logger.Error(client, $"{client.soul.name} {client.character.name} has sent a disconnect packet to the server. Wave GoodBye! "); IBuffer buffer = BufferProvider.Provide(); buffer.WriteInt32(data); NecPacket response = new NecPacket( (ushort)CustomPacketId.RecvDisconnect, buffer, packet.serverType, PacketType.Disconnect ); router.Send(client, response); Task.Delay(TimeSpan.FromSeconds(60)).ContinueWith (t1 => { if (client == null) { return; } clients.Remove(client); } ); }
public override void Handle(NecClient client, NecPacket packet) { ItemZoneType zone = (ItemZoneType)packet.data.ReadByte(); byte bag = packet.data.ReadByte(); short slot = packet.data.ReadInt16(); ulong saleGold = packet.data.ReadUInt64(); //irrelevant, check sale price server side byte quantity = packet.data.ReadByte(); //TODO ItemService itemService = new ItemService(client.character); ItemInstance itemInstance = itemService.GetIdentifiedItem(new ItemLocation(zone, bag, slot)); IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); router.Send(client, (ushort)AreaPacketId.recv_shop_sell_check_r, res, ServerType.Area); res = BufferProvider.Provide(); res.WriteUInt64(itemInstance.instanceId); // id? res.WriteInt64(Util.GetRandomNumber(1000, 25000)); // price? res.WriteInt64(Util.GetRandomNumber(100, 2500)); // identify? res.WriteInt64(Util.GetRandomNumber(100, 2500)); // curse? res.WriteInt64(Util.GetRandomNumber(1000, 2500)); // repair? router.Send(client, (ushort)AreaPacketId.recv_shop_notify_item_sell_price, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { uint targetInstanceId = packet.Data.ReadUInt32(); NecClient targetClient = Server.Clients.GetByCharacterInstanceId(targetInstanceId); IBuffer res = BufferProvider.Provide(); res.WriteInt32(client.Character.unionId); //union instance id? res.WriteUInt32(targetInstanceId); //TargetInstanceId Router.Send(client, (ushort)MsgPacketId.recv_union_request_invite_target_r, res, ServerType.Msg); IBuffer res2 = BufferProvider.Provide(); res2.WriteInt32(client.Character.unionId); //ID of the Union res2.WriteUInt32(client.Character.InstanceId); //Reply to Instance Id for the invite res2.WriteFixedString($"by member {client.Character.Name}", 0x31); //size is 0x31 res2.WriteFixedString(client.Union.Name, 0x5B); //size is 0x5B res2.WriteInt32(client.Character.unionId); //Unknown res2.WriteByte(99); //Unknown res2.WriteCString(client.Union.Name); //max size 0x31 Router.Send(targetClient, (ushort)MsgPacketId.recv_union_notify_invite, res2, ServerType.Msg); }
public override void Handle(NecClient client, NecPacket packet) { int Unknown1 = packet.Data.ReadInt32(); uint instanceId = packet.Data.ReadUInt32(); int Unknown2 = packet.Data.ReadInt32(); client.Character.eventSelectReadyCode = (uint)instanceId; Logger.Debug($"Just attacked Target {client.Character.eventSelectReadyCode}"); int damage = 0; float perHp = 100.0f; int seed = Util.GetRandomNumber(0, 20); if (seed < 2) { damage = Util.GetRandomNumber(1, 4); // Light hit } else if (seed < 19) { damage = Util.GetRandomNumber(16, 24); // Normal hit } else { damage = Util.GetRandomNumber(32, 48); // Critical hit } //Testing some aoe damage stuff....... Takes a long time to process. AttackObjectsInRange(client, damage); SendBattleAttackExecR(client); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); router.Send(client.map, (ushort)AreaPacketId.recv_party_mentor_remove_r, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { byte isBuyout = packet.data.ReadByte(); int slot = packet.data.ReadInt32(); ulong bid = packet.data.ReadUInt64(); _Logger.Debug(isBuyout + " " + slot + " " + bid); int auctionError = 0; ItemService itemService = new ItemService(client.character); try { itemService.Bid(isBuyout, slot, bid); } catch (AuctionException e) { auctionError = (int)e.type; _Logger.Debug(e.ToString()); } IBuffer res = BufferProvider.Provide(); res.WriteInt32(auctionError); router.Send(client.map, (ushort)AreaPacketId.recv_auction_bid_r, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(1); //Continuous send of this packet if 0(time left is 0 if this is 0) Router.Send(client, (ushort)AreaPacketId.recv_quest_check_time_limit_r, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); Router.Send(client, (ushort)AreaPacketId.recv_quest_display_r, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); //Router.Send(client.Map, (ushort) AreaPacketId.recv_auction_bid_r, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { int unknown1 = packet.data.ReadInt32(); uint instanceId = packet.data.ReadUInt32(); int unknown2 = packet.data.ReadInt32(); client.character.eventSelectReadyCode = instanceId; _Logger.Debug($"Just attacked Target {client.character.eventSelectReadyCode}"); int damage = client.character.battleParam.plusPhysicalAttack; int seed = Util.GetRandomNumber(0, 20); if (seed < 2) { damage += Util.GetRandomNumber(1, 4); // Light hit } else if (seed < 19) { damage += Util.GetRandomNumber(16, 24); // Normal hit } else { damage *= 2; } damage += Util.GetRandomNumber(32, 48); // Critical hit if (client.account.state == AccountStateType.Admin) { damage *= 100; //testing death and revival is slow with low dmg. } AttackObjectsInRange(client, damage); SendBattleAttackExecR(client); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); router.Send(client, (ushort)AreaPacketId.recv_wanted_list_close_r, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); res.WriteCString("ToBeFound"); router.Send(client.map, (ushort)AreaPacketId.recv_event_system_message_timer, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); // 0 = msg friend added Router.Send(client, (ushort)MsgPacketId.recv_friend_result_reply_link2, res, ServerType.Msg); /* Logic for all the possibilities below goes above here. * FRIEND_REGIST 10 Sent Friend Request to %s * FRIEND_REGIST 20 Denied the Friend Request * FRIEND_REGIST 2 Your Friend Request was cancelled * FRIEND_REGIST 1 Your Friend Request was not approved * FRIEND_REGIST 0 Added %s on your Friend List * FRIEND_REGIST 200 %s approved your Friend Request and was added to your Friend List. * FRIEND_REGIST 201 %s has denied your Friend Request * FRIEND_REGIST 202 Unable to add to Friend List * FRIEND_REGIST -2101 %s is already on your Friend List * FRIEND_REGIST -2102 You have already asked someone else to join your Friend List. Try again once that player has replied. * FRIEND_REGIST -2103 Friend List full * FRIEND_REGIST -2104 The other party's Friend List is full * FRIEND_REGIST -2105 The targeted player is processing another Friend Request. Please try again later. * FRIEND_REGIST -2106 %s has denied your Friend Request * FRIEND_REGIST -2108 You have sent a Friend Request to %s * FRIEND_REGIST GENERIC Unable to add to Friend List */ }
public override void Handle(NecClient client, NecPacket packet) { ItemZoneType fromZone = (ItemZoneType)packet.data.ReadByte(); byte fromContainer = packet.data.ReadByte(); short fromSlot = packet.data.ReadInt16(); short toSlot = packet.data.ReadInt16(); byte quantity = packet.data.ReadByte(); ItemLocation fromLoc = new ItemLocation(fromZone, fromContainer, fromSlot); ItemService itemService = new ItemService(client.character); _itemInstance = itemService.GetIdentifiedItem(fromLoc); //To do; get regular item instead of identified item. Mark item as in trade. client.character.tradeWindowSlot[toSlot] = _itemInstance.instanceId; ItemLocation originalLocation = _itemInstance.location; _itemInstance.location = new ItemLocation(ItemZoneType.TradeWindow, 0, toSlot); //This is bad. it changes the stored location? NecClient targetClient = server.clients.GetByCharacterInstanceId((uint)client.character.eventSelectExecCode); IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); // error check? router.Send(client, (ushort)AreaPacketId.recv_trade_add_item_r, res, ServerType.Area); if (targetClient != null) { RecvItemInstance itemInstance = new RecvItemInstance(targetClient, _itemInstance); router.Send(itemInstance); } _itemInstance.location = originalLocation; }