public static string dumpParams(List <LuaParam> lParams) { if (lParams == null) { return("Param list was null?"); } string dumpString = ""; for (int i = 0; i < lParams.Count; i++) { switch (lParams[i].typeID) { case 0x0: //Int32 dumpString += String.Format("0x{0:X}", (int)lParams[i].value); break; case 0x1: //Int32 dumpString += String.Format("0x{0:X}", (uint)lParams[i].value); break; case 0x2: //Null Termed String dumpString += String.Format("\"{0}\"", (string)lParams[i].value); break; case 0x3: //Boolean True dumpString += "true"; break; case 0x4: //Boolean False dumpString += "false"; break; case 0x5: //NULL??? dumpString += "nil"; break; case 0x6: //Actor (By Id) dumpString += String.Format("0x{0:X}", (uint)lParams[i].value); break; case 0x7: //Weird one used for inventory Type7Param type7Param = ((Type7Param)lParams[i].value); dumpString += String.Format("Type7 Param: (0x{0:X}, 0x{1:X}, 0x{2:X}, 0x{3:X})", type7Param.actorId, type7Param.unknown, type7Param.slot, type7Param.inventoryType); break; case 0xC: //Byte dumpString += String.Format("0x{0:X}", (byte)lParams[i].value); break; case 0x9: //Long (+ 8 bytes ignored) Type9Param type9Param = ((Type9Param)lParams[i].value); dumpString += String.Format("Type9 Param: (0x{0:X}, 0x{1:X})", type9Param.item1, type9Param.item2); break; case 0x1B: //Short? dumpString += String.Format("0x{0:X}", (ushort)lParams[i].value); break; case 0xF: //End break; } if (i != lParams.Count - 1) { dumpString += ", "; } } return(dumpString); }
public static List <LuaParam> readLuaParams(BinaryReader reader) { List <LuaParam> luaParams = new List <LuaParam>(); bool isDone = false; while (true) { byte code = reader.ReadByte(); object value = null; bool wasNil = false; switch (code) { case 0x0: //Int32 value = Utils.swapEndian(reader.ReadInt32()); break; case 0x1: //Int32 value = Utils.swapEndian(reader.ReadUInt32()); break; case 0x2: //Null Termed String List <byte> list = new List <byte>(); while (true) { byte readByte = reader.ReadByte(); if (readByte == 0) { break; } list.Add(readByte); } value = Encoding.ASCII.GetString(list.ToArray()); break; case 0x3: //Boolean True value = true; break; case 0x4: //Boolean False value = false; break; case 0x5: //Nil wasNil = true; break; case 0x6: //Actor (By Id) value = Utils.swapEndian(reader.ReadUInt32()); break; case 0x7: //Weird one used for inventory uint type7ActorId = Utils.swapEndian(reader.ReadUInt32()); byte type7Unknown = reader.ReadByte(); byte type7Slot = reader.ReadByte(); byte type7InventoryType = reader.ReadByte(); value = new Type7Param(type7ActorId, type7Unknown, type7Slot, type7InventoryType); break; case 0x9: //Two Longs (only storing first one) value = new Type9Param(Utils.swapEndian(reader.ReadUInt64()), Utils.swapEndian(reader.ReadUInt64())); break; case 0xC: //Byte value = reader.ReadByte(); break; case 0x1B: //Short? value = reader.ReadUInt16(); break; case 0xF: //End isDone = true; continue; } if (isDone) { break; } if (value != null) { luaParams.Add(new LuaParam(code, value)); } else if (wasNil) { luaParams.Add(new LuaParam(code, value)); } } return(luaParams); }