Esempio n. 1
0
    public HScene.StartMotion GetAnimation(
        List <HScene.AnimationListInfo>[] _listAnim,
        int _initiative,
        bool _isFirst = false)
    {
        bool flag = true;

        HAutoCtrl.AutoRandom autoRandom = new HAutoCtrl.AutoRandom();
        for (int index1 = 0; index1 < _listAnim.Length; ++index1)
        {
            for (int index2 = 0; index2 < _listAnim[index1].Count; ++index2)
            {
                if (_listAnim[index1][index2].nPositons.Contains(Singleton <HSceneFlagCtrl> .Instance.nPlace))
                {
                    if (Singleton <HSceneManager> .Instance.Player.ChaControl.sex == (byte)0 || Singleton <HSceneManager> .Instance.Player.ChaControl.sex == (byte)1 && Singleton <HSceneManager> .Instance.bFutanari)
                    {
                        if (index1 == 4 || Object.op_Equality((Object)((HScene)Singleton <HSceneManager> .Instance.HSceneSet.GetComponentInChildren <HScene>()).GetFemales()[1], (Object)null) && index1 == 5)
                        {
                            continue;
                        }
                    }
                    else if (index1 != 4)
                    {
                        continue;
                    }
                    switch (_initiative)
                    {
                    case 1:
                        if (_listAnim[index1][index2].nInitiativeFemale == 1 || flag && _listAnim[index1][index2].nInitiativeFemale == 2)
                        {
                            break;
                        }
                        continue;

                    case 2:
                        if (_listAnim[index1][index2].nInitiativeFemale == 2)
                        {
                            break;
                        }
                        continue;

                    default:
                        continue;
                    }
                    autoRandom.Add(new HAutoCtrl.AutoRandom.AutoRandomDate()
                    {
                        mode = index1,
                        id   = _listAnim[index1][index2].id
                    }, (float)(10.0 + (!Singleton <HSceneManager> .Instance.HSkil.ContainsKey(_listAnim[index1][index2].nFemaleProclivity) ? 0.0 : (double)this.info.rateAddMotionChange)));
                    if (_isFirst)
                    {
                        break;
                    }
                }
            }
        }
        HAutoCtrl.AutoRandom.AutoRandomDate autoRandomDate = autoRandom.Random();
        return(new HScene.StartMotion(autoRandomDate.mode, autoRandomDate.id));
    }
        public HScene.StartMotion RandomSelectAnimation(List <HScene.AnimationListInfo>[] animList)
        {
            HAutoCtrl.AutoRandom inclusionAutoRandom = new HAutoCtrl.AutoRandom();
            HAutoCtrl.AutoRandom autoRandom          = new HAutoCtrl.AutoRandom();

            bool male            = Singleton <HSceneManager> .Instance.player.sex == 0;
            bool futa            = Singleton <HSceneManager> .Instance.bFutanari && !male;
            bool multipleFemales = Singleton <HSceneManager> .Instance.Hscene.GetFemales().Length > 1;

            bool fem1Present = Singleton <HSceneManager> .Instance.Hscene.GetFemales()[1] != null;

            bool multipleMales = Singleton <HSceneManager> .Instance.Hscene.GetMales().Length > 1;

            string femaleName1 = Singleton <HSceneManager> .Instance.Hscene.GetFemales()[0] == null ? "" : Singleton <HSceneManager> .Instance.Hscene.GetFemales()[0].fileParam.fullname;

            string femaleName2 = Singleton <HSceneManager> .Instance.Hscene.GetFemales()[1] == null ? "" : Singleton <HSceneManager> .Instance.Hscene.GetFemales()[1].fileParam.fullname;

            string roomName = BaseMap.infoTable[Singleton <HSceneManager> .Instance.mapID].MapNames[0];

            //      Log.LogInfo(string.Format("Now Entering: {0} {3} with {1} {2}", Singleton<HSceneManager>.Instance.mapID, femaleName1, femaleName2, roomName));


            for (int info1 = 0; info1 < animList.Length; info1++)
            {
                for (int pos = 0; pos < animList[info1].Count; pos++)
                {
                    int mode = DetermineModeByActionCtrl(animList[info1][pos].ActionCtrl.Item1, animList[info1][pos].ActionCtrl.Item2);
                    if (!animList[info1][pos].nPositons.Contains(Singleton <HSceneFlagCtrl> .Instance.nPlace))
                    {
                        // Skip positions not available in location
                        if (!AllowAllPositions.Value)
                        {
                            continue;
                        }
                    }
                    if (mode == 4 && (male || futa))
                    {
                        //Skip masturbation if not female
                        continue;
                    }
                    if (mode == 5 && (male || futa) && !fem1Present)
                    {
                        // Don't peep without a female subject?
                        continue;
                    }
                    if (!multipleFemales && (mode == 6 || mode == 7))
                    {
                        // need multiple females for les/f2 scenes
                        continue;
                    }
                    if (!multipleMales && mode == 8)
                    {
                        // need multiple makes for m2 scenes
                        continue;
                    }

                    TCRuleApplicationJudgement female1CharacterJudgement = Singleton <HSceneManager> .Instance.Hscene.GetFemales()[0] == null ? TCRuleApplicationJudgement.NEUTRAL : RuleSet.CharacterRuleJudgement(femaleName1, animList[info1][pos].nameAnimation, ((PositionCategories)mode).ToString());

                    TCRuleApplicationJudgement female2CharacterJudgement = Singleton <HSceneManager> .Instance.Hscene.GetFemales()[1] == null ? TCRuleApplicationJudgement.NEUTRAL : RuleSet.CharacterRuleJudgement(femaleName2, animList[info1][pos].nameAnimation, ((PositionCategories)mode).ToString());

                    TCRuleApplicationJudgement roomJudgement = RuleSet.RoomRuleJudgement(roomName, animList[info1][pos].nameAnimation, ((PositionCategories)mode).ToString());

                    if (RuleSet.ExcludeAlwaysCheck(animList[info1][pos].nameAnimation, ((PositionCategories)mode).ToString()) || female1CharacterJudgement == TCRuleApplicationJudgement.EXCLUDED || female2CharacterJudgement == TCRuleApplicationJudgement.EXCLUDED || roomJudgement == TCRuleApplicationJudgement.EXCLUDED)
                    {
                        //           Log.LogInfo(string.Format("TC Rule Judgement: Excluding: {0} ({1}, {2}, {3})", animList[info1][pos].nameAnimation, femaleName1, femaleName2, roomName));
                        continue;
                    }

                    // Staying with Illusion Random logic for consistency...
                    HAutoCtrl.AutoRandom.AutoRandomDate autoRandomDate = new HAutoCtrl.AutoRandom.AutoRandomDate();
                    autoRandomDate.mode = info1;
                    autoRandomDate.id   = animList[info1][pos].id;
                    if (female1CharacterJudgement == TCRuleApplicationJudgement.INCLUDED || female2CharacterJudgement == TCRuleApplicationJudgement.INCLUDED || roomJudgement == TCRuleApplicationJudgement.INCLUDED)
                    {
                        //            Log.LogInfo(string.Format("TC Rule Judgement: Including: {0} ({1}, {2}, {3})", animList[info1][pos].nameAnimation, femaleName1, femaleName2, roomName));
                        inclusionAutoRandom.Add(autoRandomDate, 10f);
                    }
                    else
                    {
                        autoRandom.Add(autoRandomDate, 10f);
                    }
                }
            }

            if (!inclusionAutoRandom.IsEmpty())
            {
                HAutoCtrl.AutoRandom.AutoRandomDate selectedAutoRandom = inclusionAutoRandom.Random();
                return(new HScene.StartMotion(selectedAutoRandom.mode, selectedAutoRandom.id));
            }
            else
            {
                HAutoCtrl.AutoRandom.AutoRandomDate selectedAutoRandom = autoRandom.Random();
                return(new HScene.StartMotion(selectedAutoRandom.mode, selectedAutoRandom.id));
            }
        }