mirror of
https://github.com/tym1116/BH3.git
synced 2025-12-16 08:25:20 +01:00
2455 lines
83 KiB
C#
2455 lines
83 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Reflection;
|
|
using BehaviorDesigner.Runtime;
|
|
using CinemaDirector;
|
|
using LuaInterface;
|
|
using MoleMole.Config;
|
|
using UniRx;
|
|
using UnityEngine;
|
|
using proto;
|
|
|
|
namespace MoleMole
|
|
{
|
|
public class LevelDesignManager
|
|
{
|
|
private class LDEvtTrigger
|
|
{
|
|
public BaseLDEvent ldEvent;
|
|
|
|
public LuaFunction callback;
|
|
|
|
public bool isCallbackCoroutine;
|
|
|
|
public LDEvtTrigger(BaseLDEvent ldEvent, LuaFunction callback, bool isCallbackCoroutine)
|
|
{
|
|
this.ldEvent = ldEvent;
|
|
this.callback = callback;
|
|
this.isCallbackCoroutine = isCallbackCoroutine;
|
|
}
|
|
}
|
|
|
|
private class EvtTrigger
|
|
{
|
|
public Type evtType;
|
|
|
|
public LuaFunction callback;
|
|
|
|
public bool isCallbackCoroutine;
|
|
|
|
public EvtTrigger(string evtTypeName, LuaFunction callback, bool isCallbackCoroutine)
|
|
{
|
|
evtType = Type.GetType("MoleMole." + evtTypeName);
|
|
this.callback = callback;
|
|
this.isCallbackCoroutine = isCallbackCoroutine;
|
|
}
|
|
}
|
|
|
|
public enum LDState
|
|
{
|
|
Start = 0,
|
|
Running = 1,
|
|
End = 2,
|
|
Paused = 3
|
|
}
|
|
|
|
private static string OVERRIDE_NAME = "OverrideName";
|
|
|
|
private MonoSpawnPoint centerPoint;
|
|
|
|
private LuaState _luaState;
|
|
|
|
private LuaFunction _ldMain;
|
|
|
|
private List<Tuple<LuaThread, int>> _luaManualCoroutines;
|
|
|
|
private List<LDEvtTrigger> _ldEvtTriggers;
|
|
|
|
private List<EvtTrigger> _evtTriggers;
|
|
|
|
private List<BaseLDEvent> _allLDEvents;
|
|
|
|
public LDState state { get; private set; }
|
|
|
|
public void CreateCoroutine(LuaFunction luaFunc)
|
|
{
|
|
MakeAndStartCoroutine(luaFunc);
|
|
}
|
|
|
|
public void ListenLDEvent(LuaTable table, LuaFunction callback)
|
|
{
|
|
BaseLDEvent ldEvent = CreateLDEventFromTable(table);
|
|
_ldEvtTriggers.Add(new LDEvtTrigger(ldEvent, callback, false));
|
|
}
|
|
|
|
public void ListenLDEventCoroutine(LuaTable table, LuaFunction callback)
|
|
{
|
|
BaseLDEvent ldEvent = CreateLDEventFromTable(table);
|
|
_ldEvtTriggers.Add(new LDEvtTrigger(ldEvent, callback, true));
|
|
}
|
|
|
|
public void ListenEvent(string evtTypeName, LuaFunction callback)
|
|
{
|
|
EvtTrigger item = new EvtTrigger(evtTypeName, callback, false);
|
|
_evtTriggers.Add(item);
|
|
}
|
|
|
|
public uint CreateMonster(string monsterName, string typeName, int level, Vector3 spawnPos, bool isElite, LuaTable skillConfigsTable, LuaTable dropTable, float avatarExpReward = 0f, bool checkOutsideWall = true, bool disableBehaviorWhenInit = false, int tagID = 0)
|
|
{
|
|
MonsterManager instance = Singleton<MonsterManager>.Instance;
|
|
bool checkOutsideWall2 = checkOutsideWall;
|
|
uint monsterID = instance.CreateMonster(monsterName, typeName, level, true, spawnPos, Singleton<RuntimeIDManager>.Instance.GetNextRuntimeID(4), isElite, 0u, checkOutsideWall2, disableBehaviorWhenInit, tagID);
|
|
return CreateMonsterInternal(monsterID, skillConfigsTable, dropTable, avatarExpReward);
|
|
}
|
|
|
|
public string GetDropEquipItemTypeName(int metaId)
|
|
{
|
|
ItemMetaData itemMetaData = ItemMetaDataReader.TryGetItemMetaDataByKey(metaId);
|
|
if (itemMetaData != null)
|
|
{
|
|
return "material";
|
|
}
|
|
WeaponMetaData weaponMetaData = WeaponMetaDataReader.TryGetWeaponMetaDataByKey(metaId);
|
|
if (weaponMetaData != null)
|
|
{
|
|
return "weapon";
|
|
}
|
|
StigmataMetaData stigmataMetaData = StigmataMetaDataReader.TryGetStigmataMetaDataByKey(metaId);
|
|
if (stigmataMetaData != null)
|
|
{
|
|
return "stigmata";
|
|
}
|
|
AvatarCardMetaData avatarCardMetaData = AvatarCardMetaDataReader.TryGetAvatarCardMetaDataByKey(metaId);
|
|
if (avatarCardMetaData != null)
|
|
{
|
|
return "avatar_card";
|
|
}
|
|
AvatarFragmentMetaData avatarFragmentMetaData = AvatarFragmentMetaDataReader.TryGetAvatarFragmentMetaDataByKey(metaId);
|
|
if (avatarFragmentMetaData != null)
|
|
{
|
|
return "avatar_fragment";
|
|
}
|
|
EndlessToolMetaData endlessToolMetaData = EndlessToolMetaDataReader.TryGetEndlessToolMetaDataByKey(metaId);
|
|
if (endlessToolMetaData != null)
|
|
{
|
|
return "endless_tool";
|
|
}
|
|
return string.Empty;
|
|
}
|
|
|
|
public uint CreateUniqueMonster(uint uniqueMonsterID, int level, Vector3 spawnPos, bool isElite, LuaTable skillConfigsTable, LuaTable dropTable, float avatarExpReward = 0f, bool checkOutsideWall = true, bool disableBehaviorWhenInit = false, int tagID = 0)
|
|
{
|
|
UniqueMonsterMetaData uniqueMonsterMetaData = MonsterData.GetUniqueMonsterMetaData(uniqueMonsterID);
|
|
string monsterName = uniqueMonsterMetaData.monsterName;
|
|
string typeName = uniqueMonsterMetaData.typeName;
|
|
uint monsterID = Singleton<MonsterManager>.Instance.CreateMonster(monsterName, typeName, level, true, spawnPos, Singleton<RuntimeIDManager>.Instance.GetNextRuntimeID(4), isElite, uniqueMonsterID, checkOutsideWall, disableBehaviorWhenInit, tagID);
|
|
return CreateMonsterInternal(monsterID, skillConfigsTable, dropTable, avatarExpReward);
|
|
}
|
|
|
|
private uint CreateMonsterInternal(uint monsterID, LuaTable skillConfigsTable, LuaTable dropTable, float avatarExpReward)
|
|
{
|
|
MonsterActor actor = Singleton<EventManager>.Instance.GetActor<MonsterActor>(monsterID);
|
|
if (skillConfigsTable != null)
|
|
{
|
|
foreach (DictionaryEntry item in skillConfigsTable)
|
|
{
|
|
string abilityName = (string)item.Key;
|
|
LuaTable luaTable = (LuaTable)item.Value;
|
|
string text = (string)luaTable[OVERRIDE_NAME];
|
|
ConfigAbility abilityConfig = ((text != null) ? AbilityData.GetAbilityConfig(abilityName, text) : AbilityData.GetAbilityConfig(abilityName));
|
|
Dictionary<string, object> dictionary = new Dictionary<string, object>();
|
|
foreach (DictionaryEntry item2 in luaTable)
|
|
{
|
|
string text2 = (string)item2.Key;
|
|
if (!(text2 == OVERRIDE_NAME))
|
|
{
|
|
if (item2.Value is double)
|
|
{
|
|
dictionary.Add(text2, (float)(double)item2.Value);
|
|
}
|
|
else if (item2.Value is string)
|
|
{
|
|
dictionary.Add(text2, (string)item2.Value);
|
|
}
|
|
}
|
|
}
|
|
actor.abilityPlugin.AddAbility(abilityConfig, dictionary);
|
|
}
|
|
}
|
|
BaseMonoMonster monster = actor.monster;
|
|
Vector3 forward = Singleton<AvatarManager>.Instance.GetLocalAvatar().XZPosition - monster.XZPosition;
|
|
monster.transform.forward = forward;
|
|
List<LDDropDataItem> list = new List<LDDropDataItem>();
|
|
foreach (object value in dropTable.Values)
|
|
{
|
|
list.Add(value as LDDropDataItem);
|
|
}
|
|
actor.dropDataItems = list;
|
|
actor.avatarExpReward = ((!float.IsNaN(avatarExpReward)) ? Mathf.Max(0f, avatarExpReward) : 0f);
|
|
return monsterID;
|
|
}
|
|
|
|
public bool HasAbilityOverrideName(string abilityName, string overrideName)
|
|
{
|
|
bool result = false;
|
|
ConfigOverrideGroup value = null;
|
|
AbilityData.GetAbilityGroupMap().TryGetValue(abilityName, out value);
|
|
if (value != null && value.Overrides != null)
|
|
{
|
|
result = value.Overrides.ContainsKey(overrideName);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public int GetMonsterCount()
|
|
{
|
|
return Singleton<MonsterManager>.Instance.MonsterCount();
|
|
}
|
|
|
|
public uint GetNearestMonsterID()
|
|
{
|
|
uint result = 0u;
|
|
float num = float.MaxValue;
|
|
foreach (BaseMonoMonster allMonster in Singleton<MonsterManager>.Instance.GetAllMonsters())
|
|
{
|
|
if (allMonster.IsActive())
|
|
{
|
|
float num2 = Vector3.Distance(allMonster.XZPosition, Singleton<AvatarManager>.Instance.GetLocalAvatar().XZPosition);
|
|
if (num2 < num)
|
|
{
|
|
result = allMonster.GetRuntimeID();
|
|
num = num2;
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public Vector3 GetRandomInSightPoint(LuaTable pointList)
|
|
{
|
|
List<Vector3> list = new List<Vector3>();
|
|
foreach (object value in pointList.Values)
|
|
{
|
|
int namedSpawnPointIx = Singleton<StageManager>.Instance.GetStageEnv().GetNamedSpawnPointIx(value as string);
|
|
Vector3 position = Singleton<StageManager>.Instance.GetStageEnv().spawnPoints[namedSpawnPointIx].transform.position;
|
|
if (IsPointInCameraFov(position))
|
|
{
|
|
list.Add(position);
|
|
}
|
|
}
|
|
if (list.Count > 0)
|
|
{
|
|
return list[UnityEngine.Random.Range(0, list.Count - 1)];
|
|
}
|
|
MonoMainCamera mainCamera = Singleton<CameraManager>.Instance.GetMainCamera();
|
|
Vector3 vector = Singleton<AvatarManager>.Instance.GetLocalAvatar().XZPosition - mainCamera.XZPosition;
|
|
return Singleton<AvatarManager>.Instance.GetLocalAvatar().XZPosition + vector.normalized;
|
|
}
|
|
|
|
public uint CreateStageExitField(string spawnName)
|
|
{
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(spawnName);
|
|
return Singleton<DynamicObjectManager>.Instance.CreateStageExitField(562036737u, spawnPoint.transform.position, spawnPoint.transform.forward);
|
|
}
|
|
|
|
public uint CreateMonsterExitField(string spawnName, bool forDefendMode)
|
|
{
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(spawnName);
|
|
return Singleton<DynamicObjectManager>.Instance.CreateMonsterExitField(562036737u, spawnPoint.transform.position, spawnPoint.transform.forward, forDefendMode);
|
|
}
|
|
|
|
public void CreateStage(string stageTypeName, LuaTable spawnNames, string baseWeatherName, bool continued)
|
|
{
|
|
List<string> list = new List<string>();
|
|
foreach (object value in spawnNames.Values)
|
|
{
|
|
list.Add(value as string);
|
|
}
|
|
Singleton<StageManager>.Instance.CreateStage(stageTypeName, list, baseWeatherName, continued);
|
|
}
|
|
|
|
public void SetStageNodeVisible(string nodeNames, bool isVisible)
|
|
{
|
|
StageManager.SetPerpstageNodeVisibilityByNode(Singleton<StageManager>.Instance.GetPerpStage(), nodeNames, isVisible);
|
|
}
|
|
|
|
public uint CreateBarrier(string type, float length, string spawnName)
|
|
{
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(spawnName);
|
|
return Singleton<DynamicObjectManager>.Instance.CreateBarrierField(562036737u, type, spawnPoint.transform.position, spawnPoint.transform.forward, length);
|
|
}
|
|
|
|
public uint CreateNavigationArrow(string spawnName_start, string spawnName_end)
|
|
{
|
|
Vector3 position = GetSpawnPoint(spawnName_start).transform.position;
|
|
position.y += 0.1f;
|
|
Vector3 position2 = GetSpawnPoint(spawnName_end).transform.position;
|
|
Vector3 forward = -(position2 - position).normalized;
|
|
return Singleton<DynamicObjectManager>.Instance.CreateNavigationArrow(562036737u, position, forward);
|
|
}
|
|
|
|
public uint CreateNavigationArrow(string spawnName)
|
|
{
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(spawnName);
|
|
Vector3 position = spawnPoint.transform.position;
|
|
position.y += 0.1f;
|
|
Vector3 forward = -spawnPoint.transform.forward;
|
|
return Singleton<DynamicObjectManager>.Instance.CreateNavigationArrow(562036737u, position, forward);
|
|
}
|
|
|
|
public uint CreatePropObject(string propName, string spawnName, LuaTable dropTable, float hp, float attack, bool appearAnim = false)
|
|
{
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(spawnName);
|
|
uint num = Singleton<PropObjectManager>.Instance.CreatePropObject(562036737u, propName, hp, attack, spawnPoint.transform.position, spawnPoint.transform.forward, appearAnim);
|
|
InitPropObject(num, dropTable);
|
|
return num;
|
|
}
|
|
|
|
private void InitPropObject(uint propID, LuaTable dropTable)
|
|
{
|
|
PropObjectActor actor = Singleton<EventManager>.Instance.GetActor<PropObjectActor>(propID);
|
|
List<LDDropDataItem> list = new List<LDDropDataItem>();
|
|
foreach (object value in dropTable.Values)
|
|
{
|
|
list.Add(value as LDDropDataItem);
|
|
}
|
|
actor.dropDataItems = list;
|
|
}
|
|
|
|
public void RemoveBarrier(uint runtimeID)
|
|
{
|
|
BaseMonoDynamicObject dynamicObjectByRuntimeID = Singleton<DynamicObjectManager>.Instance.GetDynamicObjectByRuntimeID(runtimeID);
|
|
dynamicObjectByRuntimeID.GetComponentInChildren<FadeAnimation>().StartFadeOut(dynamicObjectByRuntimeID.SetDied);
|
|
}
|
|
|
|
public void MoveLocalAvatarTo(string spawnName)
|
|
{
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(spawnName);
|
|
BaseMonoAvatar localAvatar = Singleton<AvatarManager>.Instance.GetLocalAvatar();
|
|
localAvatar.transform.position = spawnPoint.transform.position;
|
|
localAvatar.transform.forward = spawnPoint.transform.forward;
|
|
Singleton<CameraManager>.Instance.GetMainCamera().SuddenSwitchFollowAvatar(localAvatar.GetRuntimeID());
|
|
}
|
|
|
|
public void SetRotateToFaceDirection()
|
|
{
|
|
Singleton<CameraManager>.Instance.GetMainCamera().SetRotateToFaceDirection();
|
|
}
|
|
|
|
public void SetLocalAvatarFaceTo(string spawnName)
|
|
{
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(spawnName);
|
|
BaseMonoAvatar localAvatar = Singleton<AvatarManager>.Instance.GetLocalAvatar();
|
|
Vector3 forward = spawnPoint.transform.position - localAvatar.transform.position;
|
|
localAvatar.SteerFaceDirectionTo(forward);
|
|
}
|
|
|
|
public void SetMonsterUnremovable(uint runtimeID, bool unremovable)
|
|
{
|
|
BaseMonoMonster monsterByRuntimeID = Singleton<MonsterManager>.Instance.GetMonsterByRuntimeID(runtimeID);
|
|
monsterByRuntimeID.isStaticInScene = unremovable;
|
|
}
|
|
|
|
public void SetEntityIsGhost(uint runtimeID, bool isGhost)
|
|
{
|
|
BaseMonoEntity entity = Singleton<EventManager>.Instance.GetEntity(runtimeID);
|
|
if (entity != null)
|
|
{
|
|
(entity as BaseMonoAbilityEntity).SetCountedIsGhost(isGhost);
|
|
}
|
|
}
|
|
|
|
public void SetEntityAllowSelected(uint runtimeID, bool allowSelected)
|
|
{
|
|
BaseMonoEntity entity = Singleton<EventManager>.Instance.GetEntity(runtimeID);
|
|
if (entity != null)
|
|
{
|
|
(entity as BaseMonoAbilityEntity).SetCountedDenySelect(!allowSelected, true);
|
|
}
|
|
}
|
|
|
|
public void ShowSubHpBar(uint runtimeID)
|
|
{
|
|
MonsterActor monsterActor = Singleton<EventManager>.Instance.GetActor(runtimeID) as MonsterActor;
|
|
if (monsterActor != null)
|
|
{
|
|
monsterActor.showSubHpBarWhenAttackLanded = true;
|
|
}
|
|
}
|
|
|
|
public void SetMonsterWarningRange(uint runtimeID, float warningRange, float escapeRange)
|
|
{
|
|
MonsterActor monsterActor = Singleton<EventManager>.Instance.GetActor(runtimeID) as MonsterActor;
|
|
monsterActor.EnableWarningFieldActor(warningRange, escapeRange);
|
|
}
|
|
|
|
public void SetMonsterTrigger(uint runtimeID, string triggerName)
|
|
{
|
|
BaseMonoMonster baseMonoMonster = Singleton<MonsterManager>.Instance.TryGetMonsterByRuntimeID(runtimeID);
|
|
if (baseMonoMonster != null)
|
|
{
|
|
baseMonoMonster.SetTrigger(triggerName);
|
|
}
|
|
}
|
|
|
|
public void SetMonsterAnimatorSpeed(uint runtimeID, float speed)
|
|
{
|
|
BaseMonoMonster baseMonoMonster = Singleton<MonsterManager>.Instance.TryGetMonsterByRuntimeID(runtimeID);
|
|
if (!(baseMonoMonster != null))
|
|
{
|
|
return;
|
|
}
|
|
if (speed != 1f)
|
|
{
|
|
if (baseMonoMonster.timeScaleStack.IsOccupied(7))
|
|
{
|
|
baseMonoMonster.SetTimeScale(speed, 7);
|
|
}
|
|
else
|
|
{
|
|
baseMonoMonster.PushTimeScale(speed, 7);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
baseMonoMonster.PopTimeScale(7);
|
|
}
|
|
}
|
|
|
|
public void SetStageAnimatorSpeed(float speed)
|
|
{
|
|
if (Singleton<StageManager>.Instance.GetPerpStage().gameObject.GetComponent<Animator>() != null)
|
|
{
|
|
Singleton<StageManager>.Instance.GetPerpStage().gameObject.GetComponent<Animator>().speed = speed;
|
|
}
|
|
}
|
|
|
|
public void SetMonsterSteerTo(uint runtimeID, Vector3 pos)
|
|
{
|
|
BaseMonoMonster baseMonoMonster = Singleton<MonsterManager>.Instance.TryGetMonsterByRuntimeID(runtimeID);
|
|
if (!(baseMonoMonster == null))
|
|
{
|
|
Vector3 dir = pos - baseMonoMonster.transform.position;
|
|
baseMonoMonster.SteerFaceDirectionTo(dir);
|
|
}
|
|
}
|
|
|
|
public void SetMonsterFaceTo(uint runtimeID, string spawnName)
|
|
{
|
|
Vector3 vector = Vector3.zero;
|
|
Vector3 one = Vector3.one;
|
|
BaseMonoMonster baseMonoMonster = Singleton<MonsterManager>.Instance.TryGetMonsterByRuntimeID(runtimeID);
|
|
if (baseMonoMonster == null)
|
|
{
|
|
return;
|
|
}
|
|
one = baseMonoMonster.XZPosition;
|
|
if (spawnName == "Avatar")
|
|
{
|
|
BaseMonoAvatar baseMonoAvatar = Singleton<AvatarManager>.Instance.TryGetLocalAvatar();
|
|
if (baseMonoAvatar != null)
|
|
{
|
|
vector = baseMonoAvatar.XZPosition;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(spawnName);
|
|
vector = spawnPoint.transform.position;
|
|
}
|
|
baseMonoMonster.SteerFaceDirectionTo(vector - one);
|
|
}
|
|
|
|
public uint RegisterStageEnvTriggerField(string fieldName)
|
|
{
|
|
MonoStageEnv stageEnv = Singleton<StageManager>.Instance.GetStageEnv();
|
|
GameObject gameObject = stageEnv.transform.Find(fieldName).gameObject;
|
|
return Singleton<DynamicObjectManager>.Instance.RegisterStageEnvTriggerField(562036737u, gameObject);
|
|
}
|
|
|
|
public void LevelEndWithResult(bool isWin, int endCgId = 0)
|
|
{
|
|
EvtLevelState.State state = (isWin ? EvtLevelState.State.EndWin : EvtLevelState.State.EndLose);
|
|
EvtLevelState.LevelEndReason reason = (isWin ? EvtLevelState.LevelEndReason.EndWin : EvtLevelState.LevelEndReason.EndLoseNotMeetCondition);
|
|
Singleton<EventManager>.Instance.FireEvent(new EvtLevelState(state, reason, endCgId));
|
|
}
|
|
|
|
public void BattleBegin()
|
|
{
|
|
Singleton<NotifyManager>.Instance.FireNotify(new Notify(NotifyTypes.BattleBegin));
|
|
}
|
|
|
|
public void StartTutorial()
|
|
{
|
|
if (Singleton<LevelManager>.Instance.levelActor.HasPlugin<LevelTutorialHelperPlugin>())
|
|
{
|
|
Singleton<EventManager>.Instance.FireEvent(new EvtTutorialState(EvtTutorialState.State.Start));
|
|
}
|
|
}
|
|
|
|
public string[] GetAppliedToolList()
|
|
{
|
|
List<string> list = Singleton<LevelScoreManager>.Instance.appliedToolList;
|
|
if (list != null)
|
|
{
|
|
list.Insert(0, list.Count.ToString());
|
|
}
|
|
else
|
|
{
|
|
list = new List<string>(new string[1] { "0" });
|
|
}
|
|
return list.ToArray();
|
|
}
|
|
|
|
public void EndlessLevelEnd(string result, bool collectAllGoods = true)
|
|
{
|
|
Singleton<LevelManager>.Instance.levelEntity.StartCoroutine(LevelEndNewIter(result, true, collectAllGoods));
|
|
}
|
|
|
|
public void LevelEndNew(string result, bool collectAllGoods = true, int endCgId = 0)
|
|
{
|
|
MonoLevelEntity levelEntity = Singleton<LevelManager>.Instance.levelEntity;
|
|
bool collectAllGoods2 = collectAllGoods;
|
|
levelEntity.StartCoroutine(LevelEndNewIter(result, false, collectAllGoods2, endCgId));
|
|
}
|
|
|
|
private IEnumerator LevelEndNewIter(string result, bool isEndlessLevel = false, bool collectAllGoods = true, int endCgId = 0)
|
|
{
|
|
result = ((result != null) ? result : "win");
|
|
MainCameraActor mainCameraActor = Singleton<EventManager>.Instance.GetActor<MainCameraActor>(Singleton<CameraManager>.Instance.GetMainCamera().GetRuntimeID());
|
|
MuteInput();
|
|
StopLevelDesign();
|
|
Singleton<AvatarManager>.Instance.HideHelperAvatar(true);
|
|
ClearPalsyBombProps();
|
|
CameraActorLastKillCloseUpPlugin lastKillPlugin = mainCameraActor.GetPlugin<CameraActorLastKillCloseUpPlugin>();
|
|
MonoMainCamera mainCamera = Singleton<CameraManager>.Instance.GetMainCamera();
|
|
if (lastKillPlugin != null && (result != "win" || !lastKillPlugin.IsPending()))
|
|
{
|
|
mainCameraActor.RemovePlugin(lastKillPlugin);
|
|
lastKillPlugin = null;
|
|
}
|
|
bool wasInLastKill = false;
|
|
while ((lastKillPlugin != null && lastKillPlugin.IsPending()) || mainCamera.followState.slowMotionKillState.active)
|
|
{
|
|
wasInLastKill = true;
|
|
yield return null;
|
|
}
|
|
lastKillPlugin = mainCameraActor.GetPlugin<CameraActorLastKillCloseUpPlugin>();
|
|
if (lastKillPlugin != null)
|
|
{
|
|
Debug.LogError("removing last kill plugin again, which should not happen. monster count: " + Singleton<MonsterManager>.Instance.MonsterCount());
|
|
mainCameraActor.RemovePlugin(lastKillPlugin);
|
|
}
|
|
if (wasInLastKill)
|
|
{
|
|
while (Singleton<MonsterManager>.Instance.MonsterCount() > 0)
|
|
{
|
|
yield return null;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ClearAllMonsters();
|
|
}
|
|
if (result == "win" && collectAllGoods)
|
|
{
|
|
CollectAllGoods();
|
|
}
|
|
while (mainCamera.avatarAnimState.active || mainCamera.levelAnimState.active)
|
|
{
|
|
yield return null;
|
|
}
|
|
if (Singleton<LevelManager>.Instance.IsPaused())
|
|
{
|
|
Singleton<LevelManager>.Instance.SetPause(false);
|
|
}
|
|
Singleton<LevelManager>.Instance.SetMutePause(true);
|
|
SetInLevelUIActive(false);
|
|
BaseMonoAvatar localAvatar = Singleton<AvatarManager>.Instance.GetLocalAvatar();
|
|
Singleton<LevelManager>.Instance.levelActor.abilityPlugin.StopAndDropAll();
|
|
foreach (BaseMonoAvatar avatar in Singleton<AvatarManager>.Instance.GetAllAvatars())
|
|
{
|
|
if (Singleton<AvatarManager>.Instance.IsPlayerAvatar(avatar))
|
|
{
|
|
Singleton<EventManager>.Instance.GetActor<AvatarActor>(avatar.GetRuntimeID()).abilityPlugin.StopAndDropAll();
|
|
avatar.SetHasAdditiveVelocity(false);
|
|
avatar.SetNeedOverrideVelocity(false);
|
|
}
|
|
}
|
|
yield return new WaitForSeconds(1.4f);
|
|
localAvatar.CleanOwnedObjects();
|
|
Singleton<DynamicObjectManager>.Instance.CleanWhenStageChange();
|
|
Singleton<CameraManager>.Instance.GetMainCamera().TransitToStatic();
|
|
float time = 0.45f;
|
|
MonoInLevelUICanvas mainCanvas = Singleton<MainUIManager>.Instance.GetInLevelUICanvas();
|
|
mainCanvas.SetWhiteTransitPanelActive(true);
|
|
yield return new WaitForSeconds(time);
|
|
localAvatar = Singleton<AvatarManager>.Instance.GetLocalAvatar();
|
|
if (!localAvatar.IsAlive())
|
|
{
|
|
result = "lose";
|
|
}
|
|
LevelEndWithResult(result == "win", endCgId);
|
|
if (!isEndlessLevel && localAvatar.IsAlive())
|
|
{
|
|
string animationName = ((!(result == "win")) ? localAvatar.config.LevelEndAnimation.LevelLoseAnim : localAvatar.config.LevelEndAnimation.LevelWinAnim);
|
|
string avatarStateName = ((!(result == "win")) ? "Fail" : "Victory");
|
|
MonoStageEnv env = Singleton<StageManager>.Instance.GetStageEnv();
|
|
int bornIx = env.GetNamedSpawnPointIx("Born");
|
|
if (bornIx == -1)
|
|
{
|
|
bornIx = 0;
|
|
}
|
|
MonoSpawnPoint spawn = env.spawnPoints[bornIx];
|
|
MonoSimpleAnimation cameraAnimation = Singleton<AuxObjectManager>.Instance.CreateAuxObject<MonoSimpleAnimation>(animationName, localAvatar.GetRuntimeID());
|
|
localAvatar.DisableRootMotionAndCollision();
|
|
localAvatar.transform.position = spawn.XZPosition;
|
|
Vector3 forward = spawn.transform.forward;
|
|
forward.y = 0f;
|
|
localAvatar.transform.forward = forward;
|
|
GameObject anchor = new GameObject("CameraAnchor");
|
|
anchor.transform.position = spawn.transform.position;
|
|
anchor.transform.rotation = spawn.transform.rotation;
|
|
cameraAnimation.SetOwnedParent(anchor.transform);
|
|
mainCamera.PlayAvatarCameraAnimationThenTransitToFollow(cameraAnimation.GetComponent<Animation>(), localAvatar, MainCameraFollowState.EnterPolarMode.AlongTargetPolar, false);
|
|
localAvatar.PlayState(avatarStateName);
|
|
if (avatarStateName == "Fail")
|
|
{
|
|
if (localAvatar is MonoBronya)
|
|
{
|
|
((MonoBronya)localAvatar).SetMCVisible(false);
|
|
}
|
|
localAvatar.DetachWeapon();
|
|
}
|
|
while (cameraAnimation != null && cameraAnimation.GetComponent<Animation>() != null && cameraAnimation.GetComponent<Animation>().isPlaying)
|
|
{
|
|
yield return null;
|
|
}
|
|
}
|
|
Singleton<LevelManager>.Instance.SetMutePause(false);
|
|
}
|
|
|
|
public void CollectAllGoods()
|
|
{
|
|
List<MonoGoods> allMonoGoods = Singleton<DynamicObjectManager>.Instance.GetAllMonoGoods();
|
|
foreach (MonoGoods item in allMonoGoods)
|
|
{
|
|
if (!item.IsActive())
|
|
{
|
|
continue;
|
|
}
|
|
item.forceFlyToAvatar = true;
|
|
item.muteSound = true;
|
|
item.state = MonoGoods.GoodsState.Attract;
|
|
item.SetAttractTimerActive(true);
|
|
if (string.IsNullOrEmpty(item.AttachEffectPattern) || Singleton<EventManager>.Instance.GetActor<EquipItemActor>(item.GetRuntimeID()) == null)
|
|
{
|
|
continue;
|
|
}
|
|
foreach (MonoEffect outsideEffect in item.OutsideEffects)
|
|
{
|
|
if (outsideEffect != null)
|
|
{
|
|
outsideEffect.SetDestroyImmediately();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public Vector3 GetSpawnPointPos(string spawnName)
|
|
{
|
|
Vector3 xZPosition = Singleton<AvatarManager>.Instance.GetLocalAvatar().XZPosition;
|
|
switch (spawnName)
|
|
{
|
|
case "OnAvatar":
|
|
return xZPosition;
|
|
case "TutorialPos":
|
|
return xZPosition - xZPosition.normalized * 2.1f;
|
|
default:
|
|
return GetSpawnPoint(spawnName).transform.position;
|
|
}
|
|
}
|
|
|
|
private MonoSpawnPoint GetSpawnPoint(string spawnName)
|
|
{
|
|
MonoStageEnv stageEnv = Singleton<StageManager>.Instance.GetStageEnv();
|
|
int num;
|
|
if (spawnName != null)
|
|
{
|
|
num = stageEnv.GetNamedSpawnPointIx(spawnName);
|
|
if (num < 0)
|
|
{
|
|
num = UnityEngine.Random.Range(0, Singleton<StageManager>.Instance.GetStageEnv().spawnPoints.Length);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
num = UnityEngine.Random.Range(0, Singleton<StageManager>.Instance.GetStageEnv().spawnPoints.Length);
|
|
}
|
|
return stageEnv.spawnPoints[num];
|
|
}
|
|
|
|
public void SetLevelDefendModePluginStart(int targetValue)
|
|
{
|
|
if (targetValue > 0)
|
|
{
|
|
Singleton<LevelManager>.Instance.levelActor.SetLevelDefendModePluginStart(targetValue);
|
|
}
|
|
}
|
|
|
|
public void SetLevelDefendModePluginStart()
|
|
{
|
|
Singleton<LevelManager>.Instance.levelActor.SetLevelDefendModePluginStart();
|
|
}
|
|
|
|
public void LevelDefendModePluginStop()
|
|
{
|
|
Singleton<LevelManager>.Instance.levelActor.SetLevelDefendModePluginStop();
|
|
}
|
|
|
|
public void LevelDefendModePluginReset(int targetValue)
|
|
{
|
|
Singleton<LevelManager>.Instance.levelActor.SetLevelDefendModePluginReset(targetValue);
|
|
}
|
|
|
|
public int GetLevelDefendModeMonsterEnterAmount()
|
|
{
|
|
return Singleton<LevelManager>.Instance.levelActor.GetLevelDefendModeMonsterEnterAmount();
|
|
}
|
|
|
|
public int GetLevelDefendModeMonsterKillAmount()
|
|
{
|
|
return Singleton<LevelManager>.Instance.levelActor.GetLevelDefendModeMonsterKillAmount();
|
|
}
|
|
|
|
public void AddLevelDefendModeData(string modeType, int modeValue, bool isKey)
|
|
{
|
|
if (Singleton<LevelManager>.Instance.levelActor.HasPlugin<LevelDefendModePlugin>())
|
|
{
|
|
DefendModeType modeType2 = (DefendModeType)(int)Enum.Parse(typeof(DefendModeType), modeType);
|
|
LevelDefendModePlugin plugin = Singleton<LevelManager>.Instance.levelActor.GetPlugin<LevelDefendModePlugin>();
|
|
if (plugin != null)
|
|
{
|
|
plugin.AddModeData(modeType2, modeValue, isKey);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void AddLevelDefendModeData(int uniqueID, bool isKey)
|
|
{
|
|
if (Singleton<LevelManager>.Instance.levelActor.HasPlugin<LevelDefendModePlugin>())
|
|
{
|
|
LevelDefendModePlugin plugin = Singleton<LevelManager>.Instance.levelActor.GetPlugin<LevelDefendModePlugin>();
|
|
if (plugin != null)
|
|
{
|
|
plugin.AddModeData(uniqueID, isKey);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void AddLevelDefendModeData(string modeType, int targetModeValue, int currentModeValue, bool isKey)
|
|
{
|
|
if (Singleton<LevelManager>.Instance.levelActor.HasPlugin<LevelDefendModePlugin>())
|
|
{
|
|
DefendModeType modeType2 = (DefendModeType)(int)Enum.Parse(typeof(DefendModeType), modeType);
|
|
LevelDefendModePlugin plugin = Singleton<LevelManager>.Instance.levelActor.GetPlugin<LevelDefendModePlugin>();
|
|
if (plugin != null)
|
|
{
|
|
plugin.AddModeData(modeType2, targetModeValue, currentModeValue, isKey);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void SetLevelDefendModeStop()
|
|
{
|
|
if (Singleton<LevelManager>.Instance.levelActor.HasPlugin<LevelDefendModePlugin>())
|
|
{
|
|
LevelDefendModePlugin plugin = Singleton<LevelManager>.Instance.levelActor.GetPlugin<LevelDefendModePlugin>();
|
|
plugin.SetActive(false);
|
|
plugin.Stop();
|
|
}
|
|
}
|
|
|
|
public void MainCameraFollowLookAt(uint runtimeID, bool mute = false)
|
|
{
|
|
BaseMonoEntity entity = Singleton<EventManager>.Instance.GetEntity(runtimeID);
|
|
if (entity != null && entity.IsActive())
|
|
{
|
|
Singleton<CameraManager>.Instance.GetMainCamera().FollowLookAtPosition(entity.XZPosition, mute);
|
|
}
|
|
}
|
|
|
|
public void MainCameraFollowLookAtPoint(string pointName, bool mute = false)
|
|
{
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(pointName);
|
|
Singleton<CameraManager>.Instance.GetMainCamera().FollowLookAtPosition(spawnPoint.transform.position, mute);
|
|
}
|
|
|
|
public void MainCameraFollowSetFar()
|
|
{
|
|
Singleton<CameraManager>.Instance.GetMainCamera().SetFollowRange(MainCameraFollowState.RangeState.Far);
|
|
}
|
|
|
|
public void MainCameraFollowSetFurther()
|
|
{
|
|
Singleton<CameraManager>.Instance.GetMainCamera().SetFollowRange(MainCameraFollowState.RangeState.Furter);
|
|
}
|
|
|
|
public void MainCameraFollowSetNear()
|
|
{
|
|
Singleton<CameraManager>.Instance.GetMainCamera().SetFollowRange(MainCameraFollowState.RangeState.Near);
|
|
}
|
|
|
|
public void MainCameraFollowSetHigh()
|
|
{
|
|
Singleton<CameraManager>.Instance.GetMainCamera().SetFollowRange(MainCameraFollowState.RangeState.High);
|
|
}
|
|
|
|
public void MainCameraFollowSetHigher()
|
|
{
|
|
Singleton<CameraManager>.Instance.GetMainCamera().SetFollowRange(MainCameraFollowState.RangeState.Higher);
|
|
}
|
|
|
|
public bool IsPointInCameraFov(Vector3 pos)
|
|
{
|
|
bool flag = false;
|
|
MonoMainCamera mainCamera = Singleton<CameraManager>.Instance.GetMainCamera();
|
|
Vector3 vector = pos - mainCamera.transform.position;
|
|
float num = Vector3.Angle(vector, mainCamera.transform.forward);
|
|
return num < mainCamera.cameraComponent.fieldOfView - 10f;
|
|
}
|
|
|
|
public void SetupLastKilLCameraCloseUp()
|
|
{
|
|
MainCameraActor actor = Singleton<EventManager>.Instance.GetActor<MainCameraActor>(Singleton<CameraManager>.Instance.GetMainCamera().GetRuntimeID());
|
|
actor.SetupLastKillCloseUp();
|
|
}
|
|
|
|
public void PreloadMonster(string monsterName, string typeName, bool disableBehaviorWhenInit = false)
|
|
{
|
|
Singleton<MonsterManager>.Instance.PreloadMonster(monsterName, typeName, 0u);
|
|
}
|
|
|
|
public void PreloadUniqueMonster(uint uniqueMonsterID, bool disableBehaviorWhenInit = false)
|
|
{
|
|
UniqueMonsterMetaData uniqueMonsterMetaData = MonsterData.GetUniqueMonsterMetaData(uniqueMonsterID);
|
|
string monsterName = uniqueMonsterMetaData.monsterName;
|
|
string typeName = uniqueMonsterMetaData.typeName;
|
|
Singleton<MonsterManager>.Instance.PreloadMonster(monsterName, typeName, uniqueMonsterID);
|
|
}
|
|
|
|
public void PlayCameraAnimationOnEnv(string animationName, bool enterLerp, bool exitLerp, bool pauseLevel, CameraAnimationCullingType cullType = CameraAnimationCullingType.CullNothing)
|
|
{
|
|
MonoMainCamera mainCamera = Singleton<CameraManager>.Instance.GetMainCamera();
|
|
if (!mainCamera.levelAnimState.active)
|
|
{
|
|
MonoSimpleAnimation monoSimpleAnimation = Singleton<AuxObjectManager>.Instance.CreateAuxObject<MonoSimpleAnimation>(animationName, 562036737u);
|
|
Transform transform = Singleton<StageManager>.Instance.GetStageEnv().transform;
|
|
monoSimpleAnimation.transform.parent = transform;
|
|
monoSimpleAnimation.transform.localPosition = Vector3.zero;
|
|
monoSimpleAnimation.transform.localRotation = Quaternion.identity;
|
|
mainCamera.PlayLevelAnimationThenTransitBack(monoSimpleAnimation.GetComponent<Animation>(), true, enterLerp, exitLerp, pauseLevel, cullType);
|
|
}
|
|
}
|
|
|
|
public void PlayCameraAnimationOnAnimatorEntity(string animationName, uint entityID, bool enterLerp, bool exitLerp, bool pauselevel, bool diableEntityFadeMatieral = false, bool cullingAvatar = false)
|
|
{
|
|
MonoMainCamera mainCamera = Singleton<CameraManager>.Instance.GetMainCamera();
|
|
if (mainCamera.levelAnimState.active)
|
|
{
|
|
return;
|
|
}
|
|
MonoSimpleAnimation monoSimpleAnimation = Singleton<AuxObjectManager>.Instance.CreateAuxObject<MonoSimpleAnimation>(animationName, 562036737u);
|
|
BaseMonoEntity entity = Singleton<EventManager>.Instance.GetEntity(entityID);
|
|
monoSimpleAnimation.transform.parent = entity.transform;
|
|
monoSimpleAnimation.transform.localPosition = Vector3.zero;
|
|
monoSimpleAnimation.transform.localRotation = Quaternion.identity;
|
|
Action startCallback = null;
|
|
Action endCallback = null;
|
|
BaseMonoAnimatorEntity animatorEntity = entity as BaseMonoAnimatorEntity;
|
|
BaseAbilityActor abilityActor = Singleton<EventManager>.Instance.GetActor<BaseAbilityActor>(entity.GetRuntimeID());
|
|
if (animatorEntity != null)
|
|
{
|
|
startCallback = delegate
|
|
{
|
|
if (diableEntityFadeMatieral)
|
|
{
|
|
animatorEntity.SetMonsterMaterialFadeEnabled(false);
|
|
}
|
|
if (abilityActor != null)
|
|
{
|
|
abilityActor.isInLevelAnim = true;
|
|
}
|
|
Singleton<EffectManager>.Instance.SetAllAliveEffectPause(true);
|
|
};
|
|
endCallback = delegate
|
|
{
|
|
if (diableEntityFadeMatieral)
|
|
{
|
|
animatorEntity.SetMonsterMaterialFadeEnabled(true);
|
|
}
|
|
if (abilityActor != null)
|
|
{
|
|
abilityActor.isInLevelAnim = false;
|
|
}
|
|
Singleton<EffectManager>.Instance.SetAllAliveEffectPause(false);
|
|
};
|
|
}
|
|
CameraAnimationCullingType cullType = (cullingAvatar ? CameraAnimationCullingType.CullAvatars : CameraAnimationCullingType.CullNothing);
|
|
mainCamera.PlayLevelAnimationThenTransitBack(monoSimpleAnimation.GetComponent<Animation>(), true, enterLerp, exitLerp, pauselevel, cullType, startCallback, endCallback);
|
|
}
|
|
|
|
public void PlayCameraAnimationOnAnimatorEntityThenStay(string animationName, uint entityID, bool pauseLevel)
|
|
{
|
|
MonoMainCamera mainCamera = Singleton<CameraManager>.Instance.GetMainCamera();
|
|
if (!mainCamera.levelAnimState.active)
|
|
{
|
|
MonoSimpleAnimation monoSimpleAnimation = Singleton<AuxObjectManager>.Instance.CreateAuxObject<MonoSimpleAnimation>(animationName, 562036737u);
|
|
BaseMonoEntity entity = Singleton<EventManager>.Instance.GetEntity(entityID);
|
|
monoSimpleAnimation.transform.parent = entity.transform;
|
|
monoSimpleAnimation.transform.localPosition = Vector3.zero;
|
|
monoSimpleAnimation.transform.localRotation = Quaternion.identity;
|
|
mainCamera.PlayAvatarCameraAnimationThenStay(monoSimpleAnimation.GetComponent<Animation>(), Singleton<AvatarManager>.Instance.GetLocalAvatar());
|
|
}
|
|
}
|
|
|
|
public string GetMonsterConfigField(string category, string subType, string query)
|
|
{
|
|
ConfigMonster monsterConfig = MonsterData.GetMonsterConfig(category, subType, string.Empty);
|
|
query = query.Trim();
|
|
char[] separator = new char[1] { '.' };
|
|
string[] array = query.Split(separator);
|
|
if (array.Length <= 0)
|
|
{
|
|
return string.Empty;
|
|
}
|
|
return GetClassFieldOrDictValue(monsterConfig, array, 0);
|
|
}
|
|
|
|
public string GetAvatarConfigField(string type, string query)
|
|
{
|
|
ConfigAvatar avatarConfig = AvatarData.GetAvatarConfig(type);
|
|
query = query.Trim();
|
|
char[] separator = new char[1] { '.' };
|
|
string[] array = query.Split(separator);
|
|
if (array.Length <= 0)
|
|
{
|
|
return string.Empty;
|
|
}
|
|
return GetClassFieldOrDictValue(avatarConfig, array, 0);
|
|
}
|
|
|
|
public string GetClassFieldOrDictValue(object obj, string[] fieldStrs, int currentIndex)
|
|
{
|
|
if (fieldStrs.Length - 1 < currentIndex)
|
|
{
|
|
return obj.ToString();
|
|
}
|
|
string text = fieldStrs[currentIndex];
|
|
Type type = obj.GetType();
|
|
if (typeof(IDictionary).IsAssignableFrom(type))
|
|
{
|
|
IDictionary dictionary = (IDictionary)obj;
|
|
if (!dictionary.Contains(text))
|
|
{
|
|
return string.Empty;
|
|
}
|
|
return GetClassFieldOrDictValue(dictionary[text], fieldStrs, currentIndex + 1);
|
|
}
|
|
FieldInfo field = type.GetField(text);
|
|
if (field == null)
|
|
{
|
|
return string.Empty;
|
|
}
|
|
return GetClassFieldOrDictValue(field.GetValue(obj), fieldStrs, currentIndex + 1);
|
|
}
|
|
|
|
public void SetMonsterHPRatio(uint monsterRuntimeID, float ratio)
|
|
{
|
|
MonsterActor actor = Singleton<EventManager>.Instance.GetActor<MonsterActor>(monsterRuntimeID);
|
|
if (actor != null)
|
|
{
|
|
actor.SetMonsterHPRatio(ratio);
|
|
}
|
|
}
|
|
|
|
public void SetMonsterAttackRatio(uint monsterRuntimeID, float ratio)
|
|
{
|
|
MonsterActor actor = Singleton<EventManager>.Instance.GetActor<MonsterActor>(monsterRuntimeID);
|
|
if (actor != null)
|
|
{
|
|
actor.SetMonsterAttackRatio(ratio);
|
|
}
|
|
}
|
|
|
|
public void SetAvatarAttackRatio(float ratio)
|
|
{
|
|
foreach (BaseMonoAvatar allAvatar in Singleton<AvatarManager>.Instance.GetAllAvatars())
|
|
{
|
|
Singleton<EventManager>.Instance.GetActor<AvatarActor>(allAvatar.GetRuntimeID()).SetAvatarAttackRatio(ratio);
|
|
}
|
|
}
|
|
|
|
public bool IsMonsterAlive(uint runtimeID)
|
|
{
|
|
return Singleton<MonsterManager>.Instance.TryGetMonsterByRuntimeID(runtimeID) != null;
|
|
}
|
|
|
|
public int GetNPCHardLevel()
|
|
{
|
|
return Singleton<LevelScoreManager>.Instance.NPCHardLevel;
|
|
}
|
|
|
|
public bool GetIsDebugDynamicHardLevel()
|
|
{
|
|
return Singleton<LevelScoreManager>.Instance.isDebugDynamicLevel;
|
|
}
|
|
|
|
public object GetMonsterBasicParameters(string MonsterName, string ConfigTypeName, int level, bool isElite)
|
|
{
|
|
MonsterConfigMetaData monsterConfigMetaData = MonsterData.GetMonsterConfigMetaData(MonsterName, ConfigTypeName);
|
|
ConfigMonster monsterConfig = MonsterData.GetMonsterConfig(MonsterName, ConfigTypeName, string.Empty);
|
|
float num = 0f;
|
|
float num2 = 0f;
|
|
float num3 = 0f;
|
|
NPCLevelMetaData nPCLevelMetaDataByKey = NPCLevelMetaDataReader.GetNPCLevelMetaDataByKey(level);
|
|
num = monsterConfigMetaData.HP * nPCLevelMetaDataByKey.HPRatio;
|
|
num2 = monsterConfigMetaData.defense * nPCLevelMetaDataByKey.DEFRatio;
|
|
num3 = monsterConfigMetaData.attack * nPCLevelMetaDataByKey.ATKRatio;
|
|
if (isElite)
|
|
{
|
|
num *= monsterConfig.EliteArguments.HPRatio;
|
|
num2 *= monsterConfig.EliteArguments.DefenseRatio;
|
|
num3 *= monsterConfig.EliteArguments.AttackRatio;
|
|
}
|
|
return new float[3] { num, num2, num3 };
|
|
}
|
|
|
|
public LuaTable GetLevelLuaTableByLevelName(string levelScript)
|
|
{
|
|
object[] array = _luaState.DoString(Miscs.LoadTextFileToString(levelScript), levelScript, null);
|
|
return (LuaTable)array[0];
|
|
}
|
|
|
|
public void KillAllMonsters(bool dropReward)
|
|
{
|
|
MonsterActor[] actorByCategory = Singleton<EventManager>.Instance.GetActorByCategory<MonsterActor>(4);
|
|
foreach (MonsterActor monsterActor in actorByCategory)
|
|
{
|
|
if (!monsterActor.monster.isStaticInScene)
|
|
{
|
|
monsterActor.needDropReward = dropReward;
|
|
monsterActor.ForceKill();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void ClearAllMonsters()
|
|
{
|
|
MonsterActor[] actorByCategory = Singleton<EventManager>.Instance.GetActorByCategory<MonsterActor>(4);
|
|
foreach (MonsterActor monsterActor in actorByCategory)
|
|
{
|
|
if (!monsterActor.monster.isStaticInScene)
|
|
{
|
|
monsterActor.ForceRemoveImmediatelly();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void ClearPalsyBombProps()
|
|
{
|
|
foreach (BaseMonoPropObject allPropObject in Singleton<PropObjectManager>.Instance.GetAllPropObjects())
|
|
{
|
|
if (allPropObject is MonoPalsyBombProp)
|
|
{
|
|
((MonoPalsyBombProp)allPropObject).SetDied(KillEffect.KillImmediately);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void SetMonsterEnabled(uint monsterID, bool enabled)
|
|
{
|
|
if (Singleton<EventManager>.Instance.GetActor(monsterID) != null)
|
|
{
|
|
BaseMonoMonster monsterByRuntimeID = Singleton<MonsterManager>.Instance.GetMonsterByRuntimeID(monsterID);
|
|
if (!enabled)
|
|
{
|
|
monsterByRuntimeID.OrderMove = false;
|
|
monsterByRuntimeID.ClearHitTrigger();
|
|
monsterByRuntimeID.ClearAttackTriggers();
|
|
monsterByRuntimeID.SetUseAIController(false);
|
|
}
|
|
else
|
|
{
|
|
monsterByRuntimeID.SetUseAIController(true);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void SetMonsterMaterialFadeEnabled(uint monsterID, bool enabled)
|
|
{
|
|
if (Singleton<EventManager>.Instance.GetActor(monsterID) != null)
|
|
{
|
|
BaseMonoMonster monsterByRuntimeID = Singleton<MonsterManager>.Instance.GetMonsterByRuntimeID(monsterID);
|
|
monsterByRuntimeID.SetMonsterMaterialFadeEnabled(enabled);
|
|
}
|
|
}
|
|
|
|
public void SetInLevelUIActive(bool isActive)
|
|
{
|
|
MonoInLevelUICanvas inLevelUICanvas = Singleton<MainUIManager>.Instance.GetInLevelUICanvas();
|
|
if (inLevelUICanvas != null)
|
|
{
|
|
inLevelUICanvas.SetInLevelUIActive(isActive);
|
|
}
|
|
}
|
|
|
|
public void SetEnvCollisionActive(bool isActive)
|
|
{
|
|
if (Singleton<StageManager>.Instance.GetStageEnv().transform.Find("Collision") != null)
|
|
{
|
|
Singleton<StageManager>.Instance.GetStageEnv().transform.Find("Collision").gameObject.SetActive(isActive);
|
|
}
|
|
}
|
|
|
|
public void SwitchPlayMode(string playMode)
|
|
{
|
|
Singleton<LevelManager>.Instance.levelActor.levelMode = (LevelActor.Mode)(int)Enum.Parse(typeof(LevelActor.Mode), playMode);
|
|
foreach (BaseMonoAvatar allPlayerAvatar in Singleton<AvatarManager>.Instance.GetAllPlayerAvatars())
|
|
{
|
|
allPlayerAvatar.RefreshController();
|
|
}
|
|
}
|
|
|
|
public void SetNatureBonusFactor(float upFactor, float downFactor)
|
|
{
|
|
Singleton<LevelManager>.Instance.levelActor.upLevelNatureBonusFactor = Mathf.Clamp(upFactor, 0f, upFactor);
|
|
Singleton<LevelManager>.Instance.levelActor.downLevelNatureBonusFactor = Mathf.Clamp(downFactor, 0f, downFactor);
|
|
}
|
|
|
|
public void StartInLevelLevelTimer()
|
|
{
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
if (!levelActor.HasPlugin<LevelActorTimerPlugin>())
|
|
{
|
|
levelActor.AddPlugin(new LevelActorTimerPlugin(levelActor));
|
|
}
|
|
LevelActorTimerPlugin plugin = Singleton<LevelManager>.Instance.levelActor.GetPlugin<LevelActorTimerPlugin>();
|
|
plugin.StartTiming();
|
|
}
|
|
|
|
public void StopInLevelLevelTimer()
|
|
{
|
|
LevelActorTimerPlugin plugin = Singleton<LevelManager>.Instance.levelActor.GetPlugin<LevelActorTimerPlugin>();
|
|
if (plugin != null)
|
|
{
|
|
plugin.StopTiming();
|
|
}
|
|
}
|
|
|
|
public void SetInLevelTimeCountDown(float time)
|
|
{
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
if (levelActor.HasPlugin<LevelActorCountDownPlugin>())
|
|
{
|
|
levelActor.GetPlugin<LevelActorCountDownPlugin>().ResetPlugin(time);
|
|
}
|
|
else
|
|
{
|
|
levelActor.AddPlugin(new LevelActorCountDownPlugin(levelActor, time));
|
|
}
|
|
SetInLevelTimeCountDownVisible(true);
|
|
}
|
|
|
|
public void SetInLevelTimeCountDownSpeedRatio(float ratioInNormalTime, float ratioInWitchTime)
|
|
{
|
|
LevelActorCountDownPlugin plugin = Singleton<LevelManager>.Instance.levelActor.GetPlugin<LevelActorCountDownPlugin>();
|
|
if (plugin != null)
|
|
{
|
|
plugin.SetCountDownSpeedRatio(ratioInNormalTime, ratioInWitchTime);
|
|
}
|
|
}
|
|
|
|
public void RemoveInLevelTimeCountDown()
|
|
{
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
if (levelActor.HasPlugin<LevelActorCountDownPlugin>())
|
|
{
|
|
levelActor.RemovePlugin<LevelActorCountDownPlugin>();
|
|
SetInLevelTimeCountDownVisible(false);
|
|
}
|
|
}
|
|
|
|
public void AddTheRemainTimeInLevel(float timeDelta)
|
|
{
|
|
LevelActorCountDownPlugin plugin = Singleton<LevelManager>.Instance.levelActor.GetPlugin<LevelActorCountDownPlugin>();
|
|
if (plugin != null)
|
|
{
|
|
plugin.AddRemainTime(timeDelta);
|
|
Singleton<NotifyManager>.Instance.FireNotify(new Notify(NotifyTypes.ShowAddTimeText, timeDelta));
|
|
}
|
|
}
|
|
|
|
public void StopInLevelTimeCountDown()
|
|
{
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
if (levelActor.HasPlugin<LevelActorCountDownPlugin>())
|
|
{
|
|
Singleton<LevelManager>.Instance.levelActor.GetPlugin<LevelActorCountDownPlugin>().isTiming = false;
|
|
}
|
|
}
|
|
|
|
public bool HasLevelActorCountDownPlugin()
|
|
{
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
return levelActor.HasPlugin<LevelActorCountDownPlugin>();
|
|
}
|
|
|
|
public void StartInLevelTimeCountDown()
|
|
{
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
if (levelActor.HasPlugin<LevelActorCountDownPlugin>())
|
|
{
|
|
Singleton<LevelManager>.Instance.levelActor.GetPlugin<LevelActorCountDownPlugin>().isTiming = true;
|
|
}
|
|
}
|
|
|
|
public void SetInLevelTimesUpWin(bool timesUpWin)
|
|
{
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
if (levelActor.HasPlugin<LevelActorCountDownPlugin>())
|
|
{
|
|
Singleton<LevelManager>.Instance.levelActor.GetPlugin<LevelActorCountDownPlugin>().timeUpWin = timesUpWin;
|
|
}
|
|
}
|
|
|
|
public float GetInLevelTimeCountDown()
|
|
{
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
return Singleton<LevelManager>.Instance.levelActor.GetPlugin<LevelActorCountDownPlugin>().countDownTimer;
|
|
}
|
|
|
|
public float GetEndlessLevelTimeCountDown()
|
|
{
|
|
return Singleton<LevelScoreManager>.Instance.levelTimer;
|
|
}
|
|
|
|
public int GetEndlessGroupLevel()
|
|
{
|
|
if (Singleton<EndlessModule>.Instance == null)
|
|
{
|
|
return 0;
|
|
}
|
|
return Singleton<EndlessModule>.Instance.currentGroupLevel;
|
|
}
|
|
|
|
public int GetEndlessRandomSeed()
|
|
{
|
|
if (Singleton<EndlessModule>.Instance == null)
|
|
{
|
|
return 0;
|
|
}
|
|
return Singleton<EndlessModule>.Instance.randomSeed;
|
|
}
|
|
|
|
private void SetInLevelTimeCountDownVisible(bool isVisible)
|
|
{
|
|
Singleton<NotifyManager>.Instance.FireNotify(new Notify(NotifyTypes.SetTimeCountDownTextActive, isVisible));
|
|
}
|
|
|
|
public bool IsPlayerBehaviourDone(string key)
|
|
{
|
|
return Singleton<PlayerModule>.Instance.IsBehaviourDone(key);
|
|
}
|
|
|
|
public void SetPlayerBehaviourDone(string key)
|
|
{
|
|
Singleton<PlayerModule>.Instance.SetBehaviourDone(key);
|
|
}
|
|
|
|
public object LoadLDDropDataItem(string goodsTypeName)
|
|
{
|
|
LDDropDataItem lDDropDataItemByName = LDDropDataItem.GetLDDropDataItemByName(goodsTypeName);
|
|
return lDDropDataItemByName.Clone();
|
|
}
|
|
|
|
public void CreateDropGoods(LuaTable dropTable, string spawnName, bool actDropAnim = false)
|
|
{
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(spawnName);
|
|
Vector3 position = spawnPoint.transform.position;
|
|
position.y = 0.4f;
|
|
foreach (object value in dropTable.Values)
|
|
{
|
|
(value as LDDropDataItem).CreateDropGoods(position, spawnPoint.transform.forward, actDropAnim);
|
|
}
|
|
}
|
|
|
|
public void CreateDropGoodsBetweenTwoPoint(LuaTable dropTable, string spawnName1, string spawnName2, int dropNum, bool actDropAnim = false)
|
|
{
|
|
Vector3 position = GetSpawnPoint(spawnName1).transform.position;
|
|
Vector3 position2 = GetSpawnPoint(spawnName2).transform.position;
|
|
for (int i = 0; i < dropNum; i++)
|
|
{
|
|
foreach (object value in dropTable.Values)
|
|
{
|
|
(value as LDDropDataItem).CreateDropGoods(position + (position2 - position) * i / (dropNum - 1), Vector3.forward, actDropAnim);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void CreateDropGoodsByMonsterID(LuaTable dropTable, uint monsterID, bool actDropAnim = true)
|
|
{
|
|
BaseMonoMonster monsterByRuntimeID = Singleton<MonsterManager>.Instance.GetMonsterByRuntimeID(monsterID);
|
|
Vector3 dropPosition = monsterByRuntimeID.GetDropPosition();
|
|
foreach (object value in dropTable.Values)
|
|
{
|
|
(value as LDDropDataItem).CreateDropGoods(dropPosition, Vector3.forward, actDropAnim);
|
|
}
|
|
}
|
|
|
|
public void SetupLevelReward(LuaTable dropTable, LuaTable otherReward)
|
|
{
|
|
List<DropItem> configLevelDrops = Singleton<LevelScoreManager>.Instance.configLevelDrops;
|
|
if (configLevelDrops != null)
|
|
{
|
|
for (int i = 0; i < configLevelDrops.Count; i++)
|
|
{
|
|
dropTable[i] = configLevelDrops[i];
|
|
}
|
|
}
|
|
otherReward["AvatarExpInside"] = Singleton<LevelScoreManager>.Instance.configAvatarExpInside;
|
|
otherReward["ScoinInside"] = Singleton<LevelScoreManager>.Instance.configScoinInside;
|
|
}
|
|
|
|
public string GetLevelDifficulty()
|
|
{
|
|
switch (Singleton<LevelScoreManager>.Instance.difficulty)
|
|
{
|
|
case 1:
|
|
return "Normal";
|
|
case 2:
|
|
return "Hard";
|
|
case 3:
|
|
return "Hell";
|
|
default:
|
|
return "Normal";
|
|
}
|
|
}
|
|
|
|
public int GetCurrentProgress()
|
|
{
|
|
return Singleton<LevelScoreManager>.Instance.progress;
|
|
}
|
|
|
|
public int GetLevelMode()
|
|
{
|
|
return (int)Singleton<LevelScoreManager>.Instance.levelMode;
|
|
}
|
|
|
|
public void SetupLevelDamageStastics()
|
|
{
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
levelActor.SetupLevelDamageStastics();
|
|
}
|
|
|
|
public void RemoveLevelDamageStastics()
|
|
{
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
if (levelActor.HasPlugin<LevelDamageStasticsPlugin>())
|
|
{
|
|
levelActor.RemoveLevelDamageStastics();
|
|
}
|
|
}
|
|
|
|
public void ControlLevelDamageStastics(string type)
|
|
{
|
|
string text = "DamageStastics";
|
|
DamageStastcisControlType type2 = (DamageStastcisControlType)(int)Enum.Parse(typeof(DamageStastcisControlType), text + type);
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
levelActor.ControlLevelDamageStastics(type2);
|
|
}
|
|
|
|
public void CreateEffectPatternWithMapKey(string effectPattern, string effectListMapKey)
|
|
{
|
|
Singleton<EffectManager>.Instance.CreateUniqueIndexedEffectPattern(effectPattern, effectListMapKey, Singleton<LevelManager>.Instance.levelEntity);
|
|
}
|
|
|
|
public void TryClearEffectListByMapKey(string effectListMapKey)
|
|
{
|
|
Singleton<EffectManager>.Instance.TrySetDestroyUniqueIndexedEffectPattern(effectListMapKey);
|
|
}
|
|
|
|
public void SetStageBaseRenderingDataWithTransition(string stageRenderingDataName, float transitDuration)
|
|
{
|
|
Singleton<StageManager>.Instance.GetPerpStage().SetBaseRenderingData(stageRenderingDataName, transitDuration);
|
|
}
|
|
|
|
public int PushRenderingDataWithTransition(string stageRenderingDataName, float transitDuration)
|
|
{
|
|
return Singleton<StageManager>.Instance.GetPerpStage().PushRenderingData(stageRenderingDataName, transitDuration);
|
|
}
|
|
|
|
public void PopRenderingData(int ix)
|
|
{
|
|
Singleton<StageManager>.Instance.GetPerpStage().PopRenderingData(ix);
|
|
}
|
|
|
|
public void ResetStageBaseRenderingData(float duration)
|
|
{
|
|
Singleton<StageManager>.Instance.GetPerpStage().ResetBaseRenderingData(duration);
|
|
}
|
|
|
|
public string GetStageBaseRenderingDataName()
|
|
{
|
|
return Singleton<StageManager>.Instance.GetPerpStage().GetCurrentBaseWeatherName();
|
|
}
|
|
|
|
public void SetStageBaseWeatherWithTransition(string weatherName, float transitDuration)
|
|
{
|
|
Singleton<StageManager>.Instance.GetPerpStage().SetBaseWeather(weatherName, transitDuration);
|
|
}
|
|
|
|
public void ResetStageBaseWeather(float transitDuration)
|
|
{
|
|
Singleton<StageManager>.Instance.GetPerpStage().ResetBaseWeather(transitDuration);
|
|
}
|
|
|
|
public string GetStageBaseWeatherName()
|
|
{
|
|
return Singleton<StageManager>.Instance.GetPerpStage().GetCurrentBaseWeatherName();
|
|
}
|
|
|
|
public int PushWeatherWithTransition(string stageWeatherName, float transitDuration)
|
|
{
|
|
return Singleton<StageManager>.Instance.GetPerpStage().PushWeather(stageWeatherName, transitDuration);
|
|
}
|
|
|
|
public void PopWeather(int ix)
|
|
{
|
|
Singleton<StageManager>.Instance.GetPerpStage().PopWeather(ix);
|
|
}
|
|
|
|
public void SetAvatarBeAttackMaxNum(int maxNum)
|
|
{
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
levelActor.SetAvatarBeAttackMaxNum(maxNum);
|
|
}
|
|
|
|
public void DisableAvatarRootMotion()
|
|
{
|
|
BaseMonoAvatar localAvatar = Singleton<AvatarManager>.Instance.GetLocalAvatar();
|
|
if (localAvatar != null)
|
|
{
|
|
localAvatar.SetNeedOverrideVelocity(true);
|
|
}
|
|
}
|
|
|
|
public void ForceUseAvatarAI()
|
|
{
|
|
BaseMonoAvatar localAvatar = Singleton<AvatarManager>.Instance.GetLocalAvatar();
|
|
if (localAvatar != null)
|
|
{
|
|
localAvatar.ForceUseAIController();
|
|
}
|
|
}
|
|
|
|
public uint GetLocalAvatarID()
|
|
{
|
|
return Singleton<AvatarManager>.Instance.GetLocalAvatar().GetRuntimeID();
|
|
}
|
|
|
|
public void DisableAllMonsterRootMotionAndAI()
|
|
{
|
|
List<BaseMonoMonster> allMonsters = Singleton<MonsterManager>.Instance.GetAllMonsters();
|
|
for (int i = 0; i < allMonsters.Count; i++)
|
|
{
|
|
BaseMonoMonster baseMonoMonster = allMonsters[i];
|
|
if (baseMonoMonster != null)
|
|
{
|
|
baseMonoMonster.SetNeedOverrideVelocity(true);
|
|
baseMonoMonster.SetUseAIController(false);
|
|
MonsterActor actor = Singleton<EventManager>.Instance.GetActor<MonsterActor>(baseMonoMonster.GetRuntimeID());
|
|
actor.config.CommonArguments.BePushedSpeedRatio = 0f;
|
|
actor.config.CommonArguments.BePushedSpeedRatioThrow = 0f;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void DisableMonsterRootMotionAndAI(uint runtimeID)
|
|
{
|
|
BaseMonoMonster baseMonoMonster = Singleton<MonsterManager>.Instance.TryGetMonsterByRuntimeID(runtimeID);
|
|
if (baseMonoMonster != null)
|
|
{
|
|
baseMonoMonster.SetNeedOverrideVelocity(true);
|
|
baseMonoMonster.SetUseAIController(false);
|
|
MonsterActor actor = Singleton<EventManager>.Instance.GetActor<MonsterActor>(baseMonoMonster.GetRuntimeID());
|
|
actor.config.CommonArguments.BePushedSpeedRatio = 0f;
|
|
actor.config.CommonArguments.BePushedSpeedRatioThrow = 0f;
|
|
}
|
|
}
|
|
|
|
public void SetupBGM(LuaTable table, string initState)
|
|
{
|
|
}
|
|
|
|
public void SetBGMState(string bgmState)
|
|
{
|
|
if (bgmState == "Battle")
|
|
{
|
|
Singleton<WwiseAudioManager>.Instance.Post("BGM_Stage_ResumeVol_B");
|
|
}
|
|
else if (bgmState == "NonBattle")
|
|
{
|
|
Singleton<WwiseAudioManager>.Instance.Post("BGM_Stage_TurnDownVol_B");
|
|
}
|
|
}
|
|
|
|
public void PlayBGMByName(string bgmName)
|
|
{
|
|
Singleton<WwiseAudioManager>.Instance.SetSwitch("Game_Stage_Type", bgmName);
|
|
Singleton<WwiseAudioManager>.Instance.Post("BGM_Stage_Start");
|
|
}
|
|
|
|
public void ResetAudioListener()
|
|
{
|
|
Singleton<WwiseAudioManager>.Instance.ResetListener();
|
|
}
|
|
|
|
public void PlayBGMByNameWithDelay(string bgmName, float delay)
|
|
{
|
|
}
|
|
|
|
public void AddBGMByName(string bgmName)
|
|
{
|
|
}
|
|
|
|
public void StopBGMWithDelay(string bgmName, float delay)
|
|
{
|
|
}
|
|
|
|
public void DebugDestroyDynamicObject(uint objectID)
|
|
{
|
|
BaseMonoDynamicObject dynamicObjectByRuntimeID = Singleton<DynamicObjectManager>.Instance.GetDynamicObjectByRuntimeID(objectID);
|
|
dynamicObjectByRuntimeID.SetDied();
|
|
dynamicObjectByRuntimeID.gameObject.SetActive(false);
|
|
}
|
|
|
|
public void DebugSetLocalAvatar(string avatarTypeName, LuaTable abilities, int weaponID, int level = 1, int star = 0)
|
|
{
|
|
Singleton<LevelManager>.Instance.levelEntity.StartCoroutine(DebugSetLocalAvatarIter(avatarTypeName, abilities, weaponID, level, star));
|
|
}
|
|
|
|
public void DebugSetLocalAvatarByAvatarModule(string avatarTypeName, LuaTable abilities)
|
|
{
|
|
List<AvatarDataItem> userAvatarList = Singleton<AvatarModule>.Instance.UserAvatarList;
|
|
foreach (AvatarDataItem item in userAvatarList)
|
|
{
|
|
if (item.AvatarRegistryKey == avatarTypeName)
|
|
{
|
|
AvatarDataItem avatarDataItem = item.Clone();
|
|
Singleton<LevelManager>.Instance.levelEntity.StartCoroutine(DebugSetLocalAvatarIter(avatarDataItem, abilities));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public int DebugGetLocalAvatarLevel()
|
|
{
|
|
return Singleton<EventManager>.Instance.GetActor<AvatarActor>(GetLocalAvatarID()).level;
|
|
}
|
|
|
|
public int DebugGetLocalAvatarWeaponRarity()
|
|
{
|
|
return Singleton<EventManager>.Instance.GetActor<AvatarActor>(GetLocalAvatarID()).avatarDataItem.GetWeapon().rarity;
|
|
}
|
|
|
|
private IEnumerator DebugSetLocalAvatarIter(string avatarTypeName, LuaTable abilities, int weaponID, int level, int star)
|
|
{
|
|
List<BaseMonoAvatar> allAvatars = Singleton<AvatarManager>.Instance.GetAllPlayerAvatars();
|
|
BaseMonoAvatar targetAvatar = null;
|
|
foreach (BaseMonoAvatar avatar in allAvatars)
|
|
{
|
|
if (Singleton<AvatarManager>.Instance.IsLocalAvatar(avatar.GetRuntimeID()))
|
|
{
|
|
continue;
|
|
}
|
|
targetAvatar = avatar;
|
|
break;
|
|
}
|
|
uint targetAvatarID = targetAvatar.GetRuntimeID();
|
|
AvatarActor targetAvatarActor = Singleton<EventManager>.Instance.GetActor<AvatarActor>(targetAvatarID);
|
|
Vector3 localAvatarXZPosition = targetAvatar.XZPosition;
|
|
Vector3 localAvatarForward = targetAvatar.FaceDirection;
|
|
Singleton<EventManager>.Instance.MaskEventType(typeof(EvtAvatarCreated));
|
|
Singleton<EventManager>.Instance.MaskEventType(typeof(EvtKilled));
|
|
targetAvatarActor.ForceKill(562036737u, KillEffect.KillImmediately);
|
|
Singleton<AvatarManager>.Instance.RemoveAvatarByRuntimeID(targetAvatarID);
|
|
yield return null;
|
|
AvatarDataItem avatarDataItem = Singleton<AvatarModule>.Instance.GetDummyAvatarDataItem(avatarTypeName, level, star);
|
|
ConfigAvatar avatarConfig = AvatarData.GetAvatarConfig(avatarTypeName);
|
|
WeaponDataItem weaponData = ((weaponID != 0) ? Singleton<StorageModule>.Instance.GetDummyWeaponDataItem(weaponID, 1) : Singleton<StorageModule>.Instance.GetDummyFirstWeaponDataByRole(avatarConfig.CommonArguments.RoleName, 1));
|
|
avatarDataItem.equipsMap[(EquipmentSlot)1] = weaponData;
|
|
targetAvatarID = Singleton<AvatarManager>.Instance.CreateAvatar(avatarDataItem, false, localAvatarXZPosition, localAvatarForward, targetAvatarID, false, false);
|
|
targetAvatar = Singleton<AvatarManager>.Instance.GetAvatarByRuntimeID(targetAvatarID);
|
|
targetAvatar.gameObject.SetActive(false);
|
|
targetAvatarActor = Singleton<EventManager>.Instance.GetActor<AvatarActor>(targetAvatarID);
|
|
foreach (object obj in abilities.Values)
|
|
{
|
|
targetAvatarActor.abilityPlugin.AddAbility(AbilityData.GetAbilityConfig(obj.ToString()));
|
|
}
|
|
foreach (MonoAvatarButton button in Singleton<MainUIManager>.Instance.GetInLevelUICanvas().mainPageContext.avatarButtonContainer.avatarBtnList)
|
|
{
|
|
if (button.avatarRuntimeID == targetAvatarID)
|
|
{
|
|
button.SetupAvatar(targetAvatarID);
|
|
}
|
|
}
|
|
Singleton<EventManager>.Instance.UnmaskEventType(typeof(EvtAvatarCreated));
|
|
Singleton<EventManager>.Instance.UnmaskEventType(typeof(EvtKilled));
|
|
Singleton<LevelManager>.Instance.levelActor.TriggerSwapLocalAvatar(Singleton<AvatarManager>.Instance.GetLocalAvatar().GetRuntimeID(), targetAvatarID, true);
|
|
}
|
|
|
|
private IEnumerator DebugSetLocalAvatarIter(AvatarDataItem avatarDataItem, LuaTable abilities)
|
|
{
|
|
List<BaseMonoAvatar> allAvatars = Singleton<AvatarManager>.Instance.GetAllPlayerAvatars();
|
|
BaseMonoAvatar targetAvatar = null;
|
|
foreach (BaseMonoAvatar avatar in allAvatars)
|
|
{
|
|
if (Singleton<AvatarManager>.Instance.IsLocalAvatar(avatar.GetRuntimeID()))
|
|
{
|
|
continue;
|
|
}
|
|
targetAvatar = avatar;
|
|
break;
|
|
}
|
|
uint targetAvatarID = targetAvatar.GetRuntimeID();
|
|
AvatarActor targetAvatarActor = Singleton<EventManager>.Instance.GetActor<AvatarActor>(targetAvatarID);
|
|
Vector3 localAvatarXZPosition = targetAvatar.XZPosition;
|
|
Vector3 localAvatarForward = targetAvatar.FaceDirection;
|
|
Singleton<EventManager>.Instance.MaskEventType(typeof(EvtAvatarCreated));
|
|
Singleton<EventManager>.Instance.MaskEventType(typeof(EvtKilled));
|
|
targetAvatarActor.ForceKill(562036737u, KillEffect.KillImmediately);
|
|
Singleton<AvatarManager>.Instance.RemoveAvatarByRuntimeID(targetAvatarID);
|
|
yield return null;
|
|
targetAvatarID = Singleton<AvatarManager>.Instance.CreateAvatar(avatarDataItem, false, localAvatarXZPosition, localAvatarForward, targetAvatarID, false, false);
|
|
targetAvatar = Singleton<AvatarManager>.Instance.GetAvatarByRuntimeID(targetAvatarID);
|
|
targetAvatar.gameObject.SetActive(false);
|
|
targetAvatarActor = Singleton<EventManager>.Instance.GetActor<AvatarActor>(targetAvatarID);
|
|
foreach (object obj in abilities.Values)
|
|
{
|
|
targetAvatarActor.abilityPlugin.AddAbility(AbilityData.GetAbilityConfig(obj.ToString()));
|
|
}
|
|
foreach (MonoAvatarButton button in Singleton<MainUIManager>.Instance.GetInLevelUICanvas().mainPageContext.avatarButtonContainer.avatarBtnList)
|
|
{
|
|
if (button.avatarRuntimeID == targetAvatarID)
|
|
{
|
|
button.SetupAvatar(targetAvatarID);
|
|
}
|
|
}
|
|
Singleton<EventManager>.Instance.UnmaskEventType(typeof(EvtAvatarCreated));
|
|
Singleton<EventManager>.Instance.UnmaskEventType(typeof(EvtKilled));
|
|
Singleton<LevelManager>.Instance.levelActor.TriggerSwapLocalAvatar(Singleton<AvatarManager>.Instance.GetLocalAvatar().GetRuntimeID(), targetAvatarID, true);
|
|
}
|
|
|
|
public void DebugSetBehaviorTree(uint runtimeID, string treeAssetPath)
|
|
{
|
|
BaseMonoEntity entity = Singleton<EventManager>.Instance.GetEntity(runtimeID);
|
|
BehaviorTree component = entity.GetComponent<BehaviorTree>();
|
|
if (!(component == null))
|
|
{
|
|
ExternalBehaviorTree externalBehavior = Miscs.LoadResource<ExternalBehaviorTree>(treeAssetPath);
|
|
component.ExternalBehavior = externalBehavior;
|
|
component.EnableBehavior();
|
|
}
|
|
}
|
|
|
|
public void DebugSetAvatarAutoMoveBehavior(uint runtimeID, string spawnPoint)
|
|
{
|
|
BaseMonoAvatar avatarByRuntimeID = Singleton<AvatarManager>.Instance.GetAvatarByRuntimeID(runtimeID);
|
|
BTreeAvatarAIController bTreeAvatarAIController = avatarByRuntimeID.GetActiveAIController() as BTreeAvatarAIController;
|
|
bTreeAvatarAIController.ChangeToMoveBehavior(GetSpawnPointPos(spawnPoint));
|
|
}
|
|
|
|
public void DebugSetAvatarAutoMoveBehaviorWithPosition(uint runtimeID, Vector3 position)
|
|
{
|
|
BaseMonoAvatar avatarByRuntimeID = Singleton<AvatarManager>.Instance.GetAvatarByRuntimeID(runtimeID);
|
|
BTreeAvatarAIController bTreeAvatarAIController = avatarByRuntimeID.GetActiveAIController() as BTreeAvatarAIController;
|
|
bTreeAvatarAIController.ChangeToMoveBehavior(position);
|
|
}
|
|
|
|
public void DebugSetAvatarSupporterBehavior(uint runtimeID)
|
|
{
|
|
BaseMonoAvatar avatarByRuntimeID = Singleton<AvatarManager>.Instance.GetAvatarByRuntimeID(runtimeID);
|
|
BTreeAvatarAIController bTreeAvatarAIController = avatarByRuntimeID.GetActiveAIController() as BTreeAvatarAIController;
|
|
bTreeAvatarAIController.ChangeToSupporterBehavior();
|
|
}
|
|
|
|
public void DebugSetAvatarAutoBattleBehavior(uint runtimeID)
|
|
{
|
|
BaseMonoAvatar avatarByRuntimeID = Singleton<AvatarManager>.Instance.GetAvatarByRuntimeID(runtimeID);
|
|
BTreeAvatarAIController bTreeAvatarAIController = avatarByRuntimeID.GetActiveAIController() as BTreeAvatarAIController;
|
|
bTreeAvatarAIController.ChangeToAutoBattleBehavior();
|
|
}
|
|
|
|
public bool HasHelperAvatar()
|
|
{
|
|
if (Singleton<LevelScoreManager>.Instance.friendDetailItem != null)
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public bool CreateHelperAvatar()
|
|
{
|
|
if (Singleton<LevelScoreManager>.Instance.friendDetailItem != null)
|
|
{
|
|
Singleton<AvatarManager>.Instance.ShowHelperAvater();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void DestroyHelperAvatar()
|
|
{
|
|
Singleton<AvatarManager>.Instance.HideHelperAvatar(false);
|
|
}
|
|
|
|
public void CreateGood(string goodType, string spawnName, string abilityname, float argument = 1f, bool actDropAnim = false)
|
|
{
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(spawnName);
|
|
Singleton<DynamicObjectManager>.Instance.CreateGood(562036737u, goodType, abilityname, argument, spawnPoint.transform.position, spawnPoint.transform.forward, actDropAnim);
|
|
}
|
|
|
|
public uint CreateSpikeProp(string spawnName, int number, float attack, float rotation)
|
|
{
|
|
return CreateUnitFieldProp(spawnName, 1, number, "Trap_Spike", attack, rotation);
|
|
}
|
|
|
|
public uint SetSpikePropContineousState(uint runtimeID, bool isActive)
|
|
{
|
|
MonoSpikeTriggerProp monoSpikeTriggerProp = (MonoSpikeTriggerProp)Singleton<PropObjectManager>.Instance.GetPropObjectByRuntimeID(runtimeID);
|
|
monoSpikeTriggerProp.SetContinuousState(isActive);
|
|
return runtimeID;
|
|
}
|
|
|
|
public void SetSpikeProp(uint runtimeID, float effectDuration, float CD)
|
|
{
|
|
MonoSpikeTriggerProp monoSpikeTriggerProp = (MonoSpikeTriggerProp)Singleton<PropObjectManager>.Instance.GetPropObjectByRuntimeID(runtimeID);
|
|
monoSpikeTriggerProp.SetSpikePropDurationAndCD(effectDuration, CD);
|
|
}
|
|
|
|
public uint CreateFireProp(string spawnName, int numberX, int numberZ, float attack, float rotation)
|
|
{
|
|
return CreateUnitFieldProp(spawnName, numberX, numberZ, "Trap_Fire", attack, rotation);
|
|
}
|
|
|
|
public void EnableFireProp(uint runtimeID, float effectDuration, float CD)
|
|
{
|
|
MonoFireTriggerProp monoFireTriggerProp = (MonoFireTriggerProp)Singleton<PropObjectManager>.Instance.GetPropObjectByRuntimeID(runtimeID);
|
|
monoFireTriggerProp.DisableProp();
|
|
monoFireTriggerProp.EnableFire(effectDuration, CD);
|
|
}
|
|
|
|
public void DisableFireProp(uint runtimeID)
|
|
{
|
|
MonoFireTriggerProp monoFireTriggerProp = (MonoFireTriggerProp)Singleton<PropObjectManager>.Instance.GetPropObjectByRuntimeID(runtimeID);
|
|
monoFireTriggerProp.ForceDisableFire();
|
|
}
|
|
|
|
public uint CreatePalsyProp(string spawnName)
|
|
{
|
|
return CreatePropObject(spawnName, "Trap_Palsy");
|
|
}
|
|
|
|
public uint CreateSlowProp(string spawnName, int numberX, int numberZ, float rotation = 0f)
|
|
{
|
|
return CreateUnitFieldProp(spawnName, numberX, numberZ, "Trap_Slow", 0f, rotation);
|
|
}
|
|
|
|
private uint CreateUnitFieldProp(string spawnName, int numberX, int numberZ, string propName, float rotation = 0f)
|
|
{
|
|
ConfigPropObject propObjectConfig = PropObjectData.GetPropObjectConfig(propName);
|
|
float attack = propObjectConfig.PropArguments.Attack;
|
|
return CreateUnitFieldProp(spawnName, numberX, numberZ, propName, attack, rotation);
|
|
}
|
|
|
|
private uint CreateUnitFieldProp(string spawnName, int numberX, int numberZ, string propName, float atk, float rotation = 0f)
|
|
{
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(spawnName);
|
|
ConfigPropObject propObjectConfig = PropObjectData.GetPropObjectConfig(propName);
|
|
float hP = propObjectConfig.PropArguments.HP;
|
|
uint num = Singleton<PropObjectManager>.Instance.CreatePropObject(562036737u, propName, hP, atk, spawnPoint.transform.position, spawnPoint.transform.forward);
|
|
MonoTriggerUnitFieldProp monoTriggerUnitFieldProp = (MonoTriggerUnitFieldProp)Singleton<PropObjectManager>.Instance.GetPropObjectByRuntimeID(num);
|
|
monoTriggerUnitFieldProp.InitUnitFieldPropRange(numberX, numberZ);
|
|
monoTriggerUnitFieldProp.transform.RotateAround(monoTriggerUnitFieldProp.transform.position, Vector3.up, rotation);
|
|
monoTriggerUnitFieldProp.EnableProp();
|
|
return num;
|
|
}
|
|
|
|
public uint CreatePalsyBombProp(string spawnName)
|
|
{
|
|
return CreatePropObject(spawnName, "Trap_Palsy_Bomb");
|
|
}
|
|
|
|
public uint CreatePropObject(string spawnName, string propName)
|
|
{
|
|
ConfigPropObject propObjectConfig = PropObjectData.GetPropObjectConfig(propName);
|
|
float hP = propObjectConfig.PropArguments.HP;
|
|
float attack = propObjectConfig.PropArguments.Attack;
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(spawnName);
|
|
return Singleton<PropObjectManager>.Instance.CreatePropObject(562036737u, propName, hP, attack, spawnPoint.transform.position, spawnPoint.transform.forward);
|
|
}
|
|
|
|
public void EnterLevelTransition()
|
|
{
|
|
Singleton<MainUIManager>.Instance.GetInLevelUICanvas().FadeOutStageTransitPanel();
|
|
Singleton<EventManager>.Instance.FireEvent(new EvtLevelState(EvtLevelState.State.EnterTransition));
|
|
}
|
|
|
|
public void ExitLevelTransition()
|
|
{
|
|
Singleton<MainUIManager>.Instance.GetInLevelUICanvas().FadeInStageTransitPanel();
|
|
Singleton<EventManager>.Instance.FireEvent(new EvtLevelState(EvtLevelState.State.ExitTransition));
|
|
}
|
|
|
|
public void Fade(bool waitFadeOutEnd = false, bool waitFadeInEnd = false)
|
|
{
|
|
MonoInLevelUICanvas inLevelUICanvas = Singleton<MainUIManager>.Instance.GetInLevelUICanvas();
|
|
Action fadeEndCallback = delegate
|
|
{
|
|
if (waitFadeOutEnd)
|
|
{
|
|
Singleton<EventManager>.Instance.FireEvent(new EvtLevelState(EvtLevelState.State.ExitTransition));
|
|
}
|
|
else
|
|
{
|
|
MonoInLevelUICanvas inLevelUICanvas2 = Singleton<MainUIManager>.Instance.GetInLevelUICanvas();
|
|
Action fadeEndCallback2 = delegate
|
|
{
|
|
if (waitFadeInEnd)
|
|
{
|
|
Singleton<EventManager>.Instance.FireEvent(new EvtLevelState(EvtLevelState.State.ExitTransition));
|
|
}
|
|
};
|
|
inLevelUICanvas2.FadeInStageTransitPanel(0.18f, false, null, fadeEndCallback2);
|
|
}
|
|
};
|
|
inLevelUICanvas.FadeOutStageTransitPanel(0.18f, false, null, fadeEndCallback);
|
|
}
|
|
|
|
public void MuteInput()
|
|
{
|
|
Singleton<AvatarManager>.Instance.SetMuteAllAvatarControl(true);
|
|
Singleton<NotifyManager>.Instance.FireNotify(new Notify(NotifyTypes.JoystickVisible, false));
|
|
}
|
|
|
|
public void RecoveryInput()
|
|
{
|
|
Singleton<AvatarManager>.Instance.SetMuteAllAvatarControl(false);
|
|
Singleton<NotifyManager>.Instance.FireNotify(new Notify(NotifyTypes.JoystickVisible, true));
|
|
}
|
|
|
|
public void ShowLevelDisplayText(string textMapKey, LuaTable paramTable = null)
|
|
{
|
|
string empty = string.Empty;
|
|
if (paramTable != null)
|
|
{
|
|
object[] array = new object[paramTable.Values.Count];
|
|
paramTable.Values.CopyTo(array, 0);
|
|
empty = LocalizationGeneralLogic.GetTextWithParamArray(textMapKey, array);
|
|
}
|
|
else
|
|
{
|
|
empty = LocalizationGeneralLogic.GetText(textMapKey);
|
|
}
|
|
Singleton<NotifyManager>.Instance.FireNotify(new Notify(NotifyTypes.ShowLevelDisplayText, empty));
|
|
}
|
|
|
|
public Transform GetLocalAvatar()
|
|
{
|
|
return Singleton<AvatarManager>.Instance.GetLocalAvatar().transform;
|
|
}
|
|
|
|
public string GetAvatarShortName(Transform actor)
|
|
{
|
|
return actor.GetComponent<BaseMonoAvatar>().AvatarTypeName;
|
|
}
|
|
|
|
public Cutscene TriggerCinema(string name, Transform actor)
|
|
{
|
|
AvatarCinemaType type = name.ToEnum(AvatarCinemaType.Victory);
|
|
ICinema cinemaDataByAvatar = Singleton<CinemaDataManager>.Instance.GetCinemaDataByAvatar(GetAvatarShortName(actor), type);
|
|
cinemaDataByAvatar.Init(actor);
|
|
cinemaDataByAvatar.Play();
|
|
return cinemaDataByAvatar.GetCutscene();
|
|
}
|
|
|
|
public void EnableBossCamera(uint targetId)
|
|
{
|
|
Singleton<CameraManager>.Instance.EnableBossCamera(targetId);
|
|
}
|
|
|
|
public void DisableBossCamera()
|
|
{
|
|
Singleton<CameraManager>.Instance.DisableBossCamera();
|
|
}
|
|
|
|
public void EnableCrowdCamera()
|
|
{
|
|
Singleton<CameraManager>.Instance.EnableCrowdCamera();
|
|
}
|
|
|
|
public void DisableCrowdCamera()
|
|
{
|
|
Singleton<CameraManager>.Instance.DisableCrowdCamera();
|
|
}
|
|
|
|
public void EnterStoryMode(int plotID, bool lerpIn = true, bool lerpOut = true, bool needFadeIn = true, bool backFollow = true, bool pauseLevel = false)
|
|
{
|
|
if (!Singleton<CameraManager>.Instance.GetMainCamera().storyState.active)
|
|
{
|
|
SetPause(true);
|
|
Singleton<CameraManager>.Instance.GetMainCamera().PlayStoryCameraState(plotID, lerpIn, lerpOut, needFadeIn, backFollow, pauseLevel);
|
|
}
|
|
}
|
|
|
|
public bool AllowEnterStoryMode(int plotID)
|
|
{
|
|
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_0042: Invalid comparison between Unknown and I4
|
|
PlotMetaData plotMetaDataByKey = PlotMetaDataReader.GetPlotMetaDataByKey(plotID);
|
|
if (plotMetaDataByKey != null)
|
|
{
|
|
if (!Singleton<LevelModule>.Instance.ContainLevelById(plotMetaDataByKey.levelID))
|
|
{
|
|
return true;
|
|
}
|
|
LevelDataItem levelDataItem = Singleton<LevelModule>.Instance.TryGetLevelById(plotMetaDataByKey.levelID);
|
|
if (levelDataItem != null)
|
|
{
|
|
return (int)levelDataItem.LevelType == 1;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public void EnterStoryModeWithFollowingAnimation(int plotID, string followAnimationName)
|
|
{
|
|
if (!string.IsNullOrEmpty(followAnimationName))
|
|
{
|
|
if (AuxObjectData.ContainAuxObjectPrefabPath(followAnimationName))
|
|
{
|
|
EnterStoryMode(plotID, true, false, false);
|
|
}
|
|
else
|
|
{
|
|
EnterStoryMode(plotID);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void ExitStoryMode()
|
|
{
|
|
if (!Singleton<CameraManager>.Instance.GetMainCamera().IsInTransitionLerp() && Singleton<CameraManager>.Instance.GetMainCamera().storyState.active)
|
|
{
|
|
Singleton<CameraManager>.Instance.GetMainCamera().storyState.StartQuit();
|
|
}
|
|
}
|
|
|
|
public void SetCameraLocateRatio(float ratio)
|
|
{
|
|
Singleton<CameraManager>.Instance.GetMainCamera().SetUserDefinedCameraLocateRatio(ratio);
|
|
}
|
|
|
|
public void TriggerAbilityOnMonster(uint targetID, string abilityName, float abilityArgument = 0f)
|
|
{
|
|
Singleton<EventManager>.Instance.GetActor<MonsterActor>(targetID).abilityPlugin.AddOrGetAbilityAndTriggerOnTarget(AbilityData.GetAbilityConfig(abilityName), targetID, abilityArgument);
|
|
}
|
|
|
|
public void TriggerAbilityOnAvatar(bool toAllAvatars, string abilityName, float abilityArgument = 0f)
|
|
{
|
|
LevelActor levelActor = (LevelActor)Singleton<EventManager>.Instance.GetActor(562036737u);
|
|
if (toAllAvatars)
|
|
{
|
|
foreach (BaseMonoAvatar allAvatar in Singleton<AvatarManager>.Instance.GetAllAvatars())
|
|
{
|
|
if (levelActor.abilityPlugin != null)
|
|
{
|
|
levelActor.abilityPlugin.AddOrGetAbilityAndTriggerOnTarget(AbilityData.GetAbilityConfig(abilityName), allAvatar.GetRuntimeID(), abilityArgument);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if (levelActor.abilityPlugin != null)
|
|
{
|
|
levelActor.abilityPlugin.AddOrGetAbilityAndTriggerOnTarget(AbilityData.GetAbilityConfig(abilityName), Singleton<AvatarManager>.Instance.GetLocalAvatar().GetRuntimeID(), abilityArgument);
|
|
}
|
|
}
|
|
|
|
public bool HasAbility(string abilityName)
|
|
{
|
|
if (string.IsNullOrEmpty(abilityName))
|
|
{
|
|
return false;
|
|
}
|
|
foreach (BaseMonoAvatar allAvatar in Singleton<AvatarManager>.Instance.GetAllAvatars())
|
|
{
|
|
AvatarActor actor = Singleton<EventManager>.Instance.GetActor<AvatarActor>(allAvatar.GetRuntimeID());
|
|
if (actor != null && actor.abilityPlugin != null && actor.abilityPlugin.HasAbility(abilityName))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void SetAbilitySpecials(string abilityName, LuaTable overrideTable)
|
|
{
|
|
foreach (BaseMonoAvatar allAvatar in Singleton<AvatarManager>.Instance.GetAllAvatars())
|
|
{
|
|
if (!Singleton<EventManager>.Instance.GetActor<AvatarActor>(allAvatar.GetRuntimeID()).abilityPlugin.HasAbility(abilityName))
|
|
{
|
|
continue;
|
|
}
|
|
List<ActorAbility> appliedAbilities = Singleton<EventManager>.Instance.GetActor<AvatarActor>(allAvatar.GetRuntimeID()).abilityPlugin.GetAppliedAbilities();
|
|
foreach (ActorAbility item in appliedAbilities)
|
|
{
|
|
if (!(item.config.AbilityName == abilityName))
|
|
{
|
|
continue;
|
|
}
|
|
foreach (DictionaryEntry item2 in overrideTable)
|
|
{
|
|
string key = (string)item2.Key;
|
|
if (item2.Value is double)
|
|
{
|
|
item.SetOverrideMapValue(key, (float)(double)item2.Value);
|
|
}
|
|
else if (item2.Value is string)
|
|
{
|
|
item.SetOverrideMapValue(key, (string)item2.Value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void AddHintArrowForPath(string spawnName)
|
|
{
|
|
MonoSpawnPoint spawnPoint = GetSpawnPoint(spawnName);
|
|
Singleton<MainUIManager>.Instance.GetInLevelUICanvas().hintArrowManager.AddHintArrowForPath(spawnPoint);
|
|
}
|
|
|
|
public void RemoveHintArrowForPath()
|
|
{
|
|
Singleton<MainUIManager>.Instance.GetInLevelUICanvas().hintArrowManager.RemoveHintArrowForPath();
|
|
}
|
|
|
|
public void SetMuteAvatarVoice(bool mute)
|
|
{
|
|
string empty = string.Empty;
|
|
empty = ((!mute) ? "UI_Exit_StoryMode" : "UI_Enter_StoryMode");
|
|
if (!string.IsNullOrEmpty(empty))
|
|
{
|
|
Singleton<WwiseAudioManager>.Instance.Post(empty);
|
|
}
|
|
}
|
|
|
|
public bool AllowSkipVideo(int cgId)
|
|
{
|
|
return Singleton<CGModule>.Instance.GetFinishedCGIDList().Contains(cgId);
|
|
}
|
|
|
|
public bool LoadVideo(int cgId)
|
|
{
|
|
CgDataItem cgDataItem = Singleton<CGModule>.Instance.GetCgDataItem(cgId);
|
|
if (cgDataItem != null)
|
|
{
|
|
Singleton<CGModule>.Instance.MarkCGIDFinish(cgDataItem.cgID);
|
|
BaseMonoCanvas mainCanvas = Singleton<MainUIManager>.Instance.GetMainCanvas();
|
|
if (mainCanvas is MonoInLevelUICanvas)
|
|
{
|
|
MonoInLevelUICanvas monoInLevelUICanvas = mainCanvas as MonoInLevelUICanvas;
|
|
monoInLevelUICanvas.LoadVideo(cgDataItem);
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public bool PlayVideo(int cgId, bool withFade = false)
|
|
{
|
|
CgDataItem cgDataItem = Singleton<CGModule>.Instance.GetCgDataItem(cgId);
|
|
if (cgDataItem != null)
|
|
{
|
|
Singleton<CGModule>.Instance.MarkCGIDFinish(cgDataItem.cgID);
|
|
BaseMonoCanvas mainCanvas = Singleton<MainUIManager>.Instance.GetMainCanvas();
|
|
if (mainCanvas is MonoLoadingCanvas)
|
|
{
|
|
mainCanvas.PlayVideo(cgDataItem);
|
|
}
|
|
else if (mainCanvas is MonoInLevelUICanvas)
|
|
{
|
|
if (withFade)
|
|
{
|
|
(mainCanvas as MonoInLevelUICanvas).StartPlayVideo(cgDataItem);
|
|
}
|
|
else
|
|
{
|
|
mainCanvas.PlayVideo(cgDataItem);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
mainCanvas.PlayVideo(cgDataItem);
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public string GetCurrentStageName()
|
|
{
|
|
return Singleton<StageManager>.Instance.GetStageTypeName();
|
|
}
|
|
|
|
public string GetCurrentStageFirstName()
|
|
{
|
|
return Singleton<StageManager>.Instance.GetStageTypeName().Split('_')[0];
|
|
}
|
|
|
|
public object GetPointsAroundSpecificPoint(string targetPoint, int num)
|
|
{
|
|
List<MonoSpawnPoint> list = new List<MonoSpawnPoint>(Singleton<StageManager>.Instance.GetStageEnv().spawnPoints);
|
|
centerPoint = GetSpawnPoint(targetPoint);
|
|
list.Sort(CompareByDistance);
|
|
string[] array = new string[num];
|
|
for (int i = 0; i < num; i++)
|
|
{
|
|
array[i] = list[i].name;
|
|
}
|
|
return array;
|
|
}
|
|
|
|
private int CompareByDistance(MonoSpawnPoint pointA, MonoSpawnPoint pointB)
|
|
{
|
|
if (Vector3.Distance(pointA.transform.localPosition, centerPoint.transform.localPosition) < Vector3.Distance(pointB.transform.localPosition, centerPoint.transform.localPosition))
|
|
{
|
|
return -1;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
public void RestartLuaLogic(string luaPath)
|
|
{
|
|
RemoveLevelDamageStastics();
|
|
Singleton<LevelScoreManager>.Instance.luaFile = luaPath;
|
|
InitAtAwake();
|
|
LevelDesignStart();
|
|
}
|
|
|
|
public bool IsLevelDone()
|
|
{
|
|
return Singleton<LevelScoreManager>.Instance.IsLevelDone();
|
|
}
|
|
|
|
public int GetServerDayOfWeek()
|
|
{
|
|
return (int)TimeUtil.Now.DayOfWeek;
|
|
}
|
|
|
|
public void DoTutorialStep(int tutorialStepID, bool toPauseGame, float holdSeconds = 0f)
|
|
{
|
|
TutorialStepData tutorialStepDataByKey = TutorialStepDataReader.GetTutorialStepDataByKey(tutorialStepID);
|
|
string targetUIPath = tutorialStepDataByKey.targetUIPath;
|
|
Transform highlightTrans = null;
|
|
if (targetUIPath != string.Empty)
|
|
{
|
|
BaseMonoCanvas sceneCanvas = Singleton<MainUIManager>.Instance.SceneCanvas;
|
|
highlightTrans = sceneCanvas.transform.Find(targetUIPath);
|
|
}
|
|
NewbieDialogContext newbieDialogContext = new NewbieDialogContext();
|
|
newbieDialogContext.destroyByOthers = true;
|
|
newbieDialogContext.delayInputTime = 0.5f;
|
|
newbieDialogContext.disableMask = tutorialStepDataByKey.stepType == 2;
|
|
newbieDialogContext.highlightTrans = highlightTrans;
|
|
newbieDialogContext.highlightPath = targetUIPath;
|
|
newbieDialogContext.bubblePosType = (NewbieDialogContext.BubblePosType)tutorialStepDataByKey.bubblePosType;
|
|
newbieDialogContext.handIconPosType = (NewbieDialogContext.HandIconPosType)tutorialStepDataByKey.handIconPosType;
|
|
newbieDialogContext.disableHighlightEffect = !tutorialStepDataByKey.playEffect;
|
|
newbieDialogContext.guideDesc = LocalizationGeneralLogic.GetText(tutorialStepDataByKey.guideDesc);
|
|
newbieDialogContext.delayShowTime = tutorialStepDataByKey.delayTime;
|
|
NewbieDialogContext newbieDialogContext2 = newbieDialogContext;
|
|
if (toPauseGame && !Singleton<LevelManager>.Instance.IsPaused())
|
|
{
|
|
Singleton<LevelManager>.Instance.SetPause(true);
|
|
}
|
|
DateTime pointerDownTime = TimeUtil.Now;
|
|
newbieDialogContext2.pointerDownCallback = delegate
|
|
{
|
|
pointerDownTime = TimeUtil.Now;
|
|
};
|
|
newbieDialogContext2.pointerUpCallback = delegate
|
|
{
|
|
bool flag = TimeUtil.Now >= pointerDownTime.AddSeconds(holdSeconds);
|
|
if (flag && toPauseGame && Singleton<LevelManager>.Instance.IsPaused())
|
|
{
|
|
Singleton<LevelManager>.Instance.SetPause(false);
|
|
}
|
|
return flag;
|
|
};
|
|
Singleton<MainUIManager>.Instance.ShowDialog(newbieDialogContext2);
|
|
}
|
|
|
|
public void ClearLevelCombo()
|
|
{
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
levelActor.ResetCombo();
|
|
}
|
|
|
|
public string GetLevelStasticsResult()
|
|
{
|
|
string empty = string.Empty;
|
|
LevelActor levelActor = Singleton<LevelManager>.Instance.levelActor;
|
|
LevelDamageStasticsPlugin plugin = levelActor.GetPlugin<LevelDamageStasticsPlugin>();
|
|
empty = empty + "Time: " + Mathf.FloorToInt(plugin.stageTime);
|
|
empty = empty + " DMG: " + Mathf.FloorToInt(plugin.avatarDamage);
|
|
return empty + " MDMG: " + Mathf.FloorToInt(plugin.monsterDamage);
|
|
}
|
|
|
|
public void DebugShowLevelDisplayText(string text, LuaTable paramTable = null)
|
|
{
|
|
Singleton<NotifyManager>.Instance.FireNotify(new Notify(NotifyTypes.ShowLevelDisplayText, text));
|
|
}
|
|
|
|
public void InitAtAwake()
|
|
{
|
|
_luaManualCoroutines = new List<Tuple<LuaThread, int>>();
|
|
_ldEvtTriggers = new List<LDEvtTrigger>();
|
|
_evtTriggers = new List<EvtTrigger>();
|
|
_allLDEvents = new List<BaseLDEvent>();
|
|
_luaState = new LuaState();
|
|
_luaState["LevelDesign"] = this;
|
|
string luaFile = Singleton<LevelScoreManager>.Instance.luaFile;
|
|
object[] array = _luaState.DoString(Miscs.LoadTextFileToString(luaFile), luaFile, null);
|
|
LuaTable luaTable = (LuaTable)array[0];
|
|
_ldMain = (LuaFunction)luaTable["main"];
|
|
state = LDState.Start;
|
|
}
|
|
|
|
public void InitAtStart()
|
|
{
|
|
Singleton<CameraManager>.Instance.GetMainCamera().gameObject.SetActive(true);
|
|
Singleton<CameraManager>.Instance.GetInLevelUICamera().gameObject.SetActive(true);
|
|
}
|
|
|
|
public void Core()
|
|
{
|
|
if (state == LDState.End)
|
|
{
|
|
return;
|
|
}
|
|
for (int i = 0; i < _allLDEvents.Count; i++)
|
|
{
|
|
_allLDEvents[i].Core();
|
|
if (_allLDEvents[i].isDone)
|
|
{
|
|
_allLDEvents.RemoveAt(i);
|
|
i--;
|
|
}
|
|
}
|
|
for (int j = 0; j < _ldEvtTriggers.Count; j++)
|
|
{
|
|
if (_ldEvtTriggers[j].ldEvent.isDone)
|
|
{
|
|
if (_ldEvtTriggers[j].isCallbackCoroutine)
|
|
{
|
|
MakeAndStartCoroutine(_ldEvtTriggers[j].callback);
|
|
}
|
|
else
|
|
{
|
|
_ldEvtTriggers[j].callback.Call();
|
|
}
|
|
if (_ldEvtTriggers.Count == 0)
|
|
{
|
|
break;
|
|
}
|
|
_ldEvtTriggers[j].ldEvent.Dispose();
|
|
_ldEvtTriggers.RemoveAt(j);
|
|
j--;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void DispatchLevelDesignListenEvent(BaseEvent evt)
|
|
{
|
|
for (int i = 0; i < _allLDEvents.Count; i++)
|
|
{
|
|
_allLDEvents[i].OnEvent(evt);
|
|
}
|
|
Type type = evt.GetType();
|
|
for (int j = 0; j < _evtTriggers.Count; j++)
|
|
{
|
|
if (_evtTriggers[j].evtType == type && !_evtTriggers[j].isCallbackCoroutine)
|
|
{
|
|
_evtTriggers[j].callback.Call(evt);
|
|
}
|
|
}
|
|
}
|
|
|
|
private LuaThread MakeAndStartCoroutine(LuaFunction luaFunc)
|
|
{
|
|
LuaThread luaThread = new LuaThread(_luaState, luaFunc);
|
|
int item = Singleton<ApplicationManager>.Instance.StartCoroutineManual(LuaCoroutineIter(luaThread));
|
|
_luaManualCoroutines.Add(Tuple.Create(luaThread, item));
|
|
return luaThread;
|
|
}
|
|
|
|
public BaseLDEvent CreateLDEventFromTable(LuaTable luaTable)
|
|
{
|
|
object[] array = new object[luaTable.Values.Count];
|
|
luaTable.Values.CopyTo(array, 0);
|
|
List<object> list = new List<object>(array);
|
|
Type type = Type.GetType("MoleMole." + (string)list[0]);
|
|
list.RemoveAt(0);
|
|
BaseLDEvent baseLDEvent = (BaseLDEvent)Activator.CreateInstance(type, list.ToArray());
|
|
_allLDEvents.Add(baseLDEvent);
|
|
return baseLDEvent;
|
|
}
|
|
|
|
private IEnumerator LuaCoroutineIter(LuaThread luaThread)
|
|
{
|
|
luaThread.Start();
|
|
while (true)
|
|
{
|
|
if (state == LDState.Paused)
|
|
{
|
|
yield return null;
|
|
}
|
|
int ret = luaThread.Resume();
|
|
if (ret != 1)
|
|
{
|
|
break;
|
|
}
|
|
LuaTable yieldRet = luaThread.translator.getTable(luaThread.L, -1);
|
|
BaseLDEvent ldEvent = CreateLDEventFromTable(yieldRet);
|
|
while (!ldEvent.isDone)
|
|
{
|
|
yield return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Destroy()
|
|
{
|
|
StopLevelDesign();
|
|
_luaState.Dispose();
|
|
}
|
|
|
|
public void StopLevelDesign()
|
|
{
|
|
if (state != LDState.End)
|
|
{
|
|
state = LDState.End;
|
|
ClearLuaCoroutines();
|
|
ClearAllEventsAndTriggers();
|
|
}
|
|
}
|
|
|
|
private void ClearLuaCoroutines()
|
|
{
|
|
for (int i = 0; i < _luaManualCoroutines.Count; i++)
|
|
{
|
|
Tuple<LuaThread, int> tuple = _luaManualCoroutines[i];
|
|
tuple.Item1.Dispose();
|
|
Singleton<ApplicationManager>.Instance.StopCoroutineManual(tuple.Item2);
|
|
}
|
|
_luaManualCoroutines.Clear();
|
|
}
|
|
|
|
private void ClearAllEventsAndTriggers()
|
|
{
|
|
_ldEvtTriggers.Clear();
|
|
_evtTriggers.Clear();
|
|
for (int i = 0; i < _allLDEvents.Count; i++)
|
|
{
|
|
_allLDEvents[i].Dispose();
|
|
}
|
|
_allLDEvents.Clear();
|
|
}
|
|
|
|
public void LevelDesignStart()
|
|
{
|
|
LevelActor levelActor = (LevelActor)Singleton<EventManager>.Instance.GetActor(562036737u);
|
|
levelActor.levelMode = Singleton<LevelScoreManager>.Instance.levelMode;
|
|
MakeAndStartCoroutine(_ldMain);
|
|
state = LDState.Running;
|
|
}
|
|
|
|
public void SetPause(bool pause)
|
|
{
|
|
state = ((!pause) ? LDState.Running : LDState.Paused);
|
|
}
|
|
|
|
public void LevelDesignEndWithResult(EvtLevelState.LevelEndReason reason = EvtLevelState.LevelEndReason.EndUncertainReason, int endCgId = 0)
|
|
{
|
|
EndLevel(reason, endCgId);
|
|
}
|
|
|
|
private void EndLevel(EvtLevelState.LevelEndReason reason = EvtLevelState.LevelEndReason.EndUncertainReason, int endCgId = 0)
|
|
{
|
|
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
|
|
//IL_005f: Invalid comparison between Unknown and I4
|
|
StopLevelDesign();
|
|
Singleton<EventManager>.Instance.DropEventsAndStop();
|
|
Singleton<LevelManager>.Instance.SetPause(true);
|
|
LevelActorCountDownPlugin plugin = Singleton<LevelManager>.Instance.levelActor.GetPlugin<LevelActorCountDownPlugin>();
|
|
bool flag = reason == EvtLevelState.LevelEndReason.EndWin;
|
|
if (plugin != null)
|
|
{
|
|
flag &= Singleton<AvatarManager>.Instance.GetLocalAvatar().IsActive();
|
|
}
|
|
if (flag)
|
|
{
|
|
AddGalTouchGoodFeel();
|
|
}
|
|
if ((int)Singleton<LevelScoreManager>.Instance.LevelType == 4)
|
|
{
|
|
Singleton<MainUIManager>.Instance.ShowPage(new EndlessFloorEndPageContext(reason));
|
|
}
|
|
else
|
|
{
|
|
bool forceEnableWhenSetup = !Singleton<AvatarManager>.Instance.GetLocalAvatar().IsActive();
|
|
Singleton<MainUIManager>.Instance.ShowPage(new LevelEndPageContext(reason, forceEnableWhenSetup, endCgId));
|
|
}
|
|
Singleton<WwiseAudioManager>.Instance.SetSwitch("Level_Result", (reason != EvtLevelState.LevelEndReason.EndWin) ? "Lose" : "Win");
|
|
Singleton<WwiseAudioManager>.Instance.Post("BGM_PauseMenu_Off");
|
|
Singleton<WwiseAudioManager>.Instance.Post("BGM_Stage_End");
|
|
}
|
|
|
|
private void AddGalTouchGoodFeel()
|
|
{
|
|
List<BaseMonoAvatar> allPlayerAvatars = Singleton<AvatarManager>.Instance.GetAllPlayerAvatars();
|
|
int i = 0;
|
|
for (int count = allPlayerAvatars.Count; i < count; i++)
|
|
{
|
|
AvatarActor actor = Singleton<EventManager>.Instance.GetActor<AvatarActor>(allPlayerAvatars[i].GetRuntimeID());
|
|
if (actor != null)
|
|
{
|
|
int avatarID = actor.avatarDataItem.avatarID;
|
|
int characterHeartLevel = Singleton<GalTouchModule>.Instance.GetCharacterHeartLevel(avatarID);
|
|
int amount = GalTouchData.QueryBattleGain(characterHeartLevel);
|
|
Singleton<GalTouchModule>.Instance.IncreaseBattleGoodFeel(avatarID, amount);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void CleanWhenStageChange()
|
|
{
|
|
ClearAllEventsAndTriggers();
|
|
}
|
|
}
|
|
}
|