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); }
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)); }
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"); }