using System; using BackupParamAccessor; using PlayerStatus; using TextureBank; namespace Schedule { public class WorkResultScene { public void Calc(WorkResultSceneMode mode = WorkResultSceneMode.Noon, bool intervene = true) { if (this.textureBank == null) { this.textureBank = new TextureBank(); } if (this.slot == null) { this.slot = new WorkResultSlot[40]; for (int i = 0; i < this.slot.Length; i++) { this.slot[i] = new WorkResultSlot(this, i); } } bool flag = false; if (intervene) { string flagName = string.Empty; if (mode == WorkResultSceneMode.Noon) { flagName = "_Schedule_Noon_Resulted"; } if (mode == WorkResultSceneMode.Night) { flagName = "_Schedule_Night_Resulted"; } if (GameMain.Instance.CharacterMgr.status.GetFlag(flagName) > 0) { flag = true; } else { GameMain.Instance.CharacterMgr.status.SetFlag(flagName, 1); } } this.mode = mode; this.intervene = intervene; if (!flag) { ScheduleCalcAPI.log.LogClear(); for (int j = 0; j < 40; j++) { Maid scheduleSlot = GameMain.Instance.CharacterMgr.status.GetScheduleSlot(j); if (!(scheduleSlot == null)) { int num = 0; SCENE_ID scene_ID = SCENE_ID.Start; if (mode == WorkResultSceneMode.Noon) { num = scheduleSlot.status.noonWorkId; scene_ID = SCENE_ID.Noon; } else if (mode == WorkResultSceneMode.Night) { num = scheduleSlot.status.nightWorkId; scene_ID = SCENE_ID.Night; } SCENE_ID sceneId_f = scene_ID + 1; ScheduleCSVData.ScheduleBase scheduleBase = ScheduleCSVData.AllData[num]; ScheduleData scheduleData = GameMain.Instance.CharacterMgr.status.scheduleSlot[j]; ScheduleTaskCtrl.TaskType type = scheduleBase.type; if (type != ScheduleTaskCtrl.TaskType.Work && type != ScheduleTaskCtrl.TaskType.Training) { if (type == ScheduleTaskCtrl.TaskType.Yotogi) { ScheduleCSVData.Yotogi yotogi = (ScheduleCSVData.Yotogi)scheduleBase; if (BackupParamAccessor.YotogiPlayed(j, scene_ID)) { scheduleSlot.status.SetFlag("_YotogiPlayed", 1); } else { scheduleSlot.status.SetFlag("_YotogiPlayed", 0); } ScheduleAPI.YotogiResultSimulateParam param = ScheduleAPI.YotogiResultSimulate(scheduleSlot, num); ScheduleAPI.AddYotogiWorkResultParam(yotogi, scheduleSlot, param); BackupParamAccessor.BackupParam(new int?(j), sceneId_f); if (DailyMgr.IsLegacy) { scheduleSlot.status.OldStatus.SetFlag("_PlayedNightWorkId" + scheduleSlot.status.nightWorkId.ToString(), 1); } else { scheduleSlot.status.SetFlag("_PlayedNightWorkId" + scheduleSlot.status.nightWorkId.ToString(), 1); } ScheduleCSVData.YotogiType yotogiType = yotogi.yotogiType; if (yotogiType == ScheduleCSVData.YotogiType.Vip || yotogiType == ScheduleCSVData.YotogiType.VipCall) { if (DailyMgr.IsLegacy) { scheduleSlot.status.OldStatus.SetFlag("_PlayedNightWorkVip", 1); } else { scheduleSlot.status.SetFlag("_PlayedNightWorkVip", 1); } } ScheduleCSVData.YotogiType yotogiType2 = yotogi.yotogiType; if (yotogiType2 == ScheduleCSVData.YotogiType.Vip || yotogiType2 == ScheduleCSVData.YotogiType.VipCall) { if (GameMain.Instance.CharacterMgr.status.night_works_state_dic.ContainsKey(num)) { GameMain.Instance.CharacterMgr.status.night_works_state_dic[num].finish = true; } } } } else { ScheduleData.WorkSuccessLv workSuccessLv = ScheduleData.WorkSuccessLv.Miss; bool flag2 = false; ScheduleMgr.ScheduleTime scheduleTime = ScheduleMgr.ScheduleTime.DayTime; if (mode == WorkResultSceneMode.Noon) { scheduleData.noon_communication = scheduleSlot.status.noonCommu; flag2 = scheduleData.noon_communication; ScheduleAPI.DecideSuccess(WorkResultSceneMode.Noon, j, flag2); workSuccessLv = scheduleData.noon_success_level; scheduleTime = ScheduleMgr.ScheduleTime.DayTime; } else if (mode == WorkResultSceneMode.Night) { scheduleData.night_communication = scheduleSlot.status.nightCommu; flag2 = scheduleData.night_communication; ScheduleAPI.DecideSuccess(WorkResultSceneMode.Night, j, flag2); workSuccessLv = scheduleData.night_success_level; scheduleTime = ScheduleMgr.ScheduleTime.Night; } Facility maidAssignedFacility = GameMain.Instance.FacilityMgr.GetMaidAssignedFacility(scheduleSlot, scheduleTime); if (scheduleBase.type == ScheduleTaskCtrl.TaskType.Training) { ScheduleCSVData.Training training = (ScheduleCSVData.Training)scheduleBase; if (ScheduleCSVData.TrainingData.ContainsKey(training.id)) { ScheduleCSVData.TrainingType trainingType = training.trainingType; if (trainingType == ScheduleCSVData.TrainingType.Trainer || trainingType == ScheduleCSVData.TrainingType.Trainee || trainingType == ScheduleCSVData.TrainingType.Travel) { workSuccessLv = ScheduleData.WorkSuccessLv.Success; } } } if (mode == WorkResultSceneMode.Noon) { scheduleData.noon_success_level = workSuccessLv; scheduleData.noon_communication = flag2; } else if (mode == WorkResultSceneMode.Night) { scheduleData.night_success_level = workSuccessLv; scheduleData.night_communication = flag2; } scheduleSlot.status.SetFlag("_communication", Convert.ToInt32(flag2)); if (workSuccessLv != ScheduleData.WorkSuccessLv.Unexecuted) { scheduleSlot.status.AddWorkDataPlayCount(num, 1); int level = ScheduleAPI.NoonWorkPlayToLv(ScheduleAPI.NoonWorkPlayCount(scheduleSlot, num)); scheduleSlot.status.SetWorkDataLevel(num, level); } ScheduleCalcAPI.ResultSimulateParam param2 = ScheduleCalcAPI.SimulateMaidStatusResult(scheduleSlot, num, workSuccessLv, flag2); ScheduleCalcAPI.AddResultParam(scheduleSlot, param2); if (scheduleBase.type == ScheduleTaskCtrl.TaskType.Work && maidAssignedFacility != null) { param2 = ScheduleCalcAPI.SimulateIncomeResult(scheduleSlot, num, maidAssignedFacility, scheduleTime, workSuccessLv, flag2); ScheduleCalcAPI.AddResultParam(scheduleSlot, param2); GameMain.Instance.CharacterMgr.status.clubGauge += WorkResultScene.GetAddClubGaugeValue(maidAssignedFacility.defaultData.businessType); } BackupParamAccessor.BackupParam(new int?(j), scene_ID); if (maidAssignedFacility != null) { SimpleExperienceSystem expSystem = maidAssignedFacility.expSystem; int num2 = maidAssignedFacility.facilityExperienceValue; Facility.FacilityParameter facilityParameter = maidAssignedFacility.CalcRecipeParameter(); if (facilityParameter != null) { num2 += facilityParameter.experienceValue; } expSystem.AddExp(num2); } BackupParamAccessor.BackupParam(new int?(j), sceneId_f); } } } } for (int k = 0; k < this.slot.Length; k++) { Maid scheduleSlot2 = GameMain.Instance.CharacterMgr.status.GetScheduleSlot(k); if (!(scheduleSlot2 == null)) { this.slot[k].InitResultWork(mode); } } } public void Update() { for (int i = 0; i < this.slot.Length; i++) { this.slot[i].Update(); } } public void Dispace() { if (this.textureBank != null) { this.textureBank.Dispace(); } } public static ScheduleCSVData.ScheduleBase GetWorkResultSceneMode(WorkResultSceneMode mode, Maid maid) { int key = 0; if (mode == WorkResultSceneMode.Noon) { key = maid.status.noonWorkId; } else if (mode == WorkResultSceneMode.Night) { key = maid.status.nightWorkId; } return ScheduleCSVData.AllData[key]; } public static int GetAddClubGaugeValue(FacilityDataTable.BusinessType type) { if (type == FacilityDataTable.BusinessType.接待系) { return 1; } if (type == FacilityDataTable.BusinessType.営業系) { return 2; } if (type == FacilityDataTable.BusinessType.アイドル系) { return 3; } return 0; } public WorkResultSceneMode mode; public bool intervene = true; public WorkResultSlot[] slot; public TextureBank textureBank; } }