private static string PopError(IntPtr state) { var p = LuaInterface.ToLString(state, 1, 0); if (p == IntPtr.Zero) { return("Unknown Error"); } LuaInterface.Pop(state, 1); return(Marshal.PtrToStringAnsi(p)); }
private static List <string> ExecuteInternal(string query, bool withResults) { if (withResults) { query = "return " + query; } var state = LuaInterface.LuaState; int top = LuaInterface.GetTop(state); var data = Encoding.ASCII.GetBytes(query); var memory = Marshal.AllocHGlobal(data.Length + 1); try { Marshal.Copy(data, 0, memory, data.Length); Marshal.WriteByte(memory + data.Length, 0); if (LuaInterface.LoadBuffer(state, memory, data.Length, "cleanCore") > 0) { return new List <string> { PopError(state) } } ; if (LuaInterface.PCall(state, 0, withResults ? (int)LuaInterface.LuaConstant.MultRet : 0, 0) > 0) { return new List <string> { PopError(state) } } ; int returnValueCount = LuaInterface.GetTop(state) - top; var ret = new List <string>(returnValueCount); for (int i = 1; i <= returnValueCount; i++) { ret.Add(LuaInterface.StackObjectToString(state, i)); } LuaInterface.Pop(state, returnValueCount); return(ret); } finally { Marshal.FreeHGlobal(memory); } }
private static int HandleVictimCall(IntPtr luaState) { int top = LuaInterface.GetTop(luaState); if (top > 0) { var args = new List <string>(top); for (int i = 1; i <= top; i++) { args.Add(LuaInterface.StackObjectToString(luaState, i)); } LuaInterface.Pop(luaState, top); HandleEvent(args); } else { // legal call return((int)_eventDetour.CallOriginal(luaState)); } return(0); }
public static void Initialize() { var path = Assembly.GetExecutingAssembly().Location; path = path.Substring(0, path.LastIndexOf('\\') + 1); using (var log = new StreamWriter(path + "Offsets.log")) { { var p = Pattern.FromTextstyle("EnumVisibleObjects", "55 8b ec a1 ?? ?? ?? ?? 64 8b 0d ?? ?? ?? ?? 53 56 57 8b 3c 81 8b 87 ?? ?? ?? ?? 05 ?? ?? ?? ?? 8b 40 ?? a8 ??"); EnumVisibleObjects = p.Find(); log.WriteLine("EnumVisibleObjects: 0x" + EnumVisibleObjects.ToString("X")); } { var p = Pattern.FromTextstyle("GetObjectByGuid", "55 8b ec 64 8b 0d ?? ?? ?? ?? a1 ?? ?? ?? ?? 8b 14 81 8b 8a ?? ?? ?? ?? 83 ec ?? 85 c9 74 ?? 8b 45 ?? 8b 55 ?? 56 8b f0"); GetObjectByGuid = p.Find(); log.WriteLine("GetObjectByGuid: 0x" + GetObjectByGuid.ToString("X")); } { var p = Pattern.FromTextstyle("GetLocalPlayerGuid", "64 8b 0d ?? ?? ?? ?? a1 ?? ?? ?? ?? 8b 14 81 8b 8a ?? ?? ?? ?? 85 c9 75 ?? 33 c0 33 d2 c3 8b 81 ?? ?? ?? ?? 8b 91 ?? ?? ?? ?? c3"); GetLocalPlayerGuid = p.Find(); log.WriteLine("GetLocalPlayerGuid: 0x" + GetLocalPlayerGuid.ToString("X")); } { var p = Pattern.FromTextstyle("GetObjectName", "dd 5c 24 ?? d9 45 ?? dd 5c 24 ?? d9 45 ?? dd 1c 24 50 8b 06 8b 90 ?? ?? ?? ?? 51 8b ce ff d2 50 8b 45 ?? 50"); p.Modifiers.Add(new AddModifier(22)); p.Modifiers.Add(new LeaModifier()); GetObjectName = p.Find(); log.WriteLine("GetObjectName: 0x" + GetObjectName.ToString("X")); } { var p = Pattern.FromTextstyle("IsLoading", "52 8d 85 ?? ?? ?? ?? 50 e8 ?? ?? ?? ?? 83 c4 ?? 85 c0 8d 4d ?? a3 ?? ?? ?? ?? 0f 95 c3"); p.Modifiers.Add(new AddModifier(22)); p.Modifiers.Add(new LeaModifier()); IsLoading = p.Find(); log.WriteLine("IsLoading: 0x" + IsLoading.ToString("X")); } { var p = Pattern.FromTextstyle("GetObjectLocation", "85 c0 0f 84 ?? ?? ?? ?? 8b 06 8b 50 ?? 8d 4d ?? 51 8b ce ff d2 d9 45 ?? 8b 46 ??"); p.Modifiers.Add(new AddModifier(12)); p.Modifiers.Add(new LeaModifier(LeaType.Byte)); GetObjectLocation = p.Find(); log.WriteLine("GetObjectLocation: 0x" + GetObjectLocation.ToString("X")); } { var p = Pattern.FromTextstyle("LuaState", "8b 35 ?? ?? ?? ?? 57 8b f9 8b 47 ?? 85 c0 7e ?? 83 c0 ?? 89 47 ?? 75 ?? 8b 47 ?? 50 68 ?? ?? ?? ?? 56 e8 ?? ?? ?? ?? d9 ee 83 c4"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); LuaState = p.Find(); log.WriteLine("LuaState: 0x" + LuaState.ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_GetTop", "55 8b ec 8b 4d ?? 8b 41 ?? 2b 41 ?? c1 f8 ?? 5d c3"); LuaGetTop = p.Find(); log.WriteLine("LuaGetTop: 0x" + LuaGetTop.ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_LoadBuffer", "55 8b ec 8b 4d ?? 8b 45 ?? 83 ec ?? 83 f9 ?? 72 ?? 80 38 ?? 75 ?? 80 78 ?? ?? 75 ?? 80 78 ?? ?? 75 ?? 83 c0 ?? 83 e9"); LuaLoadBuffer = p.Find(); log.WriteLine("LuaLoadBuffer: 0x" + LuaLoadBuffer.ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_PCall", "55 8b ec 8b 45 ?? 83 ec ?? 56 8b 75 ?? 85 c0 75 ?? 33 c9 eb ?? 8b ce e8 ?? ?? ?? ?? 2b 46 ?? 8b c8 8b 45 ?? 40 c1 e0"); LuaPCall = p.Find(); log.WriteLine("LuaPCall: 0x" + LuaPCall.ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_Type", "55 8b ec 8b 45 ?? 8b 4d ?? e8 ?? ?? ?? ?? 3d ?? ?? ?? ?? 75 ?? 83 c8 ?? 5d c3 8b 40 ?? 5d c3"); LuaType = p.Find(); log.WriteLine("LuaType: 0x" + LuaType.ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_ToNumber", "55 8b ec 8b 45 ?? 8b 4d ?? 83 ec ?? e8 ?? ?? ?? ?? 83 78 ?? ?? 74 ?? 8d 4d ?? 51 50 e8 ?? ?? ?? ?? 83 c4 ?? 85 c0 75 ?? d9 ee 8b e5 5d c3 dd 00 8b e5 5d c3"); LuaToNumber = p.Find(); log.WriteLine("LuaToNumber: 0x" + LuaToNumber.ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_ToLString", "55 8b ec 56 8b 75 ?? 57 8b 7d ?? 8b c7 8b ce e8 ?? ?? ?? ?? 83 78 ?? ?? 74 ?? 50 56 e8 ?? ?? ?? ?? 83 c4 ?? 85 c0 75 ?? 8b 45 ?? 85 c0 74 ?? c7 00 ?? ?? ?? ?? 5f 33 c0 5e 5d c3"); LuaToLString = p.Find(); log.WriteLine("LuaToLString: 0x" + LuaToLString.ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_ToBoolean", "55 8b ec 8b 45 ?? 8b 4d ?? e8 ?? ?? ?? ?? 8b 48 ?? 85 c9 74 ?? 83 f9 ?? 75 ?? 83 38 ?? 74 ?? b8 ?? ?? ?? ?? 5d c3"); LuaToBoolean = p.Find(); log.WriteLine("LuaToBoolean: 0x" + LuaToBoolean.ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript__SetTop", "55 8b ec 8b 4d ?? 8b 45 ?? 85 c9 7c ?? c1 e1 ?? 8b d1 8b 48 ?? 03 ca 39 48 ?? 73 ?? 57 8d 49 ?? 8b 48 ?? 8d 79 ?? 89 78 ?? 8b 3d ?? ?? ?? ?? 89 79 ?? c7 41"); LuaSetTop = p.Find(); log.WriteLine("LuaSetTop: 0x" + LuaSetTop.ToString("X")); } { var p = Pattern.FromTextstyle("PartyArray", "55 8b ec 51 8b 0d ?? ?? ?? ?? 33 c0 0b 0d ?? ?? ?? ?? 74 ?? b8 ?? ?? ?? ?? 8b 15 ?? ?? ?? ?? 0b 15 ?? ?? ?? ?? 74 ?? 40 8b 0d ?? ?? ?? ?? 0b 0d ?? ?? ?? ?? 74 ?? 40"); p.Modifiers.Add(new AddModifier(6)); p.Modifiers.Add(new LeaModifier()); PartyArray = p.Find(); log.WriteLine("PartyArray: 0x" + PartyArray.ToString("X")); } { var p = Pattern.FromTextstyle("lua_GetBillingTimeRested", "55 8b ec 51 e8 ?? ?? ?? ?? 8b 80 ?? ?? ?? ?? 89 45 ?? db 45 ?? 85 c0 7d ?? dc 05 ?? ?? ?? ??"); EventVictim = p.Find(); log.WriteLine("EventVictim: 0x" + EventVictim.ToString("X")); } { var p = Pattern.FromTextstyle("CorpsePosition", "8b 75 ?? 89 35 ?? ?? ?? ?? 8b 08 89 0d ?? ?? ?? ?? 8b 50 ?? 8b 4d ?? 89 15 ?? ?? ?? ?? 8b 40 ?? a3 ?? ?? ?? ?? 8b 45 ?? 89 0d ?? ?? ?? ?? 33 c9 3b c1 74 ?? 99 81 ca"); p.Modifiers.Add(new AddModifier(13)); p.Modifiers.Add(new LeaModifier()); CorpsePosition = p.Find(); log.WriteLine("CorpsePosition: 0x" + CorpsePosition.ToString("X")); } { var p = Pattern.FromTextstyle("CGPlayer_C__ClickToMove", "55 8b ec 83 ec ?? 53 56 8b f1 8b 46 ?? 8b 08 57 3b 0d ?? ?? ?? ?? 75 ?? 8b 50 ?? 3b 15 ?? ?? ?? ?? 75 ?? a1 ?? ?? ?? ?? 83 f8 ?? 74 ?? 33 ff 83 f8 ?? 75 ?? 57 68"); ClickToMove = p.Find(); log.WriteLine("ClickToMove: 0x" + ClickToMove.ToString("X")); } { var p = Pattern.FromTextstyle("PerformanceCounter", "8d 8d ?? ?? ?? ?? 51 68 ?? ?? ?? ?? ff 15 ?? ?? ?? ?? 85 c0 0f 84 ?? ?? ?? ?? e8 ?? ?? ?? ?? 50 8d 95 ?? ?? ?? ?? 52 68 ?? ?? ?? ?? 8d 95 ?? ?? ?? ?? e8 ?? ?? ?? ?? 8d 85 ?? ?? ?? ?? 68 ?? ?? ?? ?? 50 e8 ?? ?? ?? ?? 83 c4"); p.Modifiers.Add(new AddModifier(27)); uint relStart = p.Find() - 1; p.Modifiers.Add(new LeaModifier()); uint offset = p.Find(); PerformanceCounter = offset + relStart + 5; log.WriteLine("PerformanceCounter: 0x" + PerformanceCounter.ToString("X")); } { var p = Pattern.FromTextstyle("LastHardwareAction", "8b 1d ?? ?? ?? ?? 57 8d be ?? ?? ?? ?? 7e ?? 8b 86 ?? ?? ?? ?? 8b 80 ?? ?? ?? ?? 85 c0 74 ?? f7 40 ?? ?? ?? ?? ?? 74 ?? 8b ce e8 ?? ?? ?? ?? 85 c0 75 ??"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); LastHardwareAction = p.Find(); log.WriteLine("LastHardwareAction: 0x" + LastHardwareAction.ToString("X")); } { var p = Pattern.FromTextstyle("SelectObject", "55 8b ec 81 ec ?? ?? ?? ?? e8 ?? ?? ?? ?? 85 c0 74 ?? 80 3d ?? ?? ?? ?? ?? 75 ?? 33 c0"); SelectObject = p.Find(); log.WriteLine("SelectObject: 0x" + SelectObject.ToString("X")); } { var p = Pattern.FromTextstyle("SetFacing", "55 8b ec 56 8b f1 56 e8 ?? ?? ?? ?? 8b c8 e8 ?? ?? ?? ?? 85 c0 74 ?? d9 45 ?? 83 0d ?? ?? ?? ?? ?? 51 8b 8e ?? ?? ?? ?? d9 1c 24 e8 ?? ?? ?? ?? 8b 45 ?? 51 d9 1c 24 50 8b ce e8 ?? ?? ?? ?? 83 25"); SetFacing = p.Find(); log.WriteLine("SetFacing: 0x" + SetFacing.ToString("X")); } { var p = Pattern.FromTextstyle("lua_GetInstanceInfo", "8b 1d ?? ?? ?? ?? 3b d8 56 0f 8c ?? ?? ?? ?? 3b 1d ?? ?? ?? ?? 0f 8f ?? ?? ?? ?? 8b 15 ?? ?? ?? ?? 8b cb 2b c8 8b 34 8a"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); CurrentMapId = p.Find(); log.WriteLine("CurrentMapId: 0x" + CurrentMapId.ToString("X")); } { var p = Pattern.FromTextstyle("GetNumAuctionItems", "8b 0d ?? ?? ?? ?? db 05 ?? ?? ?? ?? 85 c9 7d ?? dc 05 ?? ?? ?? ?? 83 ec ?? dd 1c 24 56 e8"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); AuctionHouse.ListCount = p.Find(); AuctionHouse.ListBase = AuctionHouse.ListCount + 4; AuctionHouse.OwnerCount = AuctionHouse.ListBase + 12; AuctionHouse.OwnerBase = AuctionHouse.OwnerCount + 4; AuctionHouse.BidderCount = AuctionHouse.OwnerBase + 12; AuctionHouse.BidderBase = AuctionHouse.BidderCount + 4; log.WriteLine("AuctionHouse:"); log.WriteLine("\tListCount: 0x" + AuctionHouse.ListCount.ToString("X")); log.WriteLine("\tListBase: 0x" + AuctionHouse.ListBase.ToString("X")); log.WriteLine("\tOwnerCount: 0x" + AuctionHouse.OwnerBase.ToString("X")); log.WriteLine("\tOwnerBase: 0x" + AuctionHouse.OwnerCount.ToString("X")); log.WriteLine("\tBidderCount: 0x" + AuctionHouse.BidderBase.ToString("X")); log.WriteLine("\tBidderBase: 0x" + AuctionHouse.BidderCount.ToString("X")); } { var p = Pattern.FromTextstyle("AuctionSize", "69 f6 ?? ?? ?? ?? 03 35 ?? ?? ?? ?? eb ?? 68 ?? ?? ?? ?? 57 e8 ?? ?? ?? ?? 83 c4"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); AuctionHouse.AuctionSize = p.Find(); log.WriteLine("\tAuctionSize: 0x" + AuctionHouse.AuctionSize.ToString("X")); } { var p = Pattern.FromTextstyle("ExpireOffset", "8b 8e ?? ?? ?? ?? 8b f8 2b c1 78 ?? d9 e8 83 ec"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); AuctionHouse.ExpireOffset = p.Find(); log.WriteLine("\tExpireOffset: 0x" + AuctionHouse.ExpireOffset.ToString("X")); } { var p = Pattern.FromTextstyle("OpcodeStop", "05 ?? ?? ?? ?? 5b 5d c2 ?? ?? b8"); p.Modifiers.Add(new AddModifier(11)); p.Modifiers.Add(new LeaModifier()); Teleport.OpcodeStop = p.Find(); log.WriteLine("Teleport:"); log.WriteLine("\tOpcodeStop: 0x" + Teleport.OpcodeStop.ToString("X")); } { var p = Pattern.FromTextstyle("OpcodeStart", "33 5d ?? f6 c3 ?? 74 ?? f6 c2 ?? 74 ?? b8"); p.Modifiers.Add(new AddModifier(14)); p.Modifiers.Add(new LeaModifier()); Teleport.OpcodeStart = p.Find(); log.WriteLine("\tOpcodeStart: 0x" + Teleport.OpcodeStart.ToString("X")); } { var p = Pattern.FromTextstyle("CGUnit_C__WriteMovementPacketWithTransport", "55 8b ec 83 ec ?? 53 56 8b f1 8b 06 8b 50 ?? 57 33 ff c7 45 ?? ?? ?? ?? ?? 89 7d"); Teleport.SendMovementPacket = p.Find(); log.WriteLine("\tSendMovementPacket: 0x" + Teleport.SendMovementPacket.ToString("X")); } { var p = Pattern.FromTextstyle("CGUnit_C__Send_CMSG_MOVE_SPLINE_DONE", "55 8b ec 83 ec ?? d9 ee 53 56 57 8b 7d ?? 33 db"); Teleport.SendMoveSplineDone = p.Find(); log.WriteLine("\tSendMoveSplineDone: 0x" + Teleport.SendMoveSplineDone.ToString("X")); } { var p = Pattern.FromTextstyle("UnitMovementInfo", "8b 89 ?? ?? ?? ?? 8b 51 ?? 8b 45 ?? 89 10 8b 51 ?? 8b 49"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); Teleport.UnitMovementData = p.Find(); log.WriteLine("\tUnitMovementData: 0x" + Teleport.UnitMovementData.ToString("X")); } { var p = Pattern.FromTextstyle("MovementDataPosition", "8b 51 ?? 8b 45 ?? 89 10 8b 51 ?? 8b 49 ?? 89 50 ?? 89 48 ?? 5d"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier(LeaType.Byte)); Teleport.MovementDataPosition = p.Find(); log.WriteLine("\tMovementDataPosition: 0x" + Teleport.MovementDataPosition.ToString("X")); } { var p = Pattern.FromTextstyle("MovementHeartbeat", "8d 8f ?? ?? ?? ?? a8 ?? 75 ?? 85 c0 75 ?? 8b c1"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); Teleport.GlobalMovementHeartbeat = p.Find(); log.WriteLine("\tGlobalMovementHeartbeat: 0x" + Teleport.GlobalMovementHeartbeat.ToString("X")); } { var p = Pattern.FromTextstyle("GlobalMovement", "64 8b 0d ?? ?? ?? ?? 8b 14 81 8b 82 ?? ?? ?? ?? 85 c0 74 ?? 8b 4d ?? 89 88 ?? ?? ?? ??"); p.Modifiers.Add(new AddModifier(25)); p.Modifiers.Add(new LeaModifier()); Teleport.CurMgrGlobalMovement = p.Find(); log.WriteLine("\tCurMgrGlobalMovement: 0x" + Teleport.CurMgrGlobalMovement.ToString("X")); } { var p = Pattern.FromTextstyle("Singleton2", "8b 15 ?? ?? ?? ?? 89 82 ?? ?? ?? ?? 89 81 ?? ?? ?? ?? 8b 0d ?? ?? ?? ?? 89 88 ?? ?? ?? ?? c7 81 ?? ?? ?? ?? ?? ?? ?? ?? c7 81 ?? ?? ?? ?? ?? ?? ?? ?? 8b 88"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); Teleport.Singleton = p.Find(); p.Modifiers.Clear(); p.Modifiers.Add(new AddModifier(8)); p.Modifiers.Add(new LeaModifier()); Teleport.CurMgrOffset = p.Find(); log.WriteLine("\tSingleton: 0x" + Teleport.Singleton.ToString("X")); log.WriteLine("\tCurMgrOffset: 0x" + Teleport.CurMgrOffset.ToString("X")); } { var p = Pattern.FromTextstyle("CGPlayer_C__IsClickMoving", "8b 41 ?? 8b 08 3b 0d ?? ?? ?? ?? 75 ?? 8b 50 ?? 3b 15 ?? ?? ?? ?? 75 ?? 83 3d ?? ?? ?? ?? ?? 74 ?? b8"); IsClickMoving = p.Find(); log.WriteLine("IsClickMoving: 0x" + IsClickMoving.ToString("X")); } { var p = Pattern.FromTextstyle("CGUnit_C__HasAuraBySpellId", "55 8b ec 53 56 57 8b f1 33 ff e8 ?? ?? ?? ?? 85 c0 76 ?? 8b 5d ?? 33 d2"); HasAuraBySpellId = p.Find(); log.WriteLine("HasAuraBySpellId: 0x" + HasAuraBySpellId.ToString("X")); } { var p = Pattern.FromTextstyle("Spell_C_CastSpell", "55 8b ec e8 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6a ?? 52 50 e8 ?? ?? ?? ?? 8b 4d ?? 8b 55"); CastSpell = p.Find(); log.WriteLine("CastSpell: 0x" + CastSpell.ToString("X")); } { var p = Pattern.FromTextstyle("Interact", "8b 82 ?? ?? ?? ?? 8b ce ff d0 5f 5e b8 ?? ?? ?? ?? 5b 5d c3"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); Interact = p.Find(); log.WriteLine("Interact: 0x" + Interact.ToString("X")); } { var p = Pattern.FromTextstyle("UseItem", "55 8b ec 83 ec ?? 57 8b f9 8b 47 ?? 0f bf 48 ?? c1 e9 ?? f6 c1 ?? 0f 85 ?? ?? ?? ?? f6 87 ?? ?? ?? ?? ?? 0f 85"); UseItem = p.Find(); log.WriteLine("UseItem: 0x" + UseItem.ToString("X")); } { var p = Pattern.FromTextstyle("CGPlayer_C__AutoEquipItem", "8b 42 ?? 8b ce ff d0 85 c0 74 ?? 8b 16 8b 42 ?? 53 8b ce ff d0"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier(LeaType.Byte)); GetBag = p.Find(); log.WriteLine("GetBag: 0x" + GetBag.ToString("X")); } { var p = Pattern.FromTextstyle("CGPlayer_C__ClickToMoveStop", "a1 ?? ?? ?? ?? 83 c0 ?? 56 8b f1 83 f8 ?? 0f 87 ?? ?? ?? ?? ff 24 85 ?? ?? ?? ?? 8b 0d"); StopCTM = p.Find(); log.WriteLine("StopCTM: 0x" + StopCTM.ToString("X")); } { var p = Pattern.FromTextstyle("TracelineWrapper", "55 8b ec a1 ?? ?? ?? ?? 8b 0c 85 ?? ?? ?? ?? 85 c9 75 ?? 32 c0 5d c3 8b 55 ?? 8b 45 ?? 52 8b 55 ?? 50 8b 45 ?? 52"); Traceline = p.Find(); log.WriteLine("Traceline: 0x" + Traceline.ToString("X")); } { var p = Pattern.FromTextstyle("CGUnit_C__UnitReaction", "55 8b ec 83 ec 14 53 57 8b 7d 08 8b d9 85 ff 75 ?? 8d 47 01 5f 5b 8b e5 5d c2 04 00 3b fb 75 ??"); UnitReaction = p.Find(); log.WriteLine("UnitReaction: 0x" + UnitReaction.ToString("X")); } WoWLocalPlayer.Initialize(); LuaInterface.Initialize(); Manager.Initialize(); Helper.Initialize(); Pulse.Initialize(); Events.Initialize(); Teleporter.Initialize(); WoWWorld.Initialize(); log.Flush(); } if (OnOffsetsLoaded != null) { OnOffsetsLoaded(null, new EventArgs()); } }
public static void Initialize() { var path = Assembly.GetExecutingAssembly().Location; path = path.Substring(0, path.LastIndexOf('\\') + 1); var baseaddr = (uint)System.Diagnostics.Process.GetCurrentProcess().MainModule.BaseAddress; using (var log = new StreamWriter(path + "Offsets.log") { AutoFlush = true }) { { var p = Pattern.FromTextstyle("EnumVisibleObjects", "55 8b ec a1 ?? ?? ?? ?? 64 8b 0d ?? ?? ?? ?? 53 56 57 8b 3c 81 8b 87 ?? ?? ?? ?? 05 ?? ?? ?? ?? 8b 40 ?? a8 ??"); EnumVisibleObjects = p.Find(); log.WriteLine("EnumVisibleObjects: 0x" + (EnumVisibleObjects - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("GetObjectByGuid", "55 8b ec 64 8b 0d ?? ?? ?? ?? a1 ?? ?? ?? ?? 8b 14 81 8b 8a ?? ?? ?? ?? 83 ec ?? 85 c9 74 ?? 8b 45 ?? 8b 55 ?? 56 8b f0"); GetObjectByGuid = p.Find(); log.WriteLine("GetObjectByGuid: 0x" + (GetObjectByGuid - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("GetLocalPlayerGuid", "64 8b 0d ?? ?? ?? ?? a1 ?? ?? ?? ?? 8b 14 81 8b 8a ?? ?? ?? ?? 85 c9 75 ?? 33 c0 33 d2 c3 8b 81 ?? ?? ?? ?? 8b 91 ?? ?? ?? ?? c3"); GetLocalPlayerGuid = p.Find(); log.WriteLine("GetLocalPlayerGuid: 0x" + (GetLocalPlayerGuid - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("GetObjectName", "dd 5c 24 ?? d9 45 ?? dd 5c 24 ?? d9 45 ?? dd 1c 24 50 8b 06 8b 90 ?? ?? ?? ?? 51 8b ce ff d2 50 8b 45 ?? 50"); p.Modifiers.Add(new AddModifier(22)); p.Modifiers.Add(new LeaModifier()); GetObjectName = p.Find(); log.WriteLine("GetObjectName: 0x" + GetObjectName.ToString("X")); } { var p = Pattern.FromTextstyle("IsLoading", "52 8d 85 ?? ?? ?? ?? 50 e8 ?? ?? ?? ?? 83 c4 ?? 85 c0 8d 4d ?? a3 ?? ?? ?? ?? 0f 95 c3"); p.Modifiers.Add(new AddModifier(22)); p.Modifiers.Add(new LeaModifier()); IsLoading = p.Find(); log.WriteLine("IsLoading: 0x" + (IsLoading - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("GetObjectLocation", "85 c0 0f 84 ?? ?? ?? ?? 8b 06 8b 50 ?? 8d 4d ?? 51 8b ce ff d2 d9 45 ?? 8b 46 ??"); p.Modifiers.Add(new AddModifier(12)); p.Modifiers.Add(new LeaModifier(LeaType.Byte)); GetObjectLocation = p.Find(); log.WriteLine("GetObjectLocation: 0x" + GetObjectLocation.ToString("X")); } { var p = Pattern.FromTextstyle("LuaState", "8b 35 ?? ?? ?? ?? 57 8b f9 8b 47 ?? 85 c0 7e ?? 83 c0 ?? 89 47 ?? 75 ?? 8b 47 ?? 50 68 ?? ?? ?? ?? 56 e8 ?? ?? ?? ?? d9 ee 83 c4"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); LuaState = p.Find(); log.WriteLine("LuaState: 0x" + (LuaState - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_GetTop", "55 8b ec 8b 4d ?? 8b 41 ?? 2b 41 ?? c1 f8 ?? 5d c3"); LuaGetTop = p.Find(); log.WriteLine("LuaGetTop: 0x" + (LuaGetTop - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_LoadBuffer", "55 8b ec 8b 4d ?? 8b 45 ?? 83 ec ?? 83 f9 ?? 72 ?? 80 38 ?? 75 ?? 80 78 ?? ?? 75 ?? 80 78 ?? ?? 75 ?? 83 c0 ?? 83 e9"); LuaLoadBuffer = p.Find(); log.WriteLine("LuaLoadBuffer: 0x" + (LuaLoadBuffer - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_PCall", "55 8b ec 8b 45 ?? 83 ec ?? 56 8b 75 ?? 85 c0 75 ?? 33 c9 eb ?? 8b ce e8 ?? ?? ?? ?? 2b 46 ?? 8b c8 8b 45 ?? 40 c1 e0"); LuaPCall = p.Find(); log.WriteLine("LuaPCall: 0x" + (LuaPCall - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_Type", "55 8b ec 8b 45 ?? 8b 4d ?? e8 ?? ?? ?? ?? 3d ?? ?? ?? ?? 75 ?? 83 c8 ?? 5d c3 8b 40 ?? 5d c3"); LuaType = p.Find(); log.WriteLine("LuaType: 0x" + (LuaType - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_ToNumber", "55 8b ec 8b 45 ?? 8b 4d ?? 83 ec ?? e8 ?? ?? ?? ?? 83 78 ?? ?? 74 ?? 8d 4d ?? 51 50 e8 ?? ?? ?? ?? 83 c4 ?? 85 c0 75 ?? d9 ee 8b e5 5d c3 dd 00 8b e5 5d c3"); LuaToNumber = p.Find(); log.WriteLine("LuaToNumber: 0x" + (LuaToNumber - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_ToLString", "55 8b ec 56 8b 75 ?? 57 8b 7d ?? 8b c7 8b ce e8 ?? ?? ?? ?? 83 78 ?? ?? 74 ?? 50 56 e8 ?? ?? ?? ?? 83 c4 ?? 85 c0 75 ?? 8b 45 ?? 85 c0 74 ?? c7 00 ?? ?? ?? ?? 5f 33 c0 5e 5d c3"); LuaToLString = p.Find(); log.WriteLine("LuaToLString: 0x" + (LuaToLString - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript_ToBoolean", "55 8b ec 8b 45 ?? 8b 4d ?? e8 ?? ?? ?? ?? 8b 48 ?? 85 c9 74 ?? 83 f9 ?? 75 ?? 83 38 ?? 74 ?? b8 ?? ?? ?? ?? 5d c3"); LuaToBoolean = p.Find(); log.WriteLine("LuaToBoolean: 0x" + (LuaToBoolean - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("FrameScript__SetTop", "55 8b ec 8b 4d ?? 8b 45 ?? 85 c9 7c ?? c1 e1 ?? 8b d1 8b 48 ?? 03 ca 39 48 ?? 73 ?? 57 8d 49 ?? 8b 48 ?? 8d 79 ?? 89 78 ?? 8b 3d ?? ?? ?? ?? 89 79 ?? c7 41"); LuaSetTop = p.Find(); log.WriteLine("LuaSetTop: 0x" + (LuaSetTop - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("PartyArray", "55 8b ec 51 8b 0d ?? ?? ?? ?? 33 c0 0b 0d ?? ?? ?? ?? 74 ?? b8 ?? ?? ?? ?? 8b 15 ?? ?? ?? ?? 0b 15 ?? ?? ?? ?? 74 ?? 40 8b 0d ?? ?? ?? ?? 0b 0d ?? ?? ?? ?? 74 ?? 40"); p.Modifiers.Add(new AddModifier(6)); p.Modifiers.Add(new LeaModifier()); PartyArray = p.Find(); log.WriteLine("PartyArray: 0x" + (PartyArray - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("lua_GetBillingTimeRested", "55 8b ec 51 e8 ?? ?? ?? ?? 8b 80 ?? ?? ?? ?? 89 45 ?? db 45 ?? 85 c0 7d ?? dc 05 ?? ?? ?? ??"); EventVictim = p.Find(); log.WriteLine("EventVictim: 0x" + (EventVictim - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("CorpsePosition", "8b 75 ?? 89 35 ?? ?? ?? ?? 8b 08 89 0d ?? ?? ?? ?? 8b 50 ?? 8b 4d ?? 89 15 ?? ?? ?? ?? 8b 40 ?? a3 ?? ?? ?? ?? 8b 45 ?? 89 0d ?? ?? ?? ?? 33 c9 3b c1 74 ?? 99 81 ca"); p.Modifiers.Add(new AddModifier(13)); p.Modifiers.Add(new LeaModifier()); CorpsePosition = p.Find(); log.WriteLine("CorpsePosition: 0x" + (CorpsePosition - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("CGPlayer_C__ClickToMove", "55 8b ec 83 ec ?? 53 56 8b f1 8b 46 ?? 8b 08 57 3b 0d ?? ?? ?? ?? 75 ?? 8b 50 ?? 3b 15 ?? ?? ?? ?? 75 ?? a1 ?? ?? ?? ?? 83 f8 ?? 74 ?? 33 ff 83 f8 ?? 75 ?? 57 68"); ClickToMove = p.Find(); log.WriteLine("ClickToMove: 0x" + (ClickToMove - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("PerformanceCounter", "8d 8d ?? ?? ?? ?? 51 68 ?? ?? ?? ?? ff 15 ?? ?? ?? ?? 85 c0 0f 84 ?? ?? ?? ?? e8 ?? ?? ?? ?? 50 8d 95 ?? ?? ?? ?? 52 68 ?? ?? ?? ?? 8d 95 ?? ?? ?? ?? e8 ?? ?? ?? ?? 8d 85 ?? ?? ?? ?? 68 ?? ?? ?? ?? 50 e8 ?? ?? ?? ?? 83 c4"); p.Modifiers.Add(new AddModifier(27)); uint relStart = p.Find() - 1; p.Modifiers.Add(new LeaModifier()); uint offset = p.Find(); PerformanceCounter = offset + relStart + 5; log.WriteLine("PerformanceCounter: 0x" + (PerformanceCounter - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("LastHardwareAction", "6a ?? e8 ?? ?? ?? ?? 83 c4 ?? 85 c0 74 ?? 56 8b 35 ?? ?? ?? ?? 56 6a ?? 8b cf"); p.Modifiers.Add(new AddModifier(17)); p.Modifiers.Add(new LeaModifier()); LastHardwareAction = p.Find(); log.WriteLine("LastHardwareAction: 0x" + (LastHardwareAction - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("SelectObject", "55 8b ec 81 ec ?? ?? ?? ?? e8 ?? ?? ?? ?? 85 c0 74 ?? 80 3d ?? ?? ?? ?? ?? 75 ?? 33 c0"); SelectObject = p.Find(); log.WriteLine("SelectObject: 0x" + (SelectObject - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("SetFacing", "55 8b ec 56 8b f1 56 e8 ?? ?? ?? ?? 8b c8 e8 ?? ?? ?? ?? 85 c0 74 ?? d9 45 ?? 83 0d ?? ?? ?? ?? ?? 51 8b 8e ?? ?? ?? ?? d9 1c 24 e8 ?? ?? ?? ?? 8b 45 ?? 51 d9 1c 24 50 8b ce e8 ?? ?? ?? ?? 83 25"); SetFacing = p.Find(); log.WriteLine("SetFacing: 0x" + (SetFacing - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("lua_GetInstanceInfo", "8b 1d ?? ?? ?? ?? 3b d8 56 0f 8c ?? ?? ?? ?? 3b 1d ?? ?? ?? ?? 0f 8f ?? ?? ?? ?? 8b 15 ?? ?? ?? ?? 8b cb 2b c8 8b 34 8a"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); CurrentMapId = p.Find(); log.WriteLine("CurrentMapId: 0x" + (CurrentMapId - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("GetNumAuctionItems", "8b 0d ?? ?? ?? ?? db 05 ?? ?? ?? ?? 85 c9 7d ?? dc 05 ?? ?? ?? ?? 83 ec ?? dd 1c 24 56 e8"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); AuctionHouse.ListCount = p.Find(); AuctionHouse.ListBase = AuctionHouse.ListCount + 4; AuctionHouse.OwnerCount = AuctionHouse.ListBase + 12; AuctionHouse.OwnerBase = AuctionHouse.OwnerCount + 4; AuctionHouse.BidderCount = AuctionHouse.OwnerBase + 12; AuctionHouse.BidderBase = AuctionHouse.BidderCount + 4; log.WriteLine("AuctionHouse:"); log.WriteLine("\tListCount: 0x" + AuctionHouse.ListCount.ToString("X")); log.WriteLine("\tListBase: 0x" + AuctionHouse.ListBase.ToString("X")); log.WriteLine("\tOwnerCount: 0x" + AuctionHouse.OwnerBase.ToString("X")); log.WriteLine("\tOwnerBase: 0x" + AuctionHouse.OwnerCount.ToString("X")); log.WriteLine("\tBidderCount: 0x" + AuctionHouse.BidderBase.ToString("X")); log.WriteLine("\tBidderBase: 0x" + AuctionHouse.BidderCount.ToString("X")); } { var p = Pattern.FromTextstyle("AuctionSize", "69 f6 ?? ?? ?? ?? 03 35 ?? ?? ?? ?? eb ?? 68 ?? ?? ?? ?? 57 e8 ?? ?? ?? ?? 83 c4"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); AuctionHouse.AuctionSize = p.Find(); log.WriteLine("\tAuctionSize: 0x" + AuctionHouse.AuctionSize.ToString("X")); } { var p = Pattern.FromTextstyle("ExpireOffset", "8b 8e ?? ?? ?? ?? 8b f8 2b c1 78 ?? d9 e8 83 ec"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); AuctionHouse.ExpireOffset = p.Find(); log.WriteLine("\tExpireOffset: 0x" + AuctionHouse.ExpireOffset.ToString("X")); } { var p = Pattern.FromTextstyle("CGPlayer_C__IsClickMoving", "8b 41 ?? 8b 08 3b 0d ?? ?? ?? ?? 75 ?? 8b 50 ?? 3b 15 ?? ?? ?? ?? 75 ?? 83 3d ?? ?? ?? ?? ?? 74 ?? b8"); IsClickMoving = p.Find(); log.WriteLine("IsClickMoving: 0x" + (IsClickMoving - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("CGUnit_C__HasAuraBySpellId", "55 8b ec 53 56 57 8b f1 33 ff e8 ?? ?? ?? ?? 85 c0 76 ?? 8b 5d ?? 33 d2"); HasAuraBySpellId = p.Find(); log.WriteLine("HasAuraBySpellId: 0x" + (HasAuraBySpellId - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("Spell_C_CastSpell", "55 8b ec e8 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6a ?? 52 50 e8 ?? ?? ?? ?? 8b 4d ?? 8b 55"); CastSpell = p.Find(); log.WriteLine("CastSpell: 0x" + (CastSpell - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("Spell_C_GetSpellCooldown", "55 8b ec 8b 45 ?? 8b 4d ?? 8b 55 ?? 50 8b 45 ?? 51 8b 4d ?? 52 50 8b 45 ?? 6a ??"); GetSpellCooldown = p.Find(); log.WriteLine("GetSpellCooldown: 0x" + (GetSpellCooldown - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("Interact", "8b 82 ?? ?? ?? ?? 8b ce ff d0 5f 5e b8 ?? ?? ?? ?? 5b 5d c3"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); Interact = p.Find(); log.WriteLine("Interact: 0x" + Interact.ToString("X")); } { var p = Pattern.FromTextstyle("UseItem", "55 8b ec 83 ec ?? 57 8b f9 8b 47 ?? 0f bf 48 ?? c1 e9 ?? f6 c1 ?? 0f 85 ?? ?? ?? ?? f6 87 ?? ?? ?? ?? ?? 0f 85"); UseItem = p.Find(); log.WriteLine("UseItem: 0x" + (UseItem - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("CGPlayer_C__AutoEquipItem", "8b 42 ?? 8b ce ff d0 85 c0 74 ?? 8b 16 8b 42 ?? 53 8b ce ff d0"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier(LeaType.Byte)); GetBag = p.Find(); log.WriteLine("GetBag: 0x" + GetBag.ToString("X")); } { var p = Pattern.FromTextstyle("CGPlayer_C__ClickToMoveStop", "a1 ?? ?? ?? ?? 83 c0 ?? 56 8b f1 83 f8 ?? 0f 87 ?? ?? ?? ?? ff 24 85 ?? ?? ?? ?? 8b 0d"); StopCTM = p.Find(); log.WriteLine("StopCTM: 0x" + (StopCTM - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("TracelineWrapper", "55 8b ec a1 ?? ?? ?? ?? 8b 0c 85 ?? ?? ?? ?? 85 c9 75 ?? 32 c0 5d c3 8b 55 ?? 8b 45 ?? 52 8b 55 ?? 50 8b 45 ?? 52"); Traceline = p.Find(); log.WriteLine("Traceline: 0x" + (Traceline - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("CGUnit_C__UnitReaction", "55 8b ec 83 ec ?? 53 57 8b 7d ?? 8b d9 89 ?? f8 3b fb 75 ??"); UnitReaction = p.Find(); log.WriteLine("UnitReaction: 0x" + (UnitReaction - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("ClientDB__GetRow", "55 8b ec 8b 51 ?? 8b 45 ?? 3b c2 7c ?? 3b 41 ?? 7f ?? 8b 49 ?? 2b c2 8b 04 81 5d"); ClientDB_GetRow = p.Find(); log.WriteLine("ClientDB__GetRow: 0x" + (ClientDB_GetRow - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("CGUnit_C__CalculateThreat", "55 8b ec 83 ec ?? 53 56 57 8b 7d ?? 8b 07 8b 57 ?? 8b f1 8b c8 89 ?? f8 8d 4d ?? 51"); CalculateThreat = p.Find(); log.WriteLine("CGUnit_C__CalculateThreat: 0x" + (CalculateThreat - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("ActiveCamera", "8b ?? ?? ?? ?? ?? 8b ?? ?? ?? ?? ?? 8b 47 ?? 3b 41 ?? 75 ??"); p.Modifiers.Add(new AddModifier(2)); p.Modifiers.Add(new LeaModifier()); WorldFrame = p.Find(); log.WriteLine("WorldFrameOffset: 0x" + (WorldFrame - baseaddr).ToString("X")); p.Modifiers.Clear(); p.Modifiers.Add(new AddModifier(8)); p.Modifiers.Add(new LeaModifier()); ActiveCamera = p.Find(); log.WriteLine("CameraOffset: 0x" + ActiveCamera.ToString("X")); } { var p = Pattern.FromTextstyle("AspectRatio", "8b 0d ?? ?? ?? ?? 6a ?? e8 ?? ?? ?? ?? d9 15 ?? ?? ?? ??"); p.Modifiers.Add(new AddModifier(15)); p.Modifiers.Add(new LeaModifier()); AspectRatio = p.Find(); log.WriteLine("AspectRatio: 0x" + (AspectRatio - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("CGUnit_C__GetCreatureType", "80 b9 ?? ?? ?? ?? ?? 74 ?? 33 c0 eb ??"); GetCreatureType = p.Find(); log.WriteLine("CreatureType: 0x" + (GetCreatureType - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("CGUnit_C__GetShapeshiftFormId", "80 b9 ?? ?? ?? ?? ?? 74 ?? 33 c0 c3 8b 81 ?? ?? ?? ??"); ShapeshiftFormId = p.Find(); log.WriteLine("ShapeshiftFormId: 0x" + (ShapeshiftFormId - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("CGUnit_C__GetAuraCount", "8b 81 ?? ?? ?? ?? 83 ?? ?? 75 ?? 8b 81 ?? ?? ?? ??"); GetAuraCount = p.Find(); log.WriteLine("GetAuraCount: 0x" + (GetAuraCount - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("CGUnit_C__GetAura", "55 8b ec 8b 81 ?? ?? ?? ?? 83 ?? ?? 75 ?? 8b 91 ?? ?? ?? ?? eb ?? 8b d0 8b ?? ?? 3b c2 73 ?? 83 b9 ?? ?? ?? ?? ??"); GetAura = p.Find(); log.WriteLine("GetAura: 0x" + (GetAura - baseaddr).ToString("X")); } { var p = Pattern.FromTextstyle("CGSpellBook__UpdateSpells", "8b 15 ?? ?? ?? ?? a1 80 ?? ?? ?? 68 ?? ?? ?? ?? 6a ?? 52 50 e8 9f ?? ?? ??"); p.Modifiers.Add(new AddModifier(2)); // 8B 15 7C 54 EF 00 mov edx, dword_EF547C p.Modifiers.Add(new LeaModifier()); SpellCount = p.Find(); log.WriteLine("SpellCount: 0x" + (SpellCount - baseaddr).ToString("X")); p.Modifiers.Clear(); p.Modifiers.Add(new AddModifier(7)); // A1 80 54 EF 00 mov eax, dword_EF5480 p.Modifiers.Add(new LeaModifier()); SpellBook = p.Find(); log.WriteLine("SpellBook: 0x" + (SpellBook - baseaddr).ToString("X")); } WoWLocalPlayer.Initialize(); LuaInterface.Initialize(); Manager.Initialize(); Helper.Initialize(); Pulse.Initialize(); Events.Initialize(); WoWWorld.Initialize(); WoWSpell.Initialize(); } if (OnOffsetsLoaded != null) { OnOffsetsLoaded(null, new EventArgs()); } }