Example #1
0
        public void GetPlayerInfo()
        {
            PlayerInfo playa = new PlayerInfo(PacketTypes.REQUEST);

            playa.id  = PlayerName;
            playa.key = PassKey;
            byte[] b = NetHelpers.ConvertStructToBytes(playa);
            StreamController.StreamWrite(b);
        }
Example #2
0
        public void CreateMarker()
        {
            PlayerPerformAction p = new PlayerPerformAction(PacketTypes.SET);

            p.id       = PlayerName;
            p.key      = PassKey;
            p.ActionID = 0;
            StreamController.StreamWrite(NetHelpers.ConvertStructToBytes(p));
        }
Example #3
0
        public void SetPlayerDirection(int dir, int moveCount)
        {
            PlayerControl playa = new PlayerControl(PacketTypes.SET);

            playa.id        = PlayerName;
            playa.key       = PassKey;
            playa.direction = dir;
            playa.paces     = moveCount;
            byte[] b = NetHelpers.ConvertStructToBytes(playa);
            StreamController.StreamWrite(b);
        }
Example #4
0
        //What we should do instead is get a larger region (if not the whole region)
        //Reduce the amount of times the cells need paged in.
        public void GetRegionCells(int x1, int x2, int y1, int y2)
        {
            //pauseAsync = true;
            RegionInfo ri = new RegionInfo(PacketTypes.REQUEST);

            ri.x1 = x1;
            ri.x2 = x2;
            ri.y1 = y1;
            ri.y2 = y2;
            ri.regionDataTypes = WorldConstants.REGION_INFO_ALL;
            StreamController.StreamWrite(NetHelpers.ConvertStructToBytes(ri));
        }
Example #5
0
        public void ObjectAdded(WorldObject o)
        {
            //At Some point restrict to only updates around players
            var coord = o.GetPosition();
            var pi    = new ObjectInfo(PacketTypes.UPDATE)
            {
                id         = o.Id,
                objecttype = (int)o.ObjectType,
                x          = coord.x,
                y          = coord.y,
            };

            Net.BroadcastToClients(NetHelpers.ConvertStructToBytes(pi));
        }
Example #6
0
        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);
        }
Example #7
0
        public void MoverUpdated(Moveable m)
        {
            //At Some point restrict to only updates around players
            var coord = m.GetPosition();
            var v     = m.GetVelocity();
            var pi    = new ObjectInfo(PacketTypes.UPDATE)
            {
                id         = m.Id,
                objecttype = (int)m.ObjectType,
                x          = coord.x,
                y          = coord.y,
                vx         = v.x,
                vy         = v.y
            };

            Net.BroadcastToClients(NetHelpers.ConvertStructToBytes(pi));
        }
Example #8
0
        public void PlayerUpdated(Player p)
        {
            //Determine what information needs to be sent
            //Back to the Client
            var coord = p.GetPosition();
            var v     = p.GetVelocity();
            var pi    = new PlayerInfo(PacketTypes.UPDATE)
            {
                id = p.Id,
                x  = coord.x,
                y  = coord.y,
                vx = v.x,
                vy = v.y
            };

            Net.SendToPlayer(p.Id, NetHelpers.ConvertStructToBytes(pi));
        }
Example #9
0
        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);
        }