Exemple #1
0
        /// <summary>
        /// GetTodoArgs()[Sequence][TODO]{Param1, Qty}
        /// </summary>
        /// <returns></returns>
        public Tuple <ITODO, int> GetTodoArgs(int seq, int todo)
        {
            try
            {
                var p = new LuaGameObject(seq);
                state["player"] = p;

                var func = state.DoString($"return {Dict}:GetTodoArgs(player, {todo})");
                //state[$"{Dict}:GetTodoArgs"] as LuaFunction;
                if (func == null)
                {
                    return(new Tuple <ITODO, int>(null, 0));
                }

                ITODO ret = null;
                if (func[0] != null && func[0] is ITODO)
                {
                    ret = func[0] as ITODO;
                }

                return(new Tuple <ITODO, int>(ret, Convert.ToInt32(func[1])));
            }catch (Exception ex)
            {
                throw ex;
            }
        }
Exemple #2
0
        public int TestId(int seq, int todo)
        {
            var p = new LuaGameObject(seq);

            state["player"] = p;
            var func = state.DoString($"return {Dict}:GetTodoArgs(player, {todo})");

            return(Convert.ToInt32(func[0]));
        }
Exemple #3
0
        //public bool TestUseItem()
        //{
        //    var p = new LuaGameObject(9);
        //    state["player"] = p;
        //    var go = new LuaGameObject(_scriptVars["EVENTRANGE0"]);
        //    state["Target"] = go;
        //    var func = state.DoString($"return {Dict}:IsEventItemUsable(player, Target, {_scriptVars["ITEM1"]})");

        //    return func != null && (bool)func[0];
        //}


        public List <UseItem> GetItemUseable(int seq)
        {
            if (!ItemUseable)
            {
                return(null);
            }
            var p = new LuaGameObject(seq);

            state["player"] = p;

            var items = _scriptVars.Where(i => i.Key.StartsWith("ITEM")).ToList();
            var ret   = new List <UseItem>();

            foreach (var k in _scriptVars)
            {
                if (k.Key.StartsWith("EVENTRANGE") ||
                    k.Key.StartsWith("EOBJECT") ||
                    k.Key.StartsWith("ENEMY")
                    )
                {
                    var go = new LuaGameObject(k.Value);
                    state["gameObject"] = go;
                    foreach (var item in items)
                    {
                        var func = state.DoString($"return {Dict}:IsEventItemUsable(player, gameObject, {item.Value})");
                        if (func == null)
                        {
                            //log.Warn("Failed to do IsEventItemUsable");
                        }
                        if (func[0] is bool && ((bool)func[0]))
                        {
                            var toadd = new UseItem
                            {
                                ObjectId = k.Value,
                                ItemId   = item.Value,
                            };
                            if (go.LastField != null)
                            {
                                toadd.GameObjectState = (byte)go.LastField.Item1;
                            }
                            if (p.LastField != null)
                            {
                                toadd.Field    = (byte)p.LastField.Item1;
                                toadd.FieldPos = (byte)p.LastField.Item2;

                                p.LastField = null;
                            }
                            ret.Add(toadd);
                        }
                    }
                }
            }
            return(ret);
        }
Exemple #4
0
        /// <summary>
        /// get the actions we have to perform on the target
        /// </summary>
        /// <param name="sequence"></param>
        /// <param name="actor"></param>
        /// <returns></returns>
        public List <ActionTarget> IsActionTarget(int seq)
        {
            if (!ActionTarget)
            {
                return(null);
            }

            var p = new LuaGameObject(seq);

            state["player"] = p;

            var ret = new List <ActionTarget>();

            var actors = _scriptVars.Where(i => i.Key.StartsWith("ACTOR")).ToList();

            foreach (var actor in actors)
            {
                var a = new LuaGameObject(actor.Value);
                state["target"] = a;

                var actions = _scriptVars.Where(i => i.Key.StartsWith("ACTION")).ToList();
                foreach (var action in actions)
                {
                    var func = state.DoString($"return {Dict}:IsActionTarget(player, target, {action.Value})");
                    if (func[0] is bool && ((bool)func[0]))
                    {
                        ret.Add(new ActionTarget
                        {
                            SpellId = (uint)action.Value,
                            actor   = (uint)actor.Value
                        });
                    }
                }
            }

            return(ret);
        }
Exemple #5
0
        public List <HandOverItem> GetNpcTradeItemInfo(int sequence, uint actor)
        {
            List <HandOverItem> ret = new List <HandOverItem>();

            try
            {
                state.DoString("tabledata = {}"); //wipe the table

                var func = state.DoString($"return {Dict}:{tradeFunction}(1, {sequence}, {actor})");
                var data = state.DoString($"return tabledata");
                if (data is null || data[0] is null)
                {
                    return(null);
                }


                foreach (LuaTable record in data)
                {
                    foreach (LuaTable row in record.Values)
                    {
                        ret.Add(new HandOverItem
                        {
                            ItemId    = Convert.ToUInt32(row[1]),
                            Count     = Convert.ToUInt32(row[2]),
                            HQ_Only   = Convert.ToBoolean(row[3]),
                            UNK_3     = row[4],
                            UNK_4     = row[5],
                            UNK_5     = row[6],
                            UNK_6     = row[7],
                            UNK_7     = row[8],
                            UNK_8     = row[9],
                            UNK_9     = row[10],
                            UNK_10    = row[11],
                            UNK_11    = row[12],
                            UNK_12    = row[13],
                            UNK_13    = row[14],
                            EventItem = false
                        });
                    }
                }
            }
            catch (LuaScriptException ex)
            {
                if (!ex.Message.Contains($"attempt to call method '{tradeFunction}' (a nil value)"))
                {
                    throw;
                }
            }
            try
            {
                state.DoString("tabledata = {}"); //wipe the table

                var p = new LuaGameObject(sequence);

                state["player"] = p;

                var funcb = state.DoString($"return {Dict}:GetEventItems(player)"); //ItemId, QtyInInventory, HQ?

                if (funcb != null)
                {
                    ret.Add(new HandOverItem
                    {
                        ItemId    = Convert.ToUInt32(funcb[0]),
                        Count     = 1,
                        HQ_Only   = Convert.ToBoolean(funcb[1]),
                        EventItem = true
                    });
                }
            }
            catch (LuaScriptException ex)
            {
                if (!ex.Message.Contains("attempt to call method 'GetEventItems' (a nil value)"))
                {
                    throw;
                }
            }

            return(ret);
        }