public void PutItemToEquipmentFromTrunk(IPlayer player, int itemID)
        {
            //int itemID = (int)(long)args[0];

            player.GetData("current:vehicle-trunk", out IColShape trunkColshape);
            if (trunkColshape == null)
            {
                return;
            }

            trunkColshape.GetData("vehicle:trunk", out VehicleEntity vehicleEntity);
            if (vehicleEntity == null)
            {
                return;
            }

            CharacterEntity characterEntity = player.GetAccountEntity().characterEntity;

            if (vehicleEntity.IsGroupVehicle)
            {
                GroupEntity vehicleGroupOwner = vehicleEntity.GroupOwner;
                if (vehicleGroupOwner == null)
                {
                    return;
                }

                if (characterEntity.OnDutyGroup == null)
                {
                    player.SendErrorNotify("Musisz być na służbie grupy, aby otworzyć bagażnik");
                    return;
                }

                if (vehicleGroupOwner != characterEntity.OnDutyGroup)
                {
                    player.SendChatMessageError("Ten pojazd nie należy do twojej grupy");
                    return;
                }

                GroupWorkerModel worker = characterEntity.OnDutyGroup.DbModel.Workers.First(c => c.CharacterId == characterEntity.DbModel.Id);
                if (!vehicleGroupOwner.CanPlayerVehicle(worker))
                {
                    player.SendChatMessageError("Nie masz uprawnień do tego, aby otworzyć bagażnik pojazdu");
                    return;
                }
            }
            else
            {
                if (vehicleEntity.DbModel.OwnerId != characterEntity.DbModel.Id)
                {
                    //TODO: Dorobić że typ grupy police może przeszukiwać bagażniki
                    player.SendErrorNotify("Nie masz uprawnień", "Nie jesteś właścicielem tego pojazdu");
                    return;
                }
            }

            ItemModel itemToChange = vehicleEntity.DbModel.ItemsInVehicle.SingleOrDefault(item => item.Id == itemID);

            vehicleEntity.DbModel.ItemsInVehicle.Remove(itemToChange);
            characterEntity.DbModel.Items.Add(itemToChange);
        }
        public void OpenVehicleTrunk(IPlayer player)
        {
            player.GetData("current:vehicle-trunk", out IColShape trunkColshape);
            if (trunkColshape == null)
            {
                return;
            }

            trunkColshape.GetData("vehicle:trunk", out VehicleEntity vehicleEntity);
            if (vehicleEntity == null)
            {
                return;
            }

            CharacterEntity characterEntity = player.GetAccountEntity().characterEntity;


            if (vehicleEntity.IsGroupVehicle)
            {
                GroupEntity vehicleGroupOwner = vehicleEntity.GroupOwner;
                if (vehicleGroupOwner == null)
                {
                    return;
                }

                if (characterEntity.OnDutyGroup == null)
                {
                    player.SendErrorNotify("Musisz być na służbie grupy, aby otworzyć bagażnik");
                    return;
                }

                if (vehicleGroupOwner != characterEntity.OnDutyGroup)
                {
                    player.SendChatMessageError("Ten pojazd nie należy do twojej grupy");
                    return;
                }

                GroupWorkerModel worker = characterEntity.OnDutyGroup.DbModel.Workers.First(c => c.CharacterId == characterEntity.DbModel.Id);
                if (!vehicleGroupOwner.CanPlayerVehicle(worker))
                {
                    player.SendChatMessageError("Nie masz uprawnień do tego, aby otworzyć bagażnik pojazdu");
                    return;
                }
            }
            else
            {
                if (vehicleEntity.DbModel.OwnerId != characterEntity.DbModel.Id)
                {
                    //TODO: Dorobić że typ grupy police może przeszukiwać bagażniki
                    player.SendErrorNotify("Nie masz uprawnień", "Nie jesteś właścicielem tego pojazdu");
                    return;
                }
            }


            player.Emit("vehicle-trunk:data",
                        characterEntity.DbModel.Items,
                        vehicleEntity.DbModel.ItemsInVehicle);
        }
Exemple #3
0
        public bool CanPlayerTuningVehicle(AccountEntity accountEntity)
        {
            if (!ContainsWorker(accountEntity))
            {
                return(false);
            }

            GroupWorkerModel worker = DbModel.Workers.FirstOrDefault(x => x.CharacterId == accountEntity.characterEntity.DbModel.Id);

            return(worker.GroupRank.Rights.HasFlag(GroupRights.Second));
        }
