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.");
                }
            }
        }
示例#2
0
        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();
                        }
                    };
                }
示例#3
0
        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}");
                }
示例#4
0
        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}");
            }
        }
示例#5
0
        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!");
            }
        }