#include "ui/FrameScript.hpp" #include "ui/FrameScriptInternal.hpp" #include "ui/FrameScript_Object.hpp" #include "ui/LuaMemory.hpp" #include "util/CStatus.hpp" #include "util/Lua.hpp" #include "util/SFile.hpp" #include #include #include #include #include #include const char* g_glueScriptEvents[41]; const char* g_scriptEvents[722]; void* FrameScript::s_mempool; lua_State* FrameScript::s_context; int64_t FrameScript::s_scriptTimeUsed; int32_t FrameScript::s_scriptProfileEnabled; int32_t FrameScript::s_errorHandlerFun; double_t FrameScript::s_scriptTimeDivisor; int32_t FrameScript::s_errorHandlerRef; int32_t FrameScript::s_recursiveTableHash; int32_t FrameScript::s_pluralRule; int32_t FrameScript::s_handlingError; TSFixedArray FrameScript::s_scriptEvents; TSHashTable FrameScript::s_scriptEventsHash; int32_t FrameScript::s_blocksizes[9] = { 0x10, 0x18, 0x20, 0x28, 0x40, 0x50, 0x80, 0xa0, 0x100 }; const char* FrameScript::s_compat_lua = R"( ------------------------------------------------------------------- -- Table library local tab = table foreach = tab.foreach foreachi = tab.foreachi getn = tab.getn tinsert = tab.insert tremove = tab.remove sort = tab.sort wipe = tab.wipe ------------------------------------------------------------------- -- math library local math = math abs = math.abs acos = function (x) return math.deg(math.acos(x)) end asin = function (x) return math.deg(math.asin(x)) end atan = function (x) return math.deg(math.atan(x)) end atan2 = function (x,y) return math.deg(math.atan2(x,y)) end ceil = math.ceil cos = function (x) return math.cos(math.rad(x)) end deg = math.deg exp = math.exp floor = math.floor frexp = math.frexp ldexp = math.ldexp log = math.log log10 = math.log10 max = math.max min = math.min mod = math.fmod PI = math.pi --??? pow = math.pow rad = math.rad random = math.random --randomseed = math.randomseed sin = function (x) return math.sin(math.rad(x)) end sqrt = math.sqrt tan = function (x) return math.tan(math.rad(x)) end ------------------------------------------------------------------- -- string library local str = string strbyte = str.byte strchar = str.char strfind = str.find format = str.format gmatch = str.gmatch gsub = str.gsub strlen = str.len strlower = str.lower strmatch = str.match strrep = str.rep strrev = str.reverse strsub = str.sub strupper = str.upper ------------------------------------------------------------------- -- Add custom string functions to the string table str.trim = strtrim str.split = strsplit str.join = strjoin str.replace = strreplace)"; const char* FrameScript_EventObject::GetName() { return this->m_key.m_str; } int64_t OsGetAsyncClocksPerSecond() { // TODO return 1000.0; } int32_t FrameScript_CompileFunction(const char* name, const char* wrapper, const char* body, CStatus* status) { lua_State* L = FrameScript::s_context; size_t functionLen = SStrLen(wrapper) + SStrLen(body) + 1; char* function = static_cast(alloca(functionLen)); // Insert the function body into the wrapper SStrPrintf(function, functionLen, wrapper, body); lua_rawgeti(L, LUA_REGISTRYINDEX, FrameScript::s_errorHandlerRef); if (luaL_loadbuffer(L, function, SStrLen(function), name)) { if (status) { const char* v10 = lua_tolstring(L, -1, 0); status->Add(STATUS_ERROR, "%s", v10); } if (lua_pcall(L, 1, 0, 0)) { lua_settop(L, -2); } return -1; } else if (lua_pcall(L, 0, 1, -2)) { if (status) { const char* v13 = lua_tolstring(L, -1, 0); status->Add(STATUS_ERROR, "%s", v13); } lua_settop(L, -3); return -1; } else { int32_t luaRef = luaL_ref(L, LUA_REGISTRYINDEX); lua_settop(L, -2); return luaRef; } } void FrameScript_CreateEvents(const char* names[], uint32_t count) { FrameScript::s_scriptEvents.Clear(); FrameScript::s_scriptEvents.SetCount(count); for (int32_t i = 0; i < count; i++) { auto event = FrameScript::s_scriptEventsHash.New(names[i], 0, 0); FrameScript::s_scriptEvents[i] = event; } } void FrameScript_Destroy() { // TODO } void FrameScript_Execute(const char* source, const char* filename, const char* a3) { /* TODO taint tracking v3 = lua_taintexpected++ == -1; v8 = *(_DWORD *)lua_tainted; if (!v3 && !lua_taintedclosure) { *(_DWORD *)lua_tainted = a3; } */ lua_State* L = FrameScript::s_context; size_t len = SStrLen(source); lua_rawgeti(L, LUA_REGISTRYINDEX, FrameScript::s_errorHandlerRef); if (!luaL_loadbuffer(L, source, len, filename)) { if (lua_pcall(L, 0, 0, -2)) { lua_settop(L, -3); } else { lua_settop(L, -2); } } else if (lua_pcall(L, 1, 0, 0)) { lua_settop(L, -2); } /* TODO taint tracking if (lua_taintexpected && !lua_taintedclosure) { *(_DWORD *)lua_tainted = v8; } v7 = lua_taintexpected - 1; lua_taintexpected = v7; if (v7 <= 0) { lua_taintexpected = 0; } */ } void FrameScript_Execute(int32_t function, FrameScript_Object* objectThis, int32_t argCount, const char* a4, FrameScript_EventObject* event) { lua_State* L = FrameScript::s_context; int32_t v20 = 1 - argCount + lua_gettop(L); int32_t v19 = argCount; lua_checkstack(L, argCount + 2); if (objectThis) { const char* name = objectThis->GetName(); if (!name) { name = ""; } // TODO // v6 = alloca(SStrLen(name) + 5); // v17 = (char *)&v14; // SStrCopy((char *)&v14, "DBG:", 0x7FFFFFFF); // SStrCopy(v17 + 4, name, 0x7FFFFFFF); lua_pushstring(L, "this"); lua_rawget(L, LUA_GLOBALSINDEX); if (!objectThis->lua_registered) { objectThis->RegisterScriptObject(0); } lua_rawgeti(L, LUA_REGISTRYINDEX, objectThis->lua_objectRef); lua_pushstring(L, "this"); lua_insert(L, -2); lua_rawset(L, LUA_GLOBALSINDEX); } if (event) { lua_pushstring(L, "event"); lua_rawget(L, LUA_GLOBALSINDEX); lua_pushvalue(L, v20); lua_pushstring(L, "event"); lua_insert(L, -2); lua_rawset(L, LUA_GLOBALSINDEX); } char argName[7] = { 'a', 'r', 'g', 0, 0, 0 }; int32_t firstArg = event != 0; int32_t argId = 0; if (firstArg < argCount) { for (int32_t i = firstArg; i < argCount; i++) { argId = i + 1; if (argId >= 10) { SStrPrintf(&argName[3], 3, "%d", argId); } else { argName[3] = '0' + argId; argName[4] = 0; } lua_pushstring(L, argName); lua_rawget(L, LUA_GLOBALSINDEX); lua_pushvalue(L, v20 + firstArg); lua_pushstring(L, argName); lua_insert(L, -2); lua_rawset(L, LUA_GLOBALSINDEX); } } lua_checkstack(L, argCount + 3); lua_rawgeti(L, LUA_REGISTRYINDEX, FrameScript::s_errorHandlerRef); lua_rawgeti(L, LUA_REGISTRYINDEX, function); if (objectThis) { if (!objectThis->lua_registered) { objectThis->RegisterScriptObject(0); } lua_rawgeti(L, LUA_REGISTRYINDEX, objectThis->lua_objectRef); v19 = argCount + 1; } for (int32_t i = 0; i < argCount; ++i) { lua_pushvalue(L, v20 + i); } if (lua_pcall(L, v19, 0, -2 - v19)) { lua_settop(L, -2); } lua_settop(L, -2); for (int32_t i = argId; i > 0; i--) { if (i >= 10) { SStrPrintf(&argName[3], 3, "%d", i); } else { argName[3] = '0' + i; argName[4] = 0; } lua_pushstring(L, argName); lua_insert(L, -2); lua_rawset(L, LUA_GLOBALSINDEX); } if (event) { lua_pushstring(L, "event"); lua_insert(L, -2); lua_rawset(L, LUA_GLOBALSINDEX); } if (objectThis) { lua_pushstring(L, "this"); lua_insert(L, -2); lua_rawset(L, LUA_GLOBALSINDEX); } lua_settop(L, -1 - argCount); } int32_t FrameScript_ExecuteBuffer(const char* buffer, size_t bufferBytes, const char* bufferName, CStatus* status, const char* a5) { lua_State* L = FrameScript::s_context; lua_rawgeti(L, LUA_REGISTRYINDEX, FrameScript::s_errorHandlerRef); if (luaL_loadbuffer(L, buffer, bufferBytes, bufferName)) { if (status) { const char* v7 = lua_tolstring(L, -1, 0); status->Add(STATUS_ERROR, "%s", v7); } if (lua_pcall(L, 1, 0, 0)) { lua_settop(L, -2); } return 0; } else { int32_t v9 = 0; if (a5) { lua_pushstring(L, a5); lua_pushvalue(L, -4); v9 = 2; } if (lua_pcall(L, v9, 0, -2 - v9)) { if (status) { const char* v11 = lua_tolstring(L, -1, 0); status->Add(STATUS_ERROR, "%s", v11); } lua_settop(L, -3); return 0; } else { lua_settop(L, -2); return 1; } } } int32_t FrameScript_ExecuteFile(const char* filePath, const char* a2, MD5_CTX* md5, CStatus* status) { const char* v4 = filePath; char v12[260]; if (SStrStr(filePath, "..")) { SStrCopy(v12, filePath, 260); char* i; char* j; for (i = (char*)SStrStr(v12, ".."); i; i = (char*)SStrStr(v12, "..")) { char v6 = *(i - 1); if (v6 != 92 && v6 != 47) { break; } char v7 = i[2]; if (v7 != 92 && v7 != 47) { break; } for (j = i - 2; j >= v12; --j) { if (*j == 92) { break; } if (*j == 47) { break; } } SStrCopy(j + 1, i + 3, 0x7FFFFFFF); } v4 = v12; } char v11[264]; SStrPrintf(v11, 261, "@%s", v4); void* fileBuffer; size_t fileBytes; if (SFile::Load(0, v4, &fileBuffer, &fileBytes, 0, 1, nullptr)) { if (md5) { MD5Update(md5, static_cast(fileBuffer), fileBytes); } int32_t v10 = FrameScript_ExecuteBuffer(static_cast(fileBuffer), fileBytes, v11, status, a2); SFile::Unload(fileBuffer); return v10; } else { if (status) { status->Add(STATUS_ERROR, "Error loading %s", v4); } return 0; } } void FrameScript_Flush() { if (FrameScript::s_context) { FrameScript_Destroy(); FrameScript_Initialize(FrameScript::s_scriptProfileEnabled); } } void FrameScript_GetColor(lua_State* L, int32_t idx, CImVector& color) { float r = lua_tonumber(L, idx + 0); r = std::max(0.0f, std::min(r, 1.0f)); float g = lua_tonumber(L, idx + 1); g = std::max(0.0f, std::min(g, 1.0f)); float b = lua_tonumber(L, idx + 2); b = std::max(0.0f, std::min(b, 1.0f)); float a = 1.0f; if (lua_isnumber(L, idx + 3)) { a = lua_tonumber(L, idx + 2); a = std::max(0.0f, std::min(a, 1.0f)); } color.Set(a, r, g, b); } lua_State* FrameScript_GetContext(void) { return FrameScript::s_context; } const char* FrameScript_GetCurrentObject(lua_State* L, int32_t a2) { lua_Debug info; if (!lua_getstack(L, a2, &info)) { return nullptr; } lua_getinfo(L, "Sln", &info); if (info.source[0] != '*' && SStrCmp(info.namewhat, "method", 0x7FFFFFFFu)) { return nullptr; } if (!lua_getlocal(L, &info, 1)) { return nullptr; } const char* objName = nullptr; if (lua_type(L, -1) == LUA_TTABLE) { lua_rawgeti(L, -1, 0); FrameScript_Object* obj = static_cast(lua_touserdata(L, -1)); lua_settop(L, -2); if (obj) { objName = obj->GetName(); if (!objName) { objName = ""; } } } lua_settop(L, -2); return objName; } char FrameScript_GetPluralIndex(int32_t a1) { if (FrameScript::s_pluralRule == PLURAL_RULE_0) { return a1 != 1; } if (FrameScript::s_pluralRule == PLURAL_RULE_1) { return a1 > 1; } if (FrameScript::s_pluralRule != PLURAL_RULE_2) { return 0; } if ((unsigned int)(a1 % 100 - 11) <= 3) { return 2; } if (a1 % 10 == 1) { return 0; } else { return ((unsigned int)(a1 % 10 - 2) > 2) + 1; } } const char* FrameScript_GetText(const char* a1, int32_t count, FRAMESCRIPT_GENDER gender) { const char* text = ""; char pluralIndex = FrameScript_GetPluralIndex(count); // Suffix based on pluralization rules char pluralSuffix[4]; if (pluralIndex - 1 <= 8) { pluralSuffix[0] = 95; // _ pluralSuffix[1] = 80; // P pluralSuffix[2] = 48 + pluralIndex; // 0-8 pluralSuffix[3] = 0; // NULL } // Gender suffix const char* genderSuffix = ""; if (gender == GENDER_FEMALE) { genderSuffix = "_FEMALE"; } uint32_t len = SStrLen((const char*)pluralSuffix) + SStrLen(a1) + SStrLen(genderSuffix) + 1; char* v9 = (char*)alloca(len); SStrPrintf(v9, len, "%s%s%s", a1, &pluralSuffix, genderSuffix); if (FrameScript_GetVariable(v9, &text)) { return text; } SStrPrintf(v9, len, "%s%s", a1, &pluralSuffix); if (FrameScript_GetVariable(v9, &text)) { return text; } SStrPrintf(v9, len, "%s%s", a1, genderSuffix); if (FrameScript_GetVariable(v9, &text)) { return text; } // Fallback FrameScript_GetVariable(a1, &text); return text; } int32_t FrameScript_GetVariable(const char* a1, const char** a2) { lua_State* L = FrameScript::s_context; int32_t v3 = 0; lua_pushstring(L, a1); lua_rawget(L, LUA_GLOBALSINDEX); if (lua_isstring(L, -1)) { v3 = 1; *a2 = lua_tolstring(L, -1, 0); } lua_settop(L, -2); return v3; } int32_t FrameScript_HandleError(lua_State* L) { if (!lua_isstring(L, -1)) { lua_pushstring(L, "UNKNOWN ERROR"); lua_insert(L, -1); } const char* v1 = lua_tolstring(L, -1, 0); const char* v2 = SStrStr(v1, "*:"); const char* objName = FrameScript_GetCurrentObject(L, 1); // TODO // Remove temporary console debug logging if (v2 && objName) { printf("Error: %s%s\n", objName, v2 + 1); } else { printf("Error: %s\n", v1); } if (v2 && objName) { lua_pushlstring(L, v1, v2 - v1); lua_pushstring(L, objName); lua_pushstring(L, v2 + 1); lua_concat(L, 3); lua_replace(L, -2); } // If seterrorhandler() has been called in Lua, invoke that Lua-side function now if (FrameScript::s_errorHandlerFun != -1) { FrameScript::s_handlingError = 1; lua_rawgeti(L, LUA_REGISTRYINDEX, FrameScript::s_errorHandlerFun); lua_insert(L, -2); lua_call(L, 1, 1); FrameScript::s_handlingError = 0; } return 1; } int32_t FrameScript_Initialize(int32_t a1) { FrameScript::s_mempool = luaM_initPool(); FrameScript::s_context = lua_newstate(luaM_reallocPool, FrameScript::s_mempool); // TODO a1 FrameScript::s_scriptTimeUsed = 0ll; int64_t v1 = OsGetAsyncClocksPerSecond(); FrameScript::s_scriptProfileEnabled = a1; FrameScript::s_errorHandlerFun = -1; FrameScript::s_scriptTimeDivisor = 1000.0 / (double)v1; lua_pushcclosure(FrameScript::s_context, FrameScript_HandleError, 0); FrameScript::s_errorHandlerRef = luaL_ref(FrameScript::s_context, LUA_REGISTRYINDEX); lua_createtable(FrameScript::s_context, 0, 0); FrameScript::s_recursiveTableHash = luaL_ref(FrameScript::s_context, LUA_REGISTRYINDEX); lua_gc(FrameScript::s_context, LUA_GCSETPAUSE, 110); luaopen_base(FrameScript::s_context); lua_settop(FrameScript::s_context, -3); luaopen_string(FrameScript::s_context); lua_settop(FrameScript::s_context, -2); luaopen_table(FrameScript::s_context); lua_settop(FrameScript::s_context, -2); luaopen_math(FrameScript::s_context); lua_settop(FrameScript::s_context, -2); luaopen_bit(FrameScript::s_context); lua_settop(FrameScript::s_context, -2); luaL_register(FrameScript::s_context, "_G", FrameScriptInternal::extra_funcs); lua_settop(FrameScript::s_context, -2); FrameScript_Execute(FrameScript::s_compat_lua, "compat.lua", 0); return 1; } void FrameScript_RegisterFunction(const char* name, int32_t (*function)(struct lua_State *)) { lua_State* L = FrameScript::s_context; lua_pushcclosure(L, function, 0); lua_pushstring(L, name); lua_insert(L, -2); lua_rawset(L, LUA_GLOBALSINDEX); } void FrameScript_RegisterScriptEvent(FrameScript_Object* object, FrameScript_EventObject* event) { if (event->pendingSignalCount) { auto node = event->registerListeners.Head(); while (node) { if (node->listener == object) { return; } node = node->Next(); } node = event->registerListeners.NewNode(2, 0, 0x8); node->listener = object; } else { auto node = event->listeners.NewNode(2, 0, 0x8); node->listener = object; } } void FrameScript_SetPluralRule(PLURAL_RULE rule) { FrameScript::s_pluralRule = rule; } int32_t FrameScript_ShouldSignalEvent(uint32_t index) { // TODO return 1; } void FrameScript_PushEventName(uint32_t index) { // TODO // bounds checks FrameScript_EventObject* event = FrameScript::s_scriptEvents[index]; lua_pushstring(FrameScript::s_context, event->GetName()); } int32_t FrameScript_PushEventArgs(const char* format, va_list args) { int32_t argCount = 0; if (!format || !*format) { return argCount; } const char* cur = format; while (*cur) { if (*cur == '%') { cur++; switch (*cur) { case 'b': lua_pushboolean(FrameScript::s_context, va_arg(args, int32_t)); argCount++; break; case 'd': lua_pushnumber(FrameScript::s_context, va_arg(args, int32_t)); argCount++; break; case 'f': lua_pushnumber(FrameScript::s_context, va_arg(args, double)); argCount++; break; case 's': lua_pushstring(FrameScript::s_context, va_arg(args, char*)); argCount++; break; case 'u': lua_pushnumber(FrameScript::s_context, va_arg(args, uint32_t)); argCount++; break; } } cur++; } return argCount; } void FrameScript_SignalEvent(uint32_t index, lua_State* L, int32_t argCount) { auto event = FrameScript::s_scriptEvents[index]; if (!event) { return; } // TODO event->signalCount++; event->pendingSignalCount++; lua_checkstack(L, argCount); auto node = event->listeners.Head(); while (node) { auto unregisterNode = event->unregisterListeners.Head(); while (unregisterNode) { if (node->listener == unregisterNode->listener) { break; } unregisterNode = unregisterNode->Next(); } if (unregisterNode) { break; } auto script = &node->listener->m_onEvent; if (script->luaRef) { for (int32_t i = 0; i < argCount; i++) { lua_pushvalue(L, -argCount); } FrameScript_Execute(script->luaRef, node->listener, argCount, script->unk, event); } node = node->Next(); } event->pendingSignalCount--; auto unregisterNode = event->unregisterListeners.Head(); while (unregisterNode) { FrameScript_UnregisterScriptEvent(unregisterNode->listener, event); unregisterNode = event->unregisterListeners.DeleteNode(unregisterNode); } auto registerNode = event->registerListeners.Head(); while (registerNode) { FrameScript_RegisterScriptEvent(registerNode->listener, event); registerNode = event->registerListeners.DeleteNode(registerNode); } } void FrameScript_SignalEvent(uint32_t index, const char* format, ...) { if (!FrameScript_ShouldSignalEvent(index)) { return; } va_list args; va_start(args, format); // TODO // v6 = lua_taintexpected++ == -1; // v18 = lua_tainted; // if (!v6 && !lua_taintedclosure) { // lua_tainted = 0; // } FrameScript_PushEventName(index); int32_t argCount = 1; argCount += FrameScript_PushEventArgs(format, args); FrameScript_SignalEvent(index, FrameScript::s_context, argCount); // TODO // if (lua_taintexpected && !lua_taintedclosure) { // lua_tainted = v18; // } // if (--lua_taintexpected <= 0) { // lua_taintexpected = 0; // } va_end(args); } void FrameScript_UnregisterScriptEvent(FrameScript_Object* object, FrameScript_EventObject* event) { if (event->pendingSignalCount) { auto node = event->unregisterListeners.Head(); while (node) { if (node->listener == object) { return; } node = node->Next(); } node = event->unregisterListeners.NewNode(2, 0, 0x8); node->listener = object; } else { auto node = event->listeners.Head(); while (node) { if (node->listener == object) { event->listeners.DeleteNode(node); break; } node = node->Next(); } } } static void addchar(char* buffer, size_t bufferSize, char ch) { auto length = SStrLen(buffer); if (length + 1 < bufferSize) { buffer[length++] = ch; buffer[length] = '\0'; } } static void addstring(char* buffer, size_t bufferSize, const char* source) { uint32_t dsize = 0; uint32_t size = 0; dsize = SStrLen(buffer); size = SStrLen(source); if (dsize + size >= bufferSize) { size = bufferSize - dsize; // Check for space for trailing zero if (size < 2) { size = 0; } else { size--; } } if (size > 0) memmove(&buffer[dsize], source, size); buffer[dsize + size] = '\0'; } static void addstring(char* buffer, size_t bufferSize, const char* source, size_t count) { uint32_t dsize = 0; uint32_t size = 0; dsize = SStrLen(buffer); size = std::min(SStrLen(source), count); if (dsize + size >= bufferSize) { size = bufferSize - dsize; // Check for space for trailing zero if (size < 2) { size = 0; } else { size--; } } if (size > 0) memmove(&buffer[dsize], source, size); buffer[dsize + size] = '\0'; } static void addquoted(lua_State* L, char* buffer, size_t bufferSize, int arg) { size_t l; const char* s = luaL_checklstring(L, arg, &l); addchar(buffer, bufferSize, '"'); while (l--) { switch (*s) { case '"': case '\\': case '\n': { addchar(buffer, bufferSize, '\\'); addchar(buffer, bufferSize, *s); break; } case '\r': { addstring(buffer, bufferSize, "\\r"); break; } case '\0': { addstring(buffer, bufferSize, "\\000"); break; } default: { addchar(buffer, bufferSize, *s); break; } } s++; } addchar(buffer, bufferSize, '"'); } #define FORMAT_FLAGS "-+ #0" static const char* scanformat(lua_State* L, const char* strfrmt, char* form) { const char* flags = "-+ #0"; const char* p = strfrmt; while (*p != '\0' && SStrChrR(FORMAT_FLAGS, *p) != NULL) { p++; /* skip flags */ } if ((size_t)(p - strfrmt) >= sizeof(FORMAT_FLAGS)) { luaL_error(L, "invalid format (repeated flags)"); } if (isdigit((unsigned char)(*p))) { p++; /* skip width */ } if (isdigit((unsigned char)(*p))) { p++; /* (2 digits at most) */ } if (*p == '.') { p++; if (isdigit((unsigned char)(*p))) { p++; /* skip precision */ } if (isdigit((unsigned char)(*p))) { p++; /* (2 digits at most) */ } } if (isdigit((unsigned char)(*p))) { luaL_error(L, "invalid format (width or precision too long)"); } *(form++) = '%'; strncpy(form, strfrmt, p - strfrmt + 1); form += p - strfrmt + 1; *form = '\0'; return p; } static void addintlen(char* form) { size_t l = SStrLen(form); char spec = form[l - 1]; strcpy(form + l - 1, LUA_INTFRMLEN); form[l + sizeof(LUA_INTFRMLEN) - 2] = spec; form[l + sizeof(LUA_INTFRMLEN) - 1] = '\0'; } void FrameScript_Sprintf(lua_State* L, int startIndex, char* buffer, uint32_t bufferSize) { // maximum size of each formatted item (> len(format('%99.99f', -1e308))) const size_t MAX_ITEM = 512; // maximum size of each format specification (such as '%-099.99d') // (+10 accounts for %99.99x plus margin of error) const size_t MAX_FORMAT = sizeof(FORMAT_FLAGS) + sizeof(LUA_INTFRMLEN) + 10; int arg = startIndex; size_t sfl; const char* strfrmt = luaL_checklstring(L, arg, &sfl); const char* strfrmt_end = strfrmt + sfl; while (strfrmt < strfrmt_end) { if (*strfrmt != '%') { addchar(buffer, bufferSize, *strfrmt++); } else if (*++strfrmt == '%') { addchar(buffer, bufferSize, *strfrmt++); /* %% */ } else { /* format item */ char form[MAX_FORMAT]; /* to store the format (`%...') */ char buff[MAX_ITEM]; /* to store the formatted item */ arg++; strfrmt = scanformat(L, strfrmt, form); switch (*strfrmt++) { case 'c': { sprintf(buff, form, (int)luaL_checknumber(L, arg)); break; } case 'd': case 'i': { addintlen(form); sprintf(buff, form, (LUA_INTFRM_T)luaL_checknumber(L, arg)); break; } case 'o': case 'u': case 'x': case 'X': { addintlen(form); sprintf(buff, form, (unsigned LUA_INTFRM_T)luaL_checknumber(L, arg)); break; } case 'e': case 'E': case 'f': case 'g': case 'G': { sprintf(buff, form, (double)luaL_checknumber(L, arg)); break; } case 'q': { addquoted(L, buffer, bufferSize, arg); continue; /* skip the 'addsize' at the end */ } case 's': { size_t l; const char* s = luaL_checklstring(L, arg, &l); if (!strchr(form, '.') && l >= 100) { /* no precision and string is too long to be formatted; keep original string */ continue; /* skip the `addsize' at the end */ } else { sprintf(buff, form, s); break; } } default: { /* also treat cases `pnLlh' */ luaL_error(L, "invalid option " LUA_QL("%%%c") " to " LUA_QL("format"), *(strfrmt - 1)); } } addstring(buffer, bufferSize, buff); } } } void GlueScriptEventsInitialize() { g_glueScriptEvents[0] = "SET_GLUE_SCREEN"; g_glueScriptEvents[1] = "START_GLUE_MUSIC"; g_glueScriptEvents[2] = "DISCONNECTED_FROM_SERVER"; g_glueScriptEvents[3] = "OPEN_STATUS_DIALOG"; g_glueScriptEvents[4] = "UPDATE_STATUS_DIALOG"; g_glueScriptEvents[5] = "CLOSE_STATUS_DIALOG"; g_glueScriptEvents[6] = "ADDON_LIST_UPDATE"; g_glueScriptEvents[7] = "CHARACTER_LIST_UPDATE"; g_glueScriptEvents[8] = "UPDATE_SELECTED_CHARACTER"; g_glueScriptEvents[9] = "OPEN_REALM_LIST"; g_glueScriptEvents[10] = "GET_PREFERRED_REALM_INFO"; g_glueScriptEvents[11] = "UPDATE_SELECTED_RACE"; g_glueScriptEvents[12] = "SELECT_LAST_CHARACTER"; g_glueScriptEvents[13] = "SELECT_FIRST_CHARACTER"; g_glueScriptEvents[14] = "GLUE_SCREENSHOT_SUCCEEDED"; g_glueScriptEvents[15] = "GLUE_SCREENSHOT_FAILED"; g_glueScriptEvents[16] = "PATCH_UPDATE_PROGRESS"; g_glueScriptEvents[17] = "PATCH_DOWNLOADED"; g_glueScriptEvents[18] = "SUGGEST_REALM"; g_glueScriptEvents[19] = "SUGGEST_REALM_WRONG_PVP"; g_glueScriptEvents[20] = "SUGGEST_REALM_WRONG_CATEGORY"; g_glueScriptEvents[21] = "SHOW_SERVER_ALERT"; g_glueScriptEvents[22] = "FRAMES_LOADED"; g_glueScriptEvents[23] = "FORCE_RENAME_CHARACTER"; g_glueScriptEvents[24] = "FORCE_DECLINE_CHARACTER"; g_glueScriptEvents[25] = "SHOW_SURVEY_NOTIFICATION"; g_glueScriptEvents[26] = "PLAYER_ENTER_PIN"; g_glueScriptEvents[27] = "CLIENT_ACCOUNT_MISMATCH"; g_glueScriptEvents[28] = "PLAYER_ENTER_MATRIX"; g_glueScriptEvents[29] = "SCANDLL_ERROR"; g_glueScriptEvents[30] = "SCANDLL_DOWNLOADING"; g_glueScriptEvents[31] = "SCANDLL_FINISHED"; g_glueScriptEvents[32] = "SERVER_SPLIT_NOTICE"; g_glueScriptEvents[33] = "TIMER_ALERT"; g_glueScriptEvents[34] = "ACCOUNT_MESSAGES_AVAILABLE"; g_glueScriptEvents[35] = "ACCOUNT_MESSAGES_HEADERS_LOADED"; g_glueScriptEvents[36] = "ACCOUNT_MESSAGES_BODY_LOADED"; g_glueScriptEvents[37] = "CLIENT_TRIAL"; g_glueScriptEvents[38] = "PLAYER_ENTER_TOKEN"; g_glueScriptEvents[39] = "GAME_ACCOUNTS_UPDATED"; g_glueScriptEvents[40] = "CLIENT_CONVERTED"; } void ScriptEventsInitialize() { g_scriptEvents[0] = "UNIT_PET"; g_scriptEvents[2] = "UNIT_PET"; g_scriptEvents[12] = "UNIT_TARGET"; g_scriptEvents[17] = "UNIT_DISPLAYPOWER"; g_scriptEvents[18] = "UNIT_HEALTH"; g_scriptEvents[19] = "UNIT_MANA"; g_scriptEvents[20] = "UNIT_RAGE"; g_scriptEvents[21] = "UNIT_FOCUS"; g_scriptEvents[22] = "UNIT_ENERGY"; g_scriptEvents[23] = "UNIT_HAPPINESS"; g_scriptEvents[25] = "UNIT_RUNIC_POWER"; g_scriptEvents[26] = "UNIT_MAXHEALTH"; g_scriptEvents[27] = "UNIT_MAXMANA"; g_scriptEvents[28] = "UNIT_MAXRAGE"; g_scriptEvents[29] = "UNIT_MAXFOCUS"; g_scriptEvents[30] = "UNIT_MAXENERGY"; g_scriptEvents[31] = "UNIT_MAXHAPPINESS"; g_scriptEvents[33] = "UNIT_MAXRUNIC_POWER"; g_scriptEvents[48] = "UNIT_LEVEL"; g_scriptEvents[49] = "UNIT_FACTION"; g_scriptEvents[53] = "UNIT_FLAGS"; g_scriptEvents[54] = "UNIT_FLAGS"; g_scriptEvents[56] = "UNIT_ATTACK_SPEED"; g_scriptEvents[57] = "UNIT_ATTACK_SPEED"; g_scriptEvents[58] = "UNIT_RANGEDDAMAGE"; g_scriptEvents[64] = "UNIT_DAMAGE"; g_scriptEvents[65] = "UNIT_DAMAGE"; g_scriptEvents[66] = "UNIT_DAMAGE"; g_scriptEvents[67] = "UNIT_DAMAGE"; g_scriptEvents[71] = "UNIT_PET_EXPERIENCE"; g_scriptEvents[72] = "UNIT_PET_EXPERIENCE"; g_scriptEvents[73] = "UNIT_DYNAMIC_FLAGS"; g_scriptEvents[78] = "UNIT_STATS"; g_scriptEvents[79] = "UNIT_STATS"; g_scriptEvents[80] = "UNIT_STATS"; g_scriptEvents[81] = "UNIT_STATS"; g_scriptEvents[82] = "UNIT_STATS"; g_scriptEvents[93] = "UNIT_RESISTANCES"; g_scriptEvents[94] = "UNIT_RESISTANCES"; g_scriptEvents[95] = "UNIT_RESISTANCES"; g_scriptEvents[96] = "UNIT_RESISTANCES"; g_scriptEvents[97] = "UNIT_RESISTANCES"; g_scriptEvents[98] = "UNIT_RESISTANCES"; g_scriptEvents[99] = "UNIT_RESISTANCES"; g_scriptEvents[100] = "UNIT_RESISTANCES"; g_scriptEvents[101] = "UNIT_RESISTANCES"; g_scriptEvents[102] = "UNIT_RESISTANCES"; g_scriptEvents[103] = "UNIT_RESISTANCES"; g_scriptEvents[104] = "UNIT_RESISTANCES"; g_scriptEvents[105] = "UNIT_RESISTANCES"; g_scriptEvents[106] = "UNIT_RESISTANCES"; g_scriptEvents[107] = "UNIT_RESISTANCES"; g_scriptEvents[108] = "UNIT_RESISTANCES"; g_scriptEvents[109] = "UNIT_RESISTANCES"; g_scriptEvents[110] = "UNIT_RESISTANCES"; g_scriptEvents[111] = "UNIT_RESISTANCES"; g_scriptEvents[112] = "UNIT_RESISTANCES"; g_scriptEvents[113] = "UNIT_RESISTANCES"; g_scriptEvents[117] = "UNIT_ATTACK_POWER"; g_scriptEvents[118] = "UNIT_ATTACK_POWER"; g_scriptEvents[119] = "UNIT_ATTACK_POWER"; g_scriptEvents[120] = "UNIT_RANGED_ATTACK_POWER"; g_scriptEvents[121] = "UNIT_RANGED_ATTACK_POWER"; g_scriptEvents[122] = "UNIT_RANGED_ATTACK_POWER"; g_scriptEvents[123] = "UNIT_RANGEDDAMAGE"; g_scriptEvents[124] = "UNIT_RANGEDDAMAGE"; g_scriptEvents[125] = "UNIT_MANA"; g_scriptEvents[132] = "UNIT_MANA"; g_scriptEvents[139] = "UNIT_STATS"; g_scriptEvents[142] = "UNIT_AURA"; g_scriptEvents[143] = "UNIT_COMBAT"; g_scriptEvents[144] = "UNIT_NAME_UPDATE"; g_scriptEvents[145] = "UNIT_PORTRAIT_UPDATE"; g_scriptEvents[146] = "UNIT_MODEL_CHANGED"; g_scriptEvents[147] = "UNIT_INVENTORY_CHANGED"; g_scriptEvents[148] = "UNIT_CLASSIFICATION_CHANGED"; g_scriptEvents[149] = "UNIT_COMBO_POINTS"; g_scriptEvents[150] = "ITEM_LOCK_CHANGED"; g_scriptEvents[151] = "PLAYER_XP_UPDATE"; g_scriptEvents[152] = "PLAYER_REGEN_DISABLED"; g_scriptEvents[153] = "PLAYER_REGEN_ENABLED"; g_scriptEvents[154] = "PLAYER_AURAS_CHANGED"; g_scriptEvents[155] = "PLAYER_ENTER_COMBAT"; g_scriptEvents[156] = "PLAYER_LEAVE_COMBAT"; g_scriptEvents[157] = "PLAYER_TARGET_CHANGED"; g_scriptEvents[158] = "PLAYER_FOCUS_CHANGED"; g_scriptEvents[159] = "PLAYER_CONTROL_LOST"; g_scriptEvents[160] = "PLAYER_CONTROL_GAINED"; g_scriptEvents[161] = "PLAYER_FARSIGHT_FOCUS_CHANGED"; g_scriptEvents[162] = "PLAYER_LEVEL_UP"; g_scriptEvents[163] = "PLAYER_MONEY"; g_scriptEvents[164] = "PLAYER_DAMAGE_DONE_MODS"; g_scriptEvents[165] = "PLAYER_TOTEM_UPDATE"; g_scriptEvents[166] = "ZONE_CHANGED"; g_scriptEvents[167] = "ZONE_CHANGED_INDOORS"; g_scriptEvents[168] = "ZONE_CHANGED_NEW_AREA"; g_scriptEvents[169] = "MINIMAP_UPDATE_ZOOM"; g_scriptEvents[170] = "MINIMAP_UPDATE_TRACKING"; g_scriptEvents[171] = "SCREENSHOT_SUCCEEDED"; g_scriptEvents[172] = "SCREENSHOT_FAILED"; g_scriptEvents[173] = "ACTIONBAR_SHOWGRID"; g_scriptEvents[174] = "ACTIONBAR_HIDEGRID"; g_scriptEvents[175] = "ACTIONBAR_PAGE_CHANGED"; g_scriptEvents[176] = "ACTIONBAR_SLOT_CHANGED"; g_scriptEvents[177] = "ACTIONBAR_UPDATE_STATE"; g_scriptEvents[178] = "ACTIONBAR_UPDATE_USABLE"; g_scriptEvents[179] = "ACTIONBAR_UPDATE_COOLDOWN"; g_scriptEvents[180] = "UPDATE_BONUS_ACTIONBAR"; g_scriptEvents[181] = "PARTY_MEMBERS_CHANGED"; g_scriptEvents[182] = "PARTY_LEADER_CHANGED"; g_scriptEvents[183] = "PARTY_MEMBER_ENABLE"; g_scriptEvents[184] = "PARTY_MEMBER_DISABLE"; g_scriptEvents[185] = "PARTY_LOOT_METHOD_CHANGED"; g_scriptEvents[186] = "SYSMSG"; g_scriptEvents[187] = "UI_ERROR_MESSAGE"; g_scriptEvents[188] = "UI_INFO_MESSAGE"; g_scriptEvents[189] = "UPDATE_CHAT_COLOR"; g_scriptEvents[190] = "CHAT_MSG_ADDON"; g_scriptEvents[191] = "CHAT_MSG_SYSTEM"; g_scriptEvents[192] = "CHAT_MSG_SAY"; g_scriptEvents[193] = "CHAT_MSG_PARTY"; g_scriptEvents[194] = "CHAT_MSG_RAID"; g_scriptEvents[195] = "CHAT_MSG_GUILD"; g_scriptEvents[196] = "CHAT_MSG_OFFICER"; g_scriptEvents[197] = "CHAT_MSG_YELL"; g_scriptEvents[198] = "CHAT_MSG_WHISPER"; g_scriptEvents[199] = "CHAT_MSG_WHISPER_INFORM"; g_scriptEvents[200] = "CHAT_MSG_EMOTE"; g_scriptEvents[201] = "CHAT_MSG_TEXT_EMOTE"; g_scriptEvents[202] = "CHAT_MSG_MONSTER_SAY"; g_scriptEvents[203] = "CHAT_MSG_MONSTER_PARTY"; g_scriptEvents[204] = "CHAT_MSG_MONSTER_YELL"; g_scriptEvents[205] = "CHAT_MSG_MONSTER_WHISPER"; g_scriptEvents[206] = "CHAT_MSG_MONSTER_EMOTE"; g_scriptEvents[207] = "CHAT_MSG_CHANNEL"; g_scriptEvents[208] = "CHAT_MSG_CHANNEL_JOIN"; g_scriptEvents[209] = "CHAT_MSG_CHANNEL_LEAVE"; g_scriptEvents[210] = "CHAT_MSG_CHANNEL_LIST"; g_scriptEvents[211] = "CHAT_MSG_CHANNEL_NOTICE"; g_scriptEvents[212] = "CHAT_MSG_CHANNEL_NOTICE_USER"; g_scriptEvents[213] = "CHAT_MSG_AFK"; g_scriptEvents[214] = "CHAT_MSG_DND"; g_scriptEvents[215] = "CHAT_MSG_IGNORED"; g_scriptEvents[216] = "CHAT_MSG_SKILL"; g_scriptEvents[217] = "CHAT_MSG_LOOT"; g_scriptEvents[218] = "CHAT_MSG_MONEY"; g_scriptEvents[219] = "CHAT_MSG_OPENING"; g_scriptEvents[220] = "CHAT_MSG_TRADESKILLS"; g_scriptEvents[221] = "CHAT_MSG_PET_INFO"; g_scriptEvents[222] = "CHAT_MSG_COMBAT_MISC_INFO"; g_scriptEvents[223] = "CHAT_MSG_COMBAT_XP_GAIN"; g_scriptEvents[224] = "CHAT_MSG_COMBAT_HONOR_GAIN"; g_scriptEvents[225] = "CHAT_MSG_COMBAT_FACTION_CHANGE"; g_scriptEvents[226] = "CHAT_MSG_BG_SYSTEM_NEUTRAL"; g_scriptEvents[227] = "CHAT_MSG_BG_SYSTEM_ALLIANCE"; g_scriptEvents[228] = "CHAT_MSG_BG_SYSTEM_HORDE"; g_scriptEvents[229] = "CHAT_MSG_RAID_LEADER"; g_scriptEvents[230] = "CHAT_MSG_RAID_WARNING"; g_scriptEvents[231] = "CHAT_MSG_RAID_BOSS_WHISPER"; g_scriptEvents[232] = "CHAT_MSG_RAID_BOSS_EMOTE"; g_scriptEvents[233] = "CHAT_MSG_FILTERED"; g_scriptEvents[234] = "CHAT_MSG_BATTLEGROUND"; g_scriptEvents[235] = "CHAT_MSG_BATTLEGROUND_LEADER"; g_scriptEvents[236] = "CHAT_MSG_RESTRICTED"; // TODO // g_scriptEvents[237] = &byte_9E14FF; g_scriptEvents[238] = "CHAT_MSG_ACHIEVEMENT"; g_scriptEvents[239] = "CHAT_MSG_GUILD_ACHIEVEMENT"; g_scriptEvents[240] = "LANGUAGE_LIST_CHANGED"; g_scriptEvents[241] = "TIME_PLAYED_MSG"; g_scriptEvents[242] = "SPELLS_CHANGED"; g_scriptEvents[243] = "CURRENT_SPELL_CAST_CHANGED"; g_scriptEvents[244] = "SPELL_UPDATE_COOLDOWN"; g_scriptEvents[245] = "SPELL_UPDATE_USABLE"; g_scriptEvents[246] = "CHARACTER_POINTS_CHANGED"; g_scriptEvents[247] = "SKILL_LINES_CHANGED"; g_scriptEvents[248] = "ITEM_PUSH"; g_scriptEvents[249] = "LOOT_OPENED"; g_scriptEvents[250] = "LOOT_SLOT_CLEARED"; g_scriptEvents[251] = "LOOT_SLOT_CHANGED"; g_scriptEvents[252] = "LOOT_CLOSED"; g_scriptEvents[253] = "PLAYER_LOGIN"; g_scriptEvents[254] = "PLAYER_LOGOUT"; g_scriptEvents[255] = "PLAYER_ENTERING_WORLD"; g_scriptEvents[256] = "PLAYER_LEAVING_WORLD"; g_scriptEvents[257] = "PLAYER_ALIVE"; g_scriptEvents[258] = "PLAYER_DEAD"; g_scriptEvents[259] = "PLAYER_CAMPING"; g_scriptEvents[260] = "PLAYER_QUITING"; g_scriptEvents[261] = "LOGOUT_CANCEL"; g_scriptEvents[262] = "RESURRECT_REQUEST"; g_scriptEvents[263] = "PARTY_INVITE_REQUEST"; g_scriptEvents[264] = "PARTY_INVITE_CANCEL"; g_scriptEvents[265] = "GUILD_INVITE_REQUEST"; g_scriptEvents[266] = "GUILD_INVITE_CANCEL"; g_scriptEvents[267] = "GUILD_MOTD"; g_scriptEvents[268] = "TRADE_REQUEST"; g_scriptEvents[269] = "TRADE_REQUEST_CANCEL"; g_scriptEvents[270] = "LOOT_BIND_CONFIRM"; g_scriptEvents[271] = "EQUIP_BIND_CONFIRM"; g_scriptEvents[272] = "AUTOEQUIP_BIND_CONFIRM"; g_scriptEvents[273] = "USE_BIND_CONFIRM"; g_scriptEvents[274] = "DELETE_ITEM_CONFIRM"; g_scriptEvents[275] = "CURSOR_UPDATE"; g_scriptEvents[276] = "ITEM_TEXT_BEGIN"; g_scriptEvents[277] = "ITEM_TEXT_TRANSLATION"; g_scriptEvents[278] = "ITEM_TEXT_READY"; g_scriptEvents[279] = "ITEM_TEXT_CLOSED"; g_scriptEvents[280] = "GOSSIP_SHOW"; g_scriptEvents[281] = "GOSSIP_CONFIRM"; g_scriptEvents[282] = "GOSSIP_CONFIRM_CANCEL"; g_scriptEvents[283] = "GOSSIP_ENTER_CODE"; g_scriptEvents[284] = "GOSSIP_CLOSED"; g_scriptEvents[285] = "QUEST_GREETING"; g_scriptEvents[286] = "QUEST_DETAIL"; g_scriptEvents[287] = "QUEST_PROGRESS"; g_scriptEvents[288] = "QUEST_COMPLETE"; g_scriptEvents[289] = "QUEST_FINISHED"; g_scriptEvents[290] = "QUEST_ITEM_UPDATE"; g_scriptEvents[291] = "TAXIMAP_OPENED"; g_scriptEvents[292] = "TAXIMAP_CLOSED"; g_scriptEvents[293] = "QUEST_LOG_UPDATE"; g_scriptEvents[294] = "TRAINER_SHOW"; g_scriptEvents[295] = "TRAINER_UPDATE"; g_scriptEvents[296] = "TRAINER_DESCRIPTION_UPDATE"; g_scriptEvents[297] = "TRAINER_CLOSED"; g_scriptEvents[298] = "CVAR_UPDATE"; g_scriptEvents[299] = "TRADE_SKILL_SHOW"; g_scriptEvents[300] = "TRADE_SKILL_UPDATE"; g_scriptEvents[301] = "TRADE_SKILL_CLOSE"; g_scriptEvents[302] = "MERCHANT_SHOW"; g_scriptEvents[303] = "MERCHANT_UPDATE"; g_scriptEvents[304] = "MERCHANT_CLOSED"; g_scriptEvents[305] = "TRADE_SHOW"; g_scriptEvents[306] = "TRADE_CLOSED"; g_scriptEvents[307] = "TRADE_UPDATE"; g_scriptEvents[308] = "TRADE_ACCEPT_UPDATE"; g_scriptEvents[309] = "TRADE_TARGET_ITEM_CHANGED"; g_scriptEvents[310] = "TRADE_PLAYER_ITEM_CHANGED"; g_scriptEvents[311] = "TRADE_MONEY_CHANGED"; g_scriptEvents[312] = "PLAYER_TRADE_MONEY"; g_scriptEvents[313] = "BAG_OPEN"; g_scriptEvents[314] = "BAG_UPDATE"; g_scriptEvents[315] = "BAG_CLOSED"; g_scriptEvents[316] = "BAG_UPDATE_COOLDOWN"; g_scriptEvents[317] = "LOCALPLAYER_PET_RENAMED"; g_scriptEvents[318] = "UNIT_ATTACK"; g_scriptEvents[319] = "UNIT_DEFENSE"; g_scriptEvents[320] = "PET_ATTACK_START"; g_scriptEvents[321] = "PET_ATTACK_STOP"; g_scriptEvents[322] = "UPDATE_MOUSEOVER_UNIT"; g_scriptEvents[323] = "UNIT_SPELLCAST_SENT"; g_scriptEvents[324] = "UNIT_SPELLCAST_START"; g_scriptEvents[325] = "UNIT_SPELLCAST_STOP"; g_scriptEvents[326] = "UNIT_SPELLCAST_FAILED"; g_scriptEvents[327] = "UNIT_SPELLCAST_FAILED_QUIET"; g_scriptEvents[328] = "UNIT_SPELLCAST_INTERRUPTED"; g_scriptEvents[329] = "UNIT_SPELLCAST_DELAYED"; g_scriptEvents[330] = "UNIT_SPELLCAST_SUCCEEDED"; g_scriptEvents[331] = "UNIT_SPELLCAST_CHANNEL_START"; g_scriptEvents[332] = "UNIT_SPELLCAST_CHANNEL_UPDATE"; g_scriptEvents[333] = "UNIT_SPELLCAST_CHANNEL_STOP"; g_scriptEvents[334] = "UNIT_SPELLCAST_INTERRUPTIBLE"; g_scriptEvents[335] = "UNIT_SPELLCAST_NOT_INTERRUPTIBLE"; g_scriptEvents[336] = "PLAYER_GUILD_UPDATE"; g_scriptEvents[337] = "QUEST_ACCEPT_CONFIRM"; g_scriptEvents[338] = "PLAYERBANKSLOTS_CHANGED"; g_scriptEvents[339] = "BANKFRAME_OPENED"; g_scriptEvents[340] = "BANKFRAME_CLOSED"; g_scriptEvents[341] = "PLAYERBANKBAGSLOTS_CHANGED"; g_scriptEvents[342] = "FRIENDLIST_UPDATE"; g_scriptEvents[343] = "IGNORELIST_UPDATE"; g_scriptEvents[344] = "MUTELIST_UPDATE"; g_scriptEvents[345] = "PET_BAR_UPDATE"; g_scriptEvents[346] = "PET_BAR_UPDATE_COOLDOWN"; g_scriptEvents[347] = "PET_BAR_SHOWGRID"; g_scriptEvents[348] = "PET_BAR_HIDEGRID"; g_scriptEvents[349] = "PET_BAR_HIDE"; g_scriptEvents[350] = "PET_BAR_UPDATE_USABLE"; g_scriptEvents[351] = "MINIMAP_PING"; g_scriptEvents[352] = "MIRROR_TIMER_START"; g_scriptEvents[353] = "MIRROR_TIMER_PAUSE"; g_scriptEvents[354] = "MIRROR_TIMER_STOP"; g_scriptEvents[355] = "WORLD_MAP_UPDATE"; g_scriptEvents[356] = "WORLD_MAP_NAME_UPDATE"; g_scriptEvents[357] = "AUTOFOLLOW_BEGIN"; g_scriptEvents[358] = "AUTOFOLLOW_END"; g_scriptEvents[360] = "CINEMATIC_START"; g_scriptEvents[361] = "CINEMATIC_STOP"; g_scriptEvents[362] = "UPDATE_FACTION"; g_scriptEvents[363] = "CLOSE_WORLD_MAP"; g_scriptEvents[364] = "OPEN_TABARD_FRAME"; g_scriptEvents[365] = "CLOSE_TABARD_FRAME"; g_scriptEvents[366] = "TABARD_CANSAVE_CHANGED"; g_scriptEvents[367] = "GUILD_REGISTRAR_SHOW"; g_scriptEvents[368] = "GUILD_REGISTRAR_CLOSED"; g_scriptEvents[369] = "DUEL_REQUESTED"; g_scriptEvents[370] = "DUEL_OUTOFBOUNDS"; g_scriptEvents[371] = "DUEL_INBOUNDS"; g_scriptEvents[372] = "DUEL_FINISHED"; g_scriptEvents[373] = "TUTORIAL_TRIGGER"; g_scriptEvents[374] = "PET_DISMISS_START"; g_scriptEvents[375] = "UPDATE_BINDINGS"; g_scriptEvents[376] = "UPDATE_SHAPESHIFT_FORMS"; g_scriptEvents[377] = "UPDATE_SHAPESHIFT_FORM"; g_scriptEvents[378] = "UPDATE_SHAPESHIFT_USABLE"; g_scriptEvents[379] = "UPDATE_SHAPESHIFT_COOLDOWN"; g_scriptEvents[380] = "WHO_LIST_UPDATE"; g_scriptEvents[381] = "PETITION_SHOW"; g_scriptEvents[382] = "PETITION_CLOSED"; g_scriptEvents[383] = "EXECUTE_CHAT_LINE"; g_scriptEvents[384] = "UPDATE_MACROS"; g_scriptEvents[385] = "UPDATE_TICKET"; g_scriptEvents[386] = "UPDATE_CHAT_WINDOWS"; g_scriptEvents[387] = "CONFIRM_XP_LOSS"; g_scriptEvents[388] = "CORPSE_IN_RANGE"; g_scriptEvents[389] = "CORPSE_IN_INSTANCE"; g_scriptEvents[390] = "CORPSE_OUT_OF_RANGE"; g_scriptEvents[391] = "UPDATE_GM_STATUS"; g_scriptEvents[392] = "PLAYER_UNGHOST"; g_scriptEvents[393] = "BIND_ENCHANT"; g_scriptEvents[394] = "REPLACE_ENCHANT"; g_scriptEvents[395] = "TRADE_REPLACE_ENCHANT"; g_scriptEvents[396] = "TRADE_POTENTIAL_BIND_ENCHANT"; g_scriptEvents[397] = "PLAYER_UPDATE_RESTING"; g_scriptEvents[398] = "UPDATE_EXHAUSTION"; g_scriptEvents[399] = "PLAYER_FLAGS_CHANGED"; g_scriptEvents[400] = "GUILD_ROSTER_UPDATE"; g_scriptEvents[401] = "GM_PLAYER_INFO"; g_scriptEvents[402] = "MAIL_SHOW"; g_scriptEvents[403] = "MAIL_CLOSED"; g_scriptEvents[404] = "SEND_MAIL_MONEY_CHANGED"; g_scriptEvents[405] = "SEND_MAIL_COD_CHANGED"; g_scriptEvents[406] = "MAIL_SEND_INFO_UPDATE"; g_scriptEvents[407] = "MAIL_SEND_SUCCESS"; g_scriptEvents[408] = "MAIL_INBOX_UPDATE"; g_scriptEvents[409] = "MAIL_LOCK_SEND_ITEMS"; g_scriptEvents[410] = "MAIL_UNLOCK_SEND_ITEMS"; g_scriptEvents[411] = "BATTLEFIELDS_SHOW"; g_scriptEvents[412] = "BATTLEFIELDS_CLOSED"; g_scriptEvents[413] = "UPDATE_BATTLEFIELD_STATUS"; g_scriptEvents[414] = "UPDATE_BATTLEFIELD_SCORE"; g_scriptEvents[415] = "AUCTION_HOUSE_SHOW"; g_scriptEvents[416] = "AUCTION_HOUSE_CLOSED"; g_scriptEvents[417] = "NEW_AUCTION_UPDATE"; g_scriptEvents[418] = "AUCTION_ITEM_LIST_UPDATE"; g_scriptEvents[419] = "AUCTION_OWNED_LIST_UPDATE"; g_scriptEvents[420] = "AUCTION_BIDDER_LIST_UPDATE"; g_scriptEvents[421] = "PET_UI_UPDATE"; g_scriptEvents[422] = "PET_UI_CLOSE"; g_scriptEvents[423] = "ADDON_LOADED"; g_scriptEvents[424] = "VARIABLES_LOADED"; g_scriptEvents[425] = "MACRO_ACTION_FORBIDDEN"; g_scriptEvents[426] = "ADDON_ACTION_FORBIDDEN"; g_scriptEvents[427] = "MACRO_ACTION_BLOCKED"; g_scriptEvents[428] = "ADDON_ACTION_BLOCKED"; g_scriptEvents[429] = "START_AUTOREPEAT_SPELL"; g_scriptEvents[430] = "STOP_AUTOREPEAT_SPELL"; g_scriptEvents[431] = "PET_STABLE_SHOW"; g_scriptEvents[432] = "PET_STABLE_UPDATE"; g_scriptEvents[433] = "PET_STABLE_UPDATE_PAPERDOLL"; g_scriptEvents[434] = "PET_STABLE_CLOSED"; g_scriptEvents[435] = "RAID_ROSTER_UPDATE"; g_scriptEvents[436] = "UPDATE_PENDING_MAIL"; g_scriptEvents[437] = "UPDATE_INVENTORY_ALERTS"; g_scriptEvents[438] = "UPDATE_INVENTORY_DURABILITY"; g_scriptEvents[439] = "UPDATE_TRADESKILL_RECAST"; g_scriptEvents[440] = "OPEN_MASTER_LOOT_LIST"; g_scriptEvents[441] = "UPDATE_MASTER_LOOT_LIST"; g_scriptEvents[442] = "START_LOOT_ROLL"; g_scriptEvents[443] = "CANCEL_LOOT_ROLL"; g_scriptEvents[444] = "CONFIRM_LOOT_ROLL"; g_scriptEvents[445] = "CONFIRM_DISENCHANT_ROLL"; g_scriptEvents[446] = "INSTANCE_BOOT_START"; g_scriptEvents[447] = "INSTANCE_BOOT_STOP"; g_scriptEvents[448] = "LEARNED_SPELL_IN_TAB"; g_scriptEvents[449] = "DISPLAY_SIZE_CHANGED"; g_scriptEvents[450] = "CONFIRM_TALENT_WIPE"; g_scriptEvents[451] = "CONFIRM_BINDER"; g_scriptEvents[452] = "MAIL_FAILED"; g_scriptEvents[453] = "CLOSE_INBOX_ITEM"; g_scriptEvents[454] = "CONFIRM_SUMMON"; g_scriptEvents[455] = "CANCEL_SUMMON"; g_scriptEvents[456] = "BILLING_NAG_DIALOG"; g_scriptEvents[457] = "IGR_BILLING_NAG_DIALOG"; g_scriptEvents[458] = "PLAYER_SKINNED"; g_scriptEvents[459] = "TABARD_SAVE_PENDING"; g_scriptEvents[460] = "UNIT_QUEST_LOG_CHANGED"; g_scriptEvents[461] = "PLAYER_PVP_KILLS_CHANGED"; g_scriptEvents[462] = "PLAYER_PVP_RANK_CHANGED"; g_scriptEvents[463] = "INSPECT_HONOR_UPDATE"; g_scriptEvents[464] = "UPDATE_WORLD_STATES"; g_scriptEvents[465] = "AREA_SPIRIT_HEALER_IN_RANGE"; g_scriptEvents[466] = "AREA_SPIRIT_HEALER_OUT_OF_RANGE"; g_scriptEvents[467] = "PLAYTIME_CHANGED"; g_scriptEvents[468] = "UPDATE_LFG_TYPES"; g_scriptEvents[469] = "UPDATE_LFG_LIST"; g_scriptEvents[470] = "UPDATE_LFG_LIST_INCREMENTAL"; g_scriptEvents[471] = "START_MINIGAME"; g_scriptEvents[472] = "MINIGAME_UPDATE"; g_scriptEvents[473] = "READY_CHECK"; g_scriptEvents[474] = "READY_CHECK_CONFIRM"; g_scriptEvents[475] = "READY_CHECK_FINISHED"; g_scriptEvents[476] = "RAID_TARGET_UPDATE"; g_scriptEvents[477] = "GMSURVEY_DISPLAY"; g_scriptEvents[478] = "UPDATE_INSTANCE_INFO"; g_scriptEvents[479] = "SOCKET_INFO_UPDATE"; g_scriptEvents[480] = "SOCKET_INFO_CLOSE"; g_scriptEvents[481] = "PETITION_VENDOR_SHOW"; g_scriptEvents[482] = "PETITION_VENDOR_CLOSED"; g_scriptEvents[483] = "PETITION_VENDOR_UPDATE"; g_scriptEvents[484] = "COMBAT_TEXT_UPDATE"; g_scriptEvents[485] = "QUEST_WATCH_UPDATE"; g_scriptEvents[486] = "KNOWLEDGE_BASE_SETUP_LOAD_SUCCESS"; g_scriptEvents[487] = "KNOWLEDGE_BASE_SETUP_LOAD_FAILURE"; g_scriptEvents[488] = "KNOWLEDGE_BASE_QUERY_LOAD_SUCCESS"; g_scriptEvents[489] = "KNOWLEDGE_BASE_QUERY_LOAD_FAILURE"; g_scriptEvents[490] = "KNOWLEDGE_BASE_ARTICLE_LOAD_SUCCESS"; g_scriptEvents[491] = "KNOWLEDGE_BASE_ARTICLE_LOAD_FAILURE"; g_scriptEvents[492] = "KNOWLEDGE_BASE_SYSTEM_MOTD_UPDATED"; g_scriptEvents[493] = "KNOWLEDGE_BASE_SERVER_MESSAGE"; g_scriptEvents[494] = "ARENA_TEAM_UPDATE"; g_scriptEvents[495] = "ARENA_TEAM_ROSTER_UPDATE"; g_scriptEvents[496] = "ARENA_TEAM_INVITE_REQUEST"; g_scriptEvents[497] = "HONOR_CURRENCY_UPDATE"; g_scriptEvents[498] = "KNOWN_TITLES_UPDATE"; g_scriptEvents[499] = "NEW_TITLE_EARNED"; g_scriptEvents[500] = "OLD_TITLE_LOST"; g_scriptEvents[501] = "LFG_UPDATE"; g_scriptEvents[502] = "LFG_PROPOSAL_UPDATE"; g_scriptEvents[503] = "LFG_PROPOSAL_SHOW"; g_scriptEvents[504] = "LFG_PROPOSAL_FAILED"; g_scriptEvents[505] = "LFG_PROPOSAL_SUCCEEDED"; g_scriptEvents[506] = "LFG_ROLE_UPDATE"; g_scriptEvents[507] = "LFG_ROLE_CHECK_UPDATE"; g_scriptEvents[508] = "LFG_ROLE_CHECK_SHOW"; g_scriptEvents[509] = "LFG_ROLE_CHECK_HIDE"; g_scriptEvents[510] = "LFG_ROLE_CHECK_ROLE_CHOSEN"; g_scriptEvents[511] = "LFG_QUEUE_STATUS_UPDATE"; g_scriptEvents[512] = "LFG_BOOT_PROPOSAL_UPDATE"; g_scriptEvents[513] = "LFG_LOCK_INFO_RECEIVED"; g_scriptEvents[514] = "LFG_UPDATE_RANDOM_INFO"; g_scriptEvents[515] = "LFG_OFFER_CONTINUE"; g_scriptEvents[516] = "LFG_OPEN_FROM_GOSSIP"; g_scriptEvents[517] = "LFG_COMPLETION_REWARD"; g_scriptEvents[518] = "PARTY_LFG_RESTRICTED"; g_scriptEvents[519] = "PLAYER_ROLES_ASSIGNED"; g_scriptEvents[520] = "COMBAT_RATING_UPDATE"; g_scriptEvents[521] = "MODIFIER_STATE_CHANGED"; g_scriptEvents[522] = "UPDATE_STEALTH"; g_scriptEvents[523] = "ENABLE_TAXI_BENCHMARK"; g_scriptEvents[524] = "DISABLE_TAXI_BENCHMARK"; g_scriptEvents[525] = "VOICE_START"; g_scriptEvents[526] = "VOICE_STOP"; g_scriptEvents[527] = "VOICE_STATUS_UPDATE"; g_scriptEvents[528] = "VOICE_CHANNEL_STATUS_UPDATE"; g_scriptEvents[529] = "UPDATE_FLOATING_CHAT_WINDOWS"; g_scriptEvents[530] = "RAID_INSTANCE_WELCOME"; g_scriptEvents[531] = "MOVIE_RECORDING_PROGRESS"; g_scriptEvents[532] = "MOVIE_COMPRESSING_PROGRESS"; g_scriptEvents[533] = "MOVIE_UNCOMPRESSED_MOVIE"; g_scriptEvents[534] = "VOICE_PUSH_TO_TALK_START"; g_scriptEvents[535] = "VOICE_PUSH_TO_TALK_STOP"; g_scriptEvents[536] = "GUILDBANKFRAME_OPENED"; g_scriptEvents[537] = "GUILDBANKFRAME_CLOSED"; g_scriptEvents[538] = "GUILDBANKBAGSLOTS_CHANGED"; g_scriptEvents[539] = "GUILDBANK_ITEM_LOCK_CHANGED"; g_scriptEvents[540] = "GUILDBANK_UPDATE_TABS"; g_scriptEvents[541] = "GUILDBANK_UPDATE_MONEY"; g_scriptEvents[542] = "GUILDBANKLOG_UPDATE"; g_scriptEvents[543] = "GUILDBANK_UPDATE_WITHDRAWMONEY"; g_scriptEvents[544] = "GUILDBANK_UPDATE_TEXT"; g_scriptEvents[545] = "GUILDBANK_TEXT_CHANGED"; g_scriptEvents[546] = "CHANNEL_UI_UPDATE"; g_scriptEvents[547] = "CHANNEL_COUNT_UPDATE"; g_scriptEvents[548] = "CHANNEL_ROSTER_UPDATE"; g_scriptEvents[549] = "CHANNEL_VOICE_UPDATE"; g_scriptEvents[550] = "CHANNEL_INVITE_REQUEST"; g_scriptEvents[551] = "CHANNEL_PASSWORD_REQUEST"; g_scriptEvents[552] = "CHANNEL_FLAGS_UPDATED"; g_scriptEvents[553] = "VOICE_SESSIONS_UPDATE"; g_scriptEvents[554] = "VOICE_CHAT_ENABLED_UPDATE"; g_scriptEvents[555] = "VOICE_LEFT_SESSION"; g_scriptEvents[556] = "INSPECT_TALENT_READY"; g_scriptEvents[557] = "VOICE_SELF_MUTE"; g_scriptEvents[558] = "VOICE_PLATE_START"; g_scriptEvents[559] = "VOICE_PLATE_STOP"; g_scriptEvents[560] = "ARENA_SEASON_WORLD_STATE"; g_scriptEvents[561] = "GUILD_EVENT_LOG_UPDATE"; g_scriptEvents[562] = "GUILDTABARD_UPDATE"; g_scriptEvents[563] = "SOUND_DEVICE_UPDATE"; g_scriptEvents[564] = "COMMENTATOR_MAP_UPDATE"; g_scriptEvents[565] = "COMMENTATOR_ENTER_WORLD"; g_scriptEvents[566] = "COMBAT_LOG_EVENT"; g_scriptEvents[567] = "COMBAT_LOG_EVENT_UNFILTERED"; g_scriptEvents[568] = "COMMENTATOR_PLAYER_UPDATE"; g_scriptEvents[569] = "PLAYER_ENTERING_BATTLEGROUND"; g_scriptEvents[570] = "BARBER_SHOP_OPEN"; g_scriptEvents[571] = "BARBER_SHOP_CLOSE"; g_scriptEvents[572] = "BARBER_SHOP_SUCCESS"; g_scriptEvents[573] = "BARBER_SHOP_APPEARANCE_APPLIED"; g_scriptEvents[574] = "CALENDAR_UPDATE_INVITE_LIST"; g_scriptEvents[575] = "CALENDAR_UPDATE_EVENT_LIST"; g_scriptEvents[576] = "CALENDAR_NEW_EVENT"; g_scriptEvents[577] = "CALENDAR_OPEN_EVENT"; g_scriptEvents[578] = "CALENDAR_CLOSE_EVENT"; g_scriptEvents[579] = "CALENDAR_UPDATE_EVENT"; g_scriptEvents[580] = "CALENDAR_UPDATE_PENDING_INVITES"; g_scriptEvents[581] = "CALENDAR_EVENT_ALARM"; g_scriptEvents[582] = "CALENDAR_UPDATE_ERROR"; g_scriptEvents[583] = "CALENDAR_ACTION_PENDING"; g_scriptEvents[584] = "VEHICLE_ANGLE_SHOW"; g_scriptEvents[585] = "VEHICLE_ANGLE_UPDATE"; g_scriptEvents[586] = "VEHICLE_POWER_SHOW"; g_scriptEvents[587] = "UNIT_ENTERING_VEHICLE"; g_scriptEvents[588] = "UNIT_ENTERED_VEHICLE"; g_scriptEvents[589] = "UNIT_EXITING_VEHICLE"; g_scriptEvents[590] = "UNIT_EXITED_VEHICLE"; g_scriptEvents[591] = "VEHICLE_PASSENGERS_CHANGED"; g_scriptEvents[592] = "PLAYER_GAINS_VEHICLE_DATA"; g_scriptEvents[593] = "PLAYER_LOSES_VEHICLE_DATA"; g_scriptEvents[594] = "PET_FORCE_NAME_DECLENSION"; g_scriptEvents[595] = "LEVEL_GRANT_PROPOSED"; g_scriptEvents[596] = "SYNCHRONIZE_SETTINGS"; g_scriptEvents[597] = "PLAY_MOVIE"; g_scriptEvents[598] = "RUNE_POWER_UPDATE"; g_scriptEvents[599] = "RUNE_TYPE_UPDATE"; g_scriptEvents[600] = "ACHIEVEMENT_EARNED"; g_scriptEvents[601] = "CRITERIA_UPDATE"; g_scriptEvents[602] = "RECEIVED_ACHIEVEMENT_LIST"; g_scriptEvents[603] = "PET_RENAMEABLE"; g_scriptEvents[604] = "KNOWN_CURRENCY_TYPES_UPDATE"; g_scriptEvents[605] = "CURRENCY_DISPLAY_UPDATE"; g_scriptEvents[606] = "COMPANION_LEARNED"; g_scriptEvents[607] = "COMPANION_UNLEARNED"; g_scriptEvents[608] = "COMPANION_UPDATE"; g_scriptEvents[609] = "UNIT_THREAT_LIST_UPDATE"; g_scriptEvents[610] = "UNIT_THREAT_SITUATION_UPDATE"; g_scriptEvents[611] = "GLYPH_ADDED"; g_scriptEvents[612] = "GLYPH_REMOVED"; g_scriptEvents[613] = "GLYPH_UPDATED"; g_scriptEvents[614] = "GLYPH_ENABLED"; g_scriptEvents[615] = "GLYPH_DISABLED"; g_scriptEvents[616] = "USE_GLYPH"; g_scriptEvents[617] = "TRACKED_ACHIEVEMENT_UPDATE"; g_scriptEvents[618] = "ARENA_OPPONENT_UPDATE"; g_scriptEvents[619] = "INSPECT_ACHIEVEMENT_READY"; g_scriptEvents[620] = "RAISED_AS_GHOUL"; g_scriptEvents[621] = "PARTY_CONVERTED_TO_RAID"; g_scriptEvents[622] = "PVPQUEUE_ANYWHERE_SHOW"; g_scriptEvents[623] = "PVPQUEUE_ANYWHERE_UPDATE_AVAILABLE"; g_scriptEvents[624] = "QUEST_ACCEPTED"; g_scriptEvents[625] = "PLAYER_TALENT_UPDATE"; g_scriptEvents[626] = "ACTIVE_TALENT_GROUP_CHANGED"; g_scriptEvents[627] = "PET_TALENT_UPDATE"; g_scriptEvents[628] = "PREVIEW_TALENT_POINTS_CHANGED"; g_scriptEvents[629] = "PREVIEW_PET_TALENT_POINTS_CHANGED"; g_scriptEvents[630] = "WEAR_EQUIPMENT_SET"; g_scriptEvents[631] = "EQUIPMENT_SETS_CHANGED"; g_scriptEvents[632] = "INSTANCE_LOCK_START"; g_scriptEvents[633] = "INSTANCE_LOCK_STOP"; g_scriptEvents[634] = "PLAYER_EQUIPMENT_CHANGED"; g_scriptEvents[635] = "ITEM_LOCKED"; g_scriptEvents[636] = "ITEM_UNLOCKED"; g_scriptEvents[637] = "TRADE_SKILL_FILTER_UPDATE"; g_scriptEvents[638] = "EQUIPMENT_SWAP_PENDING"; g_scriptEvents[639] = "EQUIPMENT_SWAP_FINISHED"; g_scriptEvents[640] = "NPC_PVPQUEUE_ANYWHERE"; g_scriptEvents[641] = "UPDATE_MULTI_CAST_ACTIONBAR"; g_scriptEvents[642] = "ENABLE_XP_GAIN"; g_scriptEvents[643] = "DISABLE_XP_GAIN"; g_scriptEvents[644] = "BATTLEFIELD_MGR_ENTRY_INVITE"; g_scriptEvents[645] = "BATTLEFIELD_MGR_ENTERED"; g_scriptEvents[646] = "BATTLEFIELD_MGR_QUEUE_REQUEST_RESPONSE"; g_scriptEvents[647] = "BATTLEFIELD_MGR_EJECT_PENDING"; g_scriptEvents[648] = "BATTLEFIELD_MGR_EJECTED"; g_scriptEvents[649] = "BATTLEFIELD_MGR_QUEUE_INVITE"; g_scriptEvents[650] = "BATTLEFIELD_MGR_STATE_CHANGE"; g_scriptEvents[651] = "WORLD_STATE_UI_TIMER_UPDATE"; g_scriptEvents[652] = "END_REFUND"; g_scriptEvents[653] = "END_BOUND_TRADEABLE"; g_scriptEvents[654] = "UPDATE_CHAT_COLOR_NAME_BY_CLASS"; g_scriptEvents[655] = "GMRESPONSE_RECEIVED"; g_scriptEvents[656] = "VEHICLE_UPDATE"; g_scriptEvents[657] = "WOW_MOUSE_NOT_FOUND"; g_scriptEvents[659] = "MAIL_SUCCESS"; g_scriptEvents[660] = "TALENTS_INVOLUNTARILY_RESET"; g_scriptEvents[661] = "INSTANCE_ENCOUNTER_ENGAGE_UNIT"; g_scriptEvents[662] = "QUEST_QUERY_COMPLETE"; g_scriptEvents[663] = "QUEST_POI_UPDATE"; g_scriptEvents[664] = "PLAYER_DIFFICULTY_CHANGED"; g_scriptEvents[665] = "CHAT_MSG_PARTY_LEADER"; g_scriptEvents[666] = "VOTE_KICK_REASON_NEEDED"; g_scriptEvents[667] = "ENABLE_LOW_LEVEL_RAID"; g_scriptEvents[668] = "DISABLE_LOW_LEVEL_RAID"; g_scriptEvents[669] = "CHAT_MSG_TARGETICONS"; g_scriptEvents[670] = "AUCTION_HOUSE_DISABLED"; g_scriptEvents[671] = "AUCTION_MULTISELL_START"; g_scriptEvents[672] = "AUCTION_MULTISELL_UPDATE"; g_scriptEvents[673] = "AUCTION_MULTISELL_FAILURE"; g_scriptEvents[674] = "PET_SPELL_POWER_UPDATE"; g_scriptEvents[675] = "BN_CONNECTED"; g_scriptEvents[676] = "BN_DISCONNECTED"; g_scriptEvents[677] = "BN_SELF_ONLINE"; g_scriptEvents[678] = "BN_SELF_OFFLINE"; g_scriptEvents[679] = "BN_FRIEND_LIST_SIZE_CHANGED"; g_scriptEvents[680] = "BN_FRIEND_INVITE_LIST_INITIALIZED"; g_scriptEvents[681] = "BN_FRIEND_INVITE_SEND_RESULT"; g_scriptEvents[682] = "BN_FRIEND_INVITE_ADDED"; g_scriptEvents[683] = "BN_FRIEND_INVITE_REMOVED"; g_scriptEvents[684] = "BN_FRIEND_INFO_CHANGED"; g_scriptEvents[685] = "BN_CUSTOM_MESSAGE_CHANGED"; g_scriptEvents[686] = "BN_CUSTOM_MESSAGE_LOADED"; g_scriptEvents[687] = "CHAT_MSG_BN_WHISPER"; g_scriptEvents[688] = "CHAT_MSG_BN_WHISPER_INFORM"; g_scriptEvents[689] = "BN_CHAT_WHISPER_UNDELIVERABLE"; g_scriptEvents[690] = "BN_CHAT_CHANNEL_JOINED"; g_scriptEvents[691] = "BN_CHAT_CHANNEL_LEFT"; g_scriptEvents[692] = "BN_CHAT_CHANNEL_CLOSED"; g_scriptEvents[693] = "CHAT_MSG_BN_CONVERSATION"; g_scriptEvents[694] = "CHAT_MSG_BN_CONVERSATION_NOTICE"; g_scriptEvents[695] = "CHAT_MSG_BN_CONVERSATION_LIST"; g_scriptEvents[696] = "BN_CHAT_CHANNEL_MESSAGE_UNDELIVERABLE"; g_scriptEvents[697] = "BN_CHAT_CHANNEL_MESSAGE_BLOCKED"; g_scriptEvents[698] = "BN_CHAT_CHANNEL_MEMBER_JOINED"; g_scriptEvents[699] = "BN_CHAT_CHANNEL_MEMBER_LEFT"; g_scriptEvents[700] = "BN_CHAT_CHANNEL_MEMBER_UPDATED"; g_scriptEvents[701] = "BN_CHAT_CHANNEL_CREATE_SUCCEEDED"; g_scriptEvents[702] = "BN_CHAT_CHANNEL_CREATE_FAILED"; g_scriptEvents[703] = "BN_CHAT_CHANNEL_INVITE_SUCCEEDED"; g_scriptEvents[704] = "BN_CHAT_CHANNEL_INVITE_FAILED"; g_scriptEvents[705] = "BN_BLOCK_LIST_UPDATED"; g_scriptEvents[706] = "BN_SYSTEM_MESSAGE"; g_scriptEvents[707] = "BN_REQUEST_FOF_SUCCEEDED"; g_scriptEvents[708] = "BN_REQUEST_FOF_FAILED"; g_scriptEvents[709] = "BN_NEW_PRESENCE"; g_scriptEvents[710] = "BN_TOON_NAME_UPDATED"; g_scriptEvents[711] = "BN_FRIEND_ACCOUNT_ONLINE"; g_scriptEvents[712] = "BN_FRIEND_ACCOUNT_OFFLINE"; g_scriptEvents[713] = "BN_FRIEND_TOON_ONLINE"; g_scriptEvents[714] = "BN_FRIEND_TOON_OFFLINE"; g_scriptEvents[715] = "BN_MATURE_LANGUAGE_FILTER"; g_scriptEvents[716] = "COMMENTATOR_SKIRMISH_QUEUE_REQUEST"; g_scriptEvents[717] = "COMMENTATOR_SKIRMISH_MODE_REQUEST"; g_scriptEvents[718] = "CHAT_MSG_BN_INLINE_TOAST_ALERT"; g_scriptEvents[719] = "CHAT_MSG_BN_INLINE_TOAST_BROADCAST"; g_scriptEvents[720] = "CHAT_MSG_BN_INLINE_TOAST_BROADCAST_INFORM"; g_scriptEvents[721] = "CHAT_MSG_BN_INLINE_TOAST_CONVERSATION"; }