Exemple #4
0
        public bool CanPlayerDoPolice(AccountEntity accountEntity)
        {
            if (!ContainsWorker(accountEntity))
            {
                return(false);
            }

            GroupWorkerModel groupWorker = DbModel.Workers.First(w => w.CharacterId == accountEntity.characterEntity.DbModel.Id);

            return(groupWorker.GroupRank.Rights.HasFlag(GroupRights.First));
        }
        public void AddWorker(AccountEntity accountEntity)
        {
            GroupWorkerModel groupWorker = new GroupWorkerModel()
            {
                Group       = DbModel,
                Character   = accountEntity.characterEntity.DbModel,
                Salary      = 0,
                Rights      = GroupRights.None,
                DutyMinutes = 0,
            };

            DbModel.Workers.Add(groupWorker);
            Save();
        }
        public void ChangeGroupWorkerRights(IPlayer sender, int characterId, int rights, int slot)
        {
            AccountEntity accountEntity = sender.GetAccountEntity();

            GroupSlotValidator slotValidator = new GroupSlotValidator();

            if (!slotValidator.IsValid((byte)slot))
            {
                sender.SendErrorNotify("Ten slot jest niepoprawny!", "Wybierz inny slot, aby wejść na służbę podanej grupy");
                return;
            }

            if (accountEntity.characterEntity.OnDutyGroup == null)
            {
                sender.SendErrorNotify("Musisz być na służbie", "Wejdź na służbę, aby uruchomić panel grupy");
                return;
            }

            if (sender.TryGetGroupByUnsafeSlot((short)slot, out GroupEntity group, out GroupWorkerModel worker))
            {
                if (!group.CanPlayerManageWorkers(worker))
                {
                    sender.SendErrorNotify("Wystąpił bląd", "Nie masz uprawnień do zarządzania członkami");
                    return;
                }

                GroupRights convertedRights = (GroupRights)Enum.Parse(typeof(GroupRights), rights.ToString());
                if ((convertedRights.HasFlag(GroupRights.DepositWithdrawMoney) || convertedRights.HasFlag(GroupRights.Recruitment)) && !group.IsGroupOwner(worker))
                {
                    Alt.Log($"[MEMORY-ALERT] {accountEntity.DbModel.Username} zmienił dane w UI i wysłał emit do serwera z niepoprawnymi danymi");
                    return;
                }

                GroupWorkerModel workerToUpdate = group.DbModel.Workers.FirstOrDefault(c => c.CharacterId == characterId);
                workerToUpdate.Rights = convertedRights;

                group.Save();

                sender.SendSuccessNotify("Wykonano pomyśnie!", $"Zmieniłeś uprawnienia członkowi {workerToUpdate.Character.Name} {workerToUpdate.Character.Surname}");
            }
        }
        public void ChangeGroupWorkerRank(IPlayer sender, int characterId, int rankToChange, int groupSlot)
        {
            AccountEntity      accountEntity = sender.GetAccountEntity();
            GroupSlotValidator slotValidator = new GroupSlotValidator();

            if (!slotValidator.IsValid((byte)groupSlot))
            {
                sender.SendErrorNotify("Ten slot jest niepoprawny!", "Wybierz inny slot, aby wejść na służbę podanej grupy");
                return;
            }

            if (accountEntity.characterEntity.OnDutyGroup == null)
            {
                sender.SendErrorNotify("Musisz być na służbie", "Wejdź na służbę, aby uruchomić panel grupy");
                return;
            }

            if (sender.TryGetGroupByUnsafeSlot((short)groupSlot, out GroupEntity group, out GroupWorkerModel worker))
            {
                if (!group.CanPlayerManageWorkers(worker))
                {
                    sender.SendErrorNotify("Wystąpił bląd", "Nie masz uprawnień do zarządzania członkami");
                    return;
                }

                GroupWorkerModel workerToUpdate    = group.DbModel.Workers.SingleOrDefault(c => c.CharacterId == characterId);
                GroupRankModel   rankToChangeModel = group.DbModel.Ranks.First(r => r.Id == rankToChange);

                if (worker.GroupRank.Rights < rankToChangeModel.Rights || !group.IsGroupOwner(worker))
                {
                    Alt.Log($"[MEMORY-ALERT] {accountEntity.DbModel.Username} zmienił dane w UI i wysłał emit do serwera z niepoprawnymi danymi");
                    return;
                }

                workerToUpdate.GroupRank = rankToChangeModel;

                group.Save();
                sender.SendChatMessageInfo("Ranga pracownika została zaktualizowana pomyślnie!");
            }
        }
        public static bool TryGetGroupByUnsafeSlot(this IPlayer player, short slot, out GroupEntity group, out GroupWorkerModel groupWorker)
        {
            group       = null;
            groupWorker = null;

            if (slot > 0 || slot <= 3)
            {
                AccountEntity accountEntity = player.GetAccountEntity();

                slot--;
                List <GroupEntity> groups = EntityHelper.GetPlayerGroups(accountEntity).ToList();
                Alt.Log($"GROUPS: {groups.Count}");
                Alt.Log($"groups[slot]: {groups[slot].DbModel.Name}");

                group = slot < groups.Count ? groups[slot] : null;
                Alt.Log($"accountEntity.characterEntity.DbModel.GroupWorkers: {accountEntity.characterEntity.DbModel.GroupWorkers.Count()}");
                groupWorker = accountEntity.characterEntity.DbModel.GroupWorkers.SingleOrDefault(g => g.GroupId == groups[slot].DbModel.Id);
            }
            Alt.Log($"group: {group.DbModel.Name}");
            return(group != null && groupWorker != null);
        }
 public bool CanPlayerVehicle(GroupWorkerModel worker)
 {
     return(worker.Rights.HasFlag(GroupRights.Vehicle) || IsGroupOwner(worker) ? true : false);
 }
 public bool CanPlayerManageWorkers(GroupWorkerModel worker)
 {
     return(worker.Rights.HasFlag(GroupRights.Recruitment) || IsGroupOwner(worker) ? true : false);
 }
 public bool IsGroupOwner(GroupWorkerModel worker)
 {
     return(DbModel.LeaderId == worker.CharacterId ? true : false);
 }
        public void SpawnOwnVehicle(IPlayer player, int vehicleId)
        {
            VehicleEntity   spawnedVehicle  = EntityHelper.GetSpawnedVehicleById(vehicleId);
            CharacterEntity characterEntity = player.GetAccountEntity().characterEntity;

            if (characterEntity == null)
            {
                return;
            }


            if (spawnedVehicle != null)
            {
                if (player.Vehicle == spawnedVehicle.GameVehicle)
                {
                    player.SendErrorNotify(null, $"Aby odpspawnić pojazd musisz z niego wyjść");
                    return;
                }

                if (spawnedVehicle.TrunkOpen)
                {
                    player.SendErrorNotify(null, "Aby odspawnić pojazd musisz zamknąć bagażnik");
                    return;
                }

                if (spawnedVehicle.IsGroupVehicle)
                {
                    if (characterEntity.OnDutyGroup == null)
                    {
                        player.SendChatMessageError("Musisz być na służbie, aby zrespić pojazd");
                        return;
                    }

                    if (characterEntity.OnDutyGroup != spawnedVehicle.GroupOwner)
                    {
                        player.SendChatMessageError("Ten pojazd nie należy do tej grupy");
                        return;
                    }

                    GroupWorkerModel worker = characterEntity.OnDutyGroup.DbModel.Workers.First(c => c.CharacterId == characterEntity.DbModel.Id);
                    if (!characterEntity.OnDutyGroup.CanPlayerVehicle(worker))
                    {
                        player.SendChatMessageError("Nie masz uprawnień do chowania pojazdów w tej grupie");
                        return;
                    }

                    spawnedVehicle.GroupOwner = null;
                }
                else
                {
                    player.GetAccountEntity().characterEntity.RespawnVehicleCount--;
                }

                spawnedVehicle.Dispose();

                player.SendSuccessNotify(null, $"Twój pojazd o ID {spawnedVehicle.DbModel.Id} został odspawniony");

                return;
            }

            VehicleEntity vehicle = new VehicleEntity(EntityHelper.GetVehicleDatabaseById(vehicleId));

            //vehicle.Spawn();


            if (vehicle.IsGroupVehicle)
            {
                if (characterEntity.OnDutyGroup == null)
                {
                    player.SendChatMessageError("Musisz być na służbie, aby zrespić pojazd");
                    return;
                }

                if (characterEntity.OnDutyGroup.DbModel.Id != vehicle.DbModel.GroupId)
                {
                    player.SendChatMessageError("Ten pojazd nie należy do tej grupy");
                    return;
                }

                GroupWorkerModel worker = characterEntity.OnDutyGroup.DbModel.Workers.FirstOrDefault(c => c.CharacterId == characterEntity.DbModel.Id);
                if (!characterEntity.OnDutyGroup.CanPlayerVehicle(worker))
                {
                    player.SendChatMessageError("Nie masz uprawnień do respienia pojazdów w tej grupie");
                    return;
                }

                vehicle.Spawn();
                vehicle.GroupOwner = characterEntity.OnDutyGroup;
            }
            else
            {
                if (characterEntity.RespawnVehicleCount > 3 && !player.GetAccountEntity().HasPremium)
                {
                    if (player.GetAccountEntity().OnAdminDuty)
                    {
                        return;
                    }

                    player.SendErrorNotify(null, $"Aby zrespić więcej niż 3 pojazdy musisz posiadać premium");
                    //vehicle.Dispose();
                    return;
                }

                vehicle.Spawn();
                characterEntity.RespawnVehicleCount++;
            }


            player.SendSuccessNotify(null, $"Twój pojazd o ID {vehicle.DbModel.Id} został zespawniony");
        }