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)); } }