コード例 #1
0
        protected override void Setup()
        {
            //敵対関係のグループを作成
            chaosRelationShipId = World.AddRelationshipGroup("Inferno:ChaosPeds");

            var chaosSettingLoader = new ChaosModeSettingLoader();

            chaosModeSetting = chaosSettingLoader.LoadSettingFile(@"ChaosMode_Default.conf");

            chaosChecker = new CharacterChaosChecker(chaosModeSetting.DefaultMissionCharacterTreatment,
                                                     chaosModeSetting.IsChangeMissionCharacterWeapon);

            defaultWeaponProvider = new CustomWeaponProvider(chaosModeSetting.WeaponList, chaosModeSetting.WeaponListForDriveBy);

            //キーワードが入力されたらON/OFFを切り替える
            CreateInputKeywordAsObservable(Keyword)
            .Subscribe(_ =>
            {
                IsActive = !IsActive;
                chaosedPedList.Clear();
                StopAllChaosCoroutine();
                if (IsActive)
                {
                    DrawText("ChaosMode:On/" + currentTreatType.ToString(), 3.0f);
                    World.SetRelationshipBetweenGroups(Relationship.Hate, chaosRelationShipId, PlayerPed.RelationshipGroup);
                }
                else
                {
                    DrawText("ChaosMode:Off", 3.0f);
                    World.SetRelationshipBetweenGroups(Relationship.Neutral, chaosRelationShipId, PlayerPed.RelationshipGroup);
                }
            });

            nextTreatType = currentTreatType;

            //F7でキャラカオスの切り替え(暫定
            OnKeyDownAsObservable
            .Where(x => IsActive && x.KeyCode == Keys.F7)
            .Do(_ =>
            {
                nextTreatType = (MissionCharacterTreatmentType)(((int)nextTreatType + 1) % 3);
                DrawText("CharacterChaos:" + nextTreatType.ToString(), 1.1f);
            })
            .Throttle(TimeSpan.FromSeconds(1))
            .Subscribe(_ =>
            {
                currentTreatType = nextTreatType;
                chaosChecker.MissionCharacterTreatment = nextTreatType;
                DrawText("CharacterChaos:" + currentTreatType.ToString() + "[OK]", 3.0f);
                chaosedPedList.Clear();
                StopAllChaosCoroutine();
            });

            //interval設定
            Interval = chaosModeSetting.Interval;

            var oneSecondTich = CreateTickAsObservable(TimeSpan.FromSeconds(1));

            //市民をカオス化する
            oneSecondTich
            .Where(_ => IsActive && PlayerPed.IsSafeExist() && PlayerPed.IsAlive)
            .Subscribe(_ => CitizenChaos());

            //プレイヤが死んだらリセット
            oneSecondTich
            .Where(_ => PlayerPed.IsSafeExist())
            .Select(_ => PlayerPed.IsDead)
            .DistinctUntilChanged()
            .Where(x => x)
            .Subscribe(_ =>
            {
                chaosedPedList.Clear();
                StopAllChaosCoroutine();
            });

            oneSecondTich
            .Where(_ => IsActive)
            .Subscribe(_ => NativeFunctions.SetAllRandomPedsFlee(Game.Player, false));

            //イベントが来たら武器を変更する
            OnRecievedInfernoEvent
            .OfType <IEventMessage, ChasoModeEvent>()
            .Subscribe(e =>
            {
                if (e is ChangeToDefaultEvent)
                {
                    singleWeaponProvider = null;
                }
                else if (e is ChangeWeaponEvent)
                {
                    var s = (ChangeWeaponEvent)e;
                    singleWeaponProvider = new SingleWeaponProvider(s.Weapon);
                }
            });
        }
コード例 #2
0
 public CharacterChaosChecker(MissionCharacterTreatmentType missionCharacterTreatment, bool isChangeMissonCharacterWeapon)
 {
     MissionCharacterTreatment     = missionCharacterTreatment;
     IsChangeMissonCharacterWeapon = isChangeMissonCharacterWeapon;
 }