private void Start() { if (GetComponent <InteractManager>() && GetComponent <PlayerFunctions>()) { inputManager = InputController.Instance; gameManager = HFPS_GameManager.Instance; floatingItem = FloatingIconManager.Instance; interact = GetComponent <InteractManager>(); pfunc = GetComponent <PlayerFunctions>(); paperUI = gameManager.PaperTextUI; paperText = gameManager.PaperReadText; } else { Debug.LogError("Missing one or more scripts in " + gameObject.name); return; } if (examineLight) { examineLight.enabled = false; } delay = transform.root.gameObject.GetComponentInChildren <DelayEffect>(); PlayerCam = ScriptManager.Instance.MainCamera; ArmsCam = ScriptManager.Instance.ArmsCamera; DefaultMainCamMask = ScriptManager.Instance.MainCamera.cullingMask; DefaultArmsCamMask = ArmsCam.cullingMask; pickupRange = interact.RaycastRange; }
void Start() { inputController = InputController.Instance; gameManager = HFPS_GameManager.Instance; delay = transform.root.GetComponentInChildren <DelayEffect>(true); InteractLayer = GetComponent <InteractManager>().InteractLayer; RayLength = GetComponent <InteractManager>().RaycastRange; }
private void Awake() { delay = gameObject.transform.GetChild(0).GetChild(1).GetChild(0).GetChild(0).gameObject.GetComponent <DelayEffect>(); interact = GetComponent <InteractManager>(); inputManager = GetComponent <ScriptManager>().GetScript <InputController>(); gameManager = GetComponent <ScriptManager>().GetScript <HFPS_GameManager>(); pfunc = GetComponent <PlayerFunctions>(); playerCam = Camera.main; }
private void Awake() { delay = gameObject.transform.GetChild(0).GetChild(1).GetChild(0).GetChild(0).gameObject.GetComponent <DelayEffect>(); interact = GetComponent <InteractManager>(); inputManager = InputController.Instance; gameManager = HFPS_GameManager.Instance; pfunc = GetComponent <PlayerFunctions>(); playerCam = ScriptManager.Instance.MainCamera; PickupRange = interact.RaycastRange; }
private void Start() { if (GetComponent <ScriptManager>() && GetComponent <InteractManager>() && GetComponent <PlayerFunctions>()) { inputManager = GetComponent <ScriptManager>().GetScript <InputController>(); gameManager = GetComponent <ScriptManager>().GetScript <HFPS_GameManager>(); interact = GetComponent <InteractManager>(); pfunc = GetComponent <PlayerFunctions>(); paperUI = gameManager.PaperTextUI; paperText = gameManager.PaperReadText; } else { Debug.LogError("Missing one or more scripts in " + gameObject.name); } delay = gameObject.transform.GetChild(0).GetChild(1).GetChild(0).GetChild(0).gameObject.GetComponent <DelayEffect>(); playerCam = Camera.main; ArmsCam = GetComponent <ScriptManager>().ArmsCameraBlur.GetComponent <Camera>(); DefaultMainCamMask = Camera.main.cullingMask; DefaultArmsCamMask = ArmsCam.cullingMask; }
public override async Task ExecuteAsync(MainRepository repo, Character character, IEnumerable <CharacterCommandParameter> options, CommandSystemData game) { var isRegularly = options.Any(p => p.Type == CharacterCommandParameterTypes.Regularly); var itemTypeOptional = options.FirstOrDefault(p => p.Type == 1); if (itemTypeOptional == null || itemTypeOptional.NumberValue == null) { await game.CharacterLogAsync("アイテム生産のパラメータが不正です。<emerge>管理者にお問い合わせください</emerge>"); return; } var itemType = (CharacterItemType)itemTypeOptional.NumberValue; var delays = await repo.DelayEffect.GetAllAsync(); if (delays.Any(d => d.CharacterId == character.Id && d.Type == DelayEffectType.GenerateItem)) { if (!isRegularly) { await game.CharacterLogAsync($"アイテム生産しようとしましたが、複数のアイテムを同時に生産することはできません"); } return; } var infoOptional = CharacterItemInfoes.Get(itemType); if (!infoOptional.HasData) { await game.CharacterLogAsync($"ID: {(short)itemType} のアイテムは存在しません。<emerge>管理者にお問い合わせください</emerge>"); return; } var info = infoOptional.Data; var generateInfo = GenerateItemInfo.GetInfo(character, itemType); if (generateInfo == null) { await game.CharacterLogAsync("アイテム生産の情報が不正です。<emerge>管理者にお問い合わせください</emerge>"); return; } var money = info.IsResource ? info.MoneyPerResource * info.DefaultResource / 16 : info.Money / 16; if (character.Money < money) { await game.CharacterLogAsync("アイテム生産しようとしましたが、金が足りません。<num>" + money + "</num> 必要です"); return; } var townOptional = await repo.Town.GetByIdAsync(character.TownId); if (townOptional.HasData) { var country = await repo.Country.GetByIdAsync(character.CountryId); var town = townOptional.Data; if (town.CountryId != character.CountryId && country.HasData && !country.Data.HasOverthrown) { await game.CharacterLogAsync($"<town>{town.Name}</town> でアイテム生産しようとしましたが、自国の都市ではありません"); return; } character.Money -= money; var delay = new DelayEffect { CharacterId = character.Id, CountryId = character.CountryId, AppearGameDateTime = game.GameDateTime, Type = DelayEffectType.GenerateItem, TypeData = (int)itemType, }; await repo.DelayEffect.AddAsync(delay); await repo.SaveChangesAsync(); await StatusStreaming.Default.SendCharacterAsync(ApiData.From(delay), character.Id); var finish = GameDateTime.FromInt(game.GameDateTime.ToInt() + generateInfo.Length); generateInfo.AddExAttribute(character); if (!isRegularly) { character.Contribution += generateInfo.Contribution; character.SkillPoint++; } await game.CharacterLogAsync($"<town>{town.Name}</town> で <num>{money}</num> を投し、{info.Name} の生産を開始しました。結果は <num>{finish.Year}</num> 年 <num>{finish.Month}</num> 月に来ます"); } else { await game.CharacterLogAsync("ID:" + character.TownId + " の都市は存在しません。<emerge>管理者にお問い合わせください</emerge>"); } }
public static async Task <bool> ResultAsync(MainRepository repo, SystemData system, DelayEffect delay, Func <uint, string, Task> logAsync) { var chara = await repo.Character.GetByIdAsync(delay.CharacterId); var type = (CharacterItemType)delay.TypeData; if (!chara.HasData) { return(false); } if (chara.Data.HasRemoved) { return(true); } var generateInfo = GenerateItemInfo.GetInfo(chara.Data, type); if (generateInfo == null) { return(false); } if (delay.IntAppearGameDateTime + generateInfo.Length <= system.IntGameDateTime) { var info = CharacterItemInfoes.Get(type); if (info.HasData) { var item = new CharacterItem { Type = type, Status = CharacterItemStatus.CharacterPending, CharacterId = chara.Data.Id, IntLastStatusChangedGameDate = system.IntGameDateTime, }; if (info.Data.IsResource) { item.Resource = (ushort)(info.Data.DefaultResource + RandomService.Next((int)(generateInfo.ResourceAttribute(chara.Data) * 1.4f))); } await ItemService.GenerateItemAndSaveAsync(repo, item); await ItemService.SetCharacterPendingAsync(repo, item, chara.Data); if (info.Data.IsResource) { await logAsync(chara.Data.Id, $"アイテム {info.Data.Name} を生産しました。資源量: <num>{item.Resource}</num>"); } else { await logAsync(chara.Data.Id, $"アイテム {info.Data.Name} を生産しました"); } return(true); } } return(false); }
private void SetupTable(Table.Table Table, Dictionary <int, TableConfig> TableConfigDict, Dictionary <int, Dictionary <int, IToy> > ToyAssignments) { foreach (KeyValuePair <int, TableConfig> KV in TableConfigDict) { int LedWizNr = KV.Key; if (ToyAssignments.ContainsKey(LedWizNr)) { TableConfig TC = KV.Value; foreach (TableConfigColumn TCC in TC.Columns) { if (ToyAssignments[LedWizNr].ContainsKey(TCC.Number)) { IToy Toy = ToyAssignments[LedWizNr][TCC.Number]; int SettingNumber = 0; foreach (TableConfigSetting TCS in TCC) { SettingNumber++; IEffect Effect = null; int Layer = (TCS.Layer.HasValue ? TCS.Layer.Value : SettingNumber); if (Toy is IRGBAToy || Toy is IAnalogAlphaToy) { if (Toy is IRGBAToy) { RGBAColor ActiveColor = null; if (TCS.ColorConfig != null) { ActiveColor = TCS.ColorConfig.GetCabinetColor().GetRGBAColor(); } else { if (!TCS.ColorName.IsNullOrWhiteSpace()) { if (TCS.ColorName.StartsWith("#")) { ActiveColor = new RGBAColor(); if (!ActiveColor.SetColor(TCS.ColorName)) { ActiveColor = null; Log.Warning("Skipped setting {0} in column {1} for LedWizEqivalent number {2} since {3} is not a valid color specification.".Build(new object[] { SettingNumber, TCC.Number, LedWizNr, TCS.ColorName })); } } else { Log.Warning("Skipped setting {0} in column {1} for LedWizEqivalent number {2} since {3} is not a valid color specification.".Build(new object[] { SettingNumber, TCC.Number, LedWizNr, TCS.ColorName })); } } else { Log.Warning("Skipped setting {0} in column {1} for LedWizEqivalent number {2} since it does not contain a color specification.".Build(SettingNumber, TCC.Number, LedWizNr)); } } if (ActiveColor != null) { if (TCS.FadingDownDurationMs > 0 || TCS.FadingUpDurationMs > 0) { //Must fade, use fadeeffect Effect = new RGBAFadeOnOffEffect() { ToyName = Toy.Name, Layer = Layer, FadeActiveDurationMs = TCS.FadingUpDurationMs, FadeInactiveDurationMs = TCS.FadingDownDurationMs, RetriggerBehaviour = RetriggerBehaviourEnum.IgnoreRetrigger, FadeMode = FadeModeEnum.CurrentToDefined, ActiveColor = ActiveColor, InactiveColor = new RGBAColor(0, 0, 0, 0) }; } else { //No fadinging, set color directly Effect = new RGBAOnOffEffect() { ToyName = Toy.Name, Layer = Layer, ActiveColor = ActiveColor, InactiveColor = new RGBAColor(0, 0, 0, 0) }; } } } else if (Toy is IAnalogAlphaToy) { AnalogAlphaValue AAV = new AnalogAlphaValue(((int)((double)TCS.Intensity * 5.3125)).Limit(0, 255)); if (TCS.FadingDownDurationMs > 0 || TCS.FadingUpDurationMs > 0) { Effect = new AnalogToyFadeOnOffEffect() { ToyName = Toy.Name, Layer = Layer, FadeActiveDurationMs = TCS.FadingUpDurationMs, FadeInactiveDurationMs = TCS.FadingDownDurationMs, RetriggerBehaviour = RetriggerBehaviourEnum.IgnoreRetrigger, FadeMode = FadeModeEnum.CurrentToDefined, ActiveValue = AAV, InactiveValue = new AnalogAlphaValue(0, 0) }; } else { Effect = new AnalogToyOnOffEffect() { ToyName = Toy.Name, Layer = Layer, ActiveValue = AAV, InactiveValue = new AnalogAlphaValue(0, 0) }; } } if (Effect != null) { Effect.Name = "Ledwiz {0:00} Column {1:00} Setting {2:00} {3}".Build(new object[] { LedWizNr, TCC.Number, SettingNumber, Effect.GetType().Name }); MakeEffectNameUnique(Effect, Table); Table.Effects.Add(Effect); if (TCS.Blink != 0) { Effect = new BlinkEffect() { Name = "Ledwiz {0:00} Column {1:00} Setting {2:00} BlinkEffect".Build(LedWizNr, TCC.Number, SettingNumber), TargetEffectName = Effect.Name, DurationActiveMs = TCS.BlinkIntervalMs, DurationInactiveMs = TCS.BlinkIntervalMs }; MakeEffectNameUnique(Effect, Table); Table.Effects.Add(Effect); } if (TCS.DurationMs > 0 || TCS.Blink > 0) { int Duration = (TCS.DurationMs > 0 ? TCS.DurationMs : (TCS.Blink * 2 - 1) * TCS.BlinkIntervalMs + 1); Effect = new DurationEffect() { Name = "Ledwiz {0:00} Column {1:00} Setting {2:00} DurationEffect".Build(LedWizNr, TCC.Number, SettingNumber), TargetEffectName = Effect.Name, DurationMs = Duration, RetriggerBehaviour = RetriggerBehaviourEnum.RestartEffect }; MakeEffectNameUnique(Effect, Table); Table.Effects.Add(Effect); } if (TCS.MinDurationMs > 0 || (Toy is IRGBAToy && EffectRGBMinDurationMs > 0) || (!(Toy is IRGBAToy) && EffectMinDurationMs > 0)) { string N = (TCS.MinDurationMs > 0 ? "MinDuratonEffect" : "DefaultMinDurationEffect"); int Min = (TCS.MinDurationMs > 0 ? TCS.MinDurationMs : (Toy is IRGBAToy ? EffectRGBMinDurationMs : EffectMinDurationMs)); Effect = new MinDurationEffect() { Name = "Ledwiz {0:00} Column {1:00} Setting {2:00} {3}".Build(new object[] { LedWizNr, TCC.Number, SettingNumber, N }), TargetEffectName = Effect.Name, MinDurationMs = Min }; MakeEffectNameUnique(Effect, Table); Table.Effects.Add(Effect); } if (TCS.WaitDurationMs > 0) { Effect = new DelayEffect() { Name = "Ledwiz {0:00} Column {1:00} Setting {2:00} DelayEffect".Build(LedWizNr, TCC.Number, SettingNumber), TargetEffectName = Effect.Name, DelayMs = TCS.WaitDurationMs }; MakeEffectNameUnique(Effect, Table); Table.Effects.Add(Effect); } switch (TCS.OutputControl) { case OutputControlEnum.FixedOn: Table.AssignedStaticEffects.Add(new AssignedEffect(Effect.Name)); break; case OutputControlEnum.Controlled: if (!Table.TableElements.Contains(TCS.TableElementType, TCS.TableElementNumber)) { Table.TableElements.UpdateState(TCS.TableElementType, TCS.TableElementNumber, 0); } Table.TableElements[TCS.TableElementType, TCS.TableElementNumber].AssignedEffects.Add(new AssignedEffect(Effect.Name)); break; case OutputControlEnum.FixedOff: default: break; } } } } } } } } }
private void applyEffectButton_Click(object sender, EventArgs e) { AudioEffect effect; var fs = _signal.SamplingRate; var winSize = int.Parse(winSizeTextBox.Text); var hopSize = int.Parse(hopSizeTextBox.Text); var tsm = (TsmAlgorithm)tsmComboBox.SelectedIndex; var shift = float.Parse(pitchShiftTextBox.Text); if (tremoloRadioButton.Checked) { var freq = float.Parse(tremoloFrequencyTextBox.Text); var index = float.Parse(tremoloIndexTextBox.Text); effect = new TremoloEffect(fs, freq, index); } else if (overdriveRadioButton.Checked) { var gain = float.Parse(distortionGainTextBox.Text); effect = new OverdriveEffect(gain); } else if (distortionRadioButton.Checked) { var gain = float.Parse(distortionGainTextBox.Text); effect = new DistortionEffect(gain); } else if (tubeDistortionRadioButton.Checked) { var gain = float.Parse(distortionGainTextBox.Text); var mix = float.Parse(wetTextBox.Text); var dist = float.Parse(distTextBox.Text); var q = float.Parse(qTextBox.Text); effect = new TubeDistortionEffect(gain, mix, q, dist); } else if (echoRadioButton.Checked) { var delay = float.Parse(echoDelayTextBox.Text); var decay = float.Parse(echoDecayTextBox.Text); effect = new EchoEffect(fs, delay, decay); } else if (delayRadioButton.Checked) { var delay = float.Parse(echoDelayTextBox.Text); var decay = float.Parse(echoDecayTextBox.Text); effect = new DelayEffect(fs, delay, decay); } else if (wahwahRadioButton.Checked) { var lfoFrequency = float.Parse(lfoFreqTextBox.Text); var minFrequency = float.Parse(minFreqTextBox.Text); var maxFrequency = float.Parse(maxFreqTextBox.Text); var q = float.Parse(lfoQTextBox.Text); //effect = new WahwahEffect(fs, lfoFrequency, minFrequency, maxFrequency, q); effect = new AutowahEffect(fs, minFrequency, maxFrequency, q); } else if (flangerRadioButton.Checked) { var lfoFrequency = float.Parse(lfoFreqTextBox.Text); var maxDelay = float.Parse(maxDelayTextBox.Text); effect = new FlangerEffect(fs, maxDelay, lfoFrequency); } else if (pitchShiftRadioButton.Checked) { effect = pitchShiftCheckBox.Checked ? new PitchShiftEffect(shift, winSize, hopSize, tsm) : null; //effect = pitchShiftCheckBox.Checked ? new WhisperEffect(hopSize, winSize) : null; //effect = new MorphEffect(hopSize, winSize); } else { var lfoFrequency = float.Parse(lfoFreqTextBox.Text); var minFrequency = float.Parse(minFreqTextBox.Text); var maxFrequency = float.Parse(maxFreqTextBox.Text); var q = float.Parse(lfoQTextBox.Text); var lfo = new SawtoothBuilder() .SetParameter("freq", lfoFrequency) .SetParameter("min", minFrequency) .SetParameter("max", maxFrequency) .SampledAt(_signal.SamplingRate); effect = new PhaserEffect(fs, lfo, q); } if (effect != null) { effect.Wet = float.Parse(wetTextBox.Text); effect.Dry = float.Parse(dryTextBox.Text); _filteredSignal = effect.ApplyTo(_signal, FilteringMethod.Auto); //DiscreteSignal morph; //using (var stream = new FileStream(@"D:\Docs\Research\DATABASE\Dictor1\wav\gtr16khz.wav", FileMode.Open)) //{ // var waveFile = new WaveFile(stream); // morph = waveFile[Channels.Average]; //} //_filteredSignal = ((MorphEffect)effect).ApplyTo(_signal, morph); } else { _filteredSignal = Operation.TimeStretch(_signal, shift, tsm); //Operation.TimeStretch(_signal, shift, winSize, hopSize, tsm); } signalAfterFilteringPanel.Signal = _filteredSignal; spectrogramAfterFilteringPanel.Spectrogram = _stft.Spectrogram(_filteredSignal.Samples); }
void Start() { inputManager = GetComponent <ScriptManager>().GetScript <InputController>(); gameManager = GetComponent <ScriptManager>().GetScript <HFPS_GameManager>(); delay = gameObject.transform.GetChild(0).GetChild(1).GetChild(0).GetChild(0).gameObject.GetComponent <DelayEffect> (); }
private void applyEffectButton_Click(object sender, EventArgs e) { IFilter effect; if (tremoloRadioButton.Checked) { var freq = float.Parse(tremoloFrequencyTextBox.Text); var index = float.Parse(tremoloIndexTextBox.Text); effect = new TremoloEffect(freq, index); } else if (overdriveRadioButton.Checked) { effect = new OverdriveEffect(); } else if (distortionRadioButton.Checked) { var gain = float.Parse(distortionGainTextBox.Text); var mix = float.Parse(distortionMixTextBox.Text); effect = new DistortionEffect(gain, mix); } else if (tubeDistortionRadioButton.Checked) { var gain = float.Parse(distortionGainTextBox.Text); var mix = float.Parse(distortionMixTextBox.Text); var dist = float.Parse(distTextBox.Text); var q = float.Parse(qTextBox.Text); effect = new TubeDistortionEffect(gain, mix, q, dist); } else if (echoRadioButton.Checked) { var delay = float.Parse(echoDelayTextBox.Text); var decay = float.Parse(echoDecayTextBox.Text); effect = new EchoEffect(delay, decay); } else if (delayRadioButton.Checked) { var delay = float.Parse(echoDelayTextBox.Text); var decay = float.Parse(echoDecayTextBox.Text); effect = new DelayEffect(delay, decay); } else if (wahwahRadioButton.Checked) { var lfoFrequency = float.Parse(lfoFreqTextBox.Text); var minFrequency = float.Parse(minFreqTextBox.Text); var maxFrequency = float.Parse(maxFreqTextBox.Text); var q = float.Parse(lfoQTextBox.Text); effect = new WahwahEffect(lfoFrequency, minFrequency, maxFrequency, q); } else if (pitchShiftRadioButton.Checked) { var shift = float.Parse(pitchShiftTextBox.Text); effect = pitchShiftCheckBox.Checked ? new PitchShiftEffect(shift) : null; } else { var lfoFrequency = float.Parse(lfoFreqTextBox.Text); var minFrequency = float.Parse(minFreqTextBox.Text); var maxFrequency = float.Parse(maxFreqTextBox.Text); var q = float.Parse(lfoQTextBox.Text); effect = new PhaserEffect(lfoFrequency, minFrequency, maxFrequency, q); } _filteredSignal = effect != null? effect.ApplyTo(_signal, FilteringOptions.Auto) : Operation.TimeStretch(_signal, float.Parse(pitchShiftTextBox.Text)); signalAfterFilteringPanel.Signal = _filteredSignal; spectrogramAfterFilteringPanel.Spectrogram = _stft.Spectrogram(_filteredSignal.Samples); }
public override async Task ExecuteAsync(MainRepository repo, Character character, IEnumerable <CharacterCommandParameter> options, CommandSystemData game) { var isRegularly = options.Any(p => p.Type == CharacterCommandParameterTypes.Regularly); var delays = await repo.DelayEffect.GetAllAsync(); if (delays.Any(d => d.CharacterId == character.Id && d.Type == DelayEffectType.TownInvestment)) { if (!isRegularly) { await game.CharacterLogAsync($"投資しようとしましたが、複数の都市に同時に投資することはできません"); } return; } var money = game.GameDateTime.Year * 200 + 10000; if (character.Money < money) { await game.CharacterLogAsync("投資しようとしましたが、金が足りません。<num>" + money + "</num> 必要です"); return; } var townOptional = await repo.Town.GetByIdAsync(character.TownId); if (townOptional.HasData) { var country = await repo.Country.GetByIdAsync(character.CountryId); var town = townOptional.Data; if (town.CountryId != character.CountryId && country.HasData && !country.Data.HasOverthrown) { await game.CharacterLogAsync($"<town>{town.Name}</town> で投資しようとしましたが、自国の都市ではありません"); return; } character.Money -= money; var delay = new DelayEffect { CharacterId = character.Id, CountryId = character.CountryId, AppearGameDateTime = game.GameDateTime, TownId = town.Id, Type = DelayEffectType.TownInvestment, }; await repo.DelayEffect.AddAsync(delay); await repo.SaveChangesAsync(); await StatusStreaming.Default.SendCharacterAsync(ApiData.From(delay), character.Id); character.AddIntellectEx(500); if (!isRegularly) { character.Contribution += 200; character.SkillPoint++; } await game.CharacterLogAsync($"<town>{town.Name}</town> に <num>{money}</num> を投資しました。結果は <num>{game.GameDateTime.Year + 3}</num> 年 <num>{game.GameDateTime.Month}</num> 月に来ます。知力Ex <num>+500</num>"); } else { await game.CharacterLogAsync("ID:" + character.TownId + " の都市は存在しません。<emerge>管理者にお問い合わせください</emerge>"); } }
public static async Task <bool> ResultAsync(MainRepository repo, SystemData system, DelayEffect delay, Func <uint, string, Task> logAsync) { if (delay.IntAppearGameDateTime + 36 <= system.IntGameDateTime) { var chara = await repo.Character.GetByIdAsync(delay.CharacterId); var town = await repo.Town.GetByIdAsync(delay.TownId); if (chara.HasData && town.HasData) { var results = new List <string>(); var skills = await repo.Character.GetSkillsAsync(chara.Data.Id); var currentItems = await repo.Character.GetItemsAsync(chara.Data.Id); var items = (await repo.Town.GetItemsAsync(chara.Data.TownId)).Where(i => i.Status == CharacterItemStatus.TownHidden); if (RandomService.Next(0, 10) < items.Count()) { var item = RandomService.Next(items); var info = CharacterItemInfoes.Get(item.Type); if (info.HasData && (info.Data.DiscoverFroms == null || info.Data.DiscoverFroms.Contains(chara.Data.From))) { await ItemService.SetCharacterPendingAsync(repo, item, chara.Data); results.Add($"アイテム {info.Data.Name}"); } } var money = RandomService.Next(chara.Data.Intellect * 32, Math.Max(chara.Data.Intellect * 48, system.GameDateTime.Year * 650 + 10000)); chara.Data.Money += money; results.Add($"金 <num>{money}</num>"); var country = await repo.Country.GetByIdAsync(chara.Data.CountryId); if (country.HasData) { var name = string.Empty; var add = RandomService.Next(20, 60); var target = RandomService.Next(0, 5); if (target == 0) { name = "農業"; town.Data.Agriculture = Math.Min(town.Data.AgricultureMax, town.Data.Agriculture + add); } else if (target == 1) { name = "商業"; town.Data.Commercial = Math.Min(town.Data.CommercialMax, town.Data.Commercial + add); } else if (target == 2) { name = "技術"; town.Data.Technology = Math.Min(town.Data.TechnologyMax, town.Data.Technology + add); } else if (target == 3) { name = "城壁"; town.Data.Wall = Math.Min(town.Data.WallMax, town.Data.Wall + add); } else if (target == 4) { name = "都市施設"; town.Data.TownBuildingValue = Math.Min(Config.TownBuildingMax, town.Data.TownBuildingValue + add); } await logAsync(chara.Data.Id, $"<town>{town.Data.Name}</town> に投資し、{name} の開発に <num>+{add}</num> 貢献し、{string.Join("と", results)}を得ました"); } else { await logAsync(chara.Data.Id, $"<town>{town.Data.Name}</town> に投資し、{string.Join("と", results)}を得ました"); } return(true); } } return(false); }