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);
        }
Пример #3
0
        /*
         *  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;
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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();
                }
            }
        }