Ejemplo n.º 1
0
        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));
                }
            }
        }
Ejemplo n.º 2
0
        public static LuaEngine GetInstance()
        {
            if (mThisEngine == null)
            {
                mThisEngine = new LuaEngine();
            }

            return(mThisEngine);
        }
Ejemplo n.º 3
0
 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();
     }
 }
Ejemplo n.º 4
0
        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);
                }
            }
        }
Ejemplo n.º 5
0
        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);
        }