public static void HandleTransfer(WorldConnector 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 void AddTransfer(ClientTransfer transfer) { if (transfer.Type != TransferType.WORLD) { Log.WriteLine(LogLevel.Warn, "Received a GAME transfer request. Trashing it."); return; } if (transfers.ContainsKey(transfer.Hash)) { ClientTransfer trans; if (transfers.TryRemove(transfer.Hash, out trans)) { Log.WriteLine(LogLevel.Warn, "Duplicate client transfer hash. {0} hacked into {1}", transfer.HostIP, trans.HostIP); } } if (!transfers.TryAdd(transfer.Hash, transfer)) { Log.WriteLine(LogLevel.Warn, "Error registering client transfer."); } }
public void AddTransfer(ClientTransfer transfer) { if (transfer.Type != TransferType.GAME) { Log.WriteLine(LogLevel.Warn, "Zone received a World transfer request. Trashing it."); return; } if (transfers.ContainsKey(transfer.CharacterName)) { ClientTransfer trans; if (transfers.TryRemove(transfer.CharacterName, out trans)) { Log.WriteLine(LogLevel.Warn, "Duplicate client transfer (Char={0}) attempt from {1}.", transfer.CharacterName, trans.HostIP); } } if (!transfers.TryAdd(transfer.CharacterName, transfer)) { Log.WriteLine(LogLevel.Warn, "Error registering client transfer for {0}.", transfer.CharacterName); } else Log.WriteLine(LogLevel.Debug, "Transfering {0}.", transfer.CharacterName); }
public void ChangeMap(ushort id, int x = -1, int y = -1, short instance = (short) -1) { if (id > 120) { Log.WriteLine(LogLevel.Warn, "Character trying to warp to unexisting map: {0}", id); DropMessage("Unable to transfer to this map. Error code 10"); return; } ZoneData zci = Program.GetZoneForMap(id); if (zci != null) { var v = zci.MapsToLoad.Find(m => m.ID == id); int tox = 0; int toy = 0; if (x < 0 || y < 0) { tox = v.RegenX; toy = v.RegenY; } else { tox = x; toy = y; } // Try setting up transfer ushort randomID = (ushort)Program.Randomizer.Next(0, ushort.MaxValue); InterHandler.TransferClient(zci.ID, id, this.Client.AccountID, this.Client.Username,this.Character.ID, this.Name, randomID, this.Client.Admin, this.Client.Host); ClientTransfer Zonetran = new ClientTransfer(this.Client.AccountID, this.Client.Username,Client.Character.Name, this.Client.Character.ID,randomID,this.Client.Admin,this.Client.Host); ClientManager.Instance.AddTransfer(Zonetran); Map.RemoveObject(MapObjectID); Position.X = tox; Position.Y = toy; Character.PositionInfo.Map = (byte)id; Save(); InterHandler.SendChangeZoneToWorld(this, id, tox, toy, zci.IP, zci.Port, randomID); Handler6.SendChangeZone(this, id, tox, toy, zci.IP, zci.Port, randomID); } else { DropMessage("Unable to transfer to this map. Error code 1"); } }