public TeleportCityViewModel(IDispatcherService dispatcherService, string functionTag, IDialogService dialogService, ScoreInfoService scoreInfoService, CityPositionService cityPositionService, TeleRecordService teleRecordService) : base(dispatcherService, functionTag) { _dialogService = dialogService; _scoreInfoService = scoreInfoService; _cityPositionService = cityPositionService; _teleRecordService = teleRecordService; DataGridItemChanged = new RelayCommand <DataGridItemChangedEventArgs>(OnDataGridItemChanged); RefreshList = new RelayCommand(PrivateRefreshList); RemoveItem = new RelayCommand(() => { if (_dialogService.ShowOKCancel("确定删除选中数据吗?")) { _ = _cityPositionService.RemoveAsync(SelectedItem); CityPositions.Remove(SelectedItem); } }, () => { return(SelectedItem != null); }); RemoveAll = new RelayCommand(() => { if (_dialogService.ShowOKCancel("确定删除所有数据吗?")) { _ = _cityPositionService.RemoveAllAsync(); CityPositions = null; } }, () => { return(CityPositions != null); }); AddData = new RelayCommand(() => { if (string.IsNullOrEmpty(TeleCmd)) { _dialogService.ShowInformation("传送命令不能为空"); return; } if (CityPositions.FirstOrDefault(p => p.TeleCmd == TeleCmd) != null) { _dialogService.ShowInformation("传送命令重复"); return; } var cityPosition = new CityPositionDto() { CityName = CityName, TeleCmd = TeleCmd, TeleNeedScore = TeleNeedScore, Pos = Pos }; _ = _cityPositionService.AddAsync(cityPosition); CityPositions.Add(cityPosition); }); AddAvailableVariables(); PrivateRefreshList(); }
protected override bool OnPlayerChatHooked(PlayerInfo playerInfo, string message) { if (message == QueryListCmd) { List <CityPositionDto> dtos = _cityPositionService.GetAll("CityName ASC"); if (dtos.Count == 0) { SdtdConsole.Instance.SendMessageToPlayer(playerInfo.SteamID, "[00FF00]暂无公共城镇信息"); } else { SdtdConsole.Instance.SendMessageToPlayer(playerInfo.SteamID, "[00FF00]可用公共城镇:"); StringBuilder returnCmd = new StringBuilder(); int index = 1; foreach (var item in dtos) { returnCmd.Append(string.Format("pm {0} \"[00FF00]{1}{2}\"\r\n", playerInfo.SteamID, index, FormatCmd(playerInfo, QueryListTips, item))); ++index; } SdtdConsole.Instance.SendCmd(returnCmd.ToString()); } } else { CityPositionDto cityPosition = _cityPositionService.GetDataByID(message); if (cityPosition == null) { return(false); } else { var teleRecord = _teleRecordService.GetDataByID(playerInfo.SteamID); if (teleRecord != null && string.IsNullOrEmpty(teleRecord.LastTeleDateTime) == false) { int timeSpan = (int)(DateTime.Now - DateTime.Parse(teleRecord.LastTeleDateTime)).TotalSeconds; if (timeSpan < TeleInterval)// 正在冷却 { SdtdConsole.Instance.SendMessageToPlayer(playerInfo.SteamID, FormatCmd(playerInfo, TeleFailTips2, TeleInterval - timeSpan)); return(true); } } int playerScore = _scoreInfoService.GetPlayerScore(playerInfo.SteamID); if (playerScore < cityPosition.TeleNeedScore)// 积分不足 { SdtdConsole.Instance.SendMessageToPlayer(playerInfo.SteamID, FormatCmd(playerInfo, TeleFailTips1, cityPosition)); } else { _scoreInfoService.DeductPlayerScore(playerInfo.SteamID, cityPosition.TeleNeedScore); SdtdConsole.Instance.TelePlayer(playerInfo.SteamID, cityPosition.Pos); SdtdConsole.Instance.SendGlobalMessage(FormatCmd(playerInfo, TeleSucceedTips, cityPosition)); // 记录传送日期 var dto = new TeleRecordDto() { SteamID = playerInfo.SteamID, LastTeleDateTime = DateTime.Now.ToString() }; if (teleRecord == null) { _teleRecordService.Add(dto); } else { _teleRecordService.Update(dto); } Log.Info(string.Format("玩家: {0} SteamID: {1} 传送到了: {2}", playerInfo.PlayerName, playerInfo.SteamID, cityPosition.CityName)); } } } return(true); }