public void EventStarted(Player player, Actor target, EventStartPacket eventStart) { List <LuaParam> lparams = eventStart.luaParams; lparams.Insert(0, new LuaParam(2, eventStart.triggerName)); if (mSleepingOnPlayerEvent.ContainsKey(player.actorId)) { Coroutine coroutine = mSleepingOnPlayerEvent[player.actorId]; mSleepingOnPlayerEvent.Remove(player.actorId); try { DynValue value = coroutine.Resume(); ResolveResume(null, coroutine, value); } catch (ScriptRuntimeException e) { LuaEngine.SendError(player, String.Format("OnEventStarted: {0}", e.DecoratedMessage)); player.EndEvent(); } } else { if (target is Director) { ((Director)target).OnEventStart(player, LuaUtils.CreateLuaParamObjectList(lparams)); } else { CallLuaFunction(player, target, "onEventStarted", false, LuaUtils.CreateLuaParamObjectList(lparams)); } } }
public static LuaEngine GetInstance() { if (mThisEngine == null) { mThisEngine = new LuaEngine(); } return(mThisEngine); }
public void OnEventUpdate(Player player, List <LuaParam> args) { if (mSleepingOnPlayerEvent.ContainsKey(player.actorId)) { try { Coroutine coroutine = mSleepingOnPlayerEvent[player.actorId]; mSleepingOnPlayerEvent.Remove(player.actorId); DynValue value = coroutine.Resume(LuaUtils.CreateLuaParamObjectList(args)); ResolveResume(player, coroutine, value); } catch (ScriptRuntimeException e) { LuaEngine.SendError(player, String.Format("OnEventUpdated: {0}", e.DecoratedMessage)); player.EndEvent(); } } else { player.EndEvent(); } }
private void CallLuaFunctionNpc(Player player, Npc target, string funcName, bool optional, params object[] args) { object[] args2 = new object[args.Length + (player == null ? 1 : 2)]; Array.Copy(args, 0, args2, (player == null ? 1 : 2), args.Length); if (player != null) { args2[0] = player; args2[1] = target; } else { args2[0] = target; } LuaScript parent = null, child = null; if (File.Exists("./scripts/base/" + target.classPath + ".lua")) { parent = LuaEngine.LoadScript("./scripts/base/" + target.classPath + ".lua"); } Area area = target.zone; if (area is PrivateArea) { if (File.Exists(String.Format("./scripts/unique/{0}/privatearea/{1}_{2}/{3}/{4}.lua", area.zoneName, ((PrivateArea)area).GetPrivateAreaName(), ((PrivateArea)area).GetPrivateAreaType(), target.className, target.GetUniqueId()))) { child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/privatearea/{1}_{2}/{3}/{4}.lua", area.zoneName, ((PrivateArea)area).GetPrivateAreaName(), ((PrivateArea)area).GetPrivateAreaType(), target.className, target.GetUniqueId())); } } else { if (File.Exists(String.Format("./scripts/unique/{0}/{1}/{2}.lua", area.zoneName, target.className, target.GetUniqueId()))) { child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/{1}/{2}.lua", area.zoneName, target.className, target.GetUniqueId())); } } if (parent == null && child == null) { LuaEngine.SendError(player, String.Format("Could not find script for actor {0}.", target.GetName())); return; } //Run Script Coroutine coroutine = null; if (child != null && !child.Globals.Get(funcName).IsNil()) { coroutine = child.CreateCoroutine(child.Globals[funcName]).Coroutine; } else if (parent != null && parent.Globals.Get(funcName) != null && !parent.Globals.Get(funcName).IsNil()) { coroutine = parent.CreateCoroutine(parent.Globals[funcName]).Coroutine; } if (coroutine != null) { try { DynValue value = coroutine.Resume(args2); ResolveResume(player, coroutine, value); } catch (ScriptRuntimeException e) { SendError(player, e.DecoratedMessage); } } }
private List <LuaParam> CallLuaFunctionNpcForReturn(Player player, Npc target, string funcName, bool optional, params object[] args) { object[] args2 = new object[args.Length + (player == null ? 1 : 2)]; Array.Copy(args, 0, args2, (player == null ? 1 : 2), args.Length); if (player != null) { args2[0] = player; args2[1] = target; } else { args2[0] = target; } LuaScript parent = null, child = null; if (File.Exists("./scripts/base/" + target.classPath + ".lua")) { parent = LuaEngine.LoadScript("./scripts/base/" + target.classPath + ".lua"); } Area area = target.zone; if (area is PrivateArea) { if (File.Exists(String.Format("./scripts/unique/{0}/privatearea/{1}_{2}/{3}/{4}.lua", area.zoneName, ((PrivateArea)area).GetPrivateAreaName(), ((PrivateArea)area).GetPrivateAreaType(), target.className, target.GetUniqueId()))) { child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/privatearea/{1}_{2}/{3}/{4}.lua", area.zoneName, ((PrivateArea)area).GetPrivateAreaName(), ((PrivateArea)area).GetPrivateAreaType(), target.className, target.GetUniqueId())); } } else { if (File.Exists(String.Format("./scripts/unique/{0}/{1}/{2}.lua", area.zoneName, target.className, target.GetUniqueId()))) { child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/{1}/{2}.lua", area.zoneName, target.className, target.GetUniqueId())); } } if (parent == null && child == null) { LuaEngine.SendError(player, String.Format("ERROR: Could not find script for actor {0}.", target.GetName())); } //Run Script DynValue result; if (child != null && child.Globals[funcName] != null) { result = child.Call(child.Globals[funcName], args2); } else if (parent != null && parent.Globals[funcName] != null) { result = parent.Call(parent.Globals[funcName], args2); } else { return(null); } List <LuaParam> lparams = LuaUtils.CreateLuaParamList(result); return(lparams); }