{ /// <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); } ); }
/// <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(); } }
/// <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); }
/// <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); }
/// <summary> /// Triggered when a player has sent an update packet /// </summary> public virtual void handlePlayerUpdate(Player from, CS_PlayerUpdate update) { }
/// <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); * }*/ }