public override void Execute(string[] command, NecClient client, ChatMessage message, List <ChatResponse> responses) { //recv_stall_sell_item = 0x919C, IBuffer res = BufferProvider.Provide(); res.WriteCString("C1Str"); // find max size Character name/Soul name res.WriteCString("CStr2"); // find max size Character name/Soul name res.WriteInt64(25); res.WriteByte(0); res.WriteByte(0); res.WriteInt16(16); res.WriteUInt32(client.character.instanceId); //Item id router.Send(client, (ushort)AreaPacketId.recv_stall_sell_item, res, ServerType.Area); }
private void SendItemPlaceChange(NecClient client) { x = -1; x++; IBuffer res = BufferProvider.Provide(); //res.WriteInt64(invItem.StorageItem.InstanceId); // item id //res.WriteByte(fromStoreType);// 0 = adventure bag. 1 = character equipment, 2 = royal bag ?? //res.WriteByte(fromBagId); // Position 2 ?? //res.WriteInt16(fromSlot); // bag index 0 to 24 //res.WriteInt64(invItem.StorageItem.InstanceId); // item id //res.WriteByte(toStoreType); // 0 = adventure bag. 1 = character equipment, 2 = royal bag ?? //res.WriteByte(toBagId); // Position 2 ?? //res.WriteInt16(toSlot); // bag index 0 to 24 Router.Send(client, (ushort)AreaPacketId.recv_item_update_place_change, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { ushort mantleDesign = packet.Data.ReadUInt16(); IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); Router.Send(client, (ushort)MsgPacketId.recv_union_request_set_mantle_r, res, ServerType.Msg); IBuffer res2 = BufferProvider.Provide(); res2.WriteUInt16(mantleDesign); //design Router.Send(client.Map /*myUnion.UnionMembers*/, (ushort)MsgPacketId.recv_union_notify_mantle, res2, ServerType.Msg); }
public override void Handle(NecClient client, NecPacket packet) { uint targetId = packet.Data.ReadUInt32(); IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); Router.Send(client, (ushort)AreaPacketId.recv_charabody_salvage_request_r, res, ServerType.Area); IBuffer res2 = BufferProvider.Provide(); res2.WriteUInt32(targetId); res2.WriteCString("soul"); // find max size res2.WriteCString("char"); // find max size Router.Send(client.Map, (ushort)AreaPacketId.recv_charabody_salvage_notify_body, res2, ServerType.Area); }
protected override IBuffer ToBuffer() { IBuffer res = BufferProvider.Provide(); res.WriteUInt32(_character.instanceId); // Object ID res.WriteFloat(_character.x); // x res.WriteFloat(_character.y); // y res.WriteFloat(_character.z + 100); // z res.WriteByte(_character.heading); //heading res.WriteInt32(_serialId); //serial ID. 1 is a box res.WriteInt32(0b11111111); //state return(res); }
public override void Handle(NecClient client, NecPacket packet) { int questId = packet.data.ReadInt32(); int prizeSlot = packet.data.ReadInt32(); IBuffer res = BufferProvider.Provide(); //remove quest //receive item //add completed quest to history //increase exp //increase soul points //next quest hint //etc..... }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); router.Send(client, (ushort)AreaPacketId.recv_soul_dispitem_request_data_r, res, ServerType.Area); //ToDo find a better home for these functionalities . This send is the last stop before initial map entry. LoadInventory(client, _server); LoadCloakRoom(client, _server); //LoadBattleStats(client); LoadHonor(client); //LoadSoulDispItem(client); LoadSoulState(client); }
public override void Handle(NecClient client, NecPacket packet) { IBuffer res = BufferProvider.Provide(); router.Send(client, (ushort)AreaPacketId.recv_battle_guard_end_self, res, ServerType.Area); res.WriteInt32(0); router.Send(client, (ushort)AreaPacketId.recv_battle_guard_end_r, res, ServerType.Area); client.character.ClearStateBit(CharacterState.BlockPose); res = BufferProvider.Provide(); res.WriteUInt32(client.character.instanceId); router.Send(client.map, (ushort)AreaPacketId.recv_dbg_battle_guard_end_notify, res, ServerType.Area); }
protected override IBuffer ToBuffer() { IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); res.WriteInt32(0); res.WriteInt32(0); res.WriteFixedString("", 0x31); res.WriteFixedString("", 0x25); res.WriteInt32(0); res.WriteInt32(0); res.WriteInt32(0); res.WriteFixedString("", 0x301); return(res); }
public override void Execute(string[] command, NecClient client, ChatMessage message, List <ChatResponse> responses) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(-10); /* * LOOT -1 It is carrying nothing * LOOT -10 No one can be looted nearby * LOOT -207 No space available in inventory * LOOT -1500 No permission to loot */ Router.Send(client, (ushort)AreaPacketId.recv_loot_access_object_r, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { client.Character.battleAnim = 231; //at the start of every attack, set the battle anim to 231. 231 is the 1st anim for all weapon types client.Character.battleNext = 0; IBuffer res = BufferProvider.Provide(); res.WriteUInt32(client.Character.InstanceId); //0 means success Router.Send(client, (ushort)AreaPacketId.recv_battle_attack_start_r, res, ServerType.Area); IBuffer res2 = BufferProvider.Provide(); res2.WriteUInt32(client.Character.InstanceId); Router.Send(client.Map, (ushort)AreaPacketId.recv_battle_attack_start, res2, ServerType.Area, client); }
protected override IBuffer ToBuffer() { IBuffer res = BufferProvider.Provide(); int numEntries = 0x2; res.WriteInt32(numEntries); //less than 0x5 for (int k = 0; k < numEntries; k++) { //sub_496E30 res.WriteInt32(0); res.WriteInt32(0); res.WriteByte(0); } return(res); }
private void NotifyFriendInvite(NecClient client, uint targetInstanceId) { IBuffer res2 = BufferProvider.Provide(); res2.WriteUInt32(client.Character .InstanceId); // Change nothing visibaly ? Friend Relationship instance ID??? for database lookup? res2.WriteUInt32(client.Character.InstanceId); //? res2.WriteFixedString($"{client.Soul.Name}", 0x31); //size is 0x31 res2.WriteFixedString($"{client.Character.Name}", 0x5B); //size is 0x5B res2.WriteUInt32(client.Character.InstanceId); //? res2.WriteByte(1); Router.Send(Server.Clients.GetByCharacterInstanceId(targetInstanceId), (ushort)MsgPacketId.recv_friend_notify_link_invite, res2, ServerType.Msg); Server.Clients.GetByCharacterInstanceId(targetInstanceId).Character.friendRequest = client.Character.InstanceId; }
private void SendMapChangeForce(NecClient client) { IBuffer res = BufferProvider.Provide(); res.WriteInt32(1001001); res.WriteInt32(1001001); res.WriteFixedString("127.0.0.1", 65); //IP res.WriteInt16(60002); //Port res.WriteFloat(100); //x coord res.WriteFloat(100); //y coord res.WriteFloat(100); //z coord res.WriteByte(1); //view offset maybe? Router.Send(client, (ushort)AreaPacketId.recv_map_change_force, res); }
public override void Execute(string[] command, NecClient client, ChatMessage message, List <ChatResponse> responses) { if (!int.TryParse(command[0], out int x)) { responses.Add(ChatResponse.CommandError(client, $"Invalid Number: {command[0]}")); return; } IBuffer res = BufferProvider.Provide(); res.WriteUInt32(client.Character.InstanceId); res.WriteInt32(x); Router.Send(client.Map, 0x1489, res, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { string recipient = packet.Data.ReadCString(); string title = packet.Data.ReadCString(); string content = packet.Data.ReadCString(); int unknownInt = packet.Data.ReadInt32(); byte itemCount = packet.Data.ReadByte(); long money = packet.Data.ReadInt64(); IBuffer res = BufferProvider.Provide(); res.WriteInt32(0);//Failed to send message error if not 0 Router.Send(client, (ushort)AreaPacketId.recv_create_package_r, res, ServerType.Area); SendPackageNotifyAdd(client, recipient, title, content, unknownInt, itemCount, money); }
protected override IBuffer ToBuffer() { IBuffer res = BufferProvider.Provide(); //res.WriteInt64(dropItem.Item.Id); //Item Object Instance ID res.WriteUInt64(_invItem.InstanceId); //Item Object Instance ID res.WriteCString(_invItem.StorageItem.Name); //Name //res.WriteInt32(dropItem.Item.IconType); res.WriteInt32(_invItem.StorageItem.IconType); //item type res.WriteInt32(0); res.WriteByte(_invItem.StorageCount); //Number of items res.WriteInt32(0); //Item status 0 = identified res.WriteInt32(_invItem.StorageItem.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); return(res); }
public bool MonsterCheck() { // Logger.Debug($"Monster HP [{_monster.GetHP()}]"); if (_monster.Hp.current <= 0) { foreach (uint instanceId in _monster.GetAgroInstanceList()) { _monster.MonsterHate(_server, false, instanceId); } Logger.Debug($"Monster is dead InstanceId [{_monster.InstanceId}]"); //Death Animation List <PacketResponse> brList = new List <PacketResponse>(); RecvBattleReportStartNotify brStart = new RecvBattleReportStartNotify(_monster.InstanceId); RecvBattleReportEndNotify brEnd = new RecvBattleReportEndNotify(); RecvBattleReportNoactDead brDead = new RecvBattleReportNoactDead(_monster.InstanceId, 1); brList.Add(brStart); brList.Add(brDead); brList.Add(brEnd); _server.Router.Send(Map, brList); //Make the monster a lootable state IBuffer res10 = BufferProvider.Provide(); res10.WriteUInt32(_monster.InstanceId); res10.WriteInt32(2); //Toggles state between Alive(attackable), Dead(lootable), or Inactive(nothing). _server.Router.Send(Map, (ushort)AreaPacketId.recv_monster_state_update_notify, res10, ServerType.Area); Thread.Sleep(_monster.RespawnTime); //decompose the body IBuffer res7 = BufferProvider.Provide(); res7.WriteUInt32(_monster.InstanceId); res7.WriteInt32( 5); //4 here causes a cloud and the model to disappear, 5 causes a mist to happen and disappear res7.WriteInt32(1); _server.Router.Send(Map, (ushort)AreaPacketId.recv_charabody_notify_deadstate, res7, ServerType.Area); Thread.Sleep(2000); RecvObjectDisappearNotify objectDisappearData = new RecvObjectDisappearNotify(_monster.InstanceId); _server.Router.Send(Map, objectDisappearData); _monster.MonsterVisible = false; spawnMonster = true; return(true); } return(false); }
protected override IBuffer ToBuffer() { IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); res.WriteInt16(0); res.WriteByte(0); res.WriteInt32(0); res.WriteInt32(0); int numEntries = 19; res.WriteInt32(numEntries); // less than or equal to 19 for (int i = 0; i < numEntries; i++) { res.WriteInt32(0); } numEntries = 19; res.WriteInt32(numEntries); //less than or equal to 19 for (int i = 0; i < numEntries; i++) { res.WriteInt32(0); 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(0); //bool res.WriteByte(0); res.WriteByte(0); res.WriteByte(0); res.WriteByte(0); res.WriteByte(0); } numEntries = 19; res.WriteInt32(numEntries); //less than or equal to 19 for (int i = 0; i < numEntries; i++) { res.WriteInt32(0); } return(res); }
public override void Handle(NecClient client, NecPacket packet) { /*int32, party type: 1 = open, 0 = closed * int32, normal item distribution: 1 = random, 0 = do not distribute * int32, rare item distribution: 1 = draw, 0 = do not distribute * int32, target client(character) id*/ int partyType = packet.data.ReadInt32(); int normItemDist = packet.data.ReadInt32(); int rareItemDist = packet.data.ReadInt32(); uint targetInstanceId = packet.data.ReadUInt32(); Party myFirstParty = new Party(); server.instances.AssignInstance(myFirstParty); myFirstParty.partyType = partyType; myFirstParty.normalItemDist = normItemDist; myFirstParty.rareItemDist = rareItemDist; myFirstParty.targetClientId = targetInstanceId; myFirstParty.Join(client); myFirstParty.partyLeaderId = client.character.instanceId; client.character.partyId = myFirstParty.instanceId; RecvPartyNotifyEstablish recvPartyNotifyEstablish = new RecvPartyNotifyEstablish(client, myFirstParty); router.Send(recvPartyNotifyEstablish, client); // Only establish the party for the acceptee. everyone else is already established. RecvCharaBodyNotifyPartyJoin recvCharaBodyNotifyPartyJoin = new RecvCharaBodyNotifyPartyJoin(client.character.instanceId, myFirstParty.instanceId, myFirstParty.partyType); router.Send(client.map, recvCharaBodyNotifyPartyJoin); //Only send the Join Notify of the Accepting Client to the Map. Existing members already did that when they joined. RecvCharaNotifyPartyJoin recvCharaNotifyPartyJoin = new RecvCharaNotifyPartyJoin(client.character.instanceId, myFirstParty.instanceId, myFirstParty.partyType); router.Send(recvCharaNotifyPartyJoin, client); //Only send the Join of the Accepting Client to the Accepting Client. if (targetInstanceId != 0) { NecClient targetClient = server.clients.GetByCharacterInstanceId(targetInstanceId); RecvPartyNotifyInvite recvPartyNotifyInvite = new RecvPartyNotifyInvite(targetClient, myFirstParty); router.Send(recvPartyNotifyInvite, targetClient); } IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); router.Send(client, (ushort)AreaPacketId.recv_party_establish_r, res, ServerType.Area); }
private void LogOutRequest() { _logoutTime = DateTime.MinValue; IBuffer res = BufferProvider.Provide(); IBuffer res2 = BufferProvider.Provide(); IBuffer res3 = BufferProvider.Provide(); IBuffer res4 = BufferProvider.Provide(); IBuffer res5 = BufferProvider.Provide(); Logger.Debug($"_logoutType [{_logoutType}]"); if (_logoutType == 0x00) // Return to Title also Exit Game { res = null; res = BufferProvider.Provide(); //res.WriteInt64(1); //res.WriteInt16(1); _server.Router.Send(_client, (ushort)AreaPacketId.recv_escape_start, res, ServerType.Area); //IBuffer buffer = BufferProvider.Provide(); //buffer.WriteInt32(0); //NecPacket response = new NecPacket((ushort)CustomPacketId.RecvDisconnect,buffer,ServerType.Msg,PacketType.Disconnect); //_server.Router.Send(_client, response); } if (_logoutType == 0x01) // Return to Character Select { res.WriteInt32(0); _server.Router.Send(_client, (ushort)MsgPacketId.recv_chara_select_back_soul_select_r, res, ServerType.Msg); Thread.Sleep(4100); res = null; res = BufferProvider.Provide(); res.WriteInt32(0); res.WriteByte(0); _server.Router.Send(_client, (ushort)MsgPacketId.recv_soul_authenticate_passwd_r, res, ServerType.Msg); } if (_logoutType == 0x02) { res.WriteInt32(0); _server.Router.Send(_client, (ushort)MsgPacketId.recv_chara_select_back_r, res, ServerType.Msg); } }
public override void Handle(NecClient client, NecPacket packet) { int partyMode = packet.Data.ReadInt32(); IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); Router.Send(client, (ushort)AreaPacketId.recv_party_change_mode_r, res, ServerType.Area); Party myParty = Server.Instances.GetInstance(client.Character.partyId) as Party; IBuffer res2 = BufferProvider.Provide(); res2.WriteInt32(partyMode); //must be newLeaderInstanceId Router.Send(myParty.PartyMembers, (ushort)MsgPacketId.recv_party_notify_change_mode, res2, ServerType.Msg); myParty.PartyType = partyMode; }
public override void Handle(NecConnection connection, NecPacket packet) { uint unknown = packet.Data.ReadUInt32(); uint major = packet.Data.ReadUInt32(); uint minor = packet.Data.ReadUInt32(); Logger.Info($"{major} - {minor}"); IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); res.WriteUInt32(unknown); res.WriteUInt32(major); res.WriteUInt32(minor); Router.Send(connection, (ushort)MsgPacketId.recv_base_check_version_r, res); }
protected override IBuffer ToBuffer() { IBuffer res = BufferProvider.Provide(); // it's the aura portal for map res.WriteUInt32(_instanceId); // Unique ID res.WriteFloat(_mapPos.X); //x res.WriteFloat(_mapPos.Y); //y res.WriteFloat(_mapPos.Z); //z res.WriteByte(_heading); // res.WriteFloat(_width); // Width res.WriteFloat(_offset); // distance away from map coords for particle effects res.WriteInt32(_color); // Aura color 0=blue 1=gold 2=white 3=red 4=purple 5=black 0 to 5, crash above 5 return(res); }
protected override IBuffer ToBuffer() { IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); res.WriteFixedString("Xeno", 0x31); res.WriteInt32(0); res.WriteInt32(0); res.WriteFixedString("Xeno", 0x5B); for (int j = 0; j < 0x3; j++) { res.WriteInt64(0); } res.WriteInt32(0); return(res); }
protected override IBuffer ToBuffer() { IBuffer res = BufferProvider.Provide(); res.WriteInt32(1); // must be under 0x3E8 // wtf? int numEntries = 0x1; for (int i = 0; i < numEntries; i++) { res.WriteInt32(0); res.WriteInt32(0); res.WriteByte(0); // bool } return(res); }
protected override IBuffer ToBuffer() { IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); res.WriteFloat(0); res.WriteFloat(0); res.WriteFloat(0); res.WriteByte(0); res.WriteByte(0); res.WriteByte(0); res.WriteInt16(0); res.WriteByte(0); res.WriteByte(0); res.WriteByte(0); return(res); }
protected override IBuffer ToBuffer() { IBuffer res = BufferProvider.Provide(); res.WriteInt32(_errorCode); //see sys_msg.csv /* * -1 Unable to use skill * -1322 Incorrect target * -1325 Insufficient usage count for Power Level * 1 Not enough distance * GENERIC Unable to use skill: < errcode > */ res.WriteFloat(_coolTime); //Cool time 2 ./Skill_base.csv Column J res.WriteFloat(_rigidityTime); //Rigidity time 1 ./Skill_base.csv Column L return(res); }
public override void Execute(string[] command, NecClient client, ChatMessage message, List <ChatResponse> responses) { int x = 10010101; if (command[0] == "all") { //foreach (HonorSetting honorSetting in Server.SettingRepository.Honor.Values) int[] honorSettings = server.settingRepository.honor.Keys.ToArray(); int numEntries = server.settingRepository.honor.Count; //its over 1000! IBuffer res = BufferProvider.Provide(); res.WriteInt32(1000); // must be under 0x3E8 // wtf? for (int i = 0; i < 1000; i++) { res.WriteInt32(honorSettings[i]); res.WriteUInt32(client.character.instanceId); res.WriteByte(1); // bool New Title 0:Yes 1:No } router.Send(client, (ushort)AreaPacketId.recv_get_honor_notify, res, ServerType.Area); res = BufferProvider.Provide(); res.WriteInt32(numEntries - 1000); // must be under 0x3E8 // wtf? for (int i = 1000; i < numEntries; i++) { res.WriteInt32(honorSettings[i]); res.WriteUInt32(client.character.instanceId); res.WriteByte(0); // bool New Title 0:Yes 1:No } router.Send(client, (ushort)AreaPacketId.recv_get_honor_notify, res, ServerType.Area); } else if (!int.TryParse(command[0], out x)) { responses.Add(ChatResponse.CommandError(client, $"Invalid Number: {command[0]}. try 10010101")); return; } IBuffer res2 = BufferProvider.Provide(); res2 = BufferProvider.Provide(); res2.WriteInt32(x); res2.WriteUInt32(client.character.instanceId); res2.WriteByte(1); // bool New Title 0:Yes 1:No router.Send(client, (ushort)AreaPacketId.recv_get_honor, res2, ServerType.Area); }
public override void Handle(NecClient client, NecPacket packet) { //Testing Logic. Delete after blacklist is databased int TempCharacterCount = Server.Characters.GetAll().Count; if (TempCharacterCount > 10) { TempCharacterCount = 10; } IBuffer res = BufferProvider.Provide(); res.WriteInt32(0); //must be 0 res.WriteInt32(TempCharacterCount); //count of entries to display //for (int i = 0; i < 10; i++) foreach (Character blackCharacter in Server.Characters.GetAll() ) //Max 10 Loops. will break if more than 10 characters in Db. { Soul blackSoul = Server.Database.SelectSoulById(blackCharacter.SoulId); res.WriteUInt32(blackCharacter .InstanceId); //Unique Row ID for blacklist. using Character InstanceID, but can be anything res.WriteInt32(client.Character.AdventureBagGold); //??? res.WriteInt32(Util.GetRandomNumber(1, 10)); //Count of times BlackListMember PKed you res.WriteInt32(Util.GetRandomNumber(0, 3)); //count of times BlackListMember looted you res.WriteInt32(Util.GetRandomNumber(0, 150)); //Count of items BlackListMember looted from you res.WriteInt32(client.Character.unionId); //Union ID? we dont have any unions yet res.WriteByte(255); res.WriteByte(1); // bool res.WriteInt32(blackSoul.Id); //Soul ID of BlackListMember for sending bounty to Area server res.WriteFixedString(blackSoul.Name, 49); //Soul Name of BlackListMember res.WriteUInt32(blackCharacter.InstanceId); //for online location tracking? res.WriteFixedString(blackCharacter.Name, 91); //character name of BlackListMember res.WriteUInt32(blackCharacter.ClassId); // Character Class of BlackListMember res.WriteByte(blackCharacter.Level); //Character level of BlackListMember res.WriteInt32(blackCharacter.MapId); //Character Map ID of BlackListMember res.WriteInt32(client.Character.AdventureBagGold); //world number?? or Map Area? res.WriteFixedString($"Channel {blackCharacter.Channel}", 97); } Router.Send(client, (ushort)AreaPacketId.recv_blacklist_open_r, res, ServerType.Area); }