private bool ProcessPlayerInfo(StreamWriter s, PacketTypes p, PlayerInfo pi) { switch (p) { case PacketTypes.REQUEST: { Player playa = WorldInterface.GetPlayer(pi.id, pi.key); if (playa != null) { PlayerID = pi.id; var coord = playa.GetPosition(); var vel = playa.GetVelocity(); pi = new PlayerInfo(PacketTypes.REQUESTED) { id = playa.Id, x = coord.x, y = coord.y, vx = vel.x, vy = vel.y }; s(NetHelpers.ConvertStructToBytes(pi)); //Send over object positions in the region surrounding our player //DON'T DO THIS YET... Still thinking about it, Client needs to support it foreach (var obj in WorldInterface.GetRegionObjects(coord.x - 10, coord.x + 10, coord.y - 10, coord.y + 10)) { if (obj == null) { continue; } var oc = obj.GetPosition(); var oi = new ObjectInfo(PacketTypes.REQUESTED) { id = obj.Id, objecttype = (int)obj.ObjectType, x = oc.x, y = oc.y, vx = 0, vy = 0, }; s(NetHelpers.ConvertStructToBytes(oi)); } } return(true); } } return(false); }
private bool ProcessRegionInfo(StreamWriter s, PacketTypes p, RegionInfo ri) { switch (p) { case PacketTypes.REQUEST: { //Get Cell Type Info if ((ri.regionDataTypes & WorldConstants.REGION_INFO_CELL) != 0) { CellInfo c = new CellInfo(PacketTypes.REQUESTED); List <WorldCell> region = new List <WorldCell>(WorldInterface.GetRegionCells(ri.x1, ri.x2, ri.y1, ri.y2)); int count = region.Count; foreach (WorldCell wc in region) { c.cellType = (byte)wc.WorldCellType; c.remainingCells = --count; // I don't even know if this is necessary anymore... c.x = wc.X; c.y = wc.Y; s(NetHelpers.ConvertStructToBytes(c)); } } //Get Object Info if ((ri.regionDataTypes & WorldConstants.REGION_INFO_OBJECT) != 0 || (ri.regionDataTypes & WorldConstants.REGION_INFO_PLAYER) != 0) { bool obj = (ri.regionDataTypes & WorldConstants.REGION_INFO_OBJECT) != 0; bool ply = (ri.regionDataTypes & WorldConstants.REGION_INFO_PLAYER) != 0; ObjectInfo o = new ObjectInfo(PacketTypes.REQUESTED); foreach (var wobject in WorldInterface.GetRegionObjects(ri.x1, ri.x2, ri.y1, ri.y2)) { if (wobject == null) { continue; } var pos = wobject.GetPosition(); if (wobject.ObjectType == WorldObjectTypes.PLAYER && ply) { var vel = ((Player)wobject).GetVelocity(); o.id = wobject.Id; o.x = pos.x; o.y = pos.y; o.vx = vel.x; o.vy = vel.y; o.objecttype = WorldConstants.TYPE_PLAYER; s(NetHelpers.ConvertStructToBytes(o)); } else if (obj) { o.id = wobject.Id; o.x = pos.x; o.y = pos.y; if (wobject.ObjectType == WorldObjectTypes.MARKER) { o.objecttype = WorldConstants.TYPE_MARKER; } else if (wobject.ObjectType == WorldObjectTypes.MOVEABLE) { var vel = ((Moveable)wobject).GetVelocity(); o.objecttype = WorldConstants.TYPE_MOVEABLE; o.vx = vel.x; o.vy = vel.y; } else { o.objecttype = WorldConstants.TYPE_GENERIC; } s(NetHelpers.ConvertStructToBytes(o)); } } } return(true); } } return(false); }