/// <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; } }
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])); }
//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); }
/// <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); }
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); }