public void SendMessageOnGroupChat(Client sender, string message) { string slot = message.Split(' ')[0]; byte groupSlot = slot.All(char.IsDigit) ? Convert.ToByte(slot) : (byte)0; GroupSlotValidator validator = new GroupSlotValidator(); if (groupSlot != 0 && validator.IsValid(groupSlot)) { sender.SendError("Podany slot grupy jest nieprawidłowy."); return; } if (sender.TryGetGroupByUnsafeSlot(groupSlot, out GroupEntity group, out WorkerModel worker)) { if (group.CanPlayerWriteOnChat(worker)) { message = string.Join(" ", message); IEnumerable <CharacterEntity> characters = EntityHelper.GetCharacters(c => group.ContainsWorker(c)); CharacterEntity character = sender.GetAccountEntity().CharacterEntity; SendMessageToSpecifiedPlayers(character, characters, message, ChatMessageType.GroupOoc, group.DbModel.Color); } else { sender.SendWarning("Nie posiadasz uprawnień do czatu w tej grupie."); } } }
public void EnterDuty(Client sender, byte slot) { Timer dutyTimer = new Timer(60000); AccountEntity player = sender.GetAccountEntity(); if (player.CharacterEntity.OnDutyGroup != null) { sender.SendInfo($"Zszedłeś ze służby grupy: {player.CharacterEntity.OnDutyGroup.GetColoredName()}"); player.CharacterEntity.OnDutyGroup.PlayersOnDuty.Remove(player); player.CharacterEntity.OnDutyGroup = null; sender.ResetNametagColor(); sender.Nametag = $"[{player.ServerId}] {player.CharacterEntity.FormatName}"; dutyTimer.Stop(); dutyTimer.Dispose(); } else { GroupSlotValidator validator = new GroupSlotValidator(); if (!validator.IsValid(slot)) { sender.SendError("Podany slot grupy nie jest poprawny."); return; } if (sender.TryGetGroupByUnsafeSlot(Convert.ToInt16(slot), out GroupEntity group, out WorkerModel worker)) { dutyTimer.Start(); dutyTimer.Elapsed += (o, args) => { worker.DutyMinutes += 1; group.Save(); }; sender.Nametag = $"( {player.ServerId} ) ( {group.DbModel.Name} ) {sender.Name}"; sender.NametagColor = group.DbModel.Color.ToColor(); player.CharacterEntity.OnDutyGroup = group; player.CharacterEntity.OnDutyGroup.PlayersOnDuty.Add(player); sender.SendInfo($"Wszedłeś na służbę grupy: {group.GetColoredName()}"); AccountEntity.AccountLoggedOut += (client, account) => { if (client == sender) { dutyTimer.Dispose(); } }; }
public void EnterDutyGroup(IPlayer player, int slot) { Timer dutyTimer = new Timer(60000); AccountEntity accountEntity = player.GetAccountEntity(); if (accountEntity.characterEntity.OnDutyGroup != null) { player.SendSuccessNotify("Zszedłeś ze służby", "Twoja postać zszedła ze służby"); accountEntity.characterEntity.OnDutyGroup.PlayersOnDuty.Remove(accountEntity); accountEntity.characterEntity.OnDutyGroup = null; accountEntity.characterEntity.UpdateName(accountEntity.characterEntity.FormatName); dutyTimer.Stop(); dutyTimer.Dispose(); player.SetData("group:dutyTimer", null); player.SetSyncedMetaData("group:dutyWorkerData", null); player.SetSyncedMetaData("group:dutyGroupData", null); } else { GroupSlotValidator slotValidator = new GroupSlotValidator(); if (!slotValidator.IsValid((byte)slot)) { player.SendErrorNotify("Ten slot jest niepoprawny!", "Wybierz inny slot, aby wejść na służbę podanej grupy"); return; } if (player.TryGetGroupByUnsafeSlot(Convert.ToInt16(slot), out GroupEntity group, out GroupWorkerModel worker)) { dutyTimer.Start(); dutyTimer.Elapsed += (o, args) => { worker.DutyMinutes += 1; group.Save(); }; player.SetData("group:dutyTimer", dutyTimer); player.SetSyncedMetaData("group:dutyWorkerData", worker); player.SetSyncedMetaData("group:dutyGroupData", group.DbModel); accountEntity.characterEntity.UpdateName($"~w~(~b~{group.DbModel.Tag}~w~) {accountEntity.characterEntity.FormatName}"); accountEntity.characterEntity.OnDutyGroup = group; accountEntity.characterEntity.OnDutyGroup.PlayersOnDuty.Add(accountEntity); player.SendSuccessNotify("Wszedłeś na służbę", $"Wszedłeś na służbę {group.DbModel.Name}"); }
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!"); } }