Exemplo n.º 1
0
    {   /// <summary>
        /// Handles all player update packets received from clients
        /// </summary>
        static public void Handle_CS_PlayerUpdate(CS_PlayerUpdate pkt, Player player)
        {
            if (player == null)
            {
                Log.write(TLog.Error, "Handle_CS_PlayerUpdate(): Called with null player.");
                return;
            }

            //Allow the player's arena to handle it
            if (player._arena == null)
            {
                Log.write(TLog.Error, "Handle_CS_PlayerUpdate(): Player {0} sent update packet with no arena.", player);
                return;
            }

            player._arena.handleEvent(delegate(Arena arena)
            {
                if (arena == null)
                {
                    Log.write(TLog.Error, "Handle_CS_PlayerUpdate(): Player {0} sent update packet with no delegating arena.", player);
                    return;
                }

                player._arena.handlePlayerUpdate(player, pkt);
            }
                                      );
        }
Exemplo n.º 2
0
        /// <summary>
        /// Handles a player update request
        /// </summary>
        static public void Handle_CS_PlayerUpdate(CS_PlayerUpdate <Zone> pkt, Zone zone)
        {               //Attempt to find the player in question
            Zone.Player player = zone.getPlayer(pkt.player.id);
            if (player == null)
            {                   //Make a note
                Log.write(TLog.Warning, "Ignoring player update for #{0}, not present in zone mirror.", pkt.player.id);
                return;
            }

            using (InfantryDataContext db = zone._server.getContext())
            {                   //Get the associated player entry
                Data.DB.player dbplayer = db.players.SingleOrDefault(plyr => plyr.id == player.dbid);
                if (dbplayer == null)
                {                       //Make a note
                    Log.write(TLog.Warning, "Ignoring player update for {0}, not present in database.", player.alias);
                    return;
                }

                //Update his stats object
                Data.DB.stats stats = dbplayer.stats1;

                stats.zonestat1  = pkt.stats.zonestat1;
                stats.zonestat2  = pkt.stats.zonestat2;
                stats.zonestat3  = pkt.stats.zonestat3;
                stats.zonestat4  = pkt.stats.zonestat4;
                stats.zonestat5  = pkt.stats.zonestat5;
                stats.zonestat6  = pkt.stats.zonestat6;
                stats.zonestat7  = pkt.stats.zonestat7;
                stats.zonestat8  = pkt.stats.zonestat8;
                stats.zonestat9  = pkt.stats.zonestat9;
                stats.zonestat10 = pkt.stats.zonestat10;
                stats.zonestat11 = pkt.stats.zonestat11;
                stats.zonestat12 = pkt.stats.zonestat12;

                stats.kills         = pkt.stats.kills;
                stats.deaths        = pkt.stats.deaths;
                stats.killPoints    = pkt.stats.killPoints;
                stats.deathPoints   = pkt.stats.deathPoints;
                stats.assistPoints  = pkt.stats.assistPoints;
                stats.bonusPoints   = pkt.stats.bonusPoints;
                stats.vehicleKills  = pkt.stats.vehicleKills;
                stats.vehicleDeaths = pkt.stats.vehicleDeaths;
                stats.playSeconds   = pkt.stats.playSeconds;

                stats.cash            = pkt.stats.cash;
                stats.experience      = pkt.stats.experience;
                stats.experienceTotal = pkt.stats.experienceTotal;

                //Convert inventory and skills
                dbplayer.inventory = DBHelpers.inventoryToBin(pkt.stats.inventory);
                dbplayer.skills    = DBHelpers.skillsToBin(pkt.stats.skills);

                //Update all changes
                db.SubmitChanges();
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Triggered when a player has sent an update packet
        /// </summary>
        public void handlePlayerUpdate(Player from, CS_PlayerUpdate update)
        {               //Update the player's state
            from._state.health = update.health;
            from._state.energy = update.energy;

            from._state.velocityX = update.velocityX;
            from._state.velocityY = update.velocityY;
            from._state.velocityZ = update.velocityZ;

            from._state.positionX = update.positionX;
            from._state.positionY = update.positionY;
            from._state.positionZ = update.positionZ;

            from._state.yaw       = update.yaw;
            from._state.direction = update.direction;
            from._state.unk1      = update.unk1;

            //Route it to all players!
            Helpers.Player_RouteUpdate(_players, from, update);
        }
        public void poll()
        {
            CS_PlayerUpdate update = new CS_PlayerUpdate();

            update.positionX = _state.positionX;
            update.positionY = _state.positionY;
            update.positionZ = _state.positionZ;
            update.direction = (ushort)_state.direction;
            update.pitch     = _state.pitch;
            update.unk1      = _state.unk1;
            update.yaw       = _state.yaw;
            update.velocityX = _state.velocityX;
            update.velocityY = _state.velocityY;
            update.velocityZ = _state.velocityZ;

            update.playerID = _id;
            update.health   = _state.health;

            _gameclient._conn._client.send(update);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Creates a new packet based on the typeID and the received content
        /// inside the buffer. The user has to create an own implementation
        /// of this interface.
        /// </summary>
        public PacketBase createPacket(NetworkClient client, ushort typeID, byte[] buffer, int offset, int size)
        {               //Ready our packet base
            PacketBase packet = null;

            size--;

            //Was it a system packet?
            if (buffer[offset++] == 0)
            {
                //Yes, find the appropriate type
                return(createSystemPacket(typeID, buffer, offset, size));
            }

            //So what was the typeid?
            switch (typeID)
            {
            case CS_Auth <T> .TypeID:
                packet = new CS_Auth <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerLogin <T> .TypeID:
                packet = new CS_PlayerLogin <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerUpdate <T> .TypeID:
                packet = new CS_PlayerUpdate <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerLeave <T> .TypeID:
                packet = new CS_PlayerLeave <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerBanner <T> .TypeID:
                packet = new CS_PlayerBanner <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerStatsRequest <T> .TypeID:
                packet = new CS_PlayerStatsRequest <T>(typeID, buffer, offset, size);
                break;

            case CS_Whisper <T> .TypeID:
                packet = new CS_Whisper <T>(typeID, buffer, offset, size);
                break;

            case CS_JoinChat <T> .TypeID:
                packet = new CS_JoinChat <T>(typeID, buffer, offset, size);
                break;

            case CS_LeaveChat <T> .TypeID:
                packet = new CS_LeaveChat <T>(typeID, buffer, offset, size);
                break;

            case CS_PrivateChat <T> .TypeID:
                packet = new CS_PrivateChat <T>(typeID, buffer, offset, size);
                break;

            case CS_ModCommand <T> .TypeID:
                packet = new CS_ModCommand <T>(typeID, buffer, offset, size);
                break;

            case CS_Squads <T> .TypeID:
                packet = new CS_Squads <T>(typeID, buffer, offset, size);
                break;

            case CS_ChatQuery <T> .TypeID:
                packet = new CS_ChatQuery <T>(typeID, buffer, offset, size);
                break;

            case Disconnect <T> .TypeID:
                packet = new Disconnect <T>(typeID, buffer, offset, size);
                break;

            case CS_Ban <T> .TypeID:
                packet = new CS_Ban <T>(typeID, buffer, offset, size);
                break;

            case CS_SquadMatch <T> .TypeID:
                packet = new CS_SquadMatch <T>(typeID, buffer, offset, size);
                break;

            case CS_ModQuery <T> .TypeID:
                packet = new CS_ModQuery <T>(typeID, buffer, offset, size);
                break;

            case CS_ChatCommand <T> .TypeID:
                packet = new CS_ChatCommand <T>(typeID, buffer, offset, size);
                break;

            case CS_StatsUpdate <T> .TypeID:
                packet = new CS_StatsUpdate <T>(typeID, buffer, offset, size);
                break;

            case CS_ArenaUpdate <T> .TypeID:
                packet = new CS_ArenaUpdate <T>(typeID, buffer, offset, size);
                break;

            default:
                //An undefined packet.
                packet = new PacketDummy(typeID, buffer, offset, size);
                break;
            }

            return(packet);
        }
Exemplo n.º 6
0
 /// <summary>
 /// Triggered when a player has sent an update packet
 /// </summary>
 public virtual void handlePlayerUpdate(Player from, CS_PlayerUpdate update)
 {
 }
Exemplo n.º 7
0
        /// <summary>
        /// Submits a player update to the database
        /// </summary>
        public void updatePlayer(Player player)
        {       //Obtain a player stats object
            PlayerStats stats = player.getStats();

            if (stats == null)
            {
                return;
            }

            if (_server.IsStandalone)
            {
                return;
            }

            //Create an update packet
            CS_PlayerUpdate <Database> upd = new CS_PlayerUpdate <Database>();

            upd.player = player.toInstance();
            upd.stats  = stats;

            //All good!
            send(upd);

            /*
             * //Lets check the timers for other stat updates
             * DateTime now = DateTime.Now;
             * DateTime specDate = DateTime.Today.AddDays(1);
             *
             * //Note: Time.Today uses a format 00/00/0000 time 12:00:00am
             * if (now >= (specDate.AddMinutes(-2)))
             * {
             *  CS_StatsUpdate<Data.Database> stat = new CS_StatsUpdate<Data.Database>();
             *  stat.player = player.toInstance();
             *  stat.scoreType = CS_StatsUpdate<Data.Database>.ScoreType.ScoreDaily;
             *  stat.stats = stats;
             *  stat.date = now;
             *  send(stat);
             * }
             *
             * DayOfWeek day = DayOfWeek.Sunday;
             * if (now.DayOfWeek == day && now >= (specDate.AddMinutes(-2)))
             * {
             *  CS_StatsUpdate<Data.Database> stat = new CS_StatsUpdate<Data.Database>();
             *  stat.player = player.toInstance();
             *  stat.scoreType = CS_StatsUpdate<Data.Database>.ScoreType.ScoreWeekly;
             *  stat.stats = stats;
             *  stat.date = now;
             *  send(stat);
             * }
             *
             * DateTime month = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);
             * month = month.AddMonths(1);
             * if (now < month && now >= (specDate.AddMinutes(-2)))
             * {
             *  CS_StatsUpdate<Data.Database> stat = new CS_StatsUpdate<Data.Database>();
             *  stat.player = player.toInstance();
             *  stat.scoreType = CS_StatsUpdate<Data.Database>.ScoreType.ScoreMonthly;
             *  stat.stats = stats;
             *  stat.date = now;
             *  send(stat);
             * }
             *
             * DateTime year = new DateTime(DateTime.Today.Year, 1, 1);
             * year = year.AddYears(1);
             * if (now < year && now >= (specDate.AddMinutes(-2)))
             * {
             *  CS_StatsUpdate<Data.Database> stat = new CS_StatsUpdate<Data.Database>();
             *  stat.player = player.toInstance();
             *  stat.scoreType = CS_StatsUpdate<Data.Database>.ScoreType.ScoreYearly;
             *  stat.stats = stats;
             *  stat.date = now;
             *  send(stat);
             * }*/
        }