public bool AddSeat(Objects.VehicleSeat Seat) { if (Seat.VehicleCode == Code && !Seats.Contains(Seat)) { Seats.Add(Seat); return(true); } return(false); }
private bool LoadVehicleSeats() { List <Objects.VehicleSeat> tempVehSeat = new List <Objects.VehicleSeat>(); //Vehicle seat queue MySqlCommand Queue = new MySqlCommand("SELECT vehiclecode, seatid, seatcode, mainweapon, secondweapon, mainweaponclip, secondweaponclip, mainweaponmagazine, secondweaponmagazine from vehicleseats", Databases.Game.connection); MySqlDataReader Reader = Queue.ExecuteReader(); bool _result = false; try { if (Reader.HasRows) { while (Reader.Read()) { string _vehicleCode = Reader.GetString("vehiclecode"); byte _seatId = Reader.GetByte("seatid"); string _seatCode = Reader.GetString("seatcode"); string _mainWeapon = Reader.GetString("mainweapon"); string _secondWeapon = Reader.GetString("secondweapon"); uint _mainWeaponAmmo = Reader.GetUInt16("mainweaponclip"); uint _secondWeaponAmmo = Reader.GetUInt16("secondweaponclip"); byte _mainWeaponMagazine = Reader.GetByte("mainweaponmagazine"); byte _secondWeaponMagazine = Reader.GetByte("secondweaponmagazine"); if (_seatCode != "") { Objects.VehicleSeat Seat = new Objects.VehicleSeat(_seatId, _seatCode, _vehicleCode, _mainWeaponAmmo, _secondWeaponAmmo, _mainWeaponMagazine, _secondWeaponMagazine); Seat.AddWeapon(VehicleWeaponType.Main, GetWeaponBy(_mainWeapon)); Seat.AddWeapon(VehicleWeaponType.Sub, GetWeaponBy(_secondWeapon)); tempVehSeat.Add(Seat); } } Reader.Close(); VehicleSeats = tempVehSeat; _result = true; } else { Log.Instance.WriteError("Vehicle seats table is empty"); } } catch { Log.Instance.WriteError("Couldn´t load vehicle seats table"); } return(_result); }
/* * public void Send(byte[] buffer) * { * foreach(Entities.Player Player in Players.Values) * { * if (Player != null) * Player.Send(buffer); * } * * foreach(Entities.User Spectator in Spectators.Values) * { * if (Spectator != null) * Spectator.Send(buffer); * } * } */ public void Start() { UpTick = 0; DownTick = 1800000; LastTick = -1; Objects.Map map = Managers.MapManager.Instance.Get(Map); byte flagCount = map.Flags; byte[] spawnFlags = map.SpawnFlags; this.SpawnFlags = spawnFlags; this.Flags = new sbyte[flagCount]; for (byte i = 0; i < flagCount; i++) { Flags[i] = -1; } Flags[spawnFlags[0]] = 0; Flags[spawnFlags[1]] = 1; Vehicles = Managers.VehicleManager.Instance.BuildArray(map.Id, map.VehicleCount); for (byte i = 0; i < Vehicles.Count; i++) { List <Objects.VehicleSeat> SheetSeats = Managers.VehicleManager.Instance.GetSeatsFor(Vehicles[i].Code); foreach (Objects.VehicleSeat SheetSeat in SheetSeats) { Objects.VehicleSeat NewSeat = new Objects.VehicleSeat(SheetSeat.ID, SheetSeat.SeatCode, SheetSeat.VehicleCode, SheetSeat.Weapon1Ammo, SheetSeat.Weapon2Ammo, SheetSeat.Weapon1Mag, SheetSeat.Weapon2Mag, SheetSeat.Weapons); Vehicles[i].AddSeat(NewSeat); } } foreach (Player p in Players.Values) { p.Reset(); p.RoundStart(); } switch (Mode) { case Enums.Mode.Explosive: { CurrentGameMode = new Modes.Explosive(); break; } case Enums.Mode.Free_For_All: { CurrentGameMode = new Modes.FreeForAll(); break; } case Enums.Mode.Team_Death_Match: { CurrentGameMode = new Modes.TeamDeathMatch(); break; } case Enums.Mode.Conquest: { CurrentGameMode = new Modes.Conquest(); break; } } this.ItemsOnGround.Clear(); CurrentGameMode.Initilize(this); Running = false; }
public virtual void OnObjectDamage(Networking.GameDataHandler handler) { bool _isPlayer = handler.GetBool(2); byte _objectDamagedId = handler.GetByte(3); bool _isSubWeapon = handler.GetBool(9); bool _isRadiusWeapon = handler.GetBool(10); uint _radius = handler.GetuInt(11); //vehicles don´t seem to have a hitbox string _weaponCode = handler.GetString(22).ToUpper(); short _damageTaken = 0; Entities.Player Attacker = handler.Player; Entities.Vehicle VehicleDamaged = null; Objects.Items.Weapon Weapon = null; try { VehicleDamaged = Room.Vehicles[_objectDamagedId]; } catch { VehicleDamaged = null; Log.Instance.WriteError("Unknown damaged object with ID: " + _objectDamagedId.ToString()); } if (VehicleDamaged != null && CanInFlictDamageTo(Attacker, VehicleDamaged)) { if (_isPlayer) { try { Weapon = (Objects.Items.Weapon)Managers.ItemManager.Instance.Items.Values.Where(n => n.Code == _weaponCode).First(); } catch { Weapon = null; } if (Weapon != null) { short _weaponMultiplier = 100; switch (VehicleDamaged.VehicleClass) { case VehicleType.Surface: _weaponMultiplier = Weapon.PowerSurface[0]; break; case VehicleType.Air: _weaponMultiplier = Weapon.PowerAir[0]; break; case VehicleType.Ship: _weaponMultiplier = Weapon.PowerShip[0]; break; default: _weaponMultiplier = Weapon.PowerPersonal[0]; break; } _damageTaken = DamageCalculator(Weapon.Power, _weaponMultiplier, _radius); } } else //Vehicle attaking other vehicle { if (Attacker.VehicleId != -1) { Entities.Vehicle AttackerVehicle = Room.Vehicles[Attacker.VehicleId]; if (_weaponCode == AttackerVehicle.Code) //dont trust the client { Objects.VehicleSeat Seat = AttackerVehicle.Seats[AttackerVehicle.GetSeatOf(Attacker)]; Objects.VehicleWeapon VehWeapon = null; if (_isSubWeapon) //he is shooting with the subCT { Seat.Weapons.TryGetValue(VehicleWeaponType.Sub, out VehWeapon); } else { Seat.Weapons.TryGetValue(VehicleWeaponType.Main, out VehWeapon); } if (VehWeapon != null) { _damageTaken = DamageCalculator((short)VehWeapon.Damage, VehWeapon.HitBox[(byte)VehicleDamaged.VehicleClass], _radius); } } } else //maybe it´s an artillery attack { if (!isValidArtilleryAttack(Attacker)) { Attacker.User.Disconnect(); } Objects.VehicleWeapon Artillery = Managers.VehicleManager.Instance.GetWeaponBy(_weaponCode); if (Artillery != null) { _damageTaken = DamageCalculator((short)Artillery.Damage, Artillery.HitBox[(byte)VehicleDamaged.VehicleClass], _radius); } else { Log.Instance.WriteError("Couldn´t find artillery weapon " + _weaponCode + " in the Manager"); } } } DamageVehicle(handler, Attacker, VehicleDamaged, _damageTaken); } }
private void OnVehicleAttackToPlayer(Networking.GameDataHandler handler, Entities.Player Attacker, Entities.Player Victim) { Entities.Vehicle AttackerVehicle = null; string _vehicleId = handler.GetString(22).ToUpper(); try { AttackerVehicle = handler.Room.Vehicles[Attacker.VehicleId]; } catch { AttackerVehicle = null; } if (AttackerVehicle != null) { if (CanInFlictDamageTo(Attacker, Victim) && IsOperative(AttackerVehicle)) { if (_vehicleId == AttackerVehicle.Code) { Objects.VehicleSeat Seat = AttackerVehicle.Seats[Attacker.VehicleSeatId]; if (Seat.Weapons.Count > 0) { byte _weaponSlot = handler.GetByte(9); //0 = main CT, 1 = subCT Objects.VehicleWeapon Weapon = null; Seat.Weapons.TryGetValue((VehicleWeaponType)_weaponSlot, out Weapon); if (Weapon != null) { //Most vehicles uses Radius even for machineguns... yeah odd short _damageTaken = 0; double _hitboxMultiplier = 1.0; bool _useRadius = handler.GetBool(10); uint _boneId = handler.GetuInt(11); uint _radius = _boneId; uint _realBoneId = _boneId - handler.Player.User.SessionID; //just to make sure... if (!_useRadius) { Enums.Hitbox Location; try { Location = (Hitbox)_realBoneId; } catch { Location = Hitbox.TorsoLimbs; } _hitboxMultiplier = GetHitBoxMultiplier(Location); _radius = 100; } _damageTaken = DamageCalculator((short)Weapon.Damage, Weapon.HitBox[(byte)VehWeapDamType.Personal], _radius); DamagePlayer(handler, Attacker, Victim, _damageTaken, false); } } } } } else //Artillery Attack? { Objects.VehicleWeapon Artillery = null; Artillery = Managers.VehicleManager.Instance.GetWeaponBy(handler.GetString(22).ToUpper()); if (Artillery != null && isValidArtilleryAttack(Attacker)) { uint _radius = handler.GetuInt(11); short _damageTaken = DamageCalculator((short)Artillery.Damage, Artillery.HitBox[(byte)VehWeapDamType.Personal], _radius); DamagePlayer(handler, Attacker, Victim, _damageTaken, false); } else { Attacker.User.Disconnect(); } } }