public static void HandleClientTransferZone(ZoneConnection zc, InterPacket packet) { byte admin, zoneid; int accountid; string username, charname, hostip; ushort randid; if (!packet.TryReadByte(out zoneid) || !packet.TryReadInt(out accountid) || !packet.TryReadString(out username) || !packet.TryReadString(out charname) || !packet.TryReadUShort(out randid) || !packet.TryReadByte(out admin) || !packet.TryReadString(out hostip)) { return; } if (Program.Zones.ContainsKey(zoneid)) { ZoneConnection z; if (Program.Zones.TryGetValue(zoneid, out z)) { z.SendTransferClientFromZone(accountid, username, charname, randid, admin, hostip); } } else { Log.WriteLine(LogLevel.Warn, "Uh oh, Zone {0} tried to transfer {1} to zone {1} D:", zc.ID, charname, zoneid); } }
public static void HandleTransfer(LoginConnector lc, InterPacket packet) { byte v; if (!packet.TryReadByte(out v)) { return; } if (v == 0) { byte admin; int accountid; string username, hash, hostip; if (!packet.TryReadInt(out accountid) || !packet.TryReadString(out username) || !packet.TryReadString(out hash) || !packet.TryReadByte(out admin) || !packet.TryReadString(out hostip)) { return; } ClientTransfer ct = new ClientTransfer(accountid, username, admin, hostip, hash); ClientManager.Instance.AddTransfer(ct); } else if (v == 1) { byte admin; int accountid; string username, charname, hostip; ushort randid; if (!packet.TryReadInt(out accountid) || !packet.TryReadString(out username) || !packet.TryReadString(out charname) || !packet.TryReadUShort(out randid) || !packet.TryReadByte(out admin) || !packet.TryReadString(out hostip)) { return; } ClientTransfer ct = new ClientTransfer(accountid, username, charname, randid, admin, hostip); ClientManager.Instance.AddTransfer(ct); } }
public static void HandleServerAssignement(WorldConnection wc, InterPacket packet) { byte wid; string name, ip; ushort port; if (!packet.TryReadByte(out wid) || !packet.TryReadString(out name) || !packet.TryReadString(out ip) || !packet.TryReadUShort(out port)) { Log.WriteLine(LogLevel.Error, "Could not read World ID in inter server packet."); wc.Disconnect(); return; } if (WorldManager.Instance.Worlds.ContainsKey(wid)) { Log.WriteLine(LogLevel.Error, "Already loaded this world?"); wc.Disconnect(); return; } wc.Name = name; wc.ID = wid; wc.IP = ip; wc.Port = port; wc.IsAWorld = true; if (WorldManager.Instance.Worlds.TryAdd(wc.ID, wc)) { Log.WriteLine(LogLevel.Info, "Assigned world {0}!", wc.ID); SendAssigned(wc); } else { Log.WriteLine(LogLevel.Error, "Couldn't assign world {0}..", wc.ID); } }
public static void HandleAssigned(WorldConnector lc, InterPacket packet) { string entity, name; byte id; ushort port; int mapidcout; if (!packet.TryReadString(out entity) || !packet.TryReadByte(out id) || !packet.TryReadString(out name) || !packet.TryReadUShort(out port) || !packet.TryReadInt(out mapidcout)) { return; } Program.serviceInfo = new ZoneData { EntityString = entity, ID = id, Port = port, MapsToLoad = new List<FiestaLib.Data.MapInfo>() }; for (int i = 0; i < mapidcout; i++) { ushort mapid, viewrange; string shortname, fullname; int regenx, regeny; byte kingdom; if (!packet.TryReadUShort(out mapid) || !packet.TryReadString(out shortname) || !packet.TryReadString(out fullname) || !packet.TryReadInt(out regenx) || !packet.TryReadInt(out regeny) || !packet.TryReadByte(out kingdom) || !packet.TryReadUShort(out viewrange)) { break; } Program.serviceInfo.MapsToLoad.Add(new MapInfo(mapid, shortname, fullname, regenx, regeny, kingdom, viewrange)); ; } Console.Title = "Solar.Zone[" + id + "]"; Log.WriteLine(LogLevel.Info, "Successfully linked with worldserver. [Zone: {0} | Port: {1}]", id, port); ZoneAcceptor.Load(); }
public static void HandleWorldMessage(ZoneConnection zc, InterPacket packet) { string msg; bool wut; byte type; if (!packet.TryReadString(out msg) || !packet.TryReadByte(out type) || !packet.TryReadBool(out wut)) { return; } if (wut) { string to; if (!packet.TryReadString(out to)) { return; } WorldClient client; if ((client = ClientManager.Instance.GetClientByCharname(to)) == null) { Log.WriteLine(LogLevel.Warn, "Tried to send a WorldMessage to a character that is unknown. Charname: {0}", to); } else { using (var p = Handler25.CreateWorldMessage((WorldMessageTypes)type, msg)) { client.SendPacket(p); } } } else { using (var p = Handler25.CreateWorldMessage((WorldMessageTypes)type, msg)) { ClientManager.Instance.SendPacketToAll(p); } } }
public static void HandleZoneClosed(WorldConnector lc, InterPacket packet) { byte id; if (!packet.TryReadByte(out id)) { return; } ZoneData zd; if (Program.Zones.TryRemove(id, out zd)) { Log.WriteLine(LogLevel.Info, "Removed zone {0} from zones (disconnected)", id); } }
public static void HandleZoneOpened(WorldConnector lc, InterPacket packet) { byte id; string ip; ushort port; int mapcount; if (!packet.TryReadByte(out id) || !packet.TryReadString(out ip) || !packet.TryReadUShort(out port) || !packet.TryReadInt(out mapcount)) { return; } List<MapInfo> maps = new List<MapInfo>(); for (int j = 0; j < mapcount; j++) { ushort mapid, viewrange; string shortname, fullname; int regenx, regeny; byte kingdom; if (!packet.TryReadUShort(out mapid) || !packet.TryReadString(out shortname) || !packet.TryReadString(out fullname) || !packet.TryReadInt(out regenx) || !packet.TryReadInt(out regeny) || !packet.TryReadByte(out kingdom) || !packet.TryReadUShort(out viewrange)) { break; } maps.Add(new MapInfo(mapid, shortname, fullname, regenx, regeny, kingdom, viewrange)); ; } ZoneData zd; if (!Program.Zones.TryGetValue(id, out zd)) { zd = new ZoneData(); } zd.ID = id; zd.IP = ip; zd.Port = port; zd.MapsToLoad = maps; Program.Zones[id] = zd; Log.WriteLine(LogLevel.Info, "Added zone {0} to zonelist. {1}:{2}", zd.ID, zd.IP, zd.Port); }