public static void MessageEvent(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events) { Character character = client.Metadata["fullchar"] as Character; var name = character.name; var x = (ushort)character.x; var y = (ushort)character.y; var id = character.id; var map = client.Metadata["map"] as IMap; var clients = map.GetSurroundingClients(client, 1); int unk = packet.ReadInt(); packet.Skip(4); int size = packet.ReadShort() - 3; packet.Skip(2); var type = packet.ReadByte(); var msg = packet.ReadString(size); var smsg = msg.Split(' '); if (msg == "/quit") { CharacterManagement.UpdatePosition(client.Metadata["syncServer"] as SyncReceiver, (int)client.Metadata["server"], client.AccountID, character.slot, character.map, character.x, character.y); client.Disconnect(); return; } #region DebugCommands #if DEBUG if (smsg.Length > 1 && string.IsNullOrEmpty(smsg[0]) == false) { switch (smsg[0]) { case "_drop": int itemid = 0; if (int.TryParse(smsg[1], out itemid)) { map.DropItem(x, y, itemid, (uint)id, (uint)id); } break; case "_slm": Unknown_86C(packet, builder, client, events); break; case "_warp": ushort mapid = 0; ushort curx = 0; ushort cury = 0; if (!ushort.TryParse(smsg[1], out mapid)) { return; } if (!ushort.TryParse(smsg[2], out curx)) { return; } if (!ushort.TryParse(smsg[3], out cury)) { return; } var p = client.CreatePacket("PC_WarpCommand", mapid, curx, cury, client); events.Warped("world.Initialized", client, mapid, curx, cury); client.Send(p, "PC_WarpCommand"); break; case "_levelup": ushort level = 0; var exp = character.stats.exp; if (!ushort.TryParse(smsg[1], out level)) { return; } character.stats.exp = 0; /* * builder.New(0x011F); // 3: Increase Hp, 4: Increase Mp, 5: SP, 8: Party Exp Bonus, 9: * { * builder += (byte)9; * builder += (uint)0x5; * }*/ //client.Send(builder, "LevelUp1"); builder.New(0x0120); { builder += (byte)level; builder += character.id; } character.level += 1; client.Send(builder, "LevelUp"); NFY_ChargeInfo(packet, builder, client, events); Unknown9D6(packet, builder, client, events); Unknown9E0(packet, builder, client, events); builder.New(0x03F0); { builder += (byte)4; builder += (uint)1428; builder += (uint)1431; builder += (uint)1430; builder += (uint)1429; } client.Send(builder, "Unk3F0"); break; case "_spawn": ushort mobid = 0; ushort specid = 0; if (!ushort.TryParse(smsg[1], out mobid)) { return; } if (!ushort.TryParse(smsg[2], out specid)) { return; } var p1 = client.CreatePacket("MobSpawned", mobid, specid); client.Send(p1, "MobSpawned"); break; case "/Partytime": uint pid = 1337; foreach (var c in clients) { builder.New(0xC9); { builder += (int)pid; builder += (byte)12; //b = builder.Data; } var timestamp = (uint)c.Metadata["timestamp"]; var style = (uint)c.Metadata["style"]; c.Send(builder, "NFY_DelUserList"); builder.New(0xC8); { builder += (short)0x3101; builder += (int)pid++; builder += (short)0x000D; builder += (short)0x0100; builder += 1; builder += Environment.TickCount - (int)timestamp; builder += (short)(x + 1); builder += (short)y; builder += (short)(x + 1); builder += (short)y; builder += (byte)0; builder += 0; builder += (short)0; builder += (int)style; builder += (byte)1; builder += (byte)0; builder += 0; builder += 0; builder += (byte)0; var equipment = (List <CItem>)c.Metadata["equipment"]; builder += (byte)(equipment.Count); builder += (short)0; builder += (byte)0; builder += 0; name = "PARTY TIME!!"; builder += (byte)(name.Length + 1); builder += name; builder += (byte)0; foreach (var e in equipment) { builder += (short)e.ID; builder += e.Slot; } } c.Send(builder, "NFY_NewUserList"); } return; } } #endif #endregion builder.New(0xD9); { builder += id; builder += (byte)0; builder += (byte)unk; builder += (byte)0; builder += (byte)(msg.Length + 3); builder += (byte)0; builder += (byte)254; builder += (byte)254; builder += type; builder += msg; builder += new byte[3]; } foreach (var c in clients) { c.Send(builder, "NFY_MessageEvnt"); } events.SaidLocal("world.MessageEvnt", id, name, msg); }
public static void AuthAccount(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events) { //byte[] b; int passLength = packet.ReadByte(); int userLength = packet.ReadByte(); passLength -= userLength; var user = packet.ReadString(userLength); var pass = packet.ReadString(passLength); var ip = client.RemoteEndPoint.ToString().Split(':')[0]; int auth = 0; bool online = false; var database = client.Metadata["database"] as IDatabaseContracts; var dbresult = database.FetchAccount(user); builder.New(0x7d2); { // Check username and password if (dbresult != null) { if (dbresult.Item1 == GenerateHash(pass)) { auth = dbresult.Item2; if (auth == 0) { builder += (byte)AccountStatus.Unverified; } else if (auth == 2) { builder += (byte)AccountStatus.Banned; } else { online = dbresult.Item3; if (online) { builder += (byte)AccountStatus.Online; } else { client.AccountID = dbresult.Item4; builder += (byte)AccountStatus.Normal; events.SuccessfulLogin("login.700.AuthAccount", new LoginEventArgs(user, pass, ip, LoginResult.Success, client.AccountID)); } } } else { builder += (byte)AccountStatus.Incorrect; events.FailedLogin("login.700.AuthAccount", new LoginEventArgs(user, pass, ip, LoginResult.WrongPassword)); } } else { builder += (byte)AccountStatus.Incorrect; events.FailedLogin("login.700.AuthAccount", new LoginEventArgs(user, pass, ip, LoginResult.UnknownUsername)); } builder += 0x0022F756; builder += (short)0x6301; builder += new byte[14]; builder += "000102030405060708090A0B0C0D0E0F"; // Key used when accessing cash shop and guild board. builder += (short)0x0100; builder += new byte[12]; builder += (byte)0; // For each server, append byte server_id and byte character_count //b = builder.Data; } client.Send(builder, "AuthAccount"); if (auth == 1 && !online) { //var cash = "http://shop.cabalonline.com/login.aspx?v1="; //var cashdead = "http://shop.cabalonline.com/login.aspx?isdead=1&v1="; //var guild = "http://nguild.cabalonline.com/CabalGuild/SecureLogin.aspx?EncVal="; //builder.New(0x80); // Cash shop and guild board URL's. //{ // builder += (short)0xB4; // builder += (short)0xB2; // builder += cash.Length; // builder += cash; // builder += cashdead.Length; // builder += cashdead; // builder += 0; // builder += guild.Length; // builder += guild; // builder += 0; // //b = builder.Data; //} //client.Send(builder, "CashGuildURLs"); //builder.New(0x78); // Unknown packet //{ // builder += (byte)9; // builder += (short)0; // //b = builder.Data; //} //client.Send(builder, "UnknownPacket_0x78"); //builder.New(0x7D2); // Unknown packet //{ // builder += (short)0x7D2; // b = builder.Data; //} //client.Send(builder, "2002"); SendChannelList(client); var timer = new System.Timers.Timer(5000); timer.AutoReset = true; timer.Elapsed += (sender, e) => { SendChannelList(client); }; timer.Start(); client.Metadata["timer"] = timer; } }
public static void MessageEvent(PacketReader packet, PacketBuilder builder, ClientHandler client, EventHandler events) { //byte[] b; var name = client.Metadata["name"] as string; var x = (ushort)client.Metadata["x"]; var y = (ushort)client.Metadata["y"]; var id = (uint)client.Metadata["id"]; var cid = (uint)client.Metadata["cid"]; var map = client.Metadata["map"] as IMap; int size = packet.ReadByte() - 3; packet.Skip(2); var type = packet.ReadByte(); var msg = packet.ReadString(size); var smsg = msg.Split(' '); if (msg == "/quit") { client.Disconnect(); return; } if (smsg.Length > 1 && smsg[0] == "/drop") { int itemid = 0; if (int.TryParse(smsg[1], out itemid)) { map.DropItem(x, y, itemid, cid, id); } return; } var clients = map.GetSurroundingClients(client, 1); if (smsg.Length > 1 && smsg[0] == "/spawn") { ushort mobid = 0; if (!ushort.TryParse(smsg[1], out mobid)) { return; } var p = client.CreatePacket("MobSpawned", mobid); client.Send(p, "MobSpawned"); return; } if (msg == "/partytime") { uint pid = 1337; foreach (var c in clients) { builder.New(0xC9); { builder += (int)pid; builder += (byte)12; //b = builder.Data; } var timestamp = (uint)c.Metadata["timestamp"]; var style = (uint)c.Metadata["style"]; c.Send(builder, "UnknownPacket_0xC9"); builder.New(0xC8); { builder += (short)0x3101; builder += (int)pid++; builder += (short)0x000D; builder += (short)0x0100; builder += 1; builder += Environment.TickCount - (int)timestamp; builder += (short)(x + 1); builder += (short)y; builder += (short)(x + 1); builder += (short)y; builder += (byte)0; builder += 0; builder += (short)0; builder += (int)style; builder += (byte)1; builder += (byte)0; builder += 0; builder += 0; builder += (byte)0; var equipment = (List <CItem>)c.Metadata["equipment"]; builder += (byte)(equipment.Count); builder += (short)0; builder += (byte)0; builder += 0; name = "PARTY TIME!!"; builder += (byte)(name.Length + 1); builder += name; builder += (byte)0; foreach (var e in equipment) { builder += (short)e.ID; builder += (byte)e.Slot; } //b = builder.Data; } c.Send(builder, "UnknownPacket_0xC8"); } return; } foreach (var c in clients) { builder.New(0xD9); { builder += (int)cid; builder += (byte)(msg.Length + 3); builder += (byte)0xFE; builder += (byte)0xFE; builder += type; builder += msg; //b = builder.Data; } c.Send(builder, "MessageEvnt"); } events.SaidLocal("world.700.MessageEvnt", (int)cid, name, msg); }