Name | Type | is_array | initial_value |
-- Max Escape Creation v.2.0 - 2023-07-08 15:46:38
function get_MEC_core()
info = function()
local info = {}
info.GetStackTrace = function()
local trace, lastMsg, i, separator = "", "", 5, " > "
local store = function(msg) lastMsg = msg:sub(1,-3) end
xpcall(error, store, "", 4)
while lastMsg:sub(1,11) == "war3map.lua" or lastMsg:sub(1,14) == "blizzard.j.lua" do
if lastMsg:sub(1,11) == "war3map.lua" then
trace = separator .. lastMsg:sub(13) .. trace
else
trace = separator .. lastMsg .. trace
end
xpcall(error, store, "", i)
i = i+1
end
return "T" .. trace
end
return info
end
json = function()
--
-- json.lua
--
-- Copyright (c) 2020 rxi
--
-- Permission is hereby granted, free of charge, to any person obtaining a copy of
-- this software and associated documentation files (the "Software"), to deal in
-- the Software without restriction, including without limitation the rights to
-- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-- of the Software, and to permit persons to whom the Software is furnished to do
-- so, subject to the following conditions:
--
-- The above copyright notice and this permission notice shall be included in all
-- copies or substantial portions of the Software.
--
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-- SOFTWARE.
--
local json = { _version = "0.1.2" }
-------------------------------------------------------------------------------
-- Encode
-------------------------------------------------------------------------------
local encode
local escape_char_map = {
[ "\\" ] = "\\",
[ "\"" ] = "\"",
[ "\b" ] = "b",
[ "\f" ] = "f",
[ "\n" ] = "n",
[ "\r" ] = "r",
[ "\t" ] = "t",
}
local escape_char_map_inv = { [ "/" ] = "/" }
for k, v in pairs(escape_char_map) do
escape_char_map_inv[v] = k
end
local function escape_char(c)
return "\\" .. (escape_char_map[c] or string.format("u%%04x", c:byte()))
end
local function encode_nil(val)
return "null"
end
local resCounter = 0
local resTable = {}
local function emptyTable(t)
for k in pairs (t) do
t [k] = nil
end
end
local function getNewTable()
resCounter = resCounter + 1
if (not resTable[resCounter]) then
resTable[resCounter] = {}
else
emptyTable(resTable[resCounter])
end
return resTable[resCounter]
end
local function encode_table(val, stack)
local res = getNewTable()
if(not stack)then
stack = getNewTable()
end
-- Circular reference?
if stack[val] then error("circular reference") end
stack[val] = true
if rawget(val, 1) ~= nil or next(val) == nil then
-- Treat as array -- check keys are valid and it is not sparse
local n = 0
for k in pairs(val) do
if type(k) ~= "number" then
error("invalid table: mixed or invalid key types")
end
n = n + 1
end
if n ~= #val then
error("invalid table: sparse array")
end
-- Encode
for i, v in ipairs(val) do
table.insert(res, encode(v, stack))
end
stack[val] = nil
return "[" .. table.concat(res, ",") .. "]"
else
-- Treat as an object
for k, v in pairs(val) do
if type(k) ~= "string" then
error("invalid table: mixed or invalid key types")
end
table.insert(res, encode(k, stack) .. ":" .. encode(v, stack))
end
stack[val] = nil
return "{" .. table.concat(res, ",") .. "}"
end
end
local function encode_string(val)
return '"' .. val:gsub('[%%z\1-\31\\"]', escape_char) .. '"'
end
local function encode_number(val)
-- Check for NaN, -inf and inf
if val ~= val or val <= -math.huge or val >= math.huge then
error("unexpected number value '" .. tostring(val) .. "'")
end
return string.format("%%.14g", val)
end
local type_func_map = {
[ "nil" ] = encode_nil,
[ "table" ] = encode_table,
[ "string" ] = encode_string,
[ "number" ] = encode_number,
[ "boolean" ] = tostring,
}
encode = function(val, stack)
local t = type(val)
if t == "userdata" then
return "@userdata"
end
if t == "function" then
return "@function"
end
local f = type_func_map[t]
if f then
return f(val, stack)
end
error("unexpected type '" .. t .. "'")
end
function json.encode(dis, val)
resCounter = 0
return ( encode(val) )
end
-------------------------------------------------------------------------------
-- Decode
-------------------------------------------------------------------------------
local parse
local function create_set(...)
local res = {}
for i = 1, select("#", ...) do
res[ select(i, ...) ] = true
end
return res
end
local space_chars = create_set(" ", "\t", "\r", "\n")
local delim_chars = create_set(" ", "\t", "\r", "\n", "]", "}", ",")
local escape_chars = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u")
local literals = create_set("true", "false", "null")
local literal_map = {
[ "true" ] = true,
[ "false" ] = false,
[ "null" ] = nil,
}
local function next_char(str, idx, set, negate)
for i = idx, #str do
if set[str:sub(i, i)] ~= negate then
return i
end
end
return #str + 1
end
local function decode_error(str, idx, msg)
local line_count = 1
local col_count = 1
for i = 1, idx - 1 do
col_count = col_count + 1
if str:sub(i, i) == "\n" then
line_count = line_count + 1
col_count = 1
end
end
error( string.format("%%s at line %%d col %%d", msg, line_count, col_count) )
end
local function codepoint_to_utf8(n)
-- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa
local f = math.floor
if n <= 0x7f then
return string.char(n)
elseif n <= 0x7ff then
return string.char(f(n / 64) + 192, n %% 64 + 128)
elseif n <= 0xffff then
return string.char(f(n / 4096) + 224, f(n %% 4096 / 64) + 128, n %% 64 + 128)
elseif n <= 0x10ffff then
return string.char(f(n / 262144) + 240, f(n %% 262144 / 4096) + 128,
f(n %% 4096 / 64) + 128, n %% 64 + 128)
end
error( string.format("invalid unicode codepoint '%%x'", n) )
end
local function parse_unicode_escape(s)
local n1 = tonumber( s:sub(1, 4), 16 )
local n2 = tonumber( s:sub(7, 10), 16 )
-- Surrogate pair?
if n2 then
return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000)
else
return codepoint_to_utf8(n1)
end
end
local function parse_string(str, i)
local res = ""
local j = i + 1
local k = j
while j <= #str do
local x = str:byte(j)
if x < 32 then
decode_error(str, j, "control character in string")
elseif x == 92 then -- `\`: Escape
res = res .. str:sub(k, j - 1)
j = j + 1
local c = str:sub(j, j)
if c == "u" then
local hex = str:match("^[dD][89aAbB]%%x%%x\\u%%x%%x%%x%%x", j + 1)
or str:match("^%%x%%x%%x%%x", j + 1)
or decode_error(str, j - 1, "invalid unicode escape in string")
res = res .. parse_unicode_escape(hex)
j = j + #hex
else
if not escape_chars[c] then
decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string")
end
res = res .. escape_char_map_inv[c]
end
k = j + 1
elseif x == 34 then -- `"`: End of string
res = res .. str:sub(k, j - 1)
return res, j + 1
end
j = j + 1
end
decode_error(str, i, "expected closing quote for string")
end
local function parse_number(str, i)
local x = next_char(str, i, delim_chars)
local s = str:sub(i, x - 1)
local n = tonumber(s)
if not n then
decode_error(str, i, "invalid number '" .. s .. "'")
end
return n, x
end
local function parse_literal(str, i)
local x = next_char(str, i, delim_chars)
local word = str:sub(i, x - 1)
if not literals[word] then
decode_error(str, i, "invalid literal '" .. word .. "'")
end
return literal_map[word], x
end
local function parse_array(str, i)
local res = {}
local n = 1
i = i + 1
while 1 do
local x
i = next_char(str, i, space_chars, true)
-- Empty / end of array?
if str:sub(i, i) == "]" then
i = i + 1
break
end
-- Read token
x, i = parse(str, i)
res[n] = x
n = n + 1
-- Next token
i = next_char(str, i, space_chars, true)
local chr = str:sub(i, i)
i = i + 1
if chr == "]" then break end
if chr ~= "," then decode_error(str, i, "expected ']' or ','") end
end
return res, i
end
local function parse_object(str, i)
local res = {}
i = i + 1
while 1 do
local key, val
i = next_char(str, i, space_chars, true)
-- Empty / end of object?
if str:sub(i, i) == "}" then
i = i + 1
break
end
-- Read key
if str:sub(i, i) ~= '"' then
decode_error(str, i, "expected string for key")
end
key, i = parse(str, i)
-- Read ':' delimiter
i = next_char(str, i, space_chars, true)
if str:sub(i, i) ~= ":" then
decode_error(str, i, "expected ':' after key")
end
i = next_char(str, i + 1, space_chars, true)
-- Read value
val, i = parse(str, i)
-- Set
res[key] = val
-- Next token
i = next_char(str, i, space_chars, true)
local chr = str:sub(i, i)
i = i + 1
if chr == "}" then break end
if chr ~= "," then decode_error(str, i, "expected '}' or ','") end
end
return res, i
end
local char_func_map = {
[ '"' ] = parse_string,
[ "0" ] = parse_number,
[ "1" ] = parse_number,
[ "2" ] = parse_number,
[ "3" ] = parse_number,
[ "4" ] = parse_number,
[ "5" ] = parse_number,
[ "6" ] = parse_number,
[ "7" ] = parse_number,
[ "8" ] = parse_number,
[ "9" ] = parse_number,
[ "-" ] = parse_number,
[ "t" ] = parse_literal,
[ "f" ] = parse_literal,
[ "n" ] = parse_literal,
[ "[" ] = parse_array,
[ "{" ] = parse_object,
}
parse = function(str, idx)
local chr = str:sub(idx, idx)
local f = char_func_map[chr]
if f then
return f(str, idx)
end
decode_error(str, idx, "unexpected character '" .. chr .. "'")
end
function json.decode(dis, str)
if type(str) ~= "string" then
error("expected argument of type string, got " .. type(str))
end
local res, idx = parse(str, next_char(str, 1, space_chars, true))
idx = next_char(str, idx, space_chars, true)
if idx <= #str then
decode_error(str, idx, "trailing garbage")
end
return res
end
return json
end
local ____modules = {}
local ____moduleCache = {}
local ____moduleCache2 = {}
local ____moduleCircular = false
local ____moduleCircularArray = {}
local ____originalRequire = require
local function require(file, ...)
if ____moduleCache[file] then
return ____moduleCache[file].value
end
if ____modules[file] then
local module = ____modules[file]
if ____moduleCache2[file] == 2 then
error("Circular require detected: " .. table.concat(____moduleCircularArray, " -> ") .. " -> " .. file)
end
if ____moduleCache2[file] == 1 then
____moduleCircular = true
____moduleCache2[file] = 2
end
if ____moduleCircular then
____moduleCircularArray[#____moduleCircularArray + 1] = file
end
if ____moduleCache2[file] == nil then
____moduleCache2[file] = 1
end
____moduleCache[file] = { value = (select("#", ...) > 0) and module(...) or module(file) }
return ____moduleCache[file].value
else
if ____originalRequire then
return ____originalRequire(file)
else
error("module '" .. file .. "' not found")
end
end
end
____modules = {
["lualib_bundle"] = function(...)
local function __TS__ArrayIsArray(value)
return type(value) == "table" and (value[1] ~= nil or next(value) == nil)
end
local function __TS__ArrayConcat(self, ...)
local items = {...}
local result = {}
local len = 0
for i = 1, #self do
len = len + 1
result[len] = self[i]
end
for i = 1, #items do
local item = items[i]
if __TS__ArrayIsArray(item) then
for j = 1, #item do
len = len + 1
result[len] = item[j]
end
else
len = len + 1
result[len] = item
end
end
return result
end
local __TS__Symbol, Symbol
do
local symbolMetatable = {__tostring = function(self)
return ("Symbol(" .. (self.description or "")) .. ")"
end}
function __TS__Symbol(description)
return setmetatable({description = description}, symbolMetatable)
end
Symbol = {
iterator = __TS__Symbol("Symbol.iterator"),
hasInstance = __TS__Symbol("Symbol.hasInstance"),
species = __TS__Symbol("Symbol.species"),
toStringTag = __TS__Symbol("Symbol.toStringTag")
}
end
local function __TS__ArrayEntries(array)
local key = 0
return {
[Symbol.iterator] = function(self)
return self
end,
next = function(self)
local result = {done = array[key + 1] == nil, value = {key, array[key + 1]}}
key = key + 1
return result
end
}
end
local function __TS__ArrayEvery(self, callbackfn, thisArg)
for i = 1, #self do
if not callbackfn(thisArg, self[i], i - 1, self) then
return false
end
end
return true
end
local function __TS__ArrayFilter(self, callbackfn, thisArg)
local result = {}
local len = 0
for i = 1, #self do
if callbackfn(thisArg, self[i], i - 1, self) then
len = len + 1
result[len] = self[i]
end
end
return result
end
local function __TS__ArrayForEach(self, callbackFn, thisArg)
for i = 1, #self do
callbackFn(thisArg, self[i], i - 1, self)
end
end
local function __TS__ArrayFind(self, predicate, thisArg)
for i = 1, #self do
local elem = self[i]
if predicate(thisArg, elem, i - 1, self) then
return elem
end
end
return nil
end
local function __TS__ArrayFindIndex(self, callbackFn, thisArg)
for i = 1, #self do
if callbackFn(thisArg, self[i], i - 1, self) then
return i - 1
end
end
return -1
end
local __TS__Iterator
do
local function iteratorGeneratorStep(self)
local co = self.____coroutine
local status, value = coroutine.resume(co)
if not status then
error(value, 0)
end
if coroutine.status(co) == "dead" then
return
end
return true, value
end
local function iteratorIteratorStep(self)
local result = self:next()
if result.done then
return
end
return true, result.value
end
local function iteratorStringStep(self, index)
index = index + 1
if index > #self then
return
end
return index, string.sub(self, index, index)
end
function __TS__Iterator(iterable)
if type(iterable) == "string" then
return iteratorStringStep, iterable, 0
elseif iterable.____coroutine ~= nil then
return iteratorGeneratorStep, iterable
elseif iterable[Symbol.iterator] then
local iterator = iterable[Symbol.iterator](iterable)
return iteratorIteratorStep, iterator
else
return ipairs(iterable)
end
end
end
local __TS__ArrayFrom
do
local function arrayLikeStep(self, index)
index = index + 1
if index > self.length then
return
end
return index, self[index]
end
local function arrayLikeIterator(arr)
if type(arr.length) == "number" then
return arrayLikeStep, arr, 0
end
return __TS__Iterator(arr)
end
function __TS__ArrayFrom(arrayLike, mapFn, thisArg)
local result = {}
if mapFn == nil then
for ____, v in arrayLikeIterator(arrayLike) do
result[#result + 1] = v
end
else
for i, v in arrayLikeIterator(arrayLike) do
result[#result + 1] = mapFn(thisArg, v, i - 1)
end
end
return result
end
end
local function __TS__ArrayIncludes(self, searchElement, fromIndex)
if fromIndex == nil then
fromIndex = 0
end
local len = #self
local k = fromIndex
if fromIndex < 0 then
k = len + fromIndex
end
if k < 0 then
k = 0
end
for i = k + 1, len do
if self[i] == searchElement then
return true
end
end
return false
end
local function __TS__ArrayIndexOf(self, searchElement, fromIndex)
if fromIndex == nil then
fromIndex = 0
end
local len = #self
if len == 0 then
return -1
end
if fromIndex >= len then
return -1
end
if fromIndex < 0 then
fromIndex = len + fromIndex
if fromIndex < 0 then
fromIndex = 0
end
end
for i = fromIndex + 1, len do
if self[i] == searchElement then
return i - 1
end
end
return -1
end
local function __TS__ArrayJoin(self, separator)
if separator == nil then
separator = ","
end
local parts = {}
for i = 1, #self do
parts[i] = tostring(self[i])
end
return table.concat(parts, separator)
end
local function __TS__ArrayMap(self, callbackfn, thisArg)
local result = {}
for i = 1, #self do
result[i] = callbackfn(thisArg, self[i], i - 1, self)
end
return result
end
local function __TS__ArrayPush(self, ...)
local items = {...}
local len = #self
for i = 1, #items do
len = len + 1
self[len] = items[i]
end
return len
end
local function __TS__ArrayPushArray(self, items)
local len = #self
for i = 1, #items do
len = len + 1
self[len] = items[i]
end
return len
end
local function __TS__ArrayReduce(self, callbackFn, ...)
local len = #self
local k = 0
local accumulator = nil
if select("#", ...) ~= 0 then
accumulator = ...
elseif len > 0 then
accumulator = self[1]
k = 1
else
error("Reduce of empty array with no initial value", 0)
end
for i = k + 1, len do
accumulator = callbackFn(
nil,
accumulator,
self[i],
i - 1,
self
)
end
return accumulator
end
local function __TS__ArrayReduceRight(self, callbackFn, ...)
local len = #self
local k = len - 1
local accumulator = nil
if select("#", ...) ~= 0 then
accumulator = ...
elseif len > 0 then
accumulator = self[k + 1]
k = k - 1
else
error("Reduce of empty array with no initial value", 0)
end
for i = k + 1, 1, -1 do
accumulator = callbackFn(
nil,
accumulator,
self[i],
i - 1,
self
)
end
return accumulator
end
local function __TS__ArrayReverse(self)
local i = 1
local j = #self
while i < j do
local temp = self[j]
self[j] = self[i]
self[i] = temp
i = i + 1
j = j - 1
end
return self
end
local function __TS__ArrayUnshift(self, ...)
local items = {...}
local numItemsToInsert = #items
if numItemsToInsert == 0 then
return #self
end
for i = #self, 1, -1 do
self[i + numItemsToInsert] = self[i]
end
for i = 1, numItemsToInsert do
self[i] = items[i]
end
return #self
end
local function __TS__ArraySort(self, compareFn)
if compareFn ~= nil then
table.sort(
self,
function(a, b) return compareFn(nil, a, b) < 0 end
)
else
table.sort(self)
end
return self
end
local function __TS__ArraySlice(self, first, last)
local len = #self
first = first or 0
if first < 0 then
first = len + first
if first < 0 then
first = 0
end
else
if first > len then
first = len
end
end
last = last or len
if last < 0 then
last = len + last
if last < 0 then
last = 0
end
else
if last > len then
last = len
end
end
local out = {}
first = first + 1
last = last + 1
local n = 1
while first < last do
out[n] = self[first]
first = first + 1
n = n + 1
end
return out
end
local function __TS__ArraySome(self, callbackfn, thisArg)
for i = 1, #self do
if callbackfn(thisArg, self[i], i - 1, self) then
return true
end
end
return false
end
local function __TS__ArraySplice(self, start, deleteCount)
local len = #self
local actualArgumentCount = 2
if start < 0 then
start = len + start
if start < 0 then
start = 0
end
elseif start > len then
start = len
end
local itemCount = actualArgumentCount - 2
if itemCount < 0 then
itemCount = 0
end
local actualDeleteCount
if actualArgumentCount == 0 then
actualDeleteCount = 0
elseif actualArgumentCount == 1 then
actualDeleteCount = len - start
else
actualDeleteCount = deleteCount or 0
if actualDeleteCount < 0 then
actualDeleteCount = 0
end
if actualDeleteCount > len - start then
actualDeleteCount = len - start
end
end
if itemCount < actualDeleteCount then
for k = start + 1, len - actualDeleteCount do
local from = k + actualDeleteCount
local to = k + itemCount
if self[from] then
self[to] = self[from]
else
self[to] = nil
end
end
for k = len - actualDeleteCount + itemCount + 1, len do
self[k] = nil
end
elseif itemCount > actualDeleteCount then
for k = len - actualDeleteCount, start + 1, -1 do
local from = k + actualDeleteCount
local to = k + itemCount
if self[from] then
self[to] = self[from]
else
self[to] = nil
end
end
end
for k = #self, len - actualDeleteCount + itemCount + 1, -1 do
self[k] = nil
end
end
local function __TS__ArrayToObject(self)
local object = {}
for i = 1, #self do
object[i - 1] = self[i]
end
return object
end
local function __TS__ArrayFlat(self, depth)
if depth == nil then
depth = 1
end
local result = {}
local len = 0
for i = 1, #self do
local value = self[i]
if depth > 0 and __TS__ArrayIsArray(value) then
local toAdd
if depth == 1 then
toAdd = value
else
toAdd = __TS__ArrayFlat(value, depth - 1)
end
for j = 1, #toAdd do
local val = toAdd[j]
len = len + 1
result[len] = val
end
else
len = len + 1
result[len] = value
end
end
return result
end
local function __TS__ArrayFlatMap(self, callback, thisArg)
local result = {}
local len = 0
for i = 1, #self do
local value = callback(thisArg, self[i], i - 1, self)
if __TS__ArrayIsArray(value) then
for j = 1, #value do
len = len + 1
result[len] = value[j]
end
else
len = len + 1
result[len] = value
end
end
return result
end
local function __TS__ArraySetLength(self, length)
if length < 0 or length ~= length or length == math.huge or math.floor(length) ~= length then
error(
"invalid array length: " .. tostring(length),
0
)
end
for i = length + 1, #self do
self[i] = nil
end
return length
end
local function __TS__InstanceOf(obj, classTbl)
if type(classTbl) ~= "table" then
error("Right-hand side of 'instanceof' is not an object", 0)
end
if classTbl[Symbol.hasInstance] ~= nil then
return not not classTbl[Symbol.hasInstance](classTbl, obj)
end
if type(obj) == "table" then
local luaClass = obj.constructor
while luaClass ~= nil do
if luaClass == classTbl then
return true
end
luaClass = luaClass.____super
end
end
return false
end
local function __TS__New(target, ...)
local instance = setmetatable({}, target.prototype)
instance:____constructor(...)
return instance
end
local function __TS__Class(self)
local c = {prototype = {}}
c.prototype.__index = c.prototype
c.prototype.constructor = c
return c
end
local __TS__Unpack = table.unpack or unpack
local function __TS__FunctionBind(fn, ...)
local boundArgs = {...}
return function(____, ...)
local args = {...}
__TS__ArrayUnshift(
args,
__TS__Unpack(boundArgs)
)
return fn(__TS__Unpack(args))
end
end
local __TS__Promise
do
local function promiseDeferred(self)
local resolve
local reject
local promise = __TS__New(
__TS__Promise,
function(____, res, rej)
resolve = res
reject = rej
end
)
return {promise = promise, resolve = resolve, reject = reject}
end
local function isPromiseLike(self, thing)
return __TS__InstanceOf(thing, __TS__Promise)
end
__TS__Promise = __TS__Class()
__TS__Promise.name = "__TS__Promise"
function __TS__Promise.prototype.____constructor(self, executor)
self.state = 0
self.fulfilledCallbacks = {}
self.rejectedCallbacks = {}
self.finallyCallbacks = {}
do
local function ____catch(e)
self:reject(e)
end
local ____try, ____hasReturned = pcall(function()
executor(
nil,
__TS__FunctionBind(self.resolve, self),
__TS__FunctionBind(self.reject, self)
)
end)
if not ____try then
____catch(____hasReturned)
end
end
end
function __TS__Promise.resolve(data)
local promise = __TS__New(
__TS__Promise,
function()
end
)
promise.state = 1
promise.value = data
return promise
end
function __TS__Promise.reject(reason)
local promise = __TS__New(
__TS__Promise,
function()
end
)
promise.state = 2
promise.rejectionReason = reason
return promise
end
__TS__Promise.prototype["then"] = function(self, onFulfilled, onRejected)
local ____promiseDeferred_result_0 = promiseDeferred(nil)
local promise = ____promiseDeferred_result_0.promise
local resolve = ____promiseDeferred_result_0.resolve
local reject = ____promiseDeferred_result_0.reject
local isFulfilled = self.state == 1
local isRejected = self.state == 2
if onFulfilled then
local internalCallback = self:createPromiseResolvingCallback(onFulfilled, resolve, reject)
local ____self_fulfilledCallbacks_1 = self.fulfilledCallbacks
____self_fulfilledCallbacks_1[#____self_fulfilledCallbacks_1 + 1] = internalCallback
if isFulfilled then
internalCallback(nil, self.value)
end
else
local ____self_fulfilledCallbacks_2 = self.fulfilledCallbacks
____self_fulfilledCallbacks_2[#____self_fulfilledCallbacks_2 + 1] = function(____, v) return resolve(nil, v) end
end
if onRejected then
local internalCallback = self:createPromiseResolvingCallback(onRejected, resolve, reject)
local ____self_rejectedCallbacks_3 = self.rejectedCallbacks
____self_rejectedCallbacks_3[#____self_rejectedCallbacks_3 + 1] = internalCallback
if isRejected then
internalCallback(nil, self.rejectionReason)
end
else
local ____self_rejectedCallbacks_4 = self.rejectedCallbacks
____self_rejectedCallbacks_4[#____self_rejectedCallbacks_4 + 1] = function(____, err) return reject(nil, err) end
end
if isFulfilled then
resolve(nil, self.value)
end
if isRejected then
reject(nil, self.rejectionReason)
end
return promise
end
function __TS__Promise.prototype.catch(self, onRejected)
return self["then"](self, nil, onRejected)
end
function __TS__Promise.prototype.finally(self, onFinally)
if onFinally then
local ____self_finallyCallbacks_5 = self.finallyCallbacks
____self_finallyCallbacks_5[#____self_finallyCallbacks_5 + 1] = onFinally
if self.state ~= 0 then
onFinally(nil)
end
end
return self
end
function __TS__Promise.prototype.resolve(self, data)
if __TS__InstanceOf(data, __TS__Promise) then
data["then"](
data,
function(____, v) return self:resolve(v) end,
function(____, err) return self:reject(err) end
)
return
end
if self.state == 0 then
self.state = 1
self.value = data
for ____, callback in ipairs(self.fulfilledCallbacks) do
callback(nil, data)
end
for ____, callback in ipairs(self.finallyCallbacks) do
callback(nil)
end
end
end
function __TS__Promise.prototype.reject(self, reason)
if self.state == 0 then
self.state = 2
self.rejectionReason = reason
for ____, callback in ipairs(self.rejectedCallbacks) do
callback(nil, reason)
end
for ____, callback in ipairs(self.finallyCallbacks) do
callback(nil)
end
end
end
function __TS__Promise.prototype.createPromiseResolvingCallback(self, f, resolve, reject)
return function(____, value)
do
local function ____catch(e)
reject(nil, e)
end
local ____try, ____hasReturned = pcall(function()
self:handleCallbackData(
f(nil, value),
resolve,
reject
)
end)
if not ____try then
____catch(____hasReturned)
end
end
end
end
function __TS__Promise.prototype.handleCallbackData(self, data, resolve, reject)
if isPromiseLike(nil, data) then
local nextpromise = data
if nextpromise.state == 1 then
resolve(nil, nextpromise.value)
elseif nextpromise.state == 2 then
reject(nil, nextpromise.rejectionReason)
else
data["then"](data, resolve, reject)
end
else
resolve(nil, data)
end
end
end
local function __TS__AsyncAwaiter(generator)
return __TS__New(
__TS__Promise,
function(____, resolve, reject)
local adopt, fulfilled, step, resolved, asyncCoroutine
function adopt(self, value)
local ____temp_0
if __TS__InstanceOf(value, __TS__Promise) then
____temp_0 = value
else
____temp_0 = __TS__Promise.resolve(value)
end
return ____temp_0
end
function fulfilled(self, value)
local success, resultOrError = coroutine.resume(asyncCoroutine, value)
if success then
step(nil, resultOrError)
else
reject(nil, resultOrError)
end
end
function step(self, result)
if resolved then
return
end
if coroutine.status(asyncCoroutine) == "dead" then
resolve(nil, result)
else
local ____self_1 = adopt(nil, result)
____self_1["then"](____self_1, fulfilled, reject)
end
end
resolved = false
asyncCoroutine = coroutine.create(generator)
local success, resultOrError = coroutine.resume(
asyncCoroutine,
function(____, v)
resolved = true
local ____self_2 = adopt(nil, v)
____self_2["then"](____self_2, resolve, reject)
end
)
if success then
step(nil, resultOrError)
else
reject(nil, resultOrError)
end
end
)
end
local function __TS__Await(thing)
return coroutine.yield(thing)
end
local function __TS__ClassExtends(target, base)
target.____super = base
local staticMetatable = setmetatable({__index = base}, base)
setmetatable(target, staticMetatable)
local baseMetatable = getmetatable(base)
if baseMetatable then
if type(baseMetatable.__index) == "function" then
staticMetatable.__index = baseMetatable.__index
end
if type(baseMetatable.__newindex) == "function" then
staticMetatable.__newindex = baseMetatable.__newindex
end
end
setmetatable(target.prototype, base.prototype)
if type(base.prototype.__index) == "function" then
target.prototype.__index = base.prototype.__index
end
if type(base.prototype.__newindex) == "function" then
target.prototype.__newindex = base.prototype.__newindex
end
if type(base.prototype.__tostring) == "function" then
target.prototype.__tostring = base.prototype.__tostring
end
end
local function __TS__CloneDescriptor(____bindingPattern0)
local value
local writable
local set
local get
local configurable
local enumerable
enumerable = ____bindingPattern0.enumerable
configurable = ____bindingPattern0.configurable
get = ____bindingPattern0.get
set = ____bindingPattern0.set
writable = ____bindingPattern0.writable
value = ____bindingPattern0.value
local descriptor = {enumerable = enumerable == true, configurable = configurable == true}
local hasGetterOrSetter = get ~= nil or set ~= nil
local hasValueOrWritableAttribute = writable ~= nil or value ~= nil
if hasGetterOrSetter and hasValueOrWritableAttribute then
error("Invalid property descriptor. Cannot both specify accessors and a value or writable attribute.", 0)
end
if get or set then
descriptor.get = get
descriptor.set = set
else
descriptor.value = value
descriptor.writable = writable == true
end
return descriptor
end
local function __TS__ObjectAssign(target, ...)
local sources = {...}
for i = 1, #sources do
local source = sources[i]
for key in pairs(source) do
target[key] = source[key]
end
end
return target
end
local function __TS__ObjectGetOwnPropertyDescriptor(object, key)
local metatable = getmetatable(object)
if not metatable then
return
end
if not rawget(metatable, "_descriptors") then
return
end
return rawget(metatable, "_descriptors")[key]
end
local __TS__SetDescriptor
do
local function descriptorIndex(self, key)
local value = rawget(self, key)
if value ~= nil then
return value
end
local metatable = getmetatable(self)
while metatable do
local rawResult = rawget(metatable, key)
if rawResult ~= nil then
return rawResult
end
local descriptors = rawget(metatable, "_descriptors")
if descriptors then
local descriptor = descriptors[key]
if descriptor then
if descriptor.get then
return descriptor.get(self)
end
return descriptor.value
end
end
metatable = getmetatable(metatable)
end
end
local function descriptorNewIndex(self, key, value)
local metatable = getmetatable(self)
while metatable do
local descriptors = rawget(metatable, "_descriptors")
if descriptors then
local descriptor = descriptors[key]
if descriptor then
if descriptor.set then
descriptor.set(self, value)
else
if descriptor.writable == false then
error(
((("Cannot assign to read only property '" .. key) .. "' of object '") .. tostring(self)) .. "'",
0
)
end
descriptor.value = value
end
return
end
end
metatable = getmetatable(metatable)
end
rawset(self, key, value)
end
function __TS__SetDescriptor(target, key, desc, isPrototype)
if isPrototype == nil then
isPrototype = false
end
local ____isPrototype_0
if isPrototype then
____isPrototype_0 = target
else
____isPrototype_0 = getmetatable(target)
end
local metatable = ____isPrototype_0
if not metatable then
metatable = {}
setmetatable(target, metatable)
end
local value = rawget(target, key)
if value ~= nil then
rawset(target, key, nil)
end
if not rawget(metatable, "_descriptors") then
metatable._descriptors = {}
end
local descriptor = __TS__CloneDescriptor(desc)
metatable._descriptors[key] = descriptor
metatable.__index = descriptorIndex
metatable.__newindex = descriptorNewIndex
end
end
local function __TS__Decorate(decorators, target, key, desc)
local result = target
do
local i = #decorators
while i >= 0 do
local decorator = decorators[i + 1]
if decorator then
local oldResult = result
if key == nil then
result = decorator(nil, result)
elseif desc == true then
local value = rawget(target, key)
local descriptor = __TS__ObjectGetOwnPropertyDescriptor(target, key) or ({configurable = true, writable = true, value = value})
local desc = decorator(nil, target, key, descriptor) or descriptor
local isSimpleValue = desc.configurable == true and desc.writable == true and not desc.get and not desc.set
if isSimpleValue then
rawset(target, key, desc.value)
else
__TS__SetDescriptor(
target,
key,
__TS__ObjectAssign({}, descriptor, desc)
)
end
elseif desc == false then
result = decorator(nil, target, key, desc)
else
result = decorator(nil, target, key)
end
result = result or oldResult
end
i = i - 1
end
end
return result
end
local function __TS__DecorateParam(paramIndex, decorator)
return function(____, target, key) return decorator(nil, target, key, paramIndex) end
end
local Error, RangeError, ReferenceError, SyntaxError, TypeError, URIError
do
local function getErrorStack(self, constructor)
local level = 1
while true do
local info = debug.getinfo(level, "f")
level = level + 1
if not info then
level = 1
break
elseif info.func == constructor then
break
end
end
return debug.traceback(nil, level)
end
local function wrapErrorToString(self, getDescription)
return function(self)
local description = getDescription(self)
local caller = debug.getinfo(3, "f")
if _VERSION == "Lua 5.1" or caller and caller.func ~= error then
return description
else
return (tostring(description) .. "\n") .. self.stack
end
end
end
local function initErrorClass(self, Type, name)
Type.name = name
return setmetatable(
Type,
{__call = function(____, _self, message) return __TS__New(Type, message) end}
)
end
local ____initErrorClass_2 = initErrorClass
local ____class_0 = __TS__Class()
____class_0.name = ""
function ____class_0.prototype.____constructor(self, message)
if message == nil then
message = ""
end
self.message = message
self.name = "Error"
self.stack = getErrorStack(nil, self.constructor.new)
local metatable = getmetatable(self)
if not metatable.__errorToStringPatched then
metatable.__errorToStringPatched = true
metatable.__tostring = wrapErrorToString(nil, metatable.__tostring)
end
end
function ____class_0.prototype.__tostring(self)
local ____temp_1
if self.message ~= "" then
____temp_1 = (self.name .. ": ") .. self.message
else
____temp_1 = self.name
end
return ____temp_1
end
Error = ____initErrorClass_2(nil, ____class_0, "Error")
local function createErrorClass(self, name)
local ____initErrorClass_4 = initErrorClass
local ____class_3 = __TS__Class()
____class_3.name = ____class_3.name
__TS__ClassExtends(____class_3, Error)
function ____class_3.prototype.____constructor(self, ...)
____class_3.____super.prototype.____constructor(self, ...)
self.name = name
end
return ____initErrorClass_4(nil, ____class_3, name)
end
RangeError = createErrorClass(nil, "RangeError")
ReferenceError = createErrorClass(nil, "ReferenceError")
SyntaxError = createErrorClass(nil, "SyntaxError")
TypeError = createErrorClass(nil, "TypeError")
URIError = createErrorClass(nil, "URIError")
end
local __MEM__EmptyObject = {}
local function __TS__ObjectGetOwnPropertyDescriptors(object)
local metatable = getmetatable(object)
if not metatable then
return __MEM__EmptyObject
end
return rawget(metatable, "_descriptors") or (__MEM__EmptyObject)
end
local function __TS__Delete(target, key)
local descriptors = __TS__ObjectGetOwnPropertyDescriptors(target)
local descriptor = descriptors[key]
if descriptor then
if not descriptor.configurable then
error(
__TS__New(
TypeError,
((("Cannot delete property " .. tostring(key)) .. " of ") .. tostring(target)) .. "."
),
0
)
end
descriptors[key] = nil
return true
end
target[key] = nil
return true
end
local function __TS__StringAccess(self, index)
if index >= 0 and index < #self then
return string.sub(self, index + 1, index + 1)
end
end
local function __TS__DelegatedYield(iterable)
if type(iterable) == "string" then
for index = 0, #iterable - 1 do
coroutine.yield(__TS__StringAccess(iterable, index))
end
elseif iterable.____coroutine ~= nil then
local co = iterable.____coroutine
while true do
local status, value = coroutine.resume(co)
if not status then
error(value, 0)
end
if coroutine.status(co) == "dead" then
return value
else
coroutine.yield(value)
end
end
elseif iterable[Symbol.iterator] then
local iterator = iterable[Symbol.iterator](iterable)
while true do
local result = iterator:next()
if result.done then
return result.value
else
coroutine.yield(result.value)
end
end
else
for ____, value in ipairs(iterable) do
coroutine.yield(value)
end
end
end
local __TS__Generator
do
local function generatorIterator(self)
return self
end
local function generatorNext(self, ...)
local co = self.____coroutine
if coroutine.status(co) == "dead" then
return {done = true}
end
local status, value = coroutine.resume(co, ...)
if not status then
error(value, 0)
end
return {
value = value,
done = coroutine.status(co) == "dead"
}
end
function __TS__Generator(fn)
return function(...)
local args = {...}
local argsLength = select("#", ...)
return {
____coroutine = coroutine.create(function() return fn((unpack or table.unpack)(args, 1, argsLength)) end),
[Symbol.iterator] = generatorIterator,
next = generatorNext
}
end
end
end
local function __TS__InstanceOfObject(value)
local valueType = type(value)
return valueType == "table" or valueType == "function"
end
local Map
do
Map = __TS__Class()
Map.name = "Map"
function Map.prototype.____constructor(self, entries)
self[Symbol.toStringTag] = "Map"
self.items = {}
self.size = 0
self.nextKey = {}
self.previousKey = {}
if entries == nil then
return
end
local iterable = entries
if iterable[Symbol.iterator] then
local iterator = iterable[Symbol.iterator](iterable)
while true do
local result = iterator:next()
if result.done then
break
end
local value = result.value
self:set(value[1], value[2])
end
else
local array = entries
for ____, kvp in ipairs(array) do
self:set(kvp[1], kvp[2])
end
end
end
function Map.prototype.clear(self)
self.items = {}
self.nextKey = {}
self.previousKey = {}
self.firstKey = nil
self.lastKey = nil
self.size = 0
end
function Map.prototype.delete(self, key)
local contains = self:has(key)
if contains then
self.size = self.size - 1
local next = self.nextKey[key]
local previous = self.previousKey[key]
if next and previous then
self.nextKey[previous] = next
self.previousKey[next] = previous
elseif next then
self.firstKey = next
self.previousKey[next] = nil
elseif previous then
self.lastKey = previous
self.nextKey[previous] = nil
else
self.firstKey = nil
self.lastKey = nil
end
self.nextKey[key] = nil
self.previousKey[key] = nil
end
self.items[key] = nil
return contains
end
function Map.prototype.forEach(self, callback)
for ____, key in __TS__Iterator(self:keys()) do
callback(nil, self.items[key], key, self)
end
end
function Map.prototype.get(self, key)
return self.items[key]
end
function Map.prototype.has(self, key)
return self.nextKey[key] ~= nil or self.lastKey == key
end
function Map.prototype.set(self, key, value)
local isNewValue = not self:has(key)
if isNewValue then
self.size = self.size + 1
end
self.items[key] = value
if self.firstKey == nil then
self.firstKey = key
self.lastKey = key
elseif isNewValue then
self.nextKey[self.lastKey] = key
self.previousKey[key] = self.lastKey
self.lastKey = key
end
return self
end
Map.prototype[Symbol.iterator] = function(self)
return self:entries()
end
function Map.prototype.entries(self)
local items = self.items
local nextKey = self.nextKey
local key = self.firstKey
return {
[Symbol.iterator] = function(self)
return self
end,
next = function(self)
local result = {done = not key, value = {key, items[key]}}
key = nextKey[key]
return result
end
}
end
function Map.prototype.keys(self)
local nextKey = self.nextKey
local key = self.firstKey
return {
[Symbol.iterator] = function(self)
return self
end,
next = function(self)
local result = {done = not key, value = key}
key = nextKey[key]
return result
end
}
end
function Map.prototype.values(self)
local items = self.items
local nextKey = self.nextKey
local key = self.firstKey
return {
[Symbol.iterator] = function(self)
return self
end,
next = function(self)
local result = {done = not key, value = items[key]}
key = nextKey[key]
return result
end
}
end
Map[Symbol.species] = Map
end
local __TS__MathAtan2 = math.atan2 or math.atan
local function __TS__MathSign(val)
if val > 0 then
return 1
elseif val < 0 then
return -1
end
return 0
end
local function __TS__Number(value)
local valueType = type(value)
if valueType == "number" then
return value
elseif valueType == "string" then
local numberValue = tonumber(value)
if numberValue then
return numberValue
end
if value == "Infinity" then
return math.huge
end
if value == "-Infinity" then
return -math.huge
end
local stringWithoutSpaces = string.gsub(value, "%%s", "")
if stringWithoutSpaces == "" then
return 0
end
return 0 / 0
elseif valueType == "boolean" then
return value and 1 or 0
else
return 0 / 0
end
end
local function __TS__NumberIsFinite(value)
return type(value) == "number" and value == value and value ~= math.huge and value ~= -math.huge
end
local function __TS__NumberIsNaN(value)
return value ~= value
end
local __TS__NumberToString
do
local radixChars = "0123456789abcdefghijklmnopqrstuvwxyz"
function __TS__NumberToString(self, radix)
if radix == nil or radix == 10 or self == math.huge or self == -math.huge or self ~= self then
return tostring(self)
end
radix = math.floor(radix)
if radix < 2 or radix > 36 then
error("toString() radix argument must be between 2 and 36", 0)
end
local integer, fraction = math.modf(math.abs(self))
local result = ""
if radix == 8 then
result = string.format("%%o", integer)
elseif radix == 16 then
result = string.format("%%x", integer)
else
repeat
do
result = __TS__StringAccess(radixChars, integer %% radix) .. result
integer = math.floor(integer / radix)
end
until not (integer ~= 0)
end
if fraction ~= 0 then
result = result .. "."
local delta = 1e-16
repeat
do
fraction = fraction * radix
delta = delta * radix
local digit = math.floor(fraction)
result = result .. __TS__StringAccess(radixChars, digit)
fraction = fraction - digit
end
until not (fraction >= delta)
end
if self < 0 then
result = "-" .. result
end
return result
end
end
local function __TS__ObjectDefineProperty(target, key, desc)
local ____temp_0
if type(key) == "number" then
____temp_0 = key + 1
else
____temp_0 = key
end
local luaKey = ____temp_0
local value = rawget(target, luaKey)
local hasGetterOrSetter = desc.get ~= nil or desc.set ~= nil
local descriptor
if hasGetterOrSetter then
if value ~= nil then
error(
"Cannot redefine property: " .. tostring(key),
0
)
end
descriptor = desc
else
local valueExists = value ~= nil
local ____desc_set_5 = desc.set
local ____desc_get_6 = desc.get
local ____temp_1
if desc.configurable ~= nil then
____temp_1 = desc.configurable
else
____temp_1 = valueExists
end
local ____temp_2
if desc.enumerable ~= nil then
____temp_2 = desc.enumerable
else
____temp_2 = valueExists
end
local ____temp_3
if desc.writable ~= nil then
____temp_3 = desc.writable
else
____temp_3 = valueExists
end
local ____temp_4
if desc.value ~= nil then
____temp_4 = desc.value
else
____temp_4 = value
end
descriptor = {
set = ____desc_set_5,
get = ____desc_get_6,
configurable = ____temp_1,
enumerable = ____temp_2,
writable = ____temp_3,
value = ____temp_4
}
end
__TS__SetDescriptor(target, luaKey, descriptor)
return target
end
local function __TS__ObjectEntries(obj)
local result = {}
local len = 0
for key in pairs(obj) do
len = len + 1
result[len] = {key, obj[key]}
end
return result
end
local function __TS__ObjectFromEntries(entries)
local obj = {}
local iterable = entries
if iterable[Symbol.iterator] then
local iterator = iterable[Symbol.iterator](iterable)
while true do
local result = iterator:next()
if result.done then
break
end
local value = result.value
obj[value[1]] = value[2]
end
else
for ____, entry in ipairs(entries) do
obj[entry[1]] = entry[2]
end
end
return obj
end
local function __TS__ObjectKeys(obj)
local result = {}
local len = 0
for key in pairs(obj) do
len = len + 1
result[len] = key
end
return result
end
local function __TS__ObjectRest(target, usedProperties)
local result = {}
for property in pairs(target) do
if not usedProperties[property] then
result[property] = target[property]
end
end
return result
end
local function __TS__ObjectValues(obj)
local result = {}
local len = 0
for key in pairs(obj) do
len = len + 1
result[len] = obj[key]
end
return result
end
local function __TS__ParseFloat(numberString)
local infinityMatch = string.match(numberString, "^%%s*(-?Infinity)")
if infinityMatch then
local ____temp_0
if __TS__StringAccess(infinityMatch, 0) == "-" then
____temp_0 = -math.huge
else
____temp_0 = math.huge
end
return ____temp_0
end
local number = tonumber(string.match(numberString, "^%%s*(-?%%d+%%.?%%d*)"))
return number or 0 / 0
end
local function __TS__StringSubstr(self, from, length)
if from ~= from then
from = 0
end
if length ~= nil then
if length ~= length or length <= 0 then
return ""
end
length = length + from
end
if from >= 0 then
from = from + 1
end
return string.sub(self, from, length)
end
local function __TS__StringSubstring(self, start, ____end)
if ____end ~= ____end then
____end = 0
end
if ____end ~= nil and start > ____end then
start, ____end = ____end, start
end
if start >= 0 then
start = start + 1
else
start = 1
end
if ____end ~= nil and ____end < 0 then
____end = 0
end
return string.sub(self, start, ____end)
end
local __TS__ParseInt
do
local parseIntBasePattern = "0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTvVwWxXyYzZ"
function __TS__ParseInt(numberString, base)
if base == nil then
base = 10
local hexMatch = string.match(numberString, "^%%s*-?0[xX]")
if hexMatch then
base = 16
local ____string_match_result__0_0
if string.match(hexMatch, "-") then
____string_match_result__0_0 = "-" .. __TS__StringSubstr(numberString, #hexMatch)
else
____string_match_result__0_0 = __TS__StringSubstr(numberString, #hexMatch)
end
numberString = ____string_match_result__0_0
end
end
if base < 2 or base > 36 then
return 0 / 0
end
local ____temp_1
if base <= 10 then
____temp_1 = __TS__StringSubstring(parseIntBasePattern, 0, base)
else
____temp_1 = __TS__StringSubstr(parseIntBasePattern, 0, 10 + 2 * (base - 10))
end
local allowedDigits = ____temp_1
local pattern = ("^%%s*(-?[" .. allowedDigits) .. "]*)"
local number = tonumber(
string.match(numberString, pattern),
base
)
if number == nil then
return 0 / 0
end
if number >= 0 then
return math.floor(number)
else
return math.ceil(number)
end
end
end
local function __TS__PromiseAll(iterable)
local results = {}
local toResolve = {}
local numToResolve = 0
local i = 0
for ____, item in __TS__Iterator(iterable) do
if __TS__InstanceOf(item, __TS__Promise) then
if item.state == 1 then
results[i + 1] = item.value
elseif item.state == 2 then
return __TS__Promise.reject(item.rejectionReason)
else
numToResolve = numToResolve + 1
toResolve[i] = item
end
else
results[i + 1] = item
end
i = i + 1
end
if numToResolve == 0 then
return __TS__Promise.resolve(results)
end
return __TS__New(
__TS__Promise,
function(____, resolve, reject)
for index, promise in pairs(toResolve) do
promise["then"](
promise,
function(____, data)
results[index + 1] = data
numToResolve = numToResolve - 1
if numToResolve == 0 then
resolve(nil, results)
end
end,
function(____, reason)
reject(nil, reason)
end
)
end
end
)
end
local function __TS__PromiseAllSettled(iterable)
local results = {}
local toResolve = {}
local numToResolve = 0
local i = 0
for ____, item in __TS__Iterator(iterable) do
if __TS__InstanceOf(item, __TS__Promise) then
if item.state == 1 then
results[i + 1] = {status = "fulfilled", value = item.value}
elseif item.state == 2 then
results[i + 1] = {status = "rejected", reason = item.rejectionReason}
else
numToResolve = numToResolve + 1
toResolve[i] = item
end
else
results[i + 1] = {status = "fulfilled", value = item}
end
i = i + 1
end
if numToResolve == 0 then
return __TS__Promise.resolve(results)
end
return __TS__New(
__TS__Promise,
function(____, resolve)
for index, promise in pairs(toResolve) do
promise["then"](
promise,
function(____, data)
results[index + 1] = {status = "fulfilled", value = data}
numToResolve = numToResolve - 1
if numToResolve == 0 then
resolve(nil, results)
end
end,
function(____, reason)
results[index + 1] = {status = "rejected", reason = reason}
numToResolve = numToResolve - 1
if numToResolve == 0 then
resolve(nil, results)
end
end
)
end
end
)
end
local function __TS__PromiseAny(iterable)
local rejections = {}
local pending = {}
for ____, item in __TS__Iterator(iterable) do
if __TS__InstanceOf(item, __TS__Promise) then
if item.state == 1 then
return __TS__Promise.resolve(item.value)
elseif item.state == 2 then
rejections[#rejections + 1] = item.rejectionReason
else
pending[#pending + 1] = item
end
else
return __TS__Promise.resolve(item)
end
end
if #pending == 0 then
return __TS__Promise.reject("No promises to resolve with .any()")
end
local numResolved = 0
return __TS__New(
__TS__Promise,
function(____, resolve, reject)
for ____, promise in ipairs(pending) do
promise["then"](
promise,
function(____, data)
resolve(nil, data)
end,
function(____, reason)
rejections[#rejections + 1] = reason
numResolved = numResolved + 1
if numResolved == #pending then
reject(nil, {name = "AggregateError", message = "All Promises rejected", errors = rejections})
end
end
)
end
end
)
end
local function __TS__PromiseRace(iterable)
local pending = {}
for ____, item in __TS__Iterator(iterable) do
if __TS__InstanceOf(item, __TS__Promise) then
if item.state == 1 then
return __TS__Promise.resolve(item.value)
elseif item.state == 2 then
return __TS__Promise.reject(item.rejectionReason)
else
pending[#pending + 1] = item
end
else
return __TS__Promise.resolve(item)
end
end
return __TS__New(
__TS__Promise,
function(____, resolve, reject)
for ____, promise in ipairs(pending) do
promise["then"](
promise,
function(____, value) return resolve(nil, value) end,
function(____, reason) return reject(nil, reason) end
)
end
end
)
end
local Set
do
Set = __TS__Class()
Set.name = "Set"
function Set.prototype.____constructor(self, values)
self[Symbol.toStringTag] = "Set"
self.size = 0
self.nextKey = {}
self.previousKey = {}
if values == nil then
return
end
local iterable = values
if iterable[Symbol.iterator] then
local iterator = iterable[Symbol.iterator](iterable)
while true do
local result = iterator:next()
if result.done then
break
end
self:add(result.value)
end
else
local array = values
for ____, value in ipairs(array) do
self:add(value)
end
end
end
function Set.prototype.add(self, value)
local isNewValue = not self:has(value)
if isNewValue then
self.size = self.size + 1
end
if self.firstKey == nil then
self.firstKey = value
self.lastKey = value
elseif isNewValue then
self.nextKey[self.lastKey] = value
self.previousKey[value] = self.lastKey
self.lastKey = value
end
return self
end
function Set.prototype.clear(self)
self.nextKey = {}
self.previousKey = {}
self.firstKey = nil
self.lastKey = nil
self.size = 0
end
function Set.prototype.delete(self, value)
local contains = self:has(value)
if contains then
self.size = self.size - 1
local next = self.nextKey[value]
local previous = self.previousKey[value]
if next and previous then
self.nextKey[previous] = next
self.previousKey[next] = previous
elseif next then
self.firstKey = next
self.previousKey[next] = nil
elseif previous then
self.lastKey = previous
self.nextKey[previous] = nil
else
self.firstKey = nil
self.lastKey = nil
end
self.nextKey[value] = nil
self.previousKey[value] = nil
end
return contains
end
function Set.prototype.forEach(self, callback)
for ____, key in __TS__Iterator(self:keys()) do
callback(nil, key, key, self)
end
end
function Set.prototype.has(self, value)
return self.nextKey[value] ~= nil or self.lastKey == value
end
Set.prototype[Symbol.iterator] = function(self)
return self:values()
end
function Set.prototype.entries(self)
local nextKey = self.nextKey
local key = self.firstKey
return {
[Symbol.iterator] = function(self)
return self
end,
next = function(self)
local result = {done = not key, value = {key, key}}
key = nextKey[key]
return result
end
}
end
function Set.prototype.keys(self)
local nextKey = self.nextKey
local key = self.firstKey
return {
[Symbol.iterator] = function(self)
return self
end,
next = function(self)
local result = {done = not key, value = key}
key = nextKey[key]
return result
end
}
end
function Set.prototype.values(self)
local nextKey = self.nextKey
local key = self.firstKey
return {
[Symbol.iterator] = function(self)
return self
end,
next = function(self)
local result = {done = not key, value = key}
key = nextKey[key]
return result
end
}
end
Set[Symbol.species] = Set
end
local function __TS__SparseArrayNew(...)
local sparseArray = {...}
sparseArray.sparseLength = select("#", ...)
return sparseArray
end
local function __TS__SparseArrayPush(sparseArray, ...)
local args = {...}
local argsLen = select("#", ...)
local listLen = sparseArray.sparseLength
for i = 1, argsLen do
sparseArray[listLen + i] = args[i]
end
sparseArray.sparseLength = listLen + argsLen
end
local function __TS__SparseArraySpread(sparseArray)
local _unpack = unpack or table.unpack
return _unpack(sparseArray, 1, sparseArray.sparseLength)
end
local WeakMap
do
WeakMap = __TS__Class()
WeakMap.name = "WeakMap"
function WeakMap.prototype.____constructor(self, entries)
self[Symbol.toStringTag] = "WeakMap"
self.items = {}
setmetatable(self.items, {__mode = "k"})
if entries == nil then
return
end
local iterable = entries
if iterable[Symbol.iterator] then
local iterator = iterable[Symbol.iterator](iterable)
while true do
local result = iterator:next()
if result.done then
break
end
local value = result.value
self.items[value[1]] = value[2]
end
else
for ____, kvp in ipairs(entries) do
self.items[kvp[1]] = kvp[2]
end
end
end
function WeakMap.prototype.delete(self, key)
local contains = self:has(key)
self.items[key] = nil
return contains
end
function WeakMap.prototype.get(self, key)
return self.items[key]
end
function WeakMap.prototype.has(self, key)
return self.items[key] ~= nil
end
function WeakMap.prototype.set(self, key, value)
self.items[key] = value
return self
end
WeakMap[Symbol.species] = WeakMap
end
local WeakSet
do
WeakSet = __TS__Class()
WeakSet.name = "WeakSet"
function WeakSet.prototype.____constructor(self, values)
self[Symbol.toStringTag] = "WeakSet"
self.items = {}
setmetatable(self.items, {__mode = "k"})
if values == nil then
return
end
local iterable = values
if iterable[Symbol.iterator] then
local iterator = iterable[Symbol.iterator](iterable)
while true do
local result = iterator:next()
if result.done then
break
end
self.items[result.value] = true
end
else
for ____, value in ipairs(values) do
self.items[value] = true
end
end
end
function WeakSet.prototype.add(self, value)
self.items[value] = true
return self
end
function WeakSet.prototype.delete(self, value)
local contains = self:has(value)
self.items[value] = nil
return contains
end
function WeakSet.prototype.has(self, value)
return self.items[value] == true
end
WeakSet[Symbol.species] = WeakSet
end
local function __TS__SourceMapTraceBack(fileName, sourceMap)
_G.__TS__sourcemap = _G.__TS__sourcemap or ({})
_G.__TS__sourcemap[fileName] = sourceMap
if _G.__TS__originalTraceback == nil then
local originalTraceback = debug.traceback
_G.__TS__originalTraceback = originalTraceback
debug.traceback = function(thread, message, level)
local trace
if thread == nil and message == nil and level == nil then
trace = originalTraceback()
else
trace = originalTraceback(thread, message, level)
end
if type(trace) ~= "string" then
return trace
end
local function replacer(____, file, srcFile, line)
local fileSourceMap = _G.__TS__sourcemap[file]
if fileSourceMap and fileSourceMap[line] then
local data = fileSourceMap[line]
if type(data) == "number" then
return (srcFile .. ":") .. tostring(data)
end
return (tostring(data.file) .. ":") .. tostring(data.line)
end
return (file .. ":") .. line
end
local result = string.gsub(
trace,
"(%%S+)%%.lua:(%%d+)",
function(file, line) return replacer(nil, file .. ".lua", file .. ".ts", line) end
)
local function stringReplacer(____, file, line)
local fileSourceMap = _G.__TS__sourcemap[file]
if fileSourceMap and fileSourceMap[line] then
local chunkName = string.match(file, "%%[string \"([^\"]+)\"%%]")
local sourceName = string.gsub(chunkName, ".lua$", ".ts")
local data = fileSourceMap[line]
if type(data) == "number" then
return (sourceName .. ":") .. tostring(data)
end
return (tostring(data.file) .. ":") .. tostring(data.line)
end
return (file .. ":") .. line
end
result = string.gsub(
result,
"(%%[string \"[^\"]+\"%%]):(%%d+)",
function(file, line) return stringReplacer(nil, file, line) end
)
return result
end
end
end
local function __TS__Spread(iterable)
local arr = {}
if type(iterable) == "string" then
for i = 0, #iterable - 1 do
arr[i + 1] = __TS__StringAccess(iterable, i)
end
else
local len = 0
for ____, item in __TS__Iterator(iterable) do
len = len + 1
arr[len] = item
end
end
return __TS__Unpack(arr)
end
local function __TS__StringCharAt(self, pos)
if pos ~= pos then
pos = 0
end
if pos < 0 then
return ""
end
return string.sub(self, pos + 1, pos + 1)
end
local function __TS__StringCharCodeAt(self, index)
if index ~= index then
index = 0
end
if index < 0 then
return 0 / 0
end
return string.byte(self, index + 1) or 0 / 0
end
local function __TS__StringEndsWith(self, searchString, endPosition)
if endPosition == nil or endPosition > #self then
endPosition = #self
end
return string.sub(self, endPosition - #searchString + 1, endPosition) == searchString
end
local function __TS__StringIncludes(self, searchString, position)
if not position then
position = 1
else
position = position + 1
end
local index = string.find(self, searchString, position, true)
return index ~= nil
end
local function __TS__StringPadEnd(self, maxLength, fillString)
if fillString == nil then
fillString = " "
end
if maxLength ~= maxLength then
maxLength = 0
end
if maxLength == -math.huge or maxLength == math.huge then
error("Invalid string length", 0)
end
if #self >= maxLength or #fillString == 0 then
return self
end
maxLength = maxLength - #self
if maxLength > #fillString then
fillString = fillString .. string.rep(
fillString,
math.floor(maxLength / #fillString)
)
end
return self .. string.sub(
fillString,
1,
math.floor(maxLength)
)
end
local function __TS__StringPadStart(self, maxLength, fillString)
if fillString == nil then
fillString = " "
end
if maxLength ~= maxLength then
maxLength = 0
end
if maxLength == -math.huge or maxLength == math.huge then
error("Invalid string length", 0)
end
if #self >= maxLength or #fillString == 0 then
return self
end
maxLength = maxLength - #self
if maxLength > #fillString then
fillString = fillString .. string.rep(
fillString,
math.floor(maxLength / #fillString)
)
end
return string.sub(
fillString,
1,
math.floor(maxLength)
) .. self
end
local __TS__StringReplace
do
local sub = string.sub
function __TS__StringReplace(source, searchValue, replaceValue)
local startPos, endPos = string.find(source, searchValue, nil, true)
if not startPos then
return source
end
local before = sub(source, 1, startPos - 1)
local ____temp_0
if type(replaceValue) == "string" then
____temp_0 = replaceValue
else
____temp_0 = replaceValue(nil, searchValue, startPos - 1, source)
end
local replacement = ____temp_0
local after = sub(source, endPos + 1)
return (before .. replacement) .. after
end
end
local __TS__StringSplit
do
local sub = string.sub
local find = string.find
function __TS__StringSplit(source, separator, limit)
if limit == nil then
limit = 4294967295
end
if limit == 0 then
return {}
end
local result = {}
local resultIndex = 1
if separator == nil or separator == "" then
for i = 1, #source do
result[resultIndex] = sub(source, i, i)
resultIndex = resultIndex + 1
end
else
local currentPos = 1
while resultIndex <= limit do
local startPos, endPos = find(source, separator, currentPos, true)
if not startPos then
break
end
result[resultIndex] = sub(source, currentPos, startPos - 1)
resultIndex = resultIndex + 1
currentPos = endPos + 1
end
if resultIndex <= limit then
result[resultIndex] = sub(source, currentPos)
end
end
return result
end
end
local __TS__StringReplaceAll
do
local sub = string.sub
local find = string.find
function __TS__StringReplaceAll(source, searchValue, replaceValue)
if type(replaceValue) == "string" then
local concat = table.concat(
__TS__StringSplit(source, searchValue),
replaceValue
)
if #searchValue == 0 then
return (replaceValue .. concat) .. replaceValue
end
return concat
end
local parts = {}
local partsIndex = 1
if #searchValue == 0 then
parts[1] = replaceValue(nil, "", 0, source)
partsIndex = 2
for i = 1, #source do
parts[partsIndex] = sub(source, i, i)
parts[partsIndex + 1] = replaceValue(nil, "", i, source)
partsIndex = partsIndex + 2
end
else
local currentPos = 1
while true do
local startPos, endPos = find(source, searchValue, currentPos, true)
if not startPos then
break
end
parts[partsIndex] = sub(source, currentPos, startPos - 1)
parts[partsIndex + 1] = replaceValue(nil, searchValue, startPos - 1, source)
partsIndex = partsIndex + 2
currentPos = endPos + 1
end
parts[partsIndex] = sub(source, currentPos)
end
return table.concat(parts)
end
end
local function __TS__StringSlice(self, start, ____end)
if start == nil or start ~= start then
start = 0
end
if ____end ~= ____end then
____end = 0
end
if start >= 0 then
start = start + 1
end
if ____end ~= nil and ____end < 0 then
____end = ____end - 1
end
return string.sub(self, start, ____end)
end
local function __TS__StringStartsWith(self, searchString, position)
if position == nil or position < 0 then
position = 0
end
return string.sub(self, position + 1, #searchString + position) == searchString
end
local function __TS__StringTrim(self)
local result = string.gsub(self, "^[%%s ]*(.-)[%%s ]*$", "%%1")
return result
end
local function __TS__StringTrimEnd(self)
local result = string.gsub(self, "[%%s ]*$", "")
return result
end
local function __TS__StringTrimStart(self)
local result = string.gsub(self, "^[%%s ]*", "")
return result
end
local __TS__SymbolRegistryFor, __TS__SymbolRegistryKeyFor
do
local symbolRegistry = {}
function __TS__SymbolRegistryFor(key)
if not symbolRegistry[key] then
symbolRegistry[key] = __TS__Symbol(key)
end
return symbolRegistry[key]
end
function __TS__SymbolRegistryKeyFor(sym)
for key in pairs(symbolRegistry) do
if symbolRegistry[key] == sym then
return key
end
end
end
end
local function __TS__TypeOf(value)
local luaType = type(value)
if luaType == "table" then
return "object"
elseif luaType == "nil" then
return "undefined"
else
return luaType
end
end
return {
__TS__ArrayConcat = __TS__ArrayConcat,
__TS__ArrayEntries = __TS__ArrayEntries,
__TS__ArrayEvery = __TS__ArrayEvery,
__TS__ArrayFilter = __TS__ArrayFilter,
__TS__ArrayForEach = __TS__ArrayForEach,
__TS__ArrayFind = __TS__ArrayFind,
__TS__ArrayFindIndex = __TS__ArrayFindIndex,
__TS__ArrayFrom = __TS__ArrayFrom,
__TS__ArrayIncludes = __TS__ArrayIncludes,
__TS__ArrayIndexOf = __TS__ArrayIndexOf,
__TS__ArrayIsArray = __TS__ArrayIsArray,
__TS__ArrayJoin = __TS__ArrayJoin,
__TS__ArrayMap = __TS__ArrayMap,
__TS__ArrayPush = __TS__ArrayPush,
__TS__ArrayPushArray = __TS__ArrayPushArray,
__TS__ArrayReduce = __TS__ArrayReduce,
__TS__ArrayReduceRight = __TS__ArrayReduceRight,
__TS__ArrayReverse = __TS__ArrayReverse,
__TS__ArrayUnshift = __TS__ArrayUnshift,
__TS__ArraySort = __TS__ArraySort,
__TS__ArraySlice = __TS__ArraySlice,
__TS__ArraySome = __TS__ArraySome,
__TS__ArraySplice = __TS__ArraySplice,
__TS__ArrayToObject = __TS__ArrayToObject,
__TS__ArrayFlat = __TS__ArrayFlat,
__TS__ArrayFlatMap = __TS__ArrayFlatMap,
__TS__ArraySetLength = __TS__ArraySetLength,
__TS__AsyncAwaiter = __TS__AsyncAwaiter,
__TS__Await = __TS__Await,
__TS__Class = __TS__Class,
__TS__ClassExtends = __TS__ClassExtends,
__TS__CloneDescriptor = __TS__CloneDescriptor,
__TS__Decorate = __TS__Decorate,
__TS__DecorateParam = __TS__DecorateParam,
__TS__Delete = __TS__Delete,
__TS__DelegatedYield = __TS__DelegatedYield,
Error = Error,
RangeError = RangeError,
ReferenceError = ReferenceError,
SyntaxError = SyntaxError,
TypeError = TypeError,
URIError = URIError,
__TS__FunctionBind = __TS__FunctionBind,
__TS__Generator = __TS__Generator,
__TS__InstanceOf = __TS__InstanceOf,
__TS__InstanceOfObject = __TS__InstanceOfObject,
__TS__Iterator = __TS__Iterator,
Map = Map,
__TS__MathAtan2 = __TS__MathAtan2,
__TS__MathSign = __TS__MathSign,
__TS__New = __TS__New,
__TS__Number = __TS__Number,
__TS__NumberIsFinite = __TS__NumberIsFinite,
__TS__NumberIsNaN = __TS__NumberIsNaN,
__TS__NumberToString = __TS__NumberToString,
__TS__ObjectAssign = __TS__ObjectAssign,
__TS__ObjectDefineProperty = __TS__ObjectDefineProperty,
__TS__ObjectEntries = __TS__ObjectEntries,
__TS__ObjectFromEntries = __TS__ObjectFromEntries,
__TS__ObjectGetOwnPropertyDescriptor = __TS__ObjectGetOwnPropertyDescriptor,
__TS__ObjectGetOwnPropertyDescriptors = __TS__ObjectGetOwnPropertyDescriptors,
__TS__ObjectKeys = __TS__ObjectKeys,
__TS__ObjectRest = __TS__ObjectRest,
__TS__ObjectValues = __TS__ObjectValues,
__TS__ParseFloat = __TS__ParseFloat,
__TS__ParseInt = __TS__ParseInt,
__TS__Promise = __TS__Promise,
__TS__PromiseAll = __TS__PromiseAll,
__TS__PromiseAllSettled = __TS__PromiseAllSettled,
__TS__PromiseAny = __TS__PromiseAny,
__TS__PromiseRace = __TS__PromiseRace,
Set = Set,
__TS__SetDescriptor = __TS__SetDescriptor,
__TS__SparseArrayNew = __TS__SparseArrayNew,
__TS__SparseArrayPush = __TS__SparseArrayPush,
__TS__SparseArraySpread = __TS__SparseArraySpread,
WeakMap = WeakMap,
WeakSet = WeakSet,
__TS__SourceMapTraceBack = __TS__SourceMapTraceBack,
__TS__Spread = __TS__Spread,
__TS__StringAccess = __TS__StringAccess,
__TS__StringCharAt = __TS__StringCharAt,
__TS__StringCharCodeAt = __TS__StringCharCodeAt,
__TS__StringEndsWith = __TS__StringEndsWith,
__TS__StringIncludes = __TS__StringIncludes,
__TS__StringPadEnd = __TS__StringPadEnd,
__TS__StringPadStart = __TS__StringPadStart,
__TS__StringReplace = __TS__StringReplace,
__TS__StringReplaceAll = __TS__StringReplaceAll,
__TS__StringSlice = __TS__StringSlice,
__TS__StringSplit = __TS__StringSplit,
__TS__StringStartsWith = __TS__StringStartsWith,
__TS__StringSubstr = __TS__StringSubstr,
__TS__StringSubstring = __TS__StringSubstring,
__TS__StringTrim = __TS__StringTrim,
__TS__StringTrimEnd = __TS__StringTrimEnd,
__TS__StringTrimStart = __TS__StringTrimStart,
__TS__Symbol = __TS__Symbol,
Symbol = Symbol,
__TS__SymbolRegistryFor = __TS__SymbolRegistryFor,
__TS__SymbolRegistryKeyFor = __TS__SymbolRegistryKeyFor,
__TS__TypeOf = __TS__TypeOf,
__TS__Unpack = __TS__Unpack
}
end,
["src.core.Double_heroes.double_heroes_config"] = function(...)
local ____exports = {}
____exports.udg_doubleHeroesEnabled = false
____exports.udg_symmetryAngle = 0
return ____exports
end,
["src.core.01_libraries.Constants"] = function(...)
local ____exports = {}
local ____double_heroes_config = require("src.core.Double_heroes.double_heroes_config")
local udg_doubleHeroesEnabled = ____double_heroes_config.udg_doubleHeroesEnabled
____exports.MEC_SMIC_DATA_FILE_DATE_TPL = "MEC/mec-smic-data_[date].txt"
____exports.MEC_MSC_DATA_FILE = "MEC/mec-msc.txt"
____exports.INVIS_UNIT_TYPE_ID = FourCC("Einv")
____exports.HERO_TYPE_ID = FourCC("E000")
____exports.HERO_SECONDARY_TYPE_ID = FourCC("D001")
____exports.HERO_WALK_SPEED = 522
____exports.MAX_MOVE_SPEED = 522
____exports.DEFAULT_MONSTER_SPEED = 400
____exports.HERO_SLIDE_SPEED = 550
____exports.SLIDE_PERIOD = 0.0075
____exports.CHECK_TERRAIN_PERIOD = 0.02
____exports.LOW_PERIOD_FOR_WORK = 0.0008
____exports.CRITICAL_LIVES_LIMIT = 2
____exports.DEFAULT_CAMERA_FIELD = 2500
____exports.LIMIT_NB_HERO_EFFECTS = 20
____exports.PATROL_DISTANCE_MIN = 100
____exports.LARGEUR_CASE = 128
____exports.TERRAIN_DEATH_TIME_TO_KILL = 2
____exports.ENNEMY_PLAYER = Player(PLAYER_NEUTRAL_AGGRESSIVE)
____exports.NEUTRAL_PLAYER = Player(PLAYER_NEUTRAL_PASSIVE)
____exports.PLAYER_INVIS_UNIT = Player(PLAYER_NEUTRAL_PASSIVE)
____exports.GM_TOUCH_DEATH_TERRAIN_EFFECT_STR = "Abilities\\Spells\\NightElf\\Blink\\BlinkCaster.mdl"
____exports.GM_KILLING_EFFECT = "Abilities\\Spells\\NightElf\\Blink\\BlinkCaster.mdl"
____exports.TERRAIN_KILL_EFFECT_BODY_PART = "origin"
____exports.NB_MAX_OF_TERRAINS = 16
____exports.TERRAIN_DATA_DISPLAY_TIME = 15
____exports.NB_MAX_TERRAIN_DATA_DISPLAY = 16
____exports.NB_LIVES_AT_BEGINNING = 5
____exports.RED = 0
____exports.BLUE = 1
____exports.TEAL = 2
____exports.PURPLE = 3
____exports.YELLOW = 4
____exports.ORANGE = 5
____exports.GREEN = 6
____exports.PINK = 7
____exports.GREY = 8
____exports.LIGHTBLUE = 9
____exports.DARKGREEN = 10
____exports.BROWN = 11
____exports.MOBS_VARIOUS_COLORS = false
____exports.POWER_CIRCLE = FourCC("pcir")
____exports.DUMMY_POWER_CIRCLE = FourCC("dcir")
____exports.COOP_REVIVE_DIST = 60
____exports.SON_LAST_HOPE_INTERVALLE_MIN = 10
____exports.NB_PLAYERS_MAX = 24
____exports.NB_PLAYERS_MAX_REFORGED = 24
____exports.NB_ESCAPERS = ____exports.NB_PLAYERS_MAX * (udg_doubleHeroesEnabled and 2 or 1)
return ____exports
end,
["src.core.01_libraries.Init_colorCodes"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local GREEN = ____Constants.GREEN
local ORANGE = ____Constants.ORANGE
local TEAL = ____Constants.TEAL
____exports.udg_colorCode = {
"|cffff0303",
"|cff0042ff",
"|cff1ce6b9",
"|cff540081",
"|cfffffc01",
"|cfffeba0e",
"|cff20c000",
"|cffe55bb0",
"|cff959697",
"|cff7ebff1",
"|cff106246",
"|cFF4A2800",
"|cff9c0000",
"|cff0000c3",
"|cff00ebff",
"|cffbd00ff",
"|cffecce87",
"|cfff7a58b",
"|cffbfff81",
"|cffdbb8eb",
"|cff4f5055",
"|cffecf0ff",
"|cff00781e",
"|cffa56f34"
}
____exports.udg_baseColorString = {
____exports.udg_colorCode[1] .. "red",
____exports.udg_colorCode[2] .. "blue",
____exports.udg_colorCode[3] .. "teal",
____exports.udg_colorCode[4] .. "purple",
____exports.udg_colorCode[5] .. "yellow",
____exports.udg_colorCode[6] .. "orange",
____exports.udg_colorCode[7] .. "green",
____exports.udg_colorCode[8] .. "pink",
____exports.udg_colorCode[9] .. "grey",
____exports.udg_colorCode[10] .. "lightblue",
____exports.udg_colorCode[11] .. "darkgreen",
____exports.udg_colorCode[12] .. "brown",
____exports.udg_colorCode[13] .. "maroon",
____exports.udg_colorCode[14] .. "navy",
____exports.udg_colorCode[15] .. "turquoise",
____exports.udg_colorCode[16] .. "violet",
____exports.udg_colorCode[17] .. "wheat",
____exports.udg_colorCode[18] .. "peach",
____exports.udg_colorCode[19] .. "mint",
____exports.udg_colorCode[20] .. "lavender",
____exports.udg_colorCode[21] .. "coal",
____exports.udg_colorCode[22] .. "snow",
____exports.udg_colorCode[23] .. "emerald",
____exports.udg_colorCode[24] .. "peanut"
}
____exports.COLOR_TERRAIN_SLIDE = ____exports.udg_colorCode[TEAL + 1]
____exports.COLOR_TERRAIN_WALK = ____exports.udg_colorCode[GREEN + 1]
____exports.COLOR_TERRAIN_DEATH = ____exports.udg_colorCode[ORANGE + 1]
____exports.udg_colorStrings = {
{name = "red", alias = {"rd"}},
{name = "blue", alias = {"be"}},
{name = "teal", alias = {"tl"}},
{name = "purple", alias = {"pe"}},
{name = "yellow", alias = {"yw"}},
{name = "orange", alias = {"oe"}},
{name = "green", alias = {"gn"}},
{name = "pink", alias = {"pk"}},
{name = "grey", alias = {"gray", "gy"}},
{name = "lightblue", alias = {"lb"}},
{name = "darkgreen", alias = {"dg"}},
{name = "brown", alias = {"bn"}},
{name = "maroon", alias = {"mrn"}},
{name = "navy", alias = {"ny"}},
{name = "turquoise", alias = {"tqe"}},
{name = "violet", alias = {"vlt"}},
{name = "wheat", alias = {"wht"}},
{name = "peach", alias = {"ph"}},
{name = "mint", alias = {}},
{name = "lavender", alias = {"lvr"}},
{name = "coal", alias = {}},
{name = "snow", alias = {"snw"}},
{name = "emerald", alias = {"emd"}},
{name = "peanut", alias = {"pnt"}}
}
____exports.ColorString2Id = function(colorString)
if colorString == "red" or colorString == "rd" then
return 0
end
if colorString == "blue" or colorString == "be" then
return 1
end
if colorString == "teal" or colorString == "tl" then
return 2
end
if colorString == "purple" or colorString == "pe" then
return 3
end
if colorString == "yellow" or colorString == "yw" then
return 4
end
if colorString == "orange" or colorString == "oe" then
return 5
end
if colorString == "green" or colorString == "gn" then
return 6
end
if colorString == "pink" or colorString == "pk" then
return 7
end
if colorString == "grey" or colorString == "gray" or colorString == "gy" then
return 8
end
if colorString == "lightblue" or colorString == "lb" then
return 9
end
if colorString == "darkgreen" or colorString == "dg" then
return 10
end
if colorString == "brown" or colorString == "bn" then
return 11
end
if colorString == "maroon" or colorString == "mrn" then
return 12
end
if colorString == "navy" or colorString == "ny" then
return 13
end
if colorString == "turquoise" or colorString == "tqe" then
return 14
end
if colorString == "violet" or colorString == "vlt" then
return 15
end
if colorString == "wheat" or colorString == "wht" then
return 16
end
if colorString == "peach" or colorString == "ph" then
return 17
end
if colorString == "mint" then
return 18
end
if colorString == "lavender" or colorString == "lvr" then
return 19
end
if colorString == "coal" then
return 20
end
if colorString == "snow" or colorString == "snw" then
return 21
end
if colorString == "emerald" or colorString == "emd" then
return 22
end
if colorString == "peanut" or colorString == "pnt" then
return 23
end
return -1
end
return ____exports
end,
["src.Utils.MemoryHandler"] = function(...)
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local function initMemoryHandler()
local numCreatedObjects = 0
local numCreatedArrays = 0
local debugObjects = {}
local debugArrays = {}
local cachedObjects = {}
local cachedArrays = {}
local function purgeObject(obj, recursive)
for k in pairs(obj) do
local ____temp_2 = recursive and type(obj[k]) == "table"
if ____temp_2 then
local ____obj_k___destroy_result_0 = obj[k].__destroy
if ____obj_k___destroy_result_0 ~= nil then
____obj_k___destroy_result_0 = ____obj_k___destroy_result_0(obj[k], recursive)
end
____temp_2 = ____obj_k___destroy_result_0
end
obj[k] = nil
end
local meta = getmetatable(obj)
if meta.__debugName then
if meta.__debugName and debugObjects[meta.__debugName] then
local ____debugObjects_3, ____meta___debugName_4 = debugObjects, meta.__debugName
____debugObjects_3[____meta___debugName_4] = ____debugObjects_3[____meta___debugName_4] - 1
if debugObjects[meta.__debugName] == 0 then
debugObjects[meta.__debugName] = nil
end
end
meta.__debugName = nil
meta.__destroyed = true
end
end
local function purgeArray(arr, recursive)
for k in pairs(arr) do
local ____temp_7 = recursive and type(arr[k]) == "table"
if ____temp_7 then
local ____arr_k___destroy_result_5 = arr[k].__destroy
if ____arr_k___destroy_result_5 ~= nil then
____arr_k___destroy_result_5 = ____arr_k___destroy_result_5(arr[k], recursive)
end
____temp_7 = ____arr_k___destroy_result_5
end
arr[k] = nil
end
local meta = getmetatable(arr)
if meta.__debugName then
if meta.__debugName and debugArrays[meta.__debugName] then
local ____debugArrays_8, ____meta___debugName_9 = debugArrays, meta.__debugName
____debugArrays_8[____meta___debugName_9] = ____debugArrays_8[____meta___debugName_9] - 1
if debugArrays[meta.__debugName] == 0 then
debugArrays[meta.__debugName] = nil
end
end
meta.__debugName = nil
meta.__destroyed = true
end
end
local function destroyObject(____self, recursive)
if recursive == nil then
recursive = false
end
purgeObject(____self, recursive)
arrayPush(cachedObjects, ____self)
end
local function destroyArray(____self, recursive)
if recursive == nil then
recursive = false
end
purgeArray(____self, recursive)
arrayPush(cachedArrays, ____self)
end
local function getObjectMeta(debugName)
local meta
meta = {
__gc = function(____self)
purgeObject(____self)
end,
__newindex = function(____self, k, v)
if meta.__destroyed then
print(info():GetStackTrace())
error("Writing a destroyed object", 0)
end
rawset(____self, k, v)
end,
__index = function(_self, key)
if meta.__destroyed then
print(info():GetStackTrace())
error("Reading a destroyed object", 0)
end
if key == "__destroy" then
return destroyObject
end
end
}
local ____debugName_11 = debugName
if ____debugName_11 then
local ____debugName_10 = debugName
meta.__debugName = ____debugName_10
____debugName_11 = ____debugName_10
end
return meta
end
local function getArrayMeta(debugName)
local meta
meta = {
__gc = function(____self)
purgeArray(____self)
end,
__newindex = function(____self, k, v)
if meta.__destroyed then
print(info():GetStackTrace())
error("Writing a destroyed array", 0)
end
rawset(____self, k, v)
end,
__index = function(_self, key)
if meta.__destroyed then
print(info():GetStackTrace())
error("Reading a destroyed array", 0)
end
if key == "__destroy" then
return destroyArray
end
end
}
local ____debugName_13 = debugName
if ____debugName_13 then
local ____debugName_12 = debugName
meta.__debugName = ____debugName_12
____debugName_13 = ____debugName_12
end
return meta
end
local defaultObjectMeta = getObjectMeta()
local defaultArrayMeta = getArrayMeta()
local function targetCompare(a, b)
return b.count < a.count
end
local function printDebugNames(title, targets)
local sortedTargets = ____exports.MemoryHandler.getEmptyArray()
for debugName, count in pairs(targets) do
local target = ____exports.MemoryHandler.getEmptyObject()
target.debugName = debugName
target.count = count
arrayPush(sortedTargets, target)
end
if #sortedTargets > 0 then
table.sort(sortedTargets, targetCompare)
local d = ""
local i = 0
for ____, s in ipairs(sortedTargets) do
local ____i_14 = i
i = ____i_14 + 1
if ____i_14 < 10 then
d = d .. (#d > 0 and ", " or "") .. (tostring(s.debugName) .. ": ") .. tostring(s.count)
end
end
print((("Most used " .. title) .. ": ") .. d)
end
sortedTargets:__destroy(true)
end
return {
getEmptyObject = function(debugName)
local obj = table.remove(cachedObjects, 1)
if obj then
if debugName then
getmetatable(obj).__debugName = debugName
getmetatable(obj).__destroyed = false
end
else
obj = {}
numCreatedObjects = numCreatedObjects + 1
local ____setmetatable_17 = setmetatable
local ____obj_16 = obj
local ____debugName_15
if debugName then
____debugName_15 = getObjectMeta(debugName)
else
____debugName_15 = defaultObjectMeta
end
____setmetatable_17(____obj_16, ____debugName_15)
end
if debugName then
if not debugObjects[debugName] then
debugObjects[debugName] = 0
end
debugObjects[debugName] = debugObjects[debugName] + 1
end
return obj
end,
getEmptyArray = function(debugName)
local arr = table.remove(cachedArrays, 1)
if arr then
if debugName then
getmetatable(arr).__debugName = debugName
getmetatable(arr).__destroyed = false
end
else
arr = {}
numCreatedArrays = numCreatedArrays + 1
local ____setmetatable_20 = setmetatable
local ____arr_19 = arr
local ____debugName_18
if debugName then
____debugName_18 = getArrayMeta(debugName)
else
____debugName_18 = defaultArrayMeta
end
____setmetatable_20(____arr_19, ____debugName_18)
end
if debugName then
if not debugArrays[debugName] then
debugArrays[debugName] = 0
end
debugArrays[debugName] = debugArrays[debugName] + 1
end
return arr
end,
destroyObject = destroyObject,
destroyArray = destroyArray,
cloneArray = function(arr)
local newArray = ____exports.MemoryHandler.getEmptyArray()
do
local i = 0
while i < #arr do
newArray[i + 1] = arr[i + 1]
i = i + 1
end
end
return newArray
end,
printDebugInfo = function()
print("MemoryHandler")
print((("Objects: " .. tostring(numCreatedObjects - #cachedObjects)) .. "/") .. tostring(numCreatedObjects))
print((("Arrays: " .. tostring(numCreatedArrays - #cachedArrays)) .. "/") .. tostring(numCreatedArrays))
printDebugNames("objects", debugObjects)
printDebugNames("arrays", debugArrays)
if _G.trackPrintMap then
printDebugNames("globals", _G.__fakePrintMap)
end
end
}
end
____exports.MemoryHandler = initMemoryHandler()
return ____exports
end,
["src.core.04_STRUCTURES.BaseArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local sortArrayOfObjectsByIds = ____Basic_functions.sortArrayOfObjectsByIds
____exports.BaseArray = __TS__Class()
local BaseArray = ____exports.BaseArray
BaseArray.name = "BaseArray"
function BaseArray.prototype.____constructor(self, manageIds)
self.manageIds = false
self.lastInstanceId = -1
self.data = {}
self._new = function(____, v)
if self.manageIds then
local ____self_data_3 = self.data
local ____self_0, ____lastInstanceId_1 = self, "lastInstanceId"
local ____self_lastInstanceId_2 = ____self_0[____lastInstanceId_1] + 1
____self_0[____lastInstanceId_1] = ____self_lastInstanceId_2
____self_data_3[____self_lastInstanceId_2] = v
else
local ____this_5
____this_5 = v
local ____v_getId_result_4 = ____this_5.getId
if ____v_getId_result_4 ~= nil then
____v_getId_result_4 = ____v_getId_result_4(____this_5)
end
local id = ____v_getId_result_4
if not id then
error(("BaseArray: _new: v.getId() is null (" .. self.constructor.name) .. ")", 0)
end
self.data[id] = v
end
return self.lastInstanceId
end
self.count = function()
local n = 0
for _k, _v in pairs(self.data) do
n = n + 1
end
return n
end
self.get = function(____, id) return self.data[id] or nil end
self.getAll = function() return self.data end
self.toJson = function()
local outputArray = MemoryHandler.getEmptyArray()
for _, element in pairs(self.data) do
local json = element:toJson()
if json then
arrayPush(outputArray, json)
end
end
return sortArrayOfObjectsByIds(outputArray)
end
self.destroyOne = function(____, id)
if self.data[id] then
self.data[id]:destroy()
__TS__Delete(self.data, id)
return true
else
return false
end
end
self.destroy = function()
for id, v in pairs(self.data) do
v:destroy()
__TS__Delete(self.data, id)
end
end
self.getLastInstanceId = function() return self.lastInstanceId + 1 end
self.manageIds = manageIds
end
function BaseArray.prototype.forAll(self, cb)
for id, element in pairs(self.data) do
cb(element, id)
end
end
return ____exports
end,
["src.core.01_libraries.Ascii"] = function(...)
local ____exports = {}
local TABLE_ASCII = " !\"#$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
local DEBUT_TABLE_ASCII = 32
local TAILLE_TABLE_ASCII = StringLength(TABLE_ASCII)
____exports.CaractereVersAscii = function(caractere)
local curseurSurTableAscii = 0
while not (curseurSurTableAscii >= TAILLE_TABLE_ASCII or SubString(TABLE_ASCII, curseurSurTableAscii, curseurSurTableAscii + 1) == caractere) do
curseurSurTableAscii = curseurSurTableAscii + 1
end
if curseurSurTableAscii < TAILLE_TABLE_ASCII then
return curseurSurTableAscii + DEBUT_TABLE_ASCII
end
return -1
end
____exports.AsciiVersCaractere = function(source)
if source >= DEBUT_TABLE_ASCII and source <= StringLength(TABLE_ASCII) - 1 + DEBUT_TABLE_ASCII then
return SubString(TABLE_ASCII, source - DEBUT_TABLE_ASCII, source - (DEBUT_TABLE_ASCII - 1))
end
return ""
end
____exports.String2Ascii = function(source)
local resultat = 0
local resultatIntermediaire = 0
local curseurSurSource = 0
local sourceTaille = StringLength(source)
while not (curseurSurSource >= sourceTaille or resultatIntermediaire == -1) do
resultatIntermediaire = ____exports.CaractereVersAscii(SubString(source, curseurSurSource, curseurSurSource + 1))
resultat = resultat * 256 + resultatIntermediaire
curseurSurSource = curseurSurSource + 1
end
if resultatIntermediaire ~= -1 then
return resultat
end
return -1
end
____exports.Ascii2String = function(source)
local resultat = ""
local resultatIntermediaire = " "
local modulo = 1
while not (resultatIntermediaire == "" or modulo <= 0) do
modulo = source - math.floor(source / 256 + 0.5) * 256
resultatIntermediaire = ____exports.AsciiVersCaractere(modulo)
resultat = resultatIntermediaire .. resultat
source = math.floor(source / 256 + 0.5)
end
if modulo == 0 then
return resultat
end
return ""
end
return ____exports
end,
["src.Utils.EffectUtils"] = function(...)
local ____exports = {}
local function initEffectUtils()
local state = {displayEffects = true}
local function setDisplayEffects(displayEffects)
state.displayEffects = displayEffects
end
local function destroyEffect(whichEffect)
if whichEffect then
return DestroyEffect(whichEffect)
end
end
local function addSpecialEffect(modelName, x, y)
if state.displayEffects then
return AddSpecialEffect(modelName, x, y)
end
end
local function addSpecialEffectLoc(modelName, where)
if state.displayEffects then
return AddSpecialEffectLoc(modelName, where)
end
end
local function addSpecialEffectTarget(modelName, targetWidget, attachPointName)
if state.displayEffects then
return AddSpecialEffectTarget(modelName, targetWidget, attachPointName)
end
end
return {
getDisplayEffects = function() return state.displayEffects end,
setDisplayEffects = setDisplayEffects,
destroyEffect = destroyEffect,
addSpecialEffect = addSpecialEffect,
addSpecialEffectLoc = addSpecialEffectLoc,
addSpecialEffectTarget = addSpecialEffectTarget
}
end
____exports.EffectUtils = initEffectUtils()
return ____exports
end,
["src.Utils.LocationUtils"] = function(...)
local ____exports = {}
local loc = Location(0, 0)
local function GetLocZ(x, y)
MoveLocation(loc, x, y)
return GetLocationZ(loc)
end
____exports.GetUnitZEx = function(unit)
return GetLocZ(
GetUnitX(unit),
GetUnitY(unit)
) + GetUnitFlyHeight(unit)
end
return ____exports
end,
["src.Utils.Point"] = function(...)
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
____exports.createPoint = function(x, y)
local point = MemoryHandler.getEmptyObject()
point.x = x
point.y = y
return point
end
return ____exports
end,
["lua_modules.w3ts.handles.handle"] = function(...)
local ____lualib = require("lualib_bundle")
local WeakMap = ____lualib.WeakMap
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
---
-- @noSelfInFile *
local map = __TS__New(WeakMap)
____exports.Handle = __TS__Class()
local Handle = ____exports.Handle
Handle.name = "Handle"
function Handle.prototype.____constructor(self, handle)
self.handle = handle == nil and ____exports.Handle.initHandle or handle
map:set(self.handle, self)
end
__TS__SetDescriptor(
Handle.prototype,
"id",
{get = function(self)
return GetHandleId(self.handle)
end},
true
)
function Handle.initFromHandle(self)
return ____exports.Handle.initHandle ~= nil
end
function Handle.getObject(self, handle)
local obj = map:get(handle)
if obj ~= nil then
return obj
end
____exports.Handle.initHandle = handle
local newObj = __TS__New(self)
____exports.Handle.initHandle = nil
return newObj
end
return ____exports
end,
["lua_modules.w3ts.handles.point"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.Point = __TS__Class()
local Point = ____exports.Point
Point.name = "Point"
__TS__ClassExtends(Point, Handle)
function Point.prototype.____constructor(self, x, y)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
Location(x, y)
)
end
end
__TS__SetDescriptor(
Point.prototype,
"x",
{
get = function(self)
return GetLocationX(self.handle)
end,
set = function(self, value)
MoveLocation(self.handle, value, self.y)
end
},
true
)
__TS__SetDescriptor(
Point.prototype,
"y",
{
get = function(self)
return GetLocationY(self.handle)
end,
set = function(self, value)
MoveLocation(self.handle, self.x, value)
end
},
true
)
__TS__SetDescriptor(
Point.prototype,
"z",
{get = function(self)
return GetLocationZ(self.handle)
end},
true
)
function Point.prototype.destroy(self)
RemoveLocation(self.handle)
end
function Point.prototype.setPosition(self, x, y)
MoveLocation(self.handle, x, y)
end
function Point.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.camera"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
local ____point = require("lua_modules.w3ts.handles.point")
local Point = ____point.Point
____exports.Camera = __TS__Class()
local Camera = ____exports.Camera
Camera.name = "Camera"
function Camera.prototype.____constructor(self)
end
__TS__ObjectDefineProperty(
Camera,
"visible",
{
get = function(self)
return IsCineFilterDisplayed()
end,
set = function(self, flag)
DisplayCineFilter(flag)
end
}
)
__TS__ObjectDefineProperty(
Camera,
"boundMinX",
{get = function(self)
return GetCameraBoundMinX()
end}
)
__TS__ObjectDefineProperty(
Camera,
"boundMinY",
{get = function(self)
return GetCameraBoundMinY()
end}
)
__TS__ObjectDefineProperty(
Camera,
"boundMaxX",
{get = function(self)
return GetCameraBoundMaxX()
end}
)
__TS__ObjectDefineProperty(
Camera,
"boundMaxY",
{get = function(self)
return GetCameraBoundMaxY()
end}
)
__TS__ObjectDefineProperty(
Camera,
"targetX",
{get = function(self)
return GetCameraTargetPositionX()
end}
)
__TS__ObjectDefineProperty(
Camera,
"targetY",
{get = function(self)
return GetCameraTargetPositionY()
end}
)
__TS__ObjectDefineProperty(
Camera,
"targetZ",
{get = function(self)
return GetCameraTargetPositionZ()
end}
)
__TS__ObjectDefineProperty(
Camera,
"eyeX",
{get = function(self)
return GetCameraEyePositionX()
end}
)
__TS__ObjectDefineProperty(
Camera,
"eyeY",
{get = function(self)
return GetCameraEyePositionY()
end}
)
__TS__ObjectDefineProperty(
Camera,
"eyeZ",
{get = function(self)
return GetCameraEyePositionZ()
end}
)
__TS__ObjectDefineProperty(
Camera,
"eyePoint",
{get = function(self)
return Point:fromHandle(GetCameraEyePositionLoc())
end}
)
__TS__ObjectDefineProperty(
Camera,
"targetPoint",
{get = function(self)
return Point:fromHandle(GetCameraTargetPositionLoc())
end}
)
function Camera.adjustField(self, whichField, offset, duration)
AdjustCameraField(whichField, offset, duration)
end
function Camera.endCinematicScene(self)
EndCinematicScene()
end
function Camera.forceCinematicSubtitles(self, flag)
ForceCinematicSubtitles(flag)
end
function Camera.getField(self, field)
return GetCameraField(field)
end
function Camera.getMargin(self, whichMargin)
return GetCameraMargin(whichMargin)
end
function Camera.pan(self, x, y, zOffsetDest)
if not zOffsetDest then
PanCameraTo(x, y)
else
PanCameraToWithZ(x, y, zOffsetDest)
end
end
function Camera.panTimed(self, x, y, duration, zOffsetDest)
if not zOffsetDest then
PanCameraToTimed(x, y, duration)
else
PanCameraToTimedWithZ(x, y, zOffsetDest, duration)
end
end
function Camera.reset(self, duration)
ResetToGameCamera(duration)
end
function Camera.setBounds(self, x1, y1, x2, y2, x3, y3, x4, y4)
SetCameraBounds(
x1,
y1,
x2,
y2,
x3,
y3,
x4,
y4
)
end
function Camera.setCameraOrientController(self, whichUnit, xOffset, yOffset)
SetCameraOrientController(whichUnit, xOffset, yOffset)
end
function Camera.setCineFilterBlendMode(self, whichMode)
SetCineFilterBlendMode(whichMode)
end
function Camera.setCineFilterDuration(self, duration)
SetCineFilterDuration(duration)
end
function Camera.setCineFilterEndColor(self, red, green, blue, alpha)
SetCineFilterEndColor(red, green, blue, alpha)
end
function Camera.setCineFilterEndUV(self, minU, minV, maxU, maxV)
SetCineFilterEndUV(minU, minV, maxU, maxV)
end
function Camera.setCineFilterStartColor(self, red, green, blue, alpha)
SetCineFilterStartColor(red, green, blue, alpha)
end
function Camera.setCineFilterStartUV(self, minU, minV, maxU, maxV)
SetCineFilterStartUV(minU, minV, maxU, maxV)
end
function Camera.setCineFilterTexMapFlags(self, whichFlags)
SetCineFilterTexMapFlags(whichFlags)
end
function Camera.setCineFilterTexture(self, fileName)
SetCineFilterTexture(fileName)
end
function Camera.setCinematicAudio(self, cinematicAudio)
SetCinematicAudio(cinematicAudio)
end
function Camera.setCinematicCamera(self, cameraModelFile)
SetCinematicCamera(cameraModelFile)
end
function Camera.SetCinematicScene(self, portraitUnitId, color, speakerTitle, text, sceneDuration, voiceoverDuration)
SetCinematicScene(
portraitUnitId,
color,
speakerTitle,
text,
sceneDuration,
voiceoverDuration
)
end
function Camera.setDepthOfFieldScale(self, scale)
CameraSetDepthOfFieldScale(scale)
end
function Camera.setField(self, whichField, value, duration)
SetCameraField(whichField, value, duration)
end
function Camera.setFocalDistance(self, distance)
CameraSetFocalDistance(distance)
end
function Camera.setPos(self, x, y)
SetCameraPosition(x, y)
end
function Camera.setRotateMode(self, x, y, radiansToSweep, duration)
SetCameraRotateMode(x, y, radiansToSweep, duration)
end
function Camera.setSmoothingFactor(self, factor)
CameraSetSmoothingFactor(factor)
end
function Camera.setSourceNoise(self, mag, velocity, vertOnly)
if vertOnly == nil then
vertOnly = false
end
CameraSetSourceNoiseEx(mag, velocity, vertOnly)
end
function Camera.setTargetController(self, whichUnit, xOffset, yOffset, inheritOrientation)
SetCameraTargetController(whichUnit, xOffset, yOffset, inheritOrientation)
end
function Camera.setTargetNoise(self, mag, velocity, vertOnly)
if vertOnly == nil then
vertOnly = false
end
CameraSetTargetNoiseEx(mag, velocity, vertOnly)
end
function Camera.stop(self)
StopCamera()
end
____exports.CameraSetup = __TS__Class()
local CameraSetup = ____exports.CameraSetup
CameraSetup.name = "CameraSetup"
__TS__ClassExtends(CameraSetup, Handle)
function CameraSetup.prototype.____constructor(self)
local ____Handle_initFromHandle_result_0
if Handle:initFromHandle() then
____Handle_initFromHandle_result_0 = nil
else
____Handle_initFromHandle_result_0 = CreateCameraSetup()
end
Handle.prototype.____constructor(self, ____Handle_initFromHandle_result_0)
end
__TS__SetDescriptor(
CameraSetup.prototype,
"destPoint",
{get = function(self)
return Point:fromHandle(CameraSetupGetDestPositionLoc(self.handle))
end},
true
)
__TS__SetDescriptor(
CameraSetup.prototype,
"destX",
{
get = function(self)
return CameraSetupGetDestPositionX(self.handle)
end,
set = function(self, x)
CameraSetupSetDestPosition(self.handle, x, self.destY, 0)
end
},
true
)
__TS__SetDescriptor(
CameraSetup.prototype,
"destY",
{
get = function(self)
return CameraSetupGetDestPositionY(self.handle)
end,
set = function(self, y)
CameraSetupSetDestPosition(self.handle, self.destX, y, 0)
end
},
true
)
__TS__SetDescriptor(
CameraSetup.prototype,
"label",
{
get = function(self)
return BlzCameraSetupGetLabel(self.handle)
end,
set = function(self, label)
BlzCameraSetupSetLabel(self.handle, label)
end
},
true
)
function CameraSetup.prototype.apply(self, doPan, panTimed)
CameraSetupApply(self.handle, doPan, panTimed)
end
function CameraSetup.prototype.applyForceDuration(self, doPan, forceDuration)
CameraSetupApplyForceDuration(self.handle, doPan, forceDuration)
end
function CameraSetup.prototype.applyForceDurationSmooth(self, doPan, forcedDuration, easeInDuration, easeOutDuration, smoothFactor)
BlzCameraSetupApplyForceDurationSmooth(
self.handle,
doPan,
forcedDuration,
easeInDuration,
easeOutDuration,
smoothFactor
)
end
function CameraSetup.prototype.applyForceDurationZ(self, zDestOffset, forceDuration)
CameraSetupApplyForceDurationWithZ(self.handle, zDestOffset, forceDuration)
end
function CameraSetup.prototype.applyZ(self, zDestOffset)
CameraSetupApplyWithZ(self.handle, zDestOffset)
end
function CameraSetup.prototype.getField(self, whichField)
return CameraSetupGetField(self.handle, whichField)
end
function CameraSetup.prototype.setDestPos(self, x, y, duration)
CameraSetupSetDestPosition(self.handle, x, y, duration)
end
function CameraSetup.prototype.setField(self, whichField, value, duration)
CameraSetupSetField(self.handle, whichField, value, duration)
end
function CameraSetup.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.widget"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.Widget = __TS__Class()
local Widget = ____exports.Widget
Widget.name = "Widget"
__TS__ClassExtends(Widget, Handle)
__TS__SetDescriptor(
Widget.prototype,
"life",
{
get = function(self)
return GetWidgetLife(self.handle)
end,
set = function(self, value)
SetWidgetLife(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Widget.prototype,
"x",
{get = function(self)
return GetWidgetX(self.handle)
end},
true
)
__TS__SetDescriptor(
Widget.prototype,
"y",
{get = function(self)
return GetWidgetY(self.handle)
end},
true
)
function Widget.fromEvent(self)
return self:fromHandle(GetTriggerWidget())
end
function Widget.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.destructable"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
local ____widget = require("lua_modules.w3ts.handles.widget")
local Widget = ____widget.Widget
____exports.Destructable = __TS__Class()
local Destructable = ____exports.Destructable
Destructable.name = "Destructable"
__TS__ClassExtends(Destructable, Widget)
function Destructable.prototype.____constructor(self, objectId, x, y, z, face, scale, varation)
if Handle:initFromHandle() then
Widget.prototype.____constructor(self)
else
Widget.prototype.____constructor(
self,
CreateDestructableZ(
objectId,
x,
y,
z,
face,
scale,
varation
)
)
end
end
__TS__SetDescriptor(
Destructable.prototype,
"invulnerable",
{
get = function(self)
return IsDestructableInvulnerable(self.handle)
end,
set = function(self, flag)
SetDestructableInvulnerable(self.handle, flag)
end
},
true
)
__TS__SetDescriptor(
Destructable.prototype,
"life",
{
get = function(self)
return GetDestructableLife(self.handle)
end,
set = function(self, value)
SetDestructableLife(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Destructable.prototype,
"maxLife",
{
get = function(self)
return GetDestructableMaxLife(self.handle)
end,
set = function(self, value)
SetDestructableMaxLife(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Destructable.prototype,
"name",
{get = function(self)
return GetDestructableName(self.handle)
end},
true
)
__TS__SetDescriptor(
Destructable.prototype,
"occluderHeight",
{
get = function(self)
return GetDestructableOccluderHeight(self.handle)
end,
set = function(self, value)
SetDestructableOccluderHeight(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Destructable.prototype,
"typeId",
{get = function(self)
return GetDestructableTypeId(self.handle)
end},
true
)
__TS__SetDescriptor(
Destructable.prototype,
"x",
{get = function(self)
return GetDestructableX(self.handle)
end},
true
)
__TS__SetDescriptor(
Destructable.prototype,
"y",
{get = function(self)
return GetDestructableY(self.handle)
end},
true
)
function Destructable.prototype.destroy(self)
RemoveDestructable(self.handle)
end
function Destructable.prototype.heal(self, life, birth)
DestructableRestoreLife(self.handle, life, birth)
end
function Destructable.prototype.kill(self)
KillDestructable(self.handle)
end
function Destructable.prototype.queueAnim(self, whichAnimation)
QueueDestructableAnimation(self.handle, whichAnimation)
end
function Destructable.prototype.setAnim(self, whichAnimation)
SetDestructableAnimation(self.handle, whichAnimation)
end
function Destructable.prototype.setAnimSpeed(self, speedFactor)
SetDestructableAnimationSpeed(self.handle, speedFactor)
end
function Destructable.prototype.show(self, flag)
ShowDestructable(self.handle, flag)
end
function Destructable.fromEvent(self)
return self:fromHandle(GetTriggerDestructable())
end
function Destructable.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.force"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
local ____player = require("lua_modules.w3ts.handles.player")
local MapPlayer = ____player.MapPlayer
____exports.Force = __TS__Class()
local Force = ____exports.Force
Force.name = "Force"
__TS__ClassExtends(Force, Handle)
function Force.prototype.____constructor(self)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
CreateForce()
)
end
end
function Force.prototype.addPlayer(self, whichPlayer)
ForceAddPlayer(self.handle, whichPlayer.handle)
end
function Force.prototype.clear(self)
ForceClear(self.handle)
end
function Force.prototype.destroy(self)
DestroyForce(self.handle)
end
function Force.prototype.enumAllies(self, whichPlayer, filter)
ForceEnumAllies(
self.handle,
whichPlayer.handle,
type(filter) == "function" and Filter(filter) or filter
)
end
function Force.prototype.enumEnemies(self, whichPlayer, filter)
ForceEnumEnemies(
self.handle,
whichPlayer.handle,
type(filter) == "function" and Filter(filter) or filter
)
end
function Force.prototype.enumPlayers(self, filter)
ForceEnumPlayers(
self.handle,
type(filter) == "function" and Filter(filter) or filter
)
end
function Force.prototype.enumPlayersCounted(self, filter, countLimit)
ForceEnumPlayersCounted(
self.handle,
type(filter) == "function" and Filter(filter) or filter,
countLimit
)
end
Force.prototype["for"] = function(self, callback)
ForForce(self.handle, callback)
end
function Force.prototype.getPlayers(self)
local players = {}
ForForce(
self.handle,
function()
local ____temp_0 = #players + 1
players[____temp_0] = MapPlayer:fromEnum()
return ____temp_0
end
)
return players
end
function Force.prototype.hasPlayer(self, whichPlayer)
return IsPlayerInForce(whichPlayer.handle, self.handle)
end
function Force.prototype.removePlayer(self, whichPlayer)
ForceRemovePlayer(self.handle, whichPlayer.handle)
end
function Force.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.player"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.MapPlayer = __TS__Class()
local MapPlayer = ____exports.MapPlayer
MapPlayer.name = "MapPlayer"
__TS__ClassExtends(MapPlayer, Handle)
function MapPlayer.prototype.____constructor(self, index)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
Player(index)
)
end
end
__TS__SetDescriptor(
MapPlayer.prototype,
"color",
{
get = function(self)
return GetPlayerColor(self.handle)
end,
set = function(self, color)
SetPlayerColor(self.handle, color)
end
},
true
)
__TS__SetDescriptor(
MapPlayer.prototype,
"controller",
{get = function(self)
return GetPlayerController(self.handle)
end},
true
)
__TS__SetDescriptor(
MapPlayer.prototype,
"handicap",
{
get = function(self)
return GetPlayerHandicap(self.handle)
end,
set = function(self, handicap)
SetPlayerHandicap(self.handle, handicap)
end
},
true
)
__TS__SetDescriptor(
MapPlayer.prototype,
"handicapXp",
{
get = function(self)
return GetPlayerHandicapXP(self.handle)
end,
set = function(self, handicap)
SetPlayerHandicapXP(self.handle, handicap)
end
},
true
)
__TS__SetDescriptor(
MapPlayer.prototype,
"id",
{get = function(self)
return GetPlayerId(self.handle)
end},
true
)
__TS__SetDescriptor(
MapPlayer.prototype,
"name",
{
get = function(self)
return GetPlayerName(self.handle)
end,
set = function(self, value)
SetPlayerName(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
MapPlayer.prototype,
"race",
{get = function(self)
return GetPlayerRace(self.handle)
end},
true
)
__TS__SetDescriptor(
MapPlayer.prototype,
"slotState",
{get = function(self)
return GetPlayerSlotState(self.handle)
end},
true
)
__TS__SetDescriptor(
MapPlayer.prototype,
"startLocation",
{get = function(self)
return GetPlayerStartLocation(self.handle)
end},
true
)
__TS__SetDescriptor(
MapPlayer.prototype,
"startLocationX",
{get = function(self)
return GetStartLocationX(self.startLocation)
end},
true
)
__TS__SetDescriptor(
MapPlayer.prototype,
"startLocationY",
{get = function(self)
return GetStartLocationY(self.startLocation)
end},
true
)
__TS__SetDescriptor(
MapPlayer.prototype,
"startLocationPoint",
{get = function(self)
return GetStartLocationLoc(self.startLocation)
end},
true
)
__TS__SetDescriptor(
MapPlayer.prototype,
"team",
{get = function(self)
return GetPlayerTeam(self.handle)
end},
true
)
__TS__SetDescriptor(
MapPlayer.prototype,
"townHallCount",
{get = function(self)
return BlzGetPlayerTownHallCount(self.handle)
end},
true
)
function MapPlayer.prototype.addTechResearched(self, techId, levels)
AddPlayerTechResearched(self.handle, techId, levels)
end
function MapPlayer.prototype.decTechResearched(self, techId, levels)
BlzDecPlayerTechResearched(self.handle, techId, levels)
end
function MapPlayer.prototype.cacheHeroData(self)
CachePlayerHeroData(self.handle)
end
function MapPlayer.prototype.compareAlliance(self, otherPlayer, whichAllianceSetting)
return GetPlayerAlliance(self.handle, otherPlayer.handle, whichAllianceSetting)
end
function MapPlayer.prototype.coordsFogged(self, x, y)
return IsFoggedToPlayer(x, y, self.handle)
end
function MapPlayer.prototype.coordsMasked(self, x, y)
return IsMaskedToPlayer(x, y, self.handle)
end
function MapPlayer.prototype.coordsVisible(self, x, y)
return IsVisibleToPlayer(x, y, self.handle)
end
function MapPlayer.prototype.cripple(self, toWhichPlayers, flag)
CripplePlayer(self.handle, toWhichPlayers.handle, flag)
end
function MapPlayer.prototype.getScore(self, whichPlayerScore)
return GetPlayerScore(self.handle, whichPlayerScore)
end
function MapPlayer.prototype.getState(self, whichPlayerState)
return GetPlayerState(self.handle, whichPlayerState)
end
function MapPlayer.prototype.getStructureCount(self, includeIncomplete)
return GetPlayerStructureCount(self.handle, includeIncomplete)
end
function MapPlayer.prototype.getTaxRate(self, otherPlayer, whichResource)
return GetPlayerTaxRate(self.handle, otherPlayer, whichResource)
end
function MapPlayer.prototype.getTechCount(self, techId, specificonly)
return GetPlayerTechCount(self.handle, techId, specificonly)
end
function MapPlayer.prototype.getTechMaxAllowed(self, techId)
return GetPlayerTechMaxAllowed(self.handle, techId)
end
function MapPlayer.prototype.getTechResearched(self, techId, specificonly)
return GetPlayerTechResearched(self.handle, techId, specificonly)
end
function MapPlayer.prototype.getUnitCount(self, includeIncomplete)
return GetPlayerUnitCount(self.handle, includeIncomplete)
end
function MapPlayer.prototype.getUnitCountByType(self, unitName, includeIncomplete, includeUpgrades)
return GetPlayerTypedUnitCount(self.handle, unitName, includeIncomplete, includeUpgrades)
end
function MapPlayer.prototype.inForce(self, whichForce)
return IsPlayerInForce(self.handle, whichForce.handle)
end
function MapPlayer.prototype.isLocal(self)
return GetLocalPlayer() == self.handle
end
function MapPlayer.prototype.isObserver(self)
return IsPlayerObserver(self.handle)
end
function MapPlayer.prototype.isPlayerAlly(self, otherPlayer)
return IsPlayerAlly(self.handle, otherPlayer.handle)
end
function MapPlayer.prototype.isPlayerEnemy(self, otherPlayer)
return IsPlayerEnemy(self.handle, otherPlayer.handle)
end
function MapPlayer.prototype.isRacePrefSet(self, pref)
return IsPlayerRacePrefSet(self.handle, pref)
end
function MapPlayer.prototype.isSelectable(self)
return GetPlayerSelectable(self.handle)
end
function MapPlayer.prototype.pointFogged(self, whichPoint)
return IsLocationFoggedToPlayer(whichPoint.handle, self.handle)
end
function MapPlayer.prototype.pointMasked(self, whichPoint)
return IsLocationMaskedToPlayer(whichPoint.handle, self.handle)
end
function MapPlayer.prototype.pointVisible(self, whichPoint)
return IsLocationVisibleToPlayer(whichPoint.handle, self.handle)
end
function MapPlayer.prototype.remove(self, gameResult)
RemovePlayer(self.handle, gameResult)
end
function MapPlayer.prototype.removeAllGuardPositions(self)
RemoveAllGuardPositions(self.handle)
end
function MapPlayer.prototype.setAbilityAvailable(self, abilId, avail)
SetPlayerAbilityAvailable(self.handle, abilId, avail)
end
function MapPlayer.prototype.setAlliance(self, otherPlayer, whichAllianceSetting, value)
SetPlayerAlliance(self.handle, otherPlayer.handle, whichAllianceSetting, value)
end
function MapPlayer.prototype.setOnScoreScreen(self, flag)
SetPlayerOnScoreScreen(self.handle, flag)
end
function MapPlayer.prototype.setState(self, whichPlayerState, value)
SetPlayerState(self.handle, whichPlayerState, value)
end
function MapPlayer.prototype.setTaxRate(self, otherPlayer, whichResource, rate)
SetPlayerTaxRate(self.handle, otherPlayer.handle, whichResource, rate)
end
function MapPlayer.prototype.setTechMaxAllowed(self, techId, maximum)
SetPlayerTechMaxAllowed(self.handle, techId, maximum)
end
function MapPlayer.prototype.setTechResearched(self, techId, setToLevel)
SetPlayerTechResearched(self.handle, techId, setToLevel)
end
function MapPlayer.prototype.setUnitsOwner(self, newOwner)
SetPlayerUnitsOwner(self.handle, newOwner)
end
function MapPlayer.fromEnum(self)
return ____exports.MapPlayer:fromHandle(GetEnumPlayer())
end
function MapPlayer.fromEvent(self)
return ____exports.MapPlayer:fromHandle(GetTriggerPlayer())
end
function MapPlayer.fromFilter(self)
return ____exports.MapPlayer:fromHandle(GetFilterPlayer())
end
function MapPlayer.fromHandle(self, handle)
return self:getObject(handle)
end
function MapPlayer.fromIndex(self, index)
return self:fromHandle(Player(index))
end
function MapPlayer.fromLocal(self)
return self:fromHandle(GetLocalPlayer())
end
return ____exports
end,
["lua_modules.w3ts.handles.dialog"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.DialogButton = __TS__Class()
local DialogButton = ____exports.DialogButton
DialogButton.name = "DialogButton"
__TS__ClassExtends(DialogButton, Handle)
function DialogButton.prototype.____constructor(self, whichDialog, text, hotkey, quit, score)
if hotkey == nil then
hotkey = 0
end
if quit == nil then
quit = false
end
if score == nil then
score = false
end
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
elseif not quit then
Handle.prototype.____constructor(
self,
DialogAddButton(whichDialog.handle, text, hotkey)
)
else
Handle.prototype.____constructor(
self,
DialogAddQuitButton(whichDialog.handle, score, text, hotkey)
)
end
end
function DialogButton.fromHandle(self, handle)
return self:getObject(handle)
end
____exports.Dialog = __TS__Class()
local Dialog = ____exports.Dialog
Dialog.name = "Dialog"
__TS__ClassExtends(Dialog, Handle)
function Dialog.prototype.____constructor(self)
local ____Handle_initFromHandle_result_0
if Handle:initFromHandle() then
____Handle_initFromHandle_result_0 = nil
else
____Handle_initFromHandle_result_0 = DialogCreate()
end
Handle.prototype.____constructor(self, ____Handle_initFromHandle_result_0)
end
function Dialog.prototype.addButton(self, text, hotkey, quit, score)
if hotkey == nil then
hotkey = 0
end
if quit == nil then
quit = false
end
if score == nil then
score = false
end
return __TS__New(
____exports.DialogButton,
self,
text,
hotkey,
quit,
score
)
end
function Dialog.prototype.clear(self)
DialogClear(self.handle)
end
function Dialog.prototype.destroy(self)
DialogDestroy(self.handle)
end
function Dialog.prototype.display(self, whichPlayer, flag)
DialogDisplay(whichPlayer.handle, self.handle, flag)
end
function Dialog.prototype.setMessage(self, whichMessage)
DialogSetMessage(self.handle, whichMessage)
end
function Dialog.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.effect"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.Effect = __TS__Class()
local Effect = ____exports.Effect
Effect.name = "Effect"
__TS__ClassExtends(Effect, Handle)
function Effect.prototype.____constructor(self, modelName, a, b)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
elseif type(a) == "number" and type(b) == "number" then
Handle.prototype.____constructor(
self,
AddSpecialEffect(modelName, a, b)
)
elseif type(a) ~= "number" and type(b) == "string" then
Handle.prototype.____constructor(
self,
AddSpecialEffectTarget(modelName, a.handle, b)
)
end
end
__TS__SetDescriptor(
Effect.prototype,
"scale",
{
get = function(self)
return BlzGetSpecialEffectScale(self.handle)
end,
set = function(self, scale)
BlzSetSpecialEffectScale(self.handle, scale)
end
},
true
)
__TS__SetDescriptor(
Effect.prototype,
"x",
{
get = function(self)
return BlzGetLocalSpecialEffectX(self.handle)
end,
set = function(self, x)
BlzSetSpecialEffectX(self.handle, x)
end
},
true
)
__TS__SetDescriptor(
Effect.prototype,
"y",
{
get = function(self)
return BlzGetLocalSpecialEffectY(self.handle)
end,
set = function(self, y)
BlzSetSpecialEffectY(self.handle, y)
end
},
true
)
__TS__SetDescriptor(
Effect.prototype,
"z",
{
get = function(self)
return BlzGetLocalSpecialEffectZ(self.handle)
end,
set = function(self, z)
BlzSetSpecialEffectZ(self.handle, z)
end
},
true
)
function Effect.prototype.addSubAnimation(self, subAnim)
BlzSpecialEffectAddSubAnimation(self.handle, subAnim)
end
function Effect.prototype.clearSubAnimations(self)
BlzSpecialEffectClearSubAnimations(self.handle)
end
function Effect.prototype.destroy(self)
DestroyEffect(self.handle)
end
function Effect.prototype.playAnimation(self, animType)
BlzPlaySpecialEffect(self.handle, animType)
end
function Effect.prototype.playWithTimeScale(self, animType, timeScale)
BlzPlaySpecialEffectWithTimeScale(self.handle, animType, timeScale)
end
function Effect.prototype.removeSubAnimation(self, subAnim)
BlzSpecialEffectRemoveSubAnimation(self.handle, subAnim)
end
function Effect.prototype.resetScaleMatrix(self)
BlzResetSpecialEffectMatrix(self.handle)
end
function Effect.prototype.setAlpha(self, alpha)
BlzSetSpecialEffectAlpha(self.handle, alpha)
end
function Effect.prototype.setColor(self, red, green, blue)
BlzSetSpecialEffectColor(self.handle, red, green, blue)
end
function Effect.prototype.setColorByPlayer(self, whichPlayer)
BlzSetSpecialEffectColorByPlayer(self.handle, whichPlayer.handle)
end
function Effect.prototype.setHeight(self, height)
BlzSetSpecialEffectHeight(self.handle, height)
end
function Effect.prototype.setOrientation(self, yaw, pitch, roll)
BlzSetSpecialEffectOrientation(self.handle, yaw, pitch, roll)
end
function Effect.prototype.setPitch(self, pitch)
BlzSetSpecialEffectPitch(self.handle, pitch)
end
function Effect.prototype.setPoint(self, p)
BlzSetSpecialEffectPositionLoc(self.handle, p.handle)
end
function Effect.prototype.setPosition(self, x, y, z)
BlzSetSpecialEffectPosition(self.handle, x, y, z)
end
function Effect.prototype.setRoll(self, roll)
BlzSetSpecialEffectRoll(self.handle, roll)
end
function Effect.prototype.setScaleMatrix(self, x, y, z)
BlzSetSpecialEffectMatrixScale(self.handle, x, y, z)
end
function Effect.prototype.setTime(self, value)
BlzSetSpecialEffectTime(self.handle, value)
end
function Effect.prototype.setTimeScale(self, timeScale)
BlzSetSpecialEffectTimeScale(self.handle, timeScale)
end
function Effect.prototype.setYaw(self, y)
BlzSetSpecialEffectYaw(self.handle, y)
end
function Effect.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.rect"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.Rectangle = __TS__Class()
local Rectangle = ____exports.Rectangle
Rectangle.name = "Rectangle"
__TS__ClassExtends(Rectangle, Handle)
function Rectangle.prototype.____constructor(self, minX, minY, maxX, maxY)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
Rect(minX, minY, maxX, maxY)
)
end
end
__TS__SetDescriptor(
Rectangle.prototype,
"centerX",
{get = function(self)
return GetRectCenterX(self.handle)
end},
true
)
__TS__SetDescriptor(
Rectangle.prototype,
"centerY",
{get = function(self)
return GetRectCenterY(self.handle)
end},
true
)
__TS__SetDescriptor(
Rectangle.prototype,
"maxX",
{get = function(self)
return GetRectMaxX(self.handle)
end},
true
)
__TS__SetDescriptor(
Rectangle.prototype,
"maxY",
{get = function(self)
return GetRectMaxY(self.handle)
end},
true
)
__TS__SetDescriptor(
Rectangle.prototype,
"minX",
{get = function(self)
return GetRectMinX(self.handle)
end},
true
)
__TS__SetDescriptor(
Rectangle.prototype,
"minY",
{get = function(self)
return GetRectMinY(self.handle)
end},
true
)
function Rectangle.prototype.destroy(self)
RemoveRect(self.handle)
end
function Rectangle.prototype.enumDestructables(self, filter, actionFunc)
EnumDestructablesInRect(
self.handle,
type(filter) == "function" and Filter(filter) or filter,
actionFunc
)
end
function Rectangle.prototype.enumItems(self, filter, actionFunc)
EnumItemsInRect(
self.handle,
type(filter) == "function" and Filter(filter) or filter,
actionFunc
)
end
function Rectangle.prototype.move(self, newCenterX, newCenterY)
MoveRectTo(self.handle, newCenterX, newCenterY)
end
function Rectangle.prototype.movePoint(self, newCenterPoint)
MoveRectToLoc(self.handle, newCenterPoint.handle)
end
function Rectangle.prototype.setRect(self, minX, minY, maxX, maxY)
SetRect(
self.handle,
minX,
minY,
maxX,
maxY
)
end
function Rectangle.prototype.setRectFromPoint(self, min, max)
SetRectFromLoc(self.handle, min.handle, max.handle)
end
function Rectangle.fromHandle(self, handle)
return self:getObject(handle)
end
function Rectangle.fromPoint(self, min, max)
return self:fromHandle(RectFromLoc(min.handle, max.handle))
end
function Rectangle.getWorldBounds(self)
return ____exports.Rectangle:fromHandle(GetWorldBounds())
end
return ____exports
end,
["lua_modules.w3ts.handles.fogmodifier"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.FogModifier = __TS__Class()
local FogModifier = ____exports.FogModifier
FogModifier.name = "FogModifier"
__TS__ClassExtends(FogModifier, Handle)
function FogModifier.prototype.____constructor(self, forWhichPlayer, whichState, centerX, centerY, radius, useSharedVision, afterUnits)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
CreateFogModifierRadius(
forWhichPlayer.handle,
whichState,
centerX,
centerY,
radius,
useSharedVision,
afterUnits
)
)
end
end
function FogModifier.prototype.destroy(self)
DestroyFogModifier(self.handle)
end
function FogModifier.prototype.start(self)
FogModifierStart(self.handle)
end
function FogModifier.prototype.stop(self)
FogModifierStop(self.handle)
end
function FogModifier.fromHandle(self, handle)
return self:getObject(handle)
end
function FogModifier.fromRect(self, forWhichPlayer, whichState, where, useSharedVision, afterUnits)
return self:fromHandle(CreateFogModifierRect(
forWhichPlayer.handle,
whichState,
where.handle,
useSharedVision,
afterUnits
))
end
return ____exports
end,
["lua_modules.w3ts.handles.frame"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
--- Warcraft III's UI uses a proprietary format known as FDF (Frame Definition Files).
-- This class provides the ability to manipulate and create them dynamically through code.
--
-- @example Create a simple button.
-- ```ts
-- // Create a "GLUEBUTTON" named "Facebutton", the clickable Button, for game UI
-- const buttonFrame = new Frame("FaceButton", Frame.fromOrigin(ORIGIN_FRAME_GAME_UI, 0), 0, 0, "GLUEBUTTON", "");
--
-- // Create a BACKDROP named "FaceButtonIcon", the visible image, for buttonFrame.
-- const buttonIconFrame = new Frame("FaceButton", buttonFrame, 0, 0, "BACKDROP", "");
--
-- // buttonIconFrame will mimic buttonFrame in size and position
-- buttonIconFrame.setAllPoints(buttonFrame);
--
-- // Set a Texture
-- buttonIconFrame.setTexture("ReplaceableTextures\\CommandButtons\\BTNSelectHeroOn", 0, true);
--
-- // Place the buttonFrame to the center of the screen
-- buttonFrame.setAbsPoint(FRAMEPOINT_CENTER, 0.4, 0.3);
--
-- // Give that buttonFrame a size
-- buttonFrame.setSize(0.05, 0.05);
-- ```
--
-- There are many aspects to modifying the UI and it can become complicated, so here are some
-- guides:
--
-- https://www.hiveworkshop.com/threads/ui-frames-starting-guide.318603/
-- https://www.hiveworkshop.com/pastebin/913bd439799b3d917e5b522dd9ef458f20598/
-- https://www.hiveworkshop.com/tags/ui-fdf/
____exports.Frame = __TS__Class()
local Frame = ____exports.Frame
Frame.name = "Frame"
__TS__ClassExtends(Frame, Handle)
function Frame.prototype.____constructor(self, name, owner, priority, createContext, typeName, inherits)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
if not createContext then
Handle.prototype.____constructor(
self,
BlzCreateSimpleFrame(name, owner.handle, priority)
)
else
if typeName and inherits then
Handle.prototype.____constructor(
self,
BlzCreateFrameByType(
typeName,
name,
owner.handle,
inherits,
createContext
)
)
else
Handle.prototype.____constructor(
self,
BlzCreateFrame(name, owner.handle, priority, createContext)
)
end
end
end
end
__TS__SetDescriptor(
Frame.prototype,
"alpha",
{
get = function(self)
return BlzFrameGetAlpha(self.handle)
end,
set = function(self, alpha)
BlzFrameSetAlpha(self.handle, alpha)
end
},
true
)
__TS__SetDescriptor(
Frame.prototype,
"children",
{get = function(self)
local count = self.childrenCount
local output = {}
do
local i = 0
while i < count do
output[#output + 1] = self:getChild(i)
i = i + 1
end
end
return output
end},
true
)
__TS__SetDescriptor(
Frame.prototype,
"childrenCount",
{get = function(self)
return BlzFrameGetChildrenCount(self.handle)
end},
true
)
__TS__SetDescriptor(
Frame.prototype,
"enabled",
{
get = function(self)
return BlzFrameGetEnable(self.handle)
end,
set = function(self, flag)
BlzFrameSetEnable(self.handle, flag)
end
},
true
)
__TS__SetDescriptor(
Frame.prototype,
"height",
{
get = function(self)
return BlzFrameGetHeight(self.handle)
end,
set = function(self, height)
BlzFrameSetSize(self.handle, self.width, height)
end
},
true
)
__TS__SetDescriptor(
Frame.prototype,
"parent",
{
get = function(self)
return ____exports.Frame:fromHandle(BlzFrameGetParent(self.handle))
end,
set = function(self, parent)
BlzFrameSetParent(self.handle, parent.handle)
end
},
true
)
__TS__SetDescriptor(
Frame.prototype,
"text",
{
get = function(self)
return BlzFrameGetText(self.handle)
end,
set = function(self, text)
BlzFrameSetText(self.handle, text)
end
},
true
)
__TS__SetDescriptor(
Frame.prototype,
"textSizeLimit",
{
get = function(self)
return BlzFrameGetTextSizeLimit(self.handle)
end,
set = function(self, size)
BlzFrameSetTextSizeLimit(self.handle, size)
end
},
true
)
__TS__SetDescriptor(
Frame.prototype,
"value",
{
get = function(self)
return BlzFrameGetValue(self.handle)
end,
set = function(self, value)
BlzFrameSetValue(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Frame.prototype,
"visible",
{
get = function(self)
return BlzFrameIsVisible(self.handle)
end,
set = function(self, flag)
BlzFrameSetVisible(self.handle, flag)
end
},
true
)
__TS__SetDescriptor(
Frame.prototype,
"width",
{
get = function(self)
return BlzFrameGetWidth(self.handle)
end,
set = function(self, width)
BlzFrameSetSize(self.handle, width, self.height)
end
},
true
)
function Frame.prototype.addText(self, text)
BlzFrameAddText(self.handle, text)
return self
end
function Frame.prototype.cageMouse(self, enable)
BlzFrameCageMouse(self.handle, enable)
return self
end
function Frame.prototype.clearPoints(self)
BlzFrameClearAllPoints(self.handle)
return self
end
function Frame.prototype.click(self)
BlzFrameClick(self.handle)
return self
end
function Frame.prototype.destroy(self)
BlzDestroyFrame(self.handle)
return self
end
function Frame.prototype.getChild(self, index)
return ____exports.Frame:fromHandle(BlzFrameGetChild(self.handle, index))
end
function Frame.prototype.setAbsPoint(self, point, x, y)
BlzFrameSetAbsPoint(self.handle, point, x, y)
return self
end
function Frame.prototype.setAllPoints(self, relative)
BlzFrameSetAllPoints(self.handle, relative.handle)
return self
end
function Frame.prototype.setAlpha(self, alpha)
BlzFrameSetAlpha(self.handle, alpha)
return self
end
function Frame.prototype.setEnabled(self, flag)
BlzFrameSetEnable(self.handle, flag)
return self
end
function Frame.prototype.setFocus(self, flag)
BlzFrameSetFocus(self.handle, flag)
return self
end
function Frame.prototype.setFont(self, filename, height, flags)
BlzFrameSetFont(self.handle, filename, height, flags)
return self
end
function Frame.prototype.setHeight(self, height)
BlzFrameSetSize(self.handle, self.width, height)
return self
end
function Frame.prototype.setLevel(self, level)
BlzFrameSetLevel(self.handle, level)
return self
end
function Frame.prototype.setMinMaxValue(self, minValue, maxValue)
BlzFrameSetMinMaxValue(self.handle, minValue, maxValue)
return self
end
function Frame.prototype.setModel(self, modelFile, cameraIndex)
BlzFrameSetModel(self.handle, modelFile, cameraIndex)
return self
end
function Frame.prototype.setParent(self, parent)
BlzFrameSetParent(self.handle, parent.handle)
return self
end
function Frame.prototype.setPoint(self, point, relative, relativePoint, x, y)
BlzFrameSetPoint(
self.handle,
point,
relative.handle,
relativePoint,
x,
y
)
return self
end
function Frame.prototype.setScale(self, scale)
BlzFrameSetScale(self.handle, scale)
return self
end
function Frame.prototype.setSize(self, width, height)
BlzFrameSetSize(self.handle, width, height)
return self
end
function Frame.prototype.setSpriteAnimate(self, primaryProp, flags)
BlzFrameSetSpriteAnimate(self.handle, primaryProp, flags)
return self
end
function Frame.prototype.setStepSize(self, stepSize)
BlzFrameSetStepSize(self.handle, stepSize)
return self
end
function Frame.prototype.setText(self, text)
BlzFrameSetText(self.handle, text)
return self
end
function Frame.prototype.setTextColor(self, color)
BlzFrameSetTextColor(self.handle, color)
return self
end
function Frame.prototype.setTextSizeLimit(self, size)
BlzFrameSetTextSizeLimit(self.handle, size)
return self
end
function Frame.prototype.setTexture(self, texFile, flag, blend)
BlzFrameSetTexture(self.handle, texFile, flag, blend)
return self
end
function Frame.prototype.setTooltip(self, tooltip)
BlzFrameSetTooltip(self.handle, tooltip.handle)
return self
end
function Frame.prototype.setValue(self, value)
BlzFrameSetValue(self.handle, value)
return self
end
function Frame.prototype.setVertexColor(self, color)
BlzFrameSetVertexColor(self.handle, color)
return self
end
function Frame.prototype.setVisible(self, flag)
BlzFrameSetVisible(self.handle, flag)
return self
end
function Frame.prototype.setWidth(self, width)
BlzFrameSetSize(self.handle, width, self.height)
return self
end
function Frame.autoPosition(self, enable)
BlzEnableUIAutoPosition(enable)
end
function Frame.fromEvent(self)
return self:fromHandle(BlzGetTriggerFrame())
end
function Frame.fromHandle(self, handle)
return self:getObject(handle)
end
function Frame.fromName(self, name, createContext)
return self:fromHandle(BlzGetFrameByName(name, createContext))
end
function Frame.fromOrigin(self, frameType, index)
return self:fromHandle(BlzGetOriginFrame(frameType, index))
end
function Frame.getEventHandle(self)
return BlzGetTriggerFrameEvent()
end
function Frame.getEventText(self)
return BlzGetTriggerFrameValue()
end
function Frame.getEventValue(self)
return BlzGetTriggerFrameValue()
end
function Frame.hideOrigin(self, enable)
BlzHideOriginFrames(enable)
end
function Frame.loadTOC(self, filename)
return BlzLoadTOCFile(filename)
end
return ____exports
end,
["lua_modules.w3ts.handles.gamecache"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.GameCache = __TS__Class()
local GameCache = ____exports.GameCache
GameCache.name = "GameCache"
__TS__ClassExtends(GameCache, Handle)
function GameCache.prototype.____constructor(self, campaignFile)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
InitGameCache(campaignFile)
)
end
self.filename = campaignFile
end
function GameCache.prototype.flush(self)
FlushGameCache(self.handle)
end
function GameCache.prototype.flushBoolean(self, missionKey, key)
FlushStoredBoolean(self.handle, missionKey, key)
end
function GameCache.prototype.flushInteger(self, missionKey, key)
FlushStoredInteger(self.handle, missionKey, key)
end
function GameCache.prototype.flushMission(self, missionKey)
FlushStoredMission(self.handle, missionKey)
end
function GameCache.prototype.flushNumber(self, missionKey, key)
FlushStoredInteger(self.handle, missionKey, key)
end
function GameCache.prototype.flushString(self, missionKey, key)
FlushStoredString(self.handle, missionKey, key)
end
function GameCache.prototype.flushUnit(self, missionKey, key)
FlushStoredUnit(self.handle, missionKey, key)
end
function GameCache.prototype.getBoolean(self, missionKey, key)
return GetStoredBoolean(self.handle, missionKey, key)
end
function GameCache.prototype.getInteger(self, missionKey, key)
return GetStoredInteger(self.handle, missionKey, key)
end
function GameCache.prototype.getNumber(self, missionKey, key)
return GetStoredReal(self.handle, missionKey, key)
end
function GameCache.prototype.getString(self, missionKey, key)
return GetStoredString(self.handle, missionKey, key)
end
function GameCache.prototype.hasBoolean(self, missionKey, key)
return HaveStoredBoolean(self.handle, missionKey, key)
end
function GameCache.prototype.hasInteger(self, missionKey, key)
return HaveStoredInteger(self.handle, missionKey, key)
end
function GameCache.prototype.hasNumber(self, missionKey, key)
return HaveStoredReal(self.handle, missionKey, key)
end
function GameCache.prototype.hasString(self, missionKey, key)
return HaveStoredString(self.handle, missionKey, key)
end
function GameCache.prototype.restoreUnit(self, missionKey, key, forWhichPlayer, x, y, face)
return RestoreUnit(
self.handle,
missionKey,
key,
forWhichPlayer.handle,
x,
y,
face
)
end
function GameCache.prototype.save(self)
return SaveGameCache(self.handle)
end
function GameCache.prototype.store(self, missionKey, key, value)
if type(value) == "string" then
StoreString(self.handle, missionKey, key, value)
elseif type(value) == "boolean" then
StoreBoolean(self.handle, missionKey, key, value)
elseif type(value) == "number" then
StoreReal(self.handle, missionKey, key, value)
else
StoreUnit(self.handle, missionKey, key, value)
end
end
function GameCache.prototype.syncBoolean(self, missionKey, key)
return SyncStoredBoolean(self.handle, missionKey, key)
end
function GameCache.prototype.syncInteger(self, missionKey, key)
return SyncStoredInteger(self.handle, missionKey, key)
end
function GameCache.prototype.syncNumber(self, missionKey, key)
return SyncStoredReal(self.handle, missionKey, key)
end
function GameCache.prototype.syncString(self, missionKey, key)
return SyncStoredString(self.handle, missionKey, key)
end
function GameCache.prototype.syncUnit(self, missionKey, key)
return SyncStoredUnit(self.handle, missionKey, key)
end
function GameCache.fromHandle(self, handle)
return self:getObject(handle)
end
function GameCache.reloadFromDisk(self)
return ReloadGameCachesFromDisk()
end
return ____exports
end,
["lua_modules.w3ts.globals.order"] = function(...)
local ____exports = {}
return ____exports
end,
["lua_modules.w3ts.handles.item"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local __TS__StringSubstr = ____lualib.__TS__StringSubstr
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
local ____widget = require("lua_modules.w3ts.handles.widget")
local Widget = ____widget.Widget
____exports.Item = __TS__Class()
local Item = ____exports.Item
Item.name = "Item"
__TS__ClassExtends(Item, Widget)
function Item.prototype.____constructor(self, itemId, x, y, skinId)
if Handle:initFromHandle() then
Widget.prototype.____constructor(self)
else
Widget.prototype.____constructor(
self,
skinId and BlzCreateItemWithSkin(itemId, x, y, skinId) or CreateItem(itemId, x, y)
)
end
end
__TS__SetDescriptor(
Item.prototype,
"charges",
{
get = function(self)
return GetItemCharges(self.handle)
end,
set = function(self, value)
SetItemCharges(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Item.prototype,
"invulnerable",
{
get = function(self)
return IsItemInvulnerable(self.handle)
end,
set = function(self, flag)
SetItemInvulnerable(self.handle, true)
end
},
true
)
__TS__SetDescriptor(
Item.prototype,
"level",
{get = function(self)
return GetItemLevel(self.handle)
end},
true
)
__TS__SetDescriptor(
Item.prototype,
"description",
{
get = function(self)
return BlzGetItemDescription(self.handle)
end,
set = function(self, description)
BlzSetItemDescription(self.handle, description)
end
},
true
)
__TS__SetDescriptor(
Item.prototype,
"extendedTooltip",
{
get = function(self)
return BlzGetItemExtendedTooltip(self.handle)
end,
set = function(self, tooltip)
BlzSetItemExtendedTooltip(self.handle, tooltip)
end
},
true
)
__TS__SetDescriptor(
Item.prototype,
"icon",
{
get = function(self)
return BlzGetItemIconPath(self.handle)
end,
set = function(self, path)
BlzSetItemIconPath(self.handle, path)
end
},
true
)
__TS__SetDescriptor(
Item.prototype,
"name",
{
get = function(self)
return GetItemName(self.handle)
end,
set = function(self, value)
BlzSetItemName(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Item.prototype,
"tooltip",
{
get = function(self)
return BlzGetItemTooltip(self.handle)
end,
set = function(self, tooltip)
BlzSetItemTooltip(self.handle, tooltip)
end
},
true
)
__TS__SetDescriptor(
Item.prototype,
"pawnable",
{
get = function(self)
return IsItemPawnable(self.handle)
end,
set = function(self, flag)
SetItemPawnable(self.handle, flag)
end
},
true
)
__TS__SetDescriptor(
Item.prototype,
"player",
{get = function(self)
return GetItemPlayer(self.handle)
end},
true
)
__TS__SetDescriptor(
Item.prototype,
"type",
{get = function(self)
return GetItemType(self.handle)
end},
true
)
__TS__SetDescriptor(
Item.prototype,
"typeId",
{get = function(self)
return GetItemTypeId(self.handle)
end},
true
)
__TS__SetDescriptor(
Item.prototype,
"userData",
{
get = function(self)
return GetItemUserData(self.handle)
end,
set = function(self, value)
SetItemUserData(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Item.prototype,
"visible",
{
get = function(self)
return IsItemVisible(self.handle)
end,
set = function(self, flag)
SetItemVisible(self.handle, flag)
end
},
true
)
__TS__SetDescriptor(
Item.prototype,
"skin",
{
get = function(self)
return BlzGetItemSkin(self.handle)
end,
set = function(self, skinId)
BlzSetItemSkin(self.handle, skinId)
end
},
true
)
__TS__SetDescriptor(
Item.prototype,
"x",
{
get = function(self)
return GetItemX(self.handle)
end,
set = function(self, value)
SetItemPosition(self.handle, value, self.y)
end
},
true
)
__TS__SetDescriptor(
Item.prototype,
"y",
{
get = function(self)
return GetItemY(self.handle)
end,
set = function(self, value)
SetItemPosition(self.handle, self.x, value)
end
},
true
)
function Item.prototype.addAbility(self, abilCode)
BlzItemAddAbility(self.handle, abilCode)
end
function Item.prototype.getAbility(self, abilCode)
return BlzGetItemAbility(self.handle, abilCode)
end
function Item.prototype.getAbilityByIndex(self, index)
return BlzGetItemAbilityByIndex(self.handle, index)
end
function Item.prototype.removeAbility(self, abilCode)
BlzItemRemoveAbility(self.handle, abilCode)
end
function Item.prototype.destroy(self)
RemoveItem(self.handle)
end
function Item.prototype.getField(self, field)
local fieldType = __TS__StringSubstr(
tostring(field),
0,
(string.find(
tostring(field),
":",
nil,
true
) or 0) - 1
)
repeat
local ____switch41 = fieldType
local ____cond41 = ____switch41 == "unitbooleanfield"
if ____cond41 then
return BlzGetItemBooleanField(self.handle, field)
end
____cond41 = ____cond41 or ____switch41 == "unitintegerfield"
if ____cond41 then
return BlzGetItemIntegerField(self.handle, field)
end
____cond41 = ____cond41 or ____switch41 == "unitrealfield"
if ____cond41 then
return BlzGetItemRealField(self.handle, field)
end
____cond41 = ____cond41 or ____switch41 == "unitstringfield"
if ____cond41 then
return BlzGetItemStringField(self.handle, field)
end
do
return 0
end
until true
end
function Item.prototype.isOwned(self)
return IsItemOwned(self.handle)
end
function Item.prototype.isPawnable(self)
return IsItemPawnable(self.handle)
end
function Item.prototype.isPowerup(self)
return IsItemPowerup(self.handle)
end
function Item.prototype.isSellable(self)
return IsItemSellable(self.handle)
end
function Item.prototype.setDropId(self, unitId)
SetItemDropID(self.handle, unitId)
end
function Item.prototype.setDropOnDeath(self, flag)
SetItemDropOnDeath(self.handle, flag)
end
function Item.prototype.setDroppable(self, flag)
SetItemDroppable(self.handle, flag)
end
function Item.prototype.setField(self, field, value)
local fieldType = __TS__StringSubstr(
tostring(field),
0,
(string.find(
tostring(field),
":",
nil,
true
) or 0) - 1
)
if fieldType == "unitbooleanfield" and type(value) == "boolean" then
return BlzSetItemBooleanField(self.handle, field, value)
elseif fieldType == "unitintegerfield" and type(value) == "number" then
return BlzSetItemIntegerField(self.handle, field, value)
elseif fieldType == "unitrealfield" and type(value) == "number" then
return BlzSetItemRealField(self.handle, field, value)
elseif fieldType == "unitstringfield" and type(value) == "string" then
return BlzSetItemStringField(self.handle, field, value)
end
return false
end
function Item.prototype.setOwner(self, whichPlayer, changeColor)
SetItemPlayer(self.handle, whichPlayer.handle, changeColor)
end
function Item.prototype.setPoint(self, whichPoint)
SetItemPosition(self.handle, whichPoint.x, whichPoint.y)
end
function Item.prototype.setPosition(self, x, y)
SetItemPosition(self.handle, x, y)
end
function Item.fromEvent(self)
return self:fromHandle(GetManipulatedItem())
end
function Item.fromHandle(self, handle)
return self:getObject(handle)
end
function Item.isIdPawnable(self, itemId)
return IsItemIdPawnable(itemId)
end
function Item.isIdPowerup(self, itemId)
return IsItemIdPowerup(itemId)
end
function Item.isIdSellable(self, itemId)
return IsItemIdSellable(itemId)
end
return ____exports
end,
["lua_modules.w3ts.handles.sound"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.Sound = __TS__Class()
local Sound = ____exports.Sound
Sound.name = "Sound"
__TS__ClassExtends(Sound, Handle)
function Sound.prototype.____constructor(self, fileName, looping, is3D, stopWhenOutOfRange, fadeInRate, fadeOutRate, eaxSetting)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
CreateSound(
fileName,
looping,
is3D,
stopWhenOutOfRange,
fadeInRate,
fadeOutRate,
eaxSetting
)
)
end
end
__TS__SetDescriptor(
Sound.prototype,
"dialogueSpeakerNameKey",
{
get = function(self)
return GetDialogueSpeakerNameKey(self.handle)
end,
set = function(self, speakerName)
SetDialogueSpeakerNameKey(self.handle, speakerName)
end
},
true
)
__TS__SetDescriptor(
Sound.prototype,
"dialogueTextKey",
{
get = function(self)
return GetDialogueTextKey(self.handle)
end,
set = function(self, dialogueText)
SetDialogueTextKey(self.handle, dialogueText)
end
},
true
)
__TS__SetDescriptor(
Sound.prototype,
"duration",
{
get = function(self)
return GetSoundDuration(self.handle)
end,
set = function(self, duration)
SetSoundDuration(self.handle, duration)
end
},
true
)
__TS__SetDescriptor(
Sound.prototype,
"loading",
{get = function(self)
return GetSoundIsLoading(self.handle)
end},
true
)
__TS__SetDescriptor(
Sound.prototype,
"playing",
{get = function(self)
return GetSoundIsPlaying(self.handle)
end},
true
)
function Sound.prototype.killWhenDone(self)
KillSoundWhenDone(self.handle)
end
function Sound.prototype.registerStacked(self, byPosition, rectWidth, rectHeight)
RegisterStackedSound(self.handle, byPosition, rectWidth, rectHeight)
end
function Sound.prototype.setChannel(self, channel)
SetSoundDistanceCutoff(self.handle, channel)
end
function Sound.prototype.setConeAngles(self, inside, outside, outsideVolume)
SetSoundConeAngles(self.handle, inside, outside, outsideVolume)
end
function Sound.prototype.setConeOrientation(self, x, y, z)
SetSoundConeOrientation(self.handle, x, y, z)
end
function Sound.prototype.setDistanceCutoff(self, cutoff)
SetSoundDistanceCutoff(self.handle, cutoff)
end
function Sound.prototype.setDistances(self, minDist, maxDist)
SetSoundDistances(self.handle, minDist, maxDist)
end
function Sound.prototype.setFacialAnimationFilepath(self, animationSetFilepath)
SetSoundFacialAnimationSetFilepath(self.handle, animationSetFilepath)
end
function Sound.prototype.setFacialAnimationGroupLabel(self, groupLabel)
SetSoundFacialAnimationGroupLabel(self.handle, groupLabel)
end
function Sound.prototype.setFacialAnimationLabel(self, animationLabel)
SetSoundFacialAnimationLabel(self.handle, animationLabel)
end
function Sound.prototype.setParamsFromLabel(self, soundLabel)
SetSoundParamsFromLabel(self.handle, soundLabel)
end
function Sound.prototype.setPitch(self, pitch)
SetSoundPitch(self.handle, pitch)
end
function Sound.prototype.setPlayPosition(self, millisecs)
SetSoundPlayPosition(self.handle, millisecs)
end
function Sound.prototype.setPosition(self, x, y, z)
SetSoundPosition(self.handle, x, y, z)
end
function Sound.prototype.setVelocity(self, x, y, z)
SetSoundVelocity(self.handle, x, y, z)
end
function Sound.prototype.setVolume(self, volume)
SetSoundVolume(self.handle, volume)
end
function Sound.prototype.start(self)
StartSound(self.handle)
end
function Sound.prototype.stop(self, killWhenDone, fadeOut)
StopSound(self.handle, killWhenDone, fadeOut)
end
function Sound.prototype.unregisterStacked(self, byPosition, rectWidth, rectHeight)
UnregisterStackedSound(self.handle, byPosition, rectWidth, rectHeight)
end
function Sound.fromHandle(self, handle)
return self:getObject(handle)
end
function Sound.getFileDuration(self, fileName)
return GetSoundFileDuration(fileName)
end
return ____exports
end,
["lua_modules.w3ts.handles.unit"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local __TS__StringSubstr = ____lualib.__TS__StringSubstr
local ____exports = {}
local ____destructable = require("lua_modules.w3ts.handles.destructable")
local Destructable = ____destructable.Destructable
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
local ____item = require("lua_modules.w3ts.handles.item")
local Item = ____item.Item
local ____player = require("lua_modules.w3ts.handles.player")
local MapPlayer = ____player.MapPlayer
local ____point = require("lua_modules.w3ts.handles.point")
local Point = ____point.Point
local ____widget = require("lua_modules.w3ts.handles.widget")
local Widget = ____widget.Widget
____exports.Unit = __TS__Class()
local Unit = ____exports.Unit
Unit.name = "Unit"
__TS__ClassExtends(Unit, Widget)
function Unit.prototype.____constructor(self, owner, unitId, x, y, face, skinId)
if Handle:initFromHandle() then
Widget.prototype.____constructor(self)
else
local p = type(owner) == "number" and Player(owner) or owner.handle
Widget.prototype.____constructor(
self,
skinId and BlzCreateUnitWithSkin(
p,
unitId,
x,
y,
face,
skinId
) or CreateUnit(
p,
unitId,
x,
y,
face
)
)
end
end
__TS__SetDescriptor(
Unit.prototype,
"acquireRange",
{
get = function(self)
return GetUnitAcquireRange(self.handle)
end,
set = function(self, value)
SetUnitAcquireRange(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"agility",
{
get = function(self)
return GetHeroAgi(self.handle, false)
end,
set = function(self, value)
SetHeroAgi(self.handle, value, true)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"armor",
{
get = function(self)
return BlzGetUnitArmor(self.handle)
end,
set = function(self, armorAmount)
BlzSetUnitArmor(self.handle, armorAmount)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"canSleep",
{
get = function(self)
return UnitCanSleep(self.handle)
end,
set = function(self, flag)
UnitAddSleep(self.handle, flag)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"collisionSize",
{get = function(self)
return BlzGetUnitCollisionSize(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"color",
{set = function(self, whichColor)
SetUnitColor(self.handle, whichColor)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"currentOrder",
{get = function(self)
return GetUnitCurrentOrder(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"defaultAcquireRange",
{get = function(self)
return GetUnitDefaultAcquireRange(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"defaultFlyHeight",
{get = function(self)
return GetUnitDefaultFlyHeight(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"defaultMoveSpeed",
{get = function(self)
return GetUnitDefaultMoveSpeed(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"defaultPropWindow",
{get = function(self)
return GetUnitDefaultPropWindow(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"defaultTurnSpeed",
{get = function(self)
return GetUnitDefaultTurnSpeed(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"experience",
{
get = function(self)
return GetHeroXP(self.handle)
end,
set = function(self, newXpVal)
SetHeroXP(self.handle, newXpVal, true)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"facing",
{
get = function(self)
return GetUnitFacing(self.handle)
end,
set = function(self, value)
SetUnitFacing(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"foodMade",
{get = function(self)
return GetUnitFoodMade(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"foodUsed",
{get = function(self)
return GetUnitFoodUsed(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"ignoreAlarmToggled",
{get = function(self)
return UnitIgnoreAlarmToggled(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"intelligence",
{
get = function(self)
return GetHeroInt(self.handle, false)
end,
set = function(self, value)
SetHeroInt(self.handle, value, true)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"inventorySize",
{get = function(self)
return UnitInventorySize(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"invulnerable",
{
get = function(self)
return BlzIsUnitInvulnerable(self.handle)
end,
set = function(self, flag)
SetUnitInvulnerable(self.handle, flag)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"level",
{get = function(self)
return GetUnitLevel(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"localZ",
{get = function(self)
return BlzGetLocalUnitZ(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"mana",
{
get = function(self)
return self:getState(UNIT_STATE_MANA)
end,
set = function(self, value)
self:setState(UNIT_STATE_MANA, value)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"maxLife",
{
get = function(self)
return BlzGetUnitMaxHP(self.handle)
end,
set = function(self, value)
BlzSetUnitMaxHP(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"maxMana",
{
get = function(self)
return BlzGetUnitMaxMana(self.handle)
end,
set = function(self, value)
BlzSetUnitMaxMana(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"moveSpeed",
{
get = function(self)
return GetUnitMoveSpeed(self.handle)
end,
set = function(self, value)
SetUnitMoveSpeed(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"name",
{
get = function(self)
return GetUnitName(self.handle)
end,
set = function(self, value)
BlzSetUnitName(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"nameProper",
{
get = function(self)
return GetHeroProperName(self.handle)
end,
set = function(self, value)
BlzSetHeroProperName(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"owner",
{
get = function(self)
return MapPlayer:fromHandle(GetOwningPlayer(self.handle))
end,
set = function(self, whichPlayer)
SetUnitOwner(self.handle, whichPlayer.handle, true)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"paused",
{
get = function(self)
return IsUnitPaused(self.handle)
end,
set = function(self, flag)
PauseUnit(self.handle, flag)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"point",
{
get = function(self)
return Point:fromHandle(GetUnitLoc(self.handle))
end,
set = function(self, whichPoint)
SetUnitPositionLoc(self.handle, whichPoint.handle)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"pointValue",
{get = function(self)
return GetUnitPointValue(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"propWindow",
{
get = function(self)
return GetUnitPropWindow(self.handle)
end,
set = function(self, newPropWindowAngle)
SetUnitPropWindow(self.handle, newPropWindowAngle)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"race",
{get = function(self)
return GetUnitRace(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"rallyDestructable",
{get = function(self)
return Destructable:fromHandle(GetUnitRallyDestructable(self.handle))
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"rallyPoint",
{get = function(self)
return Point:fromHandle(GetUnitRallyPoint(self.handle))
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"rallyUnit",
{get = function(self)
return ____exports.Unit:fromHandle(GetUnitRallyUnit(self.handle))
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"resourceAmount",
{
get = function(self)
return GetResourceAmount(self.handle)
end,
set = function(self, amount)
SetResourceAmount(self.handle, amount)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"selectable",
{get = function(self)
return BlzIsUnitSelectable(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"selectionScale",
{
get = function(self)
local result = self:getField(UNIT_RF_SELECTION_SCALE)
return type(result) == "number" and result or 0
end,
set = function(self, scale)
self:setField(UNIT_RF_SELECTION_SCALE, scale)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"show",
{
get = function(self)
return not IsUnitHidden(self.handle)
end,
set = function(self, flag)
ShowUnit(self.handle, flag)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"skin",
{
get = function(self)
return BlzGetUnitSkin(self.handle)
end,
set = function(self, skinId)
BlzSetUnitSkin(self.handle, skinId)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"skillPoints",
{
get = function(self)
return GetHeroSkillPoints(self.handle)
end,
set = function(self, skillPointDelta)
UnitModifySkillPoints(self.handle, skillPointDelta)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"sleeping",
{get = function(self)
return UnitIsSleeping(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"strength",
{
get = function(self)
return GetHeroStr(self.handle, false)
end,
set = function(self, value)
SetHeroStr(self.handle, value, true)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"turnSpeed",
{
get = function(self)
return GetUnitTurnSpeed(self.handle)
end,
set = function(self, value)
SetUnitTurnSpeed(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"typeId",
{get = function(self)
return GetUnitTypeId(self.handle)
end},
true
)
__TS__SetDescriptor(
Unit.prototype,
"userData",
{
get = function(self)
return GetUnitUserData(self.handle)
end,
set = function(self, value)
SetUnitUserData(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"waygateActive",
{
get = function(self)
return WaygateIsActive(self.handle)
end,
set = function(self, flag)
WaygateActivate(self.handle, flag)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"x",
{
get = function(self)
return GetUnitX(self.handle)
end,
set = function(self, value)
SetUnitX(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"y",
{
get = function(self)
return GetUnitY(self.handle)
end,
set = function(self, value)
SetUnitY(self.handle, value)
end
},
true
)
__TS__SetDescriptor(
Unit.prototype,
"z",
{get = function(self)
return BlzGetUnitZ(self.handle)
end},
true
)
function Unit.prototype.addAbility(self, abilityId)
return UnitAddAbility(self.handle, abilityId)
end
function Unit.prototype.addAnimationProps(self, animProperties, add)
AddUnitAnimationProperties(self.handle, animProperties, add)
end
function Unit.prototype.addExperience(self, xpToAdd, showEyeCandy)
AddHeroXP(self.handle, xpToAdd, showEyeCandy)
end
function Unit.prototype.addIndicator(self, red, blue, green, alpha)
UnitAddIndicator(
self.handle,
red,
blue,
green,
alpha
)
end
function Unit.prototype.addItem(self, whichItem)
return UnitAddItem(self.handle, whichItem.handle)
end
function Unit.prototype.addItemById(self, itemId)
return Item:fromHandle(UnitAddItemById(self.handle, itemId))
end
function Unit.prototype.addItemToSlotById(self, itemId, itemSlot)
return UnitAddItemToSlotById(self.handle, itemId, itemSlot)
end
function Unit.prototype.addItemToStock(self, itemId, currentStock, stockMax)
AddItemToStock(self.handle, itemId, currentStock, stockMax)
end
function Unit.prototype.addResourceAmount(self, amount)
AddResourceAmount(self.handle, amount)
end
function Unit.prototype.addSleepPerm(self, add)
UnitAddSleepPerm(self.handle, add)
end
function Unit.prototype.addType(self, whichUnitType)
return UnitAddType(self.handle, whichUnitType)
end
function Unit.prototype.addUnitToStock(self, unitId, currentStock, stockMax)
AddUnitToStock(self.handle, unitId, currentStock, stockMax)
end
function Unit.prototype.applyTimedLife(self, buffId, duration)
UnitApplyTimedLife(self.handle, buffId, duration)
end
function Unit.prototype.attachSound(self, sound)
AttachSoundToUnit(sound.handle, self.handle)
end
function Unit.prototype.cancelTimedLife(self)
BlzUnitCancelTimedLife(self.handle)
end
function Unit.prototype.canSleepPerm(self)
return UnitCanSleepPerm(self.handle)
end
function Unit.prototype.countBuffs(self, removePositive, removeNegative, magic, physical, timedLife, aura, autoDispel)
return UnitCountBuffsEx(
self.handle,
removePositive,
removeNegative,
magic,
physical,
timedLife,
aura,
autoDispel
)
end
function Unit.prototype.damageAt(self, delay, radius, x, y, amount, attack, ranged, attackType, damageType, weaponType)
return UnitDamagePoint(
self.handle,
delay,
radius,
x,
y,
amount,
attack,
ranged,
attackType,
damageType,
weaponType
)
end
function Unit.prototype.damageTarget(self, target, amount, attack, ranged, attackType, damageType, weaponType)
return UnitDamageTarget(
self.handle,
target,
amount,
attack,
ranged,
attackType,
damageType,
weaponType
)
end
function Unit.prototype.decAbilityLevel(self, abilCode)
return DecUnitAbilityLevel(self.handle, abilCode)
end
function Unit.prototype.destroy(self)
RemoveUnit(self.handle)
end
function Unit.prototype.disableAbility(self, abilId, flag, hideUI)
BlzUnitDisableAbility(self.handle, abilId, flag, hideUI)
end
function Unit.prototype.dropItem(self, whichItem, x, y)
return UnitDropItemPoint(self.handle, whichItem.handle, x, y)
end
function Unit.prototype.dropItemFromSlot(self, whichItem, slot)
return UnitDropItemSlot(self.handle, whichItem.handle, slot)
end
function Unit.prototype.dropItemTarget(self, whichItem, target)
return UnitDropItemTarget(self.handle, whichItem.handle, target.handle)
end
function Unit.prototype.endAbilityCooldown(self, abilCode)
BlzEndUnitAbilityCooldown(self.handle, abilCode)
end
function Unit.prototype.getAbility(self, abilId)
return BlzGetUnitAbility(self.handle, abilId)
end
function Unit.prototype.getAbilityByIndex(self, index)
return BlzGetUnitAbilityByIndex(self.handle, index)
end
function Unit.prototype.getAbilityCooldown(self, abilId, level)
return BlzGetUnitAbilityCooldown(self.handle, abilId, level)
end
function Unit.prototype.getAbilityCooldownRemaining(self, abilId)
return BlzGetUnitAbilityCooldownRemaining(self.handle, abilId)
end
function Unit.prototype.getAbilityLevel(self, abilCode)
return GetUnitAbilityLevel(self.handle, abilCode)
end
function Unit.prototype.getAbilityManaCost(self, abilId, level)
return BlzGetUnitAbilityManaCost(self.handle, abilId, level)
end
function Unit.prototype.getAgility(self, includeBonuses)
return GetHeroAgi(self.handle, includeBonuses)
end
function Unit.prototype.getAttackCooldown(self, weaponIndex)
return BlzGetUnitAttackCooldown(self.handle, weaponIndex)
end
function Unit.prototype.getBaseDamage(self, weaponIndex)
return BlzGetUnitBaseDamage(self.handle, weaponIndex)
end
function Unit.prototype.getDiceNumber(self, weaponIndex)
return BlzGetUnitDiceNumber(self.handle, weaponIndex)
end
function Unit.prototype.getDiceSides(self, weaponIndex)
return BlzGetUnitDiceSides(self.handle, weaponIndex)
end
function Unit.prototype.getField(self, field)
local fieldType = __TS__StringSubstr(
tostring(field),
0,
(string.find(
tostring(field),
":",
nil,
true
) or 0) - 1
)
repeat
local ____switch124 = fieldType
local fieldBool, fieldInt, fieldReal, fieldString
local ____cond124 = ____switch124 == "unitbooleanfield"
if ____cond124 then
fieldBool = field
return BlzGetUnitBooleanField(self.handle, fieldBool)
end
____cond124 = ____cond124 or ____switch124 == "unitintegerfield"
if ____cond124 then
fieldInt = field
return BlzGetUnitIntegerField(self.handle, fieldInt)
end
____cond124 = ____cond124 or ____switch124 == "unitrealfield"
if ____cond124 then
fieldReal = field
return BlzGetUnitRealField(self.handle, fieldReal)
end
____cond124 = ____cond124 or ____switch124 == "unitstringfield"
if ____cond124 then
fieldString = field
return BlzGetUnitStringField(self.handle, fieldString)
end
do
return 0
end
until true
end
function Unit.prototype.getflyHeight(self)
return GetUnitFlyHeight(self.handle)
end
function Unit.prototype.getHeroLevel(self)
return GetHeroLevel(self.handle)
end
function Unit.prototype.getIgnoreAlarm(self, flag)
return UnitIgnoreAlarm(self.handle, flag)
end
function Unit.prototype.getIntelligence(self, includeBonuses)
return GetHeroInt(self.handle, includeBonuses)
end
function Unit.prototype.getItemInSlot(self, slot)
return Item:fromHandle(UnitItemInSlot(self.handle, slot))
end
function Unit.prototype.getState(self, whichUnitState)
return GetUnitState(self.handle, whichUnitState)
end
function Unit.prototype.getStrength(self, includeBonuses)
return GetHeroStr(self.handle, includeBonuses)
end
function Unit.prototype.hasBuffs(self, removePositive, removeNegative, magic, physical, timedLife, aura, autoDispel)
return UnitHasBuffsEx(
self.handle,
removePositive,
removeNegative,
magic,
physical,
timedLife,
aura,
autoDispel
)
end
function Unit.prototype.hasItem(self, whichItem)
return UnitHasItem(self.handle, whichItem.handle)
end
function Unit.prototype.hideAbility(self, abilId, flag)
BlzUnitHideAbility(self.handle, abilId, flag)
end
function Unit.prototype.incAbilityLevel(self, abilCode)
return IncUnitAbilityLevel(self.handle, abilCode)
end
function Unit.prototype.inForce(self, whichForce)
return IsUnitInForce(self.handle, whichForce.handle)
end
function Unit.prototype.inGroup(self, whichGroup)
return IsUnitInGroup(self.handle, whichGroup.handle)
end
function Unit.prototype.inRange(self, x, y, distance)
return IsUnitInRangeXY(self.handle, x, y, distance)
end
function Unit.prototype.inRangeOfPoint(self, whichPoint, distance)
return IsUnitInRangeLoc(self.handle, whichPoint.handle, distance)
end
function Unit.prototype.inRangeOfUnit(self, otherUnit, distance)
return IsUnitInRange(self.handle, otherUnit.handle, distance)
end
function Unit.prototype.interruptAttack(self)
BlzUnitInterruptAttack(self.handle)
end
function Unit.prototype.inTransport(self, whichTransport)
return IsUnitInTransport(self.handle, whichTransport.handle)
end
function Unit.prototype.isAlive(self)
return UnitAlive(self.handle)
end
function Unit.prototype.isAlly(self, whichPlayer)
return IsUnitAlly(self.handle, whichPlayer.handle)
end
function Unit.prototype.isEnemy(self, whichPlayer)
return IsUnitEnemy(self.handle, whichPlayer.handle)
end
function Unit.prototype.isExperienceSuspended(self)
return IsSuspendedXP(self.handle)
end
function Unit.prototype.isFogged(self, whichPlayer)
return IsUnitFogged(self.handle, whichPlayer.handle)
end
function Unit.prototype.isHero(self)
return IsHeroUnitId(self.typeId)
end
function Unit.prototype.isIllusion(self)
return IsUnitIllusion(self.handle)
end
function Unit.prototype.isLoaded(self)
return IsUnitLoaded(self.handle)
end
function Unit.prototype.isMasked(self, whichPlayer)
return IsUnitMasked(self.handle, whichPlayer.handle)
end
function Unit.prototype.isSelected(self, whichPlayer)
return IsUnitSelected(self.handle, whichPlayer.handle)
end
function Unit.prototype.issueBuildOrder(self, unit, x, y)
local ____temp_0
if type(unit) == "string" then
____temp_0 = IssueBuildOrder(self.handle, unit, x, y)
else
____temp_0 = IssueBuildOrderById(self.handle, unit, x, y)
end
return ____temp_0
end
function Unit.prototype.issueImmediateOrder(self, order)
local ____temp_1
if type(order) == "string" then
____temp_1 = IssueImmediateOrder(self.handle, order)
else
____temp_1 = IssueImmediateOrderById(self.handle, order)
end
return ____temp_1
end
function Unit.prototype.issueInstantOrderAt(self, order, x, y, instantTargetWidget)
local ____temp_2
if type(order) == "string" then
____temp_2 = IssueInstantPointOrder(
self.handle,
order,
x,
y,
instantTargetWidget.handle
)
else
____temp_2 = IssueInstantPointOrderById(
self.handle,
order,
x,
y,
instantTargetWidget.handle
)
end
return ____temp_2
end
function Unit.prototype.issueInstantTargetOrder(self, order, targetWidget, instantTargetWidget)
local ____temp_3
if type(order) == "string" then
____temp_3 = IssueInstantTargetOrder(self.handle, order, targetWidget.handle, instantTargetWidget.handle)
else
____temp_3 = IssueInstantTargetOrderById(self.handle, order, targetWidget.handle, instantTargetWidget.handle)
end
return ____temp_3
end
function Unit.prototype.issueOrderAt(self, order, x, y)
local ____temp_4
if type(order) == "string" then
____temp_4 = IssuePointOrder(self.handle, order, x, y)
else
____temp_4 = IssuePointOrderById(self.handle, order, x, y)
end
return ____temp_4
end
function Unit.prototype.issuePointOrder(self, order, whichPoint)
local ____temp_5
if type(order) == "string" then
____temp_5 = IssuePointOrderLoc(self.handle, order, whichPoint.handle)
else
____temp_5 = IssuePointOrderByIdLoc(self.handle, order, whichPoint.handle)
end
return ____temp_5
end
function Unit.prototype.issueTargetOrder(self, order, targetWidget)
local ____temp_6
if type(order) == "string" then
____temp_6 = IssueTargetOrder(self.handle, order, targetWidget.handle)
else
____temp_6 = IssueTargetOrderById(self.handle, order, targetWidget.handle)
end
return ____temp_6
end
function Unit.prototype.isUnit(self, whichSpecifiedUnit)
return IsUnit(self.handle, whichSpecifiedUnit.handle)
end
function Unit.prototype.isUnitType(self, whichUnitType)
return IsUnitType(self.handle, whichUnitType)
end
function Unit.prototype.isVisible(self, whichPlayer)
return IsUnitVisible(self.handle, whichPlayer.handle)
end
function Unit.prototype.kill(self)
KillUnit(self.handle)
end
function Unit.prototype.lookAt(self, whichBone, lookAtTarget, offsetX, offsetY, offsetZ)
SetUnitLookAt(
self.handle,
whichBone,
lookAtTarget.handle,
offsetX,
offsetY,
offsetZ
)
end
function Unit.prototype.makeAbilityPermanent(self, permanent, abilityId)
UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
end
function Unit.prototype.modifySkillPoints(self, skillPointDelta)
return UnitModifySkillPoints(self.handle, skillPointDelta)
end
function Unit.prototype.pauseEx(self, flag)
BlzPauseUnitEx(self.handle, flag)
end
function Unit.prototype.pauseTimedLife(self, flag)
UnitPauseTimedLife(self.handle, flag)
end
function Unit.prototype.queueAnimation(self, whichAnimation)
QueueUnitAnimation(self.handle, whichAnimation)
end
function Unit.prototype.recycleGuardPosition(self)
RecycleGuardPosition(self.handle)
end
function Unit.prototype.removeAbility(self, abilityId)
return UnitRemoveAbility(self.handle, abilityId)
end
function Unit.prototype.removeBuffs(self, removePositive, removeNegative)
UnitRemoveBuffs(self.handle, removePositive, removeNegative)
end
function Unit.prototype.removeBuffsEx(self, removePositive, removeNegative, magic, physical, timedLife, aura, autoDispel)
UnitRemoveBuffsEx(
self.handle,
removePositive,
removeNegative,
magic,
physical,
timedLife,
aura,
autoDispel
)
end
function Unit.prototype.removeGuardPosition(self)
RemoveGuardPosition(self.handle)
end
function Unit.prototype.removeItem(self, whichItem)
UnitRemoveItem(self.handle, whichItem.handle)
end
function Unit.prototype.removeItemFromSlot(self, itemSlot)
return Item:fromHandle(UnitRemoveItemFromSlot(self.handle, itemSlot))
end
function Unit.prototype.removeItemFromStock(self, itemId)
RemoveItemFromStock(self.handle, itemId)
end
function Unit.prototype.removeType(self, whichUnitType)
return UnitAddType(self.handle, whichUnitType)
end
function Unit.prototype.removeUnitFromStock(self, itemId)
RemoveUnitFromStock(self.handle, itemId)
end
function Unit.prototype.resetCooldown(self)
UnitResetCooldown(self.handle)
end
function Unit.prototype.resetLookAt(self)
ResetUnitLookAt(self.handle)
end
function Unit.prototype.revive(self, x, y, doEyecandy)
return ReviveHero(self.handle, x, y, doEyecandy)
end
function Unit.prototype.reviveAtPoint(self, whichPoint, doEyecandy)
return ReviveHeroLoc(self.handle, whichPoint.handle, doEyecandy)
end
function Unit.prototype.select(self, flag)
SelectUnit(self.handle, flag)
end
function Unit.prototype.selectSkill(self, abilCode)
SelectHeroSkill(self.handle, abilCode)
end
function Unit.prototype.setAbilityCooldown(self, abilId, level, cooldown)
BlzSetUnitAbilityCooldown(self.handle, abilId, level, cooldown)
end
function Unit.prototype.setAbilityLevel(self, abilCode, level)
return SetUnitAbilityLevel(self.handle, abilCode, level)
end
function Unit.prototype.setAbilityManaCost(self, abilId, level, manaCost)
BlzSetUnitAbilityManaCost(self.handle, abilId, level, manaCost)
end
function Unit.prototype.setAgility(self, value, permanent)
SetHeroAgi(self.handle, value, permanent)
end
function Unit.prototype.setAnimation(self, whichAnimation)
if type(whichAnimation) == "string" then
SetUnitAnimation(self.handle, whichAnimation)
else
SetUnitAnimationByIndex(self.handle, whichAnimation)
end
end
function Unit.prototype.setAnimationWithRarity(self, whichAnimation, rarity)
SetUnitAnimationWithRarity(self.handle, whichAnimation, rarity)
end
function Unit.prototype.setAttackCooldown(self, cooldown, weaponIndex)
BlzSetUnitAttackCooldown(self.handle, cooldown, weaponIndex)
end
function Unit.prototype.setBaseDamage(self, baseDamage, weaponIndex)
BlzSetUnitBaseDamage(self.handle, baseDamage, weaponIndex)
end
function Unit.prototype.setBlendTime(self, timeScale)
SetUnitBlendTime(self.handle, timeScale)
end
function Unit.prototype.setConstructionProgress(self, constructionPercentage)
UnitSetConstructionProgress(self.handle, constructionPercentage)
end
function Unit.prototype.setCreepGuard(self, creepGuard)
SetUnitCreepGuard(self.handle, creepGuard)
end
function Unit.prototype.setDiceNumber(self, diceNumber, weaponIndex)
BlzSetUnitDiceNumber(self.handle, diceNumber, weaponIndex)
end
function Unit.prototype.setDiceSides(self, diceSides, weaponIndex)
BlzSetUnitDiceSides(self.handle, diceSides, weaponIndex)
end
function Unit.prototype.setExperience(self, newXpVal, showEyeCandy)
SetHeroXP(self.handle, newXpVal, showEyeCandy)
end
function Unit.prototype.setExploded(self, exploded)
SetUnitExploded(self.handle, exploded)
end
function Unit.prototype.setFacingEx(self, facingAngle)
BlzSetUnitFacingEx(self.handle, facingAngle)
end
function Unit.prototype.setField(self, field, value)
local fieldType = __TS__StringSubstr(
tostring(field),
0,
(string.find(
tostring(field),
":",
nil,
true
) or 0) - 1
)
if fieldType == "unitbooleanfield" and type(value) == "boolean" then
return BlzSetUnitBooleanField(self.handle, field, value)
elseif fieldType == "unitintegerfield" and type(value) == "number" then
return BlzSetUnitIntegerField(self.handle, field, value)
elseif fieldType == "unitrealfield" and type(value) == "number" then
return BlzSetUnitRealField(self.handle, field, value)
elseif fieldType == "unitstringfield" and type(value) == "string" then
return BlzSetUnitStringField(self.handle, field, value)
end
return false
end
function Unit.prototype.setflyHeight(self, value, rate)
SetUnitFlyHeight(self.handle, value, rate)
end
function Unit.prototype.setHeroLevel(self, level, showEyeCandy)
SetHeroLevel(self.handle, level, showEyeCandy)
end
function Unit.prototype.setIntelligence(self, value, permanent)
SetHeroInt(self.handle, value, permanent)
end
function Unit.prototype.setItemTypeSlots(self, slots)
SetItemTypeSlots(self.handle, slots)
end
function Unit.prototype.setOwner(self, whichPlayer, changeColor)
SetUnitOwner(self.handle, whichPlayer.handle, changeColor)
end
function Unit.prototype.setPathing(self, flag)
SetUnitPathing(self.handle, flag)
end
function Unit.prototype.setPosition(self, x, y)
SetUnitPosition(self.handle, x, y)
end
function Unit.prototype.setRescuable(self, byWhichPlayer, flag)
SetUnitRescuable(self.handle, byWhichPlayer.handle, flag)
end
function Unit.prototype.setRescueRange(self, range)
SetUnitRescueRange(self.handle, range)
end
function Unit.prototype.setScale(self, scaleX, scaleY, scaleZ)
SetUnitScale(self.handle, scaleX, scaleY, scaleZ)
end
function Unit.prototype.setState(self, whichUnitState, newVal)
SetUnitState(self.handle, whichUnitState, newVal)
end
function Unit.prototype.setStrength(self, value, permanent)
SetHeroStr(self.handle, value, permanent)
end
function Unit.prototype.setTimeScale(self, timeScale)
SetUnitTimeScale(self.handle, timeScale)
end
function Unit.prototype.setUnitAttackCooldown(self, cooldown, weaponIndex)
BlzSetUnitAttackCooldown(self.handle, cooldown, weaponIndex)
end
function Unit.prototype.setUnitTypeSlots(self, slots)
SetUnitTypeSlots(self.handle, slots)
end
function Unit.prototype.setUpgradeProgress(self, upgradePercentage)
UnitSetUpgradeProgress(self.handle, upgradePercentage)
end
function Unit.prototype.setUseAltIcon(self, flag)
UnitSetUsesAltIcon(self.handle, flag)
end
function Unit.prototype.setUseFood(self, useFood)
SetUnitUseFood(self.handle, useFood)
end
function Unit.prototype.setVertexColor(self, red, green, blue, alpha)
SetUnitVertexColor(
self.handle,
red,
green,
blue,
alpha
)
end
function Unit.prototype.shareVision(self, whichPlayer, share)
UnitShareVision(self.handle, whichPlayer.handle, share)
end
function Unit.prototype.showTeamGlow(self, show)
BlzShowUnitTeamGlow(self.handle, show)
end
function Unit.prototype.startAbilityCooldown(self, abilCode, cooldown)
BlzStartUnitAbilityCooldown(self.handle, abilCode, cooldown)
end
function Unit.prototype.stripLevels(self, howManyLevels)
return UnitStripHeroLevel(self.handle, howManyLevels)
end
function Unit.prototype.suspendDecay(self, suspend)
UnitSuspendDecay(self.handle, suspend)
end
function Unit.prototype.suspendExperience(self, flag)
SuspendHeroXP(self.handle, flag)
end
function Unit.prototype.useItem(self, whichItem)
return UnitUseItem(self.handle, whichItem.handle)
end
function Unit.prototype.useItemAt(self, whichItem, x, y)
return UnitUseItemPoint(self.handle, whichItem.handle, x, y)
end
function Unit.prototype.useItemTarget(self, whichItem, target)
return UnitUseItemTarget(self.handle, whichItem.handle, target.handle)
end
function Unit.prototype.wakeUp(self)
UnitWakeUp(self.handle)
end
function Unit.prototype.waygateGetDestinationX(self)
return WaygateGetDestinationX(self.handle)
end
function Unit.prototype.waygateGetDestinationY(self)
return WaygateGetDestinationY(self.handle)
end
function Unit.prototype.waygateSetDestination(self, x, y)
WaygateSetDestination(self.handle, x, y)
end
function Unit.foodMadeByType(self, unitId)
return GetFoodMade(unitId)
end
function Unit.foodUsedByType(self, unitId)
return GetFoodUsed(unitId)
end
function Unit.fromEnum(self)
return self:fromHandle(GetEnumUnit())
end
function Unit.fromEvent(self)
return self:fromHandle(GetTriggerUnit())
end
function Unit.fromFilter(self)
return self:fromHandle(GetFilterUnit())
end
function Unit.fromHandle(self, handle)
return self:getObject(handle)
end
function Unit.getPointValueByType(self, unitType)
return GetUnitPointValueByType(unitType)
end
function Unit.isUnitIdHero(self, unitId)
return IsHeroUnitId(unitId)
end
function Unit.isUnitIdType(self, unitId, whichUnitType)
return IsUnitIdType(unitId, whichUnitType)
end
return ____exports
end,
["lua_modules.w3ts.handles.group"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
local ____unit = require("lua_modules.w3ts.handles.unit")
local Unit = ____unit.Unit
____exports.Group = __TS__Class()
local Group = ____exports.Group
Group.name = "Group"
__TS__ClassExtends(Group, Handle)
function Group.prototype.____constructor(self)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
CreateGroup()
)
end
end
__TS__SetDescriptor(
Group.prototype,
"first",
{get = function(self)
return Unit:fromHandle(FirstOfGroup(self.handle))
end},
true
)
__TS__SetDescriptor(
Group.prototype,
"size",
{get = function(self)
return BlzGroupGetSize(self.handle)
end},
true
)
function Group.prototype.addGroupFast(self, addGroup)
return BlzGroupAddGroupFast(self.handle, addGroup.handle)
end
function Group.prototype.addUnit(self, whichUnit)
return GroupAddUnit(self.handle, whichUnit.handle)
end
function Group.prototype.clear(self)
GroupClear(self.handle)
end
function Group.prototype.destroy(self)
DestroyGroup(self.handle)
end
function Group.prototype.enumUnitsInRange(self, x, y, radius, filter)
GroupEnumUnitsInRange(
self.handle,
x,
y,
radius,
type(filter) == "function" and Filter(filter) or filter
)
end
function Group.prototype.enumUnitsInRangeCounted(self, x, y, radius, filter, countLimit)
GroupEnumUnitsInRangeCounted(
self.handle,
x,
y,
radius,
type(filter) == "function" and Filter(filter) or filter,
countLimit
)
end
function Group.prototype.enumUnitsInRangeOfPoint(self, whichPoint, radius, filter)
GroupEnumUnitsInRangeOfLoc(
self.handle,
whichPoint.handle,
radius,
type(filter) == "function" and Filter(filter) or filter
)
end
function Group.prototype.enumUnitsInRangeOfPointCounted(self, whichPoint, radius, filter, countLimit)
GroupEnumUnitsInRangeOfLocCounted(
self.handle,
whichPoint.handle,
radius,
type(filter) == "function" and Filter(filter) or filter,
countLimit
)
end
function Group.prototype.enumUnitsInRect(self, r, filter)
GroupEnumUnitsInRect(
self.handle,
r.handle,
type(filter) == "function" and Filter(filter) or filter
)
end
function Group.prototype.enumUnitsInRectCounted(self, r, filter, countLimit)
GroupEnumUnitsInRectCounted(
self.handle,
r.handle,
type(filter) == "function" and Filter(filter) or filter,
countLimit
)
end
function Group.prototype.enumUnitsOfPlayer(self, whichPlayer, filter)
GroupEnumUnitsOfPlayer(
self.handle,
whichPlayer.handle,
type(filter) == "function" and Filter(filter) or filter
)
end
function Group.prototype.enumUnitsOfType(self, unitName, filter)
GroupEnumUnitsOfType(
self.handle,
unitName,
type(filter) == "function" and Filter(filter) or filter
)
end
function Group.prototype.enumUnitsOfTypeCounted(self, unitName, filter, countLimit)
GroupEnumUnitsOfTypeCounted(
self.handle,
unitName,
type(filter) == "function" and Filter(filter) or filter,
countLimit
)
end
function Group.prototype.enumUnitsSelected(self, whichPlayer, filter)
GroupEnumUnitsSelected(
self.handle,
whichPlayer.handle,
type(filter) == "function" and Filter(filter) or filter
)
end
Group.prototype["for"] = function(self, callback)
ForGroup(self.handle, callback)
end
function Group.prototype.getUnits(self)
local units = {}
self["for"](
self,
function()
local ____temp_0 = #units + 1
units[____temp_0] = Unit:fromFilter()
return ____temp_0
end
)
return units
end
function Group.prototype.getUnitAt(self, index)
return Unit:fromHandle(BlzGroupUnitAt(self.handle, index))
end
function Group.prototype.hasUnit(self, whichUnit)
return IsUnitInGroup(whichUnit.handle, self.handle)
end
function Group.prototype.orderCoords(self, order, x, y)
if type(order) == "string" then
GroupPointOrder(self.handle, order, x, y)
else
GroupPointOrderById(self.handle, order, x, y)
end
end
function Group.prototype.orderImmediate(self, order)
if type(order) == "string" then
GroupImmediateOrder(self.handle, order)
else
GroupImmediateOrderById(self.handle, order)
end
end
function Group.prototype.orderPoint(self, order, whichPoint)
if type(order) == "string" then
GroupPointOrderLoc(self.handle, order, whichPoint.handle)
else
GroupPointOrderByIdLoc(self.handle, order, whichPoint.handle)
end
end
function Group.prototype.orderTarget(self, order, targetWidget)
if type(order) == "string" then
GroupTargetOrder(self.handle, order, targetWidget.handle)
else
GroupTargetOrderById(self.handle, order, targetWidget.handle)
end
end
function Group.prototype.removeGroupFast(self, removeGroup)
return BlzGroupRemoveGroupFast(self.handle, removeGroup.handle)
end
function Group.prototype.removeUnit(self, whichUnit)
return GroupRemoveUnit(self.handle, whichUnit.handle)
end
function Group.fromHandle(self, handle)
return self:getObject(handle)
end
function Group.getEnumUnit(self)
return Unit:fromHandle(GetEnumUnit())
end
function Group.getFilterUnit(self)
return Unit:fromHandle(GetFilterUnit())
end
return ____exports
end,
["lua_modules.w3ts.handles.image"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.ImageType = ImageType or ({})
____exports.ImageType.Selection = 1
____exports.ImageType[____exports.ImageType.Selection] = "Selection"
____exports.ImageType.Indicator = 2
____exports.ImageType[____exports.ImageType.Indicator] = "Indicator"
____exports.ImageType.OcclusionMask = 3
____exports.ImageType[____exports.ImageType.OcclusionMask] = "OcclusionMask"
____exports.ImageType.Ubersplat = 4
____exports.ImageType[____exports.ImageType.Ubersplat] = "Ubersplat"
____exports.Image = __TS__Class()
local Image = ____exports.Image
Image.name = "Image"
__TS__ClassExtends(Image, Handle)
function Image.prototype.____constructor(self, file, sizeX, sizeY, sizeZ, posX, posY, posZ, originX, originY, originZ, imageType)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
CreateImage(
file,
sizeX,
sizeY,
sizeZ,
posX,
posY,
posZ,
originX,
originY,
originZ,
imageType
)
)
end
end
function Image.prototype.destroy(self)
DestroyImage(self.handle)
end
function Image.prototype.setAboveWater(self, flag, useWaterAlpha)
SetImageAboveWater(self.handle, flag, useWaterAlpha)
end
function Image.prototype.setColor(self, red, green, blue, alpha)
SetImageColor(
self.handle,
red,
green,
blue,
alpha
)
end
function Image.prototype.setConstantHeight(self, flag, height)
SetImageConstantHeight(self.handle, flag, height)
end
function Image.prototype.setPosition(self, x, y, z)
SetImagePosition(self.handle, x, y, z)
end
function Image.prototype.setRender(self, flag)
SetImageRenderAlways(self.handle, flag)
end
function Image.prototype.setType(self, imageType)
SetImageType(self.handle, imageType)
end
function Image.prototype.show(self, flag)
ShowImage(self.handle, flag)
end
function Image.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.leaderboard"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.Leaderboard = __TS__Class()
local Leaderboard = ____exports.Leaderboard
Leaderboard.name = "Leaderboard"
__TS__ClassExtends(Leaderboard, Handle)
function Leaderboard.prototype.____constructor(self)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
CreateLeaderboard()
)
end
end
__TS__SetDescriptor(
Leaderboard.prototype,
"displayed",
{get = function(self)
return IsLeaderboardDisplayed(self.handle)
end},
true
)
__TS__SetDescriptor(
Leaderboard.prototype,
"itemCount",
{
get = function(self)
return LeaderboardGetItemCount(self.handle)
end,
set = function(self, count)
LeaderboardSetSizeByItemCount(self.handle, count)
end
},
true
)
__TS__SetDescriptor(
Leaderboard.prototype,
"label",
{
get = function(self)
return LeaderboardGetLabelText(self.handle)
end,
set = function(self, value)
LeaderboardSetLabel(self.handle, value)
end
},
true
)
function Leaderboard.prototype.addItem(self, label, value, p)
LeaderboardAddItem(self.handle, label, value, p.handle)
end
function Leaderboard.prototype.clear(self)
LeaderboardClear(self.handle)
end
function Leaderboard.prototype.destroy(self)
DestroyLeaderboard(self.handle)
end
function Leaderboard.prototype.display(self, flag)
if flag == nil then
flag = true
end
LeaderboardDisplay(self.handle, flag)
end
function Leaderboard.prototype.getPlayerIndex(self, p)
return LeaderboardGetPlayerIndex(self.handle, p.handle)
end
function Leaderboard.prototype.hasPlayerItem(self, p)
LeaderboardHasPlayerItem(self.handle, p.handle)
end
function Leaderboard.prototype.removeItem(self, index)
LeaderboardRemoveItem(self.handle, index)
end
function Leaderboard.prototype.removePlayerItem(self, p)
LeaderboardRemovePlayerItem(self.handle, p.handle)
end
function Leaderboard.prototype.setItemLabel(self, item, label)
LeaderboardSetItemLabel(self.handle, item, label)
end
function Leaderboard.prototype.setItemLabelColor(self, item, red, green, blue, alpha)
LeaderboardSetItemLabelColor(
self.handle,
item,
red,
green,
blue,
alpha
)
end
function Leaderboard.prototype.setItemStyle(self, item, showLabel, showValues, showIcons)
if showLabel == nil then
showLabel = true
end
if showValues == nil then
showValues = true
end
if showIcons == nil then
showIcons = true
end
LeaderboardSetItemStyle(
self.handle,
item,
showLabel,
showValues,
showIcons
)
end
function Leaderboard.prototype.setItemValue(self, item, value)
LeaderboardSetItemValue(self.handle, item, value)
end
function Leaderboard.prototype.setItemValueColor(self, item, red, green, blue, alpha)
LeaderboardSetItemValueColor(
self.handle,
item,
red,
green,
blue,
alpha
)
end
function Leaderboard.prototype.setLabelColor(self, red, green, blue, alpha)
LeaderboardSetLabelColor(
self.handle,
red,
green,
blue,
alpha
)
end
function Leaderboard.prototype.setPlayerBoard(self, p)
PlayerSetLeaderboard(p.handle, self.handle)
end
function Leaderboard.prototype.setStyle(self, showLabel, showNames, showValues, showIcons)
if showLabel == nil then
showLabel = true
end
if showNames == nil then
showNames = true
end
if showValues == nil then
showValues = true
end
if showIcons == nil then
showIcons = true
end
LeaderboardSetStyle(
self.handle,
showLabel,
showNames,
showValues,
showIcons
)
end
function Leaderboard.prototype.setValueColor(self, red, green, blue, alpha)
LeaderboardSetValueColor(
self.handle,
red,
green,
blue,
alpha
)
end
function Leaderboard.prototype.sortByLabel(self, asc)
if asc == nil then
asc = true
end
LeaderboardSortItemsByLabel(self.handle, asc)
end
function Leaderboard.prototype.sortByPlayer(self, asc)
if asc == nil then
asc = true
end
LeaderboardSortItemsByPlayer(self.handle, asc)
end
function Leaderboard.prototype.sortByValue(self, asc)
if asc == nil then
asc = true
end
LeaderboardSortItemsByValue(self.handle, asc)
end
function Leaderboard.fromHandle(self, handle)
return self:getObject(handle)
end
function Leaderboard.fromPlayer(self, p)
return self:fromHandle(PlayerGetLeaderboard(p.handle))
end
return ____exports
end,
["lua_modules.w3ts.handles.multiboard"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.MultiboardItem = __TS__Class()
local MultiboardItem = ____exports.MultiboardItem
MultiboardItem.name = "MultiboardItem"
__TS__ClassExtends(MultiboardItem, Handle)
function MultiboardItem.prototype.____constructor(self, board, x, y)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
MultiboardGetItem(board.handle, x - 1, y - 1)
)
end
end
function MultiboardItem.prototype.destroy(self)
MultiboardReleaseItem(self.handle)
end
function MultiboardItem.prototype.setIcon(self, icon)
MultiboardSetItemIcon(self.handle, icon)
end
function MultiboardItem.prototype.setStyle(self, showValue, showIcon)
MultiboardSetItemStyle(self.handle, showValue, showIcon)
end
function MultiboardItem.prototype.setValue(self, val)
MultiboardSetItemValue(self.handle, val)
end
function MultiboardItem.prototype.setValueColor(self, red, green, blue, alpha)
MultiboardSetItemValueColor(
self.handle,
red,
green,
blue,
alpha
)
end
function MultiboardItem.prototype.setWidth(self, width)
MultiboardSetItemWidth(self.handle, width)
end
function MultiboardItem.fromHandle(self, handle)
return self:getObject(handle)
end
____exports.Multiboard = __TS__Class()
local Multiboard = ____exports.Multiboard
Multiboard.name = "Multiboard"
__TS__ClassExtends(Multiboard, Handle)
function Multiboard.prototype.____constructor(self)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
CreateMultiboard()
)
end
end
__TS__SetDescriptor(
Multiboard.prototype,
"columns",
{
get = function(self)
return MultiboardGetColumnCount(self.handle)
end,
set = function(self, count)
MultiboardSetColumnCount(self.handle, count)
end
},
true
)
__TS__SetDescriptor(
Multiboard.prototype,
"displayed",
{get = function(self)
return IsMultiboardDisplayed(self.handle)
end},
true
)
__TS__SetDescriptor(
Multiboard.prototype,
"rows",
{
get = function(self)
return MultiboardGetRowCount(self.handle)
end,
set = function(self, count)
MultiboardSetRowCount(self.handle, count)
end
},
true
)
__TS__SetDescriptor(
Multiboard.prototype,
"title",
{
get = function(self)
return MultiboardGetTitleText(self.handle)
end,
set = function(self, label)
MultiboardSetTitleText(self.handle, label)
end
},
true
)
function Multiboard.prototype.clear(self)
MultiboardClear(self.handle)
end
function Multiboard.prototype.createItem(self, x, y)
return __TS__New(____exports.MultiboardItem, self, x, y)
end
function Multiboard.prototype.destroy(self)
DestroyMultiboard(self.handle)
end
function Multiboard.prototype.display(self, show)
MultiboardDisplay(self.handle, show)
end
function Multiboard.prototype.minimize(self, flag)
MultiboardMinimize(self.handle, flag)
end
function Multiboard.prototype.minimized(self)
return IsMultiboardMinimized(self.handle)
end
function Multiboard.prototype.setItemsIcons(self, icon)
MultiboardSetItemsIcon(self.handle, icon)
end
function Multiboard.prototype.setItemsStyle(self, showValues, showIcons)
MultiboardSetItemsStyle(self.handle, showValues, showIcons)
end
function Multiboard.prototype.setItemsValue(self, value)
MultiboardSetItemsValue(self.handle, value)
end
function Multiboard.prototype.setItemsValueColor(self, red, green, blue, alpha)
MultiboardSetItemsValueColor(
self.handle,
red,
green,
blue,
alpha
)
end
function Multiboard.prototype.setItemsWidth(self, width)
MultiboardSetItemsWidth(self.handle, width)
end
function Multiboard.prototype.setTitleTextColor(self, red, green, blue, alpha)
MultiboardSetTitleTextColor(
self.handle,
red,
green,
blue,
alpha
)
end
function Multiboard.fromHandle(self, handle)
return self:getObject(handle)
end
function Multiboard.suppressDisplay(self, flag)
MultiboardSuppressDisplay(flag)
end
return ____exports
end,
["lua_modules.w3ts.handles.quest"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.QuestItem = __TS__Class()
local QuestItem = ____exports.QuestItem
QuestItem.name = "QuestItem"
__TS__ClassExtends(QuestItem, Handle)
function QuestItem.prototype.____constructor(self, whichQuest)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
QuestCreateItem(whichQuest.handle)
)
end
end
__TS__SetDescriptor(
QuestItem.prototype,
"completed",
{
get = function(self)
return IsQuestItemCompleted(self.handle)
end,
set = function(self, completed)
QuestItemSetCompleted(self.handle, completed)
end
},
true
)
function QuestItem.prototype.setDescription(self, description)
QuestItemSetDescription(self.handle, description)
end
____exports.Quest = __TS__Class()
local Quest = ____exports.Quest
Quest.name = "Quest"
__TS__ClassExtends(Quest, Handle)
function Quest.prototype.____constructor(self)
local ____Handle_initFromHandle_result_0
if Handle:initFromHandle() then
____Handle_initFromHandle_result_0 = nil
else
____Handle_initFromHandle_result_0 = CreateQuest()
end
Handle.prototype.____constructor(self, ____Handle_initFromHandle_result_0)
end
__TS__SetDescriptor(
Quest.prototype,
"completed",
{
get = function(self)
return IsQuestCompleted(self.handle)
end,
set = function(self, completed)
QuestSetCompleted(self.handle, completed)
end
},
true
)
__TS__SetDescriptor(
Quest.prototype,
"discovered",
{
get = function(self)
return IsQuestDiscovered(self.handle)
end,
set = function(self, discovered)
QuestSetDiscovered(self.handle, discovered)
end
},
true
)
__TS__SetDescriptor(
Quest.prototype,
"enabled",
{
get = function(self)
return IsQuestEnabled(self.handle)
end,
set = function(self, enabled)
QuestSetEnabled(self.handle, enabled)
end
},
true
)
__TS__SetDescriptor(
Quest.prototype,
"failed",
{
get = function(self)
return IsQuestFailed(self.handle)
end,
set = function(self, failed)
QuestSetFailed(self.handle, failed)
end
},
true
)
__TS__SetDescriptor(
Quest.prototype,
"required",
{
get = function(self)
return IsQuestRequired(self.handle)
end,
set = function(self, required)
QuestSetRequired(self.handle, required)
end
},
true
)
function Quest.prototype.addItem(self, description)
local questItem = __TS__New(____exports.QuestItem, self)
questItem:setDescription(description)
return questItem
end
function Quest.prototype.destroy(self)
DestroyQuest(self.handle)
end
function Quest.prototype.setDescription(self, description)
QuestSetDescription(self.handle, description)
end
function Quest.prototype.setIcon(self, iconPath)
QuestSetIconPath(self.handle, iconPath)
end
function Quest.prototype.setTitle(self, title)
QuestSetTitle(self.handle, title)
end
function Quest.flashQuestDialogButton(self)
FlashQuestDialogButton()
end
function Quest.forceQuestDialogUpdate(self)
ForceQuestDialogUpdate()
end
function Quest.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.region"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.Region = __TS__Class()
local Region = ____exports.Region
Region.name = "Region"
__TS__ClassExtends(Region, Handle)
function Region.prototype.____constructor(self)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
CreateRegion()
)
end
end
function Region.prototype.addCell(self, x, y)
RegionAddCell(self.handle, x, y)
end
function Region.prototype.addCellPoint(self, whichPoint)
RegionAddCellAtLoc(self.handle, whichPoint.handle)
end
function Region.prototype.addRect(self, r)
RegionAddRect(self.handle, r.handle)
end
function Region.prototype.clearCell(self, x, y)
RegionClearCell(self.handle, x, y)
end
function Region.prototype.clearCellPoint(self, whichPoint)
RegionClearCellAtLoc(self.handle, whichPoint.handle)
end
function Region.prototype.clearRect(self, r)
RegionClearRect(self.handle, r.handle)
end
function Region.prototype.containsCoords(self, x, y)
return IsPointInRegion(self.handle, x, y)
end
function Region.prototype.containsPoint(self, whichPoint)
IsLocationInRegion(self.handle, whichPoint.handle)
end
function Region.prototype.containsUnit(self, whichUnit)
return IsUnitInRegion(self.handle, whichUnit.handle)
end
function Region.prototype.destroy(self)
RemoveRegion(self.handle)
end
function Region.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.texttag"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.TextTag = __TS__Class()
local TextTag = ____exports.TextTag
TextTag.name = "TextTag"
__TS__ClassExtends(TextTag, Handle)
function TextTag.prototype.____constructor(self)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
CreateTextTag()
)
end
end
function TextTag.prototype.destroy(self)
DestroyTextTag(self.handle)
end
function TextTag.prototype.setAge(self, age)
SetTextTagAge(self.handle, age)
end
function TextTag.prototype.setColor(self, red, green, blue, alpha)
SetTextTagColor(
self.handle,
red,
green,
blue,
alpha
)
end
function TextTag.prototype.setFadepoint(self, fadepoint)
SetTextTagFadepoint(self.handle, fadepoint)
end
function TextTag.prototype.setLifespan(self, lifespan)
SetTextTagLifespan(self.handle, lifespan)
end
function TextTag.prototype.setPermanent(self, flag)
SetTextTagPermanent(self.handle, flag)
end
function TextTag.prototype.setPos(self, x, y, heightOffset)
SetTextTagPos(self.handle, x, y, heightOffset)
end
function TextTag.prototype.setPosUnit(self, u, heightOffset)
SetTextTagPosUnit(self.handle, u.handle, heightOffset)
end
function TextTag.prototype.setSuspended(self, flag)
SetTextTagSuspended(self.handle, flag)
end
function TextTag.prototype.setText(self, s, height, adjustHeight)
if adjustHeight == nil then
adjustHeight = false
end
if adjustHeight then
height = height * 0.0023
end
SetTextTagText(self.handle, s, height)
end
function TextTag.prototype.setVelocity(self, xvel, yvel)
SetTextTagVelocity(self.handle, xvel, yvel)
end
function TextTag.prototype.setVelocityAngle(self, speed, angle)
local vel = speed * 0.071 / 128
self:setVelocity(
vel * Cos(angle * bj_DEGTORAD),
vel * Sin(angle * bj_DEGTORAD)
)
end
function TextTag.prototype.setVisible(self, flag)
SetTextTagVisibility(self.handle, flag)
end
function TextTag.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.timer"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.Timer = __TS__Class()
local Timer = ____exports.Timer
Timer.name = "Timer"
__TS__ClassExtends(Timer, Handle)
function Timer.prototype.____constructor(self)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
CreateTimer()
)
end
end
__TS__SetDescriptor(
Timer.prototype,
"elapsed",
{get = function(self)
return TimerGetElapsed(self.handle)
end},
true
)
__TS__SetDescriptor(
Timer.prototype,
"remaining",
{get = function(self)
return TimerGetRemaining(self.handle)
end},
true
)
__TS__SetDescriptor(
Timer.prototype,
"timeout",
{get = function(self)
return TimerGetTimeout(self.handle)
end},
true
)
function Timer.prototype.destroy(self)
DestroyTimer(self.handle)
return self
end
function Timer.prototype.pause(self)
PauseTimer(self.handle)
return self
end
function Timer.prototype.resume(self)
ResumeTimer(self.handle)
return self
end
function Timer.prototype.start(self, timeout, periodic, handlerFunc)
TimerStart(self.handle, timeout, periodic, handlerFunc)
return self
end
function Timer.fromExpired(self)
return self:fromHandle(GetExpiredTimer())
end
function Timer.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.timerdialog"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.TimerDialog = __TS__Class()
local TimerDialog = ____exports.TimerDialog
TimerDialog.name = "TimerDialog"
__TS__ClassExtends(TimerDialog, Handle)
function TimerDialog.prototype.____constructor(self, t)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
CreateTimerDialog(t.handle)
)
end
end
__TS__SetDescriptor(
TimerDialog.prototype,
"display",
{
get = function(self)
return IsTimerDialogDisplayed(self.handle)
end,
set = function(self, display)
TimerDialogDisplay(self.handle, display)
end
},
true
)
function TimerDialog.prototype.destroy(self)
DestroyTimerDialog(self.handle)
end
function TimerDialog.prototype.setSpeed(self, speedMultFactor)
TimerDialogSetSpeed(self.handle, speedMultFactor)
end
function TimerDialog.prototype.setTimeRemaining(self, value)
TimerDialogSetRealTimeRemaining(self.handle, value)
end
function TimerDialog.prototype.setTitle(self, title)
TimerDialogSetTitle(self.handle, title)
end
function TimerDialog.prototype.setTitleColor(self, red, green, blue, alpha)
TimerDialogSetTitleColor(
self.handle,
red,
green,
blue,
alpha
)
end
function TimerDialog.prototype.setTimeColor(self, red, green, blue, alpha)
TimerDialogSetTimeColor(
self.handle,
red,
green,
blue,
alpha
)
end
function TimerDialog.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.trigger"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.Trigger = __TS__Class()
local Trigger = ____exports.Trigger
Trigger.name = "Trigger"
__TS__ClassExtends(Trigger, Handle)
function Trigger.prototype.____constructor(self)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
CreateTrigger()
)
end
end
__TS__SetDescriptor(
Trigger.prototype,
"enabled",
{
get = function(self)
return IsTriggerEnabled(self.handle)
end,
set = function(self, flag)
if flag then
EnableTrigger(self.handle)
else
DisableTrigger(self.handle)
end
end
},
true
)
__TS__SetDescriptor(
Trigger.prototype,
"evalCount",
{get = function(self)
return GetTriggerEvalCount(self.handle)
end},
true
)
__TS__ObjectDefineProperty(
Trigger,
"eventId",
{get = function(self)
return GetTriggerEventId()
end}
)
__TS__SetDescriptor(
Trigger.prototype,
"execCount",
{get = function(self)
return GetTriggerExecCount(self.handle)
end},
true
)
__TS__SetDescriptor(
Trigger.prototype,
"waitOnSleeps",
{
get = function(self)
return IsTriggerWaitOnSleeps(self.handle)
end,
set = function(self, flag)
TriggerWaitOnSleeps(self.handle, flag)
end
},
true
)
function Trigger.prototype.addAction(self, actionFunc)
return TriggerAddAction(self.handle, actionFunc)
end
function Trigger.prototype.addCondition(self, condition)
return TriggerAddCondition(
self.handle,
type(condition) == "function" and Condition(condition) or condition
)
end
function Trigger.prototype.destroy(self)
DestroyTrigger(self.handle)
end
function Trigger.prototype.eval(self)
return TriggerEvaluate(self.handle)
end
function Trigger.prototype.exec(self)
return TriggerExecute(self.handle)
end
function Trigger.prototype.execWait(self)
TriggerExecuteWait(self.handle)
end
function Trigger.prototype.registerAnyUnitEvent(self, whichPlayerUnitEvent)
return TriggerRegisterAnyUnitEventBJ(self.handle, whichPlayerUnitEvent)
end
function Trigger.prototype.registerCommandEvent(self, whichAbility, order)
return TriggerRegisterCommandEvent(self.handle, whichAbility, order)
end
function Trigger.prototype.registerDeathEvent(self, whichWidget)
return TriggerRegisterDeathEvent(self.handle, whichWidget.handle)
end
function Trigger.prototype.registerDialogButtonEvent(self, whichButton)
return TriggerRegisterDialogButtonEvent(self.handle, whichButton.handle)
end
function Trigger.prototype.registerDialogEvent(self, whichDialog)
return TriggerRegisterDialogEvent(self.handle, whichDialog.handle)
end
function Trigger.prototype.registerEnterRegion(self, whichRegion, filter)
return TriggerRegisterEnterRegion(
self.handle,
whichRegion,
type(filter) == "function" and Filter(filter) or filter
)
end
function Trigger.prototype.registerFilterUnitEvent(self, whichUnit, whichEvent, filter)
return TriggerRegisterFilterUnitEvent(
self.handle,
whichUnit,
whichEvent,
type(filter) == "function" and Filter(filter) or filter
)
end
function Trigger.prototype.registerGameEvent(self, whichGameEvent)
return TriggerRegisterGameEvent(self.handle, whichGameEvent)
end
function Trigger.prototype.registerGameStateEvent(self, whichState, opcode, limitval)
return TriggerRegisterGameStateEvent(self.handle, whichState, opcode, limitval)
end
function Trigger.prototype.registerLeaveRegion(self, whichRegion, filter)
return TriggerRegisterLeaveRegion(
self.handle,
whichRegion,
type(filter) == "function" and Filter(filter) or filter
)
end
function Trigger.prototype.registerPlayerAllianceChange(self, whichPlayer, whichAlliance)
return TriggerRegisterPlayerAllianceChange(self.handle, whichPlayer.handle, whichAlliance)
end
function Trigger.prototype.registerPlayerChatEvent(self, whichPlayer, chatMessageToDetect, exactMatchOnly)
return TriggerRegisterPlayerChatEvent(self.handle, whichPlayer.handle, chatMessageToDetect, exactMatchOnly)
end
function Trigger.prototype.registerPlayerEvent(self, whichPlayer, whichPlayerEvent)
return TriggerRegisterPlayerEvent(self.handle, whichPlayer.handle, whichPlayerEvent)
end
function Trigger.prototype.registerPlayerKeyEvent(self, whichPlayer, whichKey, metaKey, fireOnKeyDown)
return BlzTriggerRegisterPlayerKeyEvent(
self.handle,
whichPlayer.handle,
whichKey,
metaKey,
fireOnKeyDown
)
end
function Trigger.prototype.registerPlayerMouseEvent(self, whichPlayer, whichMouseEvent)
return TriggerRegisterPlayerMouseEventBJ(self.handle, whichPlayer.handle, whichMouseEvent)
end
function Trigger.prototype.registerPlayerStateEvent(self, whichPlayer, whichState, opcode, limitval)
return TriggerRegisterPlayerStateEvent(
self.handle,
whichPlayer.handle,
whichState,
opcode,
limitval
)
end
function Trigger.prototype.registerPlayerSyncEvent(self, whichPlayer, prefix, fromServer)
return BlzTriggerRegisterPlayerSyncEvent(self.handle, whichPlayer.handle, prefix, fromServer)
end
function Trigger.prototype.registerPlayerUnitEvent(self, whichPlayer, whichPlayerUnitEvent, filter)
return TriggerRegisterPlayerUnitEvent(
self.handle,
whichPlayer.handle,
whichPlayerUnitEvent,
type(filter) == "function" and Filter(filter) or filter
)
end
function Trigger.prototype.registerTimerEvent(self, timeout, periodic)
return TriggerRegisterTimerEvent(self.handle, timeout, periodic)
end
function Trigger.prototype.registerTimerExpireEvent(self, t)
return TriggerRegisterTimerExpireEvent(self.handle, t)
end
function Trigger.prototype.registerTrackableHitEvent(self, whichTrackable)
return TriggerRegisterTrackableHitEvent(self.handle, whichTrackable)
end
function Trigger.prototype.registerTrackableTrackEvent(self, whichTrackable)
return TriggerRegisterTrackableTrackEvent(self.handle, whichTrackable)
end
function Trigger.prototype.registerUnitEvent(self, whichUnit, whichEvent)
return TriggerRegisterUnitEvent(self.handle, whichUnit.handle, whichEvent)
end
function Trigger.prototype.registerUnitInRage(self, whichUnit, range, filter)
return TriggerRegisterUnitInRange(
self.handle,
whichUnit,
range,
type(filter) == "function" and Filter(filter) or filter
)
end
function Trigger.prototype.registerUnitStateEvent(self, whichUnit, whichState, opcode, limitval)
return TriggerRegisterUnitStateEvent(
self.handle,
whichUnit.handle,
whichState,
opcode,
limitval
)
end
function Trigger.prototype.registerUpgradeCommandEvent(self, whichUpgrade)
return TriggerRegisterUpgradeCommandEvent(self.handle, whichUpgrade)
end
function Trigger.prototype.registerVariableEvent(self, varName, opcode, limitval)
return TriggerRegisterVariableEvent(self.handle, varName, opcode, limitval)
end
function Trigger.prototype.removeAction(self, whichAction)
return TriggerRemoveAction(self.handle, whichAction)
end
function Trigger.prototype.removeActions(self)
return TriggerClearActions(self.handle)
end
function Trigger.prototype.removeCondition(self, whichCondition)
return TriggerRemoveCondition(self.handle, whichCondition)
end
function Trigger.prototype.removeConditions(self)
return TriggerClearConditions(self.handle)
end
function Trigger.prototype.reset(self)
ResetTrigger(self.handle)
end
function Trigger.prototype.triggerRegisterFrameEvent(self, frame, eventId)
return BlzTriggerRegisterFrameEvent(self.handle, frame.handle, eventId)
end
function Trigger.fromEvent(self)
return self:fromHandle(GetTriggeringTrigger())
end
function Trigger.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.ubersplat"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.Ubersplat = __TS__Class()
local Ubersplat = ____exports.Ubersplat
Ubersplat.name = "Ubersplat"
__TS__ClassExtends(Ubersplat, Handle)
function Ubersplat.prototype.____constructor(self, x, y, name, red, green, blue, alpha, forcePaused, noBirthTime)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
CreateUbersplat(
x,
y,
name,
red,
green,
blue,
alpha,
forcePaused,
noBirthTime
)
)
end
end
function Ubersplat.prototype.destroy(self)
DestroyUbersplat(self.handle)
end
function Ubersplat.prototype.finish(self)
FinishUbersplat(self.handle)
end
function Ubersplat.prototype.render(self, flag, always)
if always == nil then
always = false
end
if always then
SetUbersplatRenderAlways(self.handle, flag)
else
SetUbersplatRender(self.handle, flag)
end
end
function Ubersplat.prototype.reset(self)
ResetUbersplat(self.handle)
end
function Ubersplat.prototype.show(self, flag)
ShowUbersplat(self.handle, flag)
end
function Ubersplat.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.weathereffect"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____handle = require("lua_modules.w3ts.handles.handle")
local Handle = ____handle.Handle
____exports.WeatherEffect = __TS__Class()
local WeatherEffect = ____exports.WeatherEffect
WeatherEffect.name = "WeatherEffect"
__TS__ClassExtends(WeatherEffect, Handle)
function WeatherEffect.prototype.____constructor(self, where, effectID)
if Handle:initFromHandle() then
Handle.prototype.____constructor(self)
else
Handle.prototype.____constructor(
self,
AddWeatherEffect(where.handle, effectID)
)
end
end
function WeatherEffect.prototype.destroy(self)
RemoveWeatherEffect(self.handle)
end
function WeatherEffect.prototype.enable(self, flag)
EnableWeatherEffect(self.handle, flag)
end
function WeatherEffect.fromHandle(self, handle)
return self:getObject(handle)
end
return ____exports
end,
["lua_modules.w3ts.handles.index"] = function(...)
local ____exports = {}
do
local ____export = require("lua_modules.w3ts.handles.camera")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.destructable")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.dialog")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.effect")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.fogmodifier")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.force")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.frame")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.gamecache")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.group")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.handle")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.image")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.item")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.leaderboard")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.multiboard")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.player")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.point")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.quest")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.rect")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.region")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.sound")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.texttag")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.timer")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.timerdialog")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.trigger")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.ubersplat")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.unit")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.weathereffect")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.handles.widget")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
return ____exports
end,
["lua_modules.w3ts.hooks.index"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ArrayForEach = ____lualib.__TS__ArrayForEach
local ____exports = {}
local oldMain = main
local oldConfig = config
local hooksMainBefore = {}
local hooksMainAfter = {}
local hooksConfigBefore = {}
local hooksConfigAfter = {}
____exports.executeHooksMainBefore = function() return __TS__ArrayForEach(
hooksMainBefore,
function(____, func) return func() end
) end
____exports.executeHooksMainAfter = function() return __TS__ArrayForEach(
hooksMainAfter,
function(____, func) return func() end
) end
function ____exports.hookedMain()
____exports.executeHooksMainBefore()
oldMain()
____exports.executeHooksMainAfter()
end
____exports.executeHooksConfigBefore = function() return __TS__ArrayForEach(
hooksConfigBefore,
function(____, func) return func() end
) end
____exports.executeHooksConfigAfter = function() return __TS__ArrayForEach(
hooksConfigAfter,
function(____, func) return func() end
) end
function ____exports.hookedConfig()
____exports.executeHooksConfigBefore()
oldConfig()
____exports.executeHooksConfigAfter()
end
main = ____exports.hookedMain
config = ____exports.hookedConfig
____exports.W3TS_HOOK = W3TS_HOOK or ({})
____exports.W3TS_HOOK.MAIN_BEFORE = "main::before"
____exports.W3TS_HOOK.MAIN_AFTER = "main::after"
____exports.W3TS_HOOK.CONFIG_BEFORE = "config::before"
____exports.W3TS_HOOK.CONFIG_AFTER = "config::after"
local entryPoints = {[____exports.W3TS_HOOK.MAIN_BEFORE] = hooksMainBefore, [____exports.W3TS_HOOK.MAIN_AFTER] = hooksMainAfter, [____exports.W3TS_HOOK.CONFIG_BEFORE] = hooksConfigBefore, [____exports.W3TS_HOOK.CONFIG_AFTER] = hooksConfigAfter}
function ____exports.addScriptHook(entryPoint, hook)
if not (entryPoints[entryPoint] ~= nil) then
return false
end
local ____entryPoints_entryPoint_0 = entryPoints[entryPoint]
____entryPoints_entryPoint_0[#____entryPoints_entryPoint_0 + 1] = hook
return true
end
return ____exports
end,
["lua_modules.w3ts.system.base64"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__StringCharAt = ____lualib.__TS__StringCharAt
local __TS__StringAccess = ____lualib.__TS__StringAccess
local __TS__StringSubstr = ____lualib.__TS__StringSubstr
local ____exports = {}
---
-- @noSelfInFile
local chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
--- Encode a string to base64.
--
-- @param input The string to encode.
function ____exports.base64Encode(input)
local output = ""
do
local block = 0
local charCode = 0
local idx = 0
local map = chars
while true do
local ____temp_2 = #__TS__StringCharAt(
input,
math.floor(idx) | 0
) > 0
if not ____temp_2 then
map = "="
local ____ = map
____temp_2 = idx %% 1
end
if not ____temp_2 then
break
end
local ____string_byte_1 = string.byte
local ____input_0 = input
idx = idx + 3 / 4
charCode = ____string_byte_1(
____input_0,
math.floor(idx) + 1
) or 0
if math.floor(idx) > #input and charCode == 0 then
if #output %% 4 == 1 then
return output .. "="
end
return output .. "=="
end
if charCode > 255 then
print("'base64Encode' failed: The string to be encoded contains characters outside of the Latin1 range.")
return output
end
block = block << 8 | charCode
output = output .. __TS__StringCharAt(
map,
math.floor(63 & block >> 8 - idx %% 1 * 8)
)
end
end
return output
end
--- Decode a base64 string.
--
-- @param input The base64 string to decode.
function ____exports.base64Decode(input)
local i = #input
do
while i > 0 and __TS__StringAccess(input, i) ~= "=" do
i = i - 1
end
end
local str = __TS__StringSubstr(input, 0, i - 1)
local output = ""
if #str %% 4 == 1 then
print("'base64Decode' failed: The string to be decoded is not correctly encoded.")
return output
end
local bs = 0
do
local bc = 0
local buffer
local idx = 0
while true do
buffer = __TS__StringCharAt(str, idx)
if not buffer then
break
end
if #buffer == 0 then
break
end
buffer = (string.find(chars, buffer, nil, true) or 0) - 1
idx = idx + 1
local ____temp_5
local ____temp_4 = ~buffer
if ____temp_4 then
bs = bc %% 4 ~= 0 and bs * 64 + buffer or buffer
local ____ = bs
local ____bc_3 = bc
bc = ____bc_3 + 1
____temp_4 = ____bc_3 %% 4 ~= 0
end
if ____temp_4 then
output = output .. string.char(255 & bs >> (-2 * bc & 6))
____temp_5 = output
else
____temp_5 = 0
end
end
end
return output
end
return ____exports
end,
["lua_modules.w3ts.system.binaryreader"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
--- Reads primitive types from a packed binary string.
--
-- @example ```ts
-- // Write the values
-- const writer = new BinaryWriter();
-- writer.writeUInt8(5);
-- writer.writeUInt8(32);
-- writer.writeUInt8(78);
-- writer.writeUInt8(200);
-- writer.writeUInt32(12345678);
-- writer.writeString("hello");
-- writer.writeUInt16(45000);
--
-- // Read the values
-- const binaryString = writer.toString();
-- const reader = new BinaryReader(binaryString);
-- const values: any[] = [];
--
-- values[0] = reader.readUInt8(); // 5
-- values[1] = reader.readUInt8(); // 32
-- values[2] = reader.readUInt8(); // 78
-- values[3] = reader.readUInt8(); // 200
-- values[4] = reader.readUInt32(); // 12345678
-- values[5] = reader.readString(); // hello
-- values[6] = reader.readUInt16(); // 45000
-- ```
____exports.BinaryReader = __TS__Class()
local BinaryReader = ____exports.BinaryReader
BinaryReader.name = "BinaryReader"
function BinaryReader.prototype.____constructor(self, binaryString)
self.pos = 1
self.data = binaryString
end
function BinaryReader.prototype.read(self, fmt, size)
local unpacked = {string.unpack(fmt, self.data, self.pos)}
self.pos = self.pos + size
if #unpacked <= 0 then
return 0
end
return unpacked[1]
end
function BinaryReader.prototype.readDouble(self)
return self:read(">d", 4)
end
function BinaryReader.prototype.readFloat(self)
return self:read(">f", 4)
end
function BinaryReader.prototype.readInt16(self)
return self:read(">h", 2)
end
function BinaryReader.prototype.readInt32(self)
return self:read(">i4", 4)
end
function BinaryReader.prototype.readInt8(self)
return self:read(">b", 1)
end
function BinaryReader.prototype.readString(self)
local value = self:read(">z", 0)
self.pos = self.pos + (#value + 1)
return value
end
function BinaryReader.prototype.readUInt16(self)
return self:read(">H", 2)
end
function BinaryReader.prototype.readUInt32(self)
return self:read(">I4", 4)
end
function BinaryReader.prototype.readUInt8(self)
return self:read(">B", 1)
end
return ____exports
end,
["lua_modules.w3ts.system.binarywriter"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
--- Packs primitive types into a binary string.
--
-- @example ```ts
-- // Write the values
-- const writer = new BinaryWriter();
-- writer.writeUInt8(5);
-- writer.writeUInt8(32);
-- writer.writeUInt8(78);
-- writer.writeUInt8(200);
-- writer.writeUInt32(12345678);
-- writer.writeString("hello");
-- writer.writeUInt16(45000);
--
-- // Read the values
-- const binaryString = writer.toString();
-- const reader = new BinaryReader(binaryString);
-- const values: any[] = [];
--
-- values[0] = reader.readUInt8(); // 5
-- values[1] = reader.readUInt8(); // 32
-- values[2] = reader.readUInt8(); // 78
-- values[3] = reader.readUInt8(); // 200
-- values[4] = reader.readUInt32(); // 12345678
-- values[5] = reader.readString(); // hello
-- values[6] = reader.readUInt16(); // 45000
-- ```
____exports.BinaryWriter = __TS__Class()
local BinaryWriter = ____exports.BinaryWriter
BinaryWriter.name = "BinaryWriter"
function BinaryWriter.prototype.____constructor(self)
self.values = {}
self.fmj = ">"
end
function BinaryWriter.prototype.__tostring(self)
return string.pack(
self.fmj,
table.unpack(self.values)
)
end
function BinaryWriter.prototype.writeDouble(self, value)
self.fmj = self.fmj .. "d"
local ____self_values_0 = self.values
____self_values_0[#____self_values_0 + 1] = value
end
function BinaryWriter.prototype.writeFloat(self, value)
self.fmj = self.fmj .. "f"
local ____self_values_1 = self.values
____self_values_1[#____self_values_1 + 1] = value
end
function BinaryWriter.prototype.writeInt16(self, value)
self.fmj = self.fmj .. "h"
local ____self_values_2 = self.values
____self_values_2[#____self_values_2 + 1] = value
end
function BinaryWriter.prototype.writeInt32(self, value)
self.fmj = self.fmj .. "i4"
local ____self_values_3 = self.values
____self_values_3[#____self_values_3 + 1] = value
end
function BinaryWriter.prototype.writeInt8(self, value)
self.fmj = self.fmj .. "b"
local ____self_values_4 = self.values
____self_values_4[#____self_values_4 + 1] = value
end
function BinaryWriter.prototype.writeString(self, value)
self.fmj = self.fmj .. "z"
local ____self_values_5 = self.values
____self_values_5[#____self_values_5 + 1] = value
end
function BinaryWriter.prototype.writeUInt16(self, value)
self.fmj = self.fmj .. "H"
local ____self_values_6 = self.values
____self_values_6[#____self_values_6 + 1] = value
end
function BinaryWriter.prototype.writeUInt32(self, value)
self.fmj = self.fmj .. "I4"
local ____self_values_7 = self.values
____self_values_7[#____self_values_7 + 1] = value
end
function BinaryWriter.prototype.writeUInt8(self, value)
self.fmj = self.fmj .. "B"
local ____self_values_8 = self.values
____self_values_8[#____self_values_8 + 1] = value
end
return ____exports
end,
["lua_modules.w3ts.system.file"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__StringSubstr = ____lualib.__TS__StringSubstr
local ____exports = {}
--- A system which provides the ability to read and write files. There are no standard IO natives
-- so this system relies on an exploit which ended up being sanctioned by Blizzard, and because of this
-- there are some caveats.
--
-- - All files are confined to the `Documents\Warcraft III\CustomMapData` folder.
-- - The only allowed file extensions are `.txt` and `.pld`.
-- - Generated files contain boilerplate JASS code.
-- - You cannot delete files but you can empty their contents.
--
-- @example ```ts
-- // Write to the file
-- File.write("data.txt", "Hello world!");
--
-- // Read it's contents
-- const contents = File.read("data.txt");
--
-- // Display the contents
-- if (contents) {
-- print(contents);
-- }
-- ```
____exports.File = __TS__Class()
local File = ____exports.File
File.name = "File"
function File.prototype.____constructor(self)
end
function File.escape(self, contents)
contents = string.gsub(contents, ____exports.File.escapeCharacter, ____exports.File.escapedSelf)
contents = string.gsub(contents, "\"", ____exports.File.escapedQuote)
return contents
end
function File.unescape(self, contents)
contents = string.gsub(contents, ____exports.File.escapedQuote, "\"")
contents = string.gsub(contents, ____exports.File.escapedSelf, ____exports.File.escapeCharacter)
return contents
end
function File.read(self, filename)
local originalIcon = BlzGetAbilityIcon(self.dummyAbility)
Preloader(filename)
local preloadText = BlzGetAbilityIcon(self.dummyAbility)
BlzSetAbilityIcon(self.dummyAbility, originalIcon)
if preloadText ~= originalIcon then
return ____exports.File:unescape(preloadText)
end
end
function File.writeRaw(self, filename, contents, allowReading)
if allowReading == nil then
allowReading = false
end
PreloadGenClear()
PreloadGenStart()
if allowReading then
Preload("\")\n//! beginusercode\nlocal o=''\nPreload=function(s)o=o..s end\nPreloadEnd=function()end\n//!endusercode\n//")
contents = ____exports.File:escape(contents)
end
do
local i = 0
while i < #contents / ____exports.File.preloadLimit do
Preload(__TS__StringSubstr(contents, i * ____exports.File.preloadLimit, ____exports.File.preloadLimit))
i = i + 1
end
end
if allowReading then
Preload(("\")\n//! beginusercode\nBlzSetAbilityIcon(" .. tostring(self.dummyAbility)) .. ",o)\n//!endusercode\n//")
end
PreloadGenEnd(filename)
return self
end
function File.write(self, filename, contents)
return self:writeRaw(filename, contents, true)
end
File.dummyAbility = FourCC("Amls")
File.preloadLimit = 259
File.escapeCharacter = string.char(27)
File.escapedSelf = ____exports.File.escapeCharacter .. ____exports.File.escapeCharacter
File.escapedQuote = ____exports.File.escapeCharacter .. "q"
return ____exports
end,
["lua_modules.w3ts.system.gametime"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____timer = require("lua_modules.w3ts.handles.timer")
local Timer = ____timer.Timer
local elapsedTime = 0
local gameTimer = __TS__New(Timer):start(
30,
true,
function()
elapsedTime = elapsedTime + 30
end
)
function ____exports.getElapsedTime()
return elapsedTime + gameTimer.elapsed
end
return ____exports
end,
["lua_modules.w3ts.system.sync"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__StringSubstr = ____lualib.__TS__StringSubstr
local __TS__New = ____lualib.__TS__New
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local ____exports = {}
local ____player = require("lua_modules.w3ts.handles.player")
local MapPlayer = ____player.MapPlayer
local ____timer = require("lua_modules.w3ts.handles.timer")
local Timer = ____timer.Timer
local ____trigger = require("lua_modules.w3ts.handles.trigger")
local Trigger = ____trigger.Trigger
local ____base64 = require("lua_modules.w3ts.system.base64")
local base64Decode = ____base64.base64Decode
local base64Encode = ____base64.base64Encode
local ____binaryreader = require("lua_modules.w3ts.system.binaryreader")
local BinaryReader = ____binaryreader.BinaryReader
local ____binarywriter = require("lua_modules.w3ts.system.binarywriter")
local BinaryWriter = ____binarywriter.BinaryWriter
local ____gametime = require("lua_modules.w3ts.system.gametime")
local getElapsedTime = ____gametime.getElapsedTime
local SYNC_PREFIX = "T"
local SYNC_PREFIX_CHUNK = "S"
local SYNC_MAX_CHUNK_SIZE = 244
local SyncIncomingPacket = __TS__Class()
SyncIncomingPacket.name = "SyncIncomingPacket"
function SyncIncomingPacket.prototype.____constructor(self, prefix, data)
local isChunk = prefix == SYNC_PREFIX_CHUNK
local header = base64Decode(isChunk and __TS__StringSubstr(data, 0, 10) or __TS__StringSubstr(data, 0, 5))
local reader = __TS__New(BinaryReader, header)
local id = reader:readUInt16()
self.req = ____exports.SyncRequest:fromIndex(id)
self.chunks = isChunk and reader:readUInt16() or 0
self.chunk = isChunk and reader:readUInt16() or 0
self.data = isChunk and __TS__StringSubstr(data, 10) or __TS__StringSubstr(data, 5)
end
local SyncOutgoingPacket = __TS__Class()
SyncOutgoingPacket.name = "SyncOutgoingPacket"
function SyncOutgoingPacket.prototype.____constructor(self, req, data, chunk, totalChunks)
if chunk == nil then
chunk = -1
end
if totalChunks == nil then
totalChunks = 0
end
self.req = req
self.data = data
self.chunk = chunk
self.chunks = totalChunks
end
function SyncOutgoingPacket.prototype.getHeader(self)
local writer = __TS__New(BinaryWriter)
writer:writeUInt16(self.req.id)
if self.chunk ~= -1 then
writer:writeUInt16(self.chunks)
writer:writeUInt16(self.chunk)
end
return base64Encode(tostring(writer))
end
function SyncOutgoingPacket.prototype.__tostring(self)
local header = self:getHeader()
local writer = __TS__New(BinaryWriter)
writer:writeString(self.data)
return header .. tostring(writer)
end
--- A system which provides an easy way to synchronize data between game clients.
-- The data will be split into chunks and sent in order until all of them are recieved by
-- every player. Splitting the data is required as `BlzSendSyncData` only allows 255 characters
-- per request.
--
-- @example ```ts
-- const data = File.read("savecode.txt");
--
-- // Synchronize the contents of the file from the first player's computer.
-- new SyncRequest(Players[0], data).then((res, req) => {
-- print(res.data);
-- });
-- ```
____exports.SyncRequest = __TS__Class()
local SyncRequest = ____exports.SyncRequest
SyncRequest.name = "SyncRequest"
function SyncRequest.prototype.____constructor(self, from, data, options)
self._startTime = 0
self.chunks = {}
self.currentChunk = 0
self.destroyed = false
self.status = 0
self.options = not options and ____exports.SyncRequest.defaultOptions or options
self.from = from
self.id = self:allocate()
____exports.SyncRequest.indicies[self.id + 1] = -1
____exports.SyncRequest.cache[self.id + 1] = self
____exports.SyncRequest:init()
if type(data) == "string" then
self:start(data)
end
end
__TS__SetDescriptor(
SyncRequest.prototype,
"startTime",
{get = function(self)
return self._startTime
end},
true
)
function SyncRequest.prototype.catch(self, callback)
self.onError = callback
return self
end
function SyncRequest.prototype.destroy(self)
____exports.SyncRequest.indicies[self.id + 1] = ____exports.SyncRequest.index
____exports.SyncRequest.index = self.id
self.destroyed = true
end
function SyncRequest.prototype.start(self, data)
if self.status ~= 0 or self.destroyed then
return false
end
self.currentChunk = 0
if #data <= SYNC_MAX_CHUNK_SIZE then
self:send(__TS__New(SyncOutgoingPacket, self, data))
else
local chunks = math.floor(#data / SYNC_MAX_CHUNK_SIZE)
do
local i = 0
while i <= chunks do
self:send(__TS__New(
SyncOutgoingPacket,
self,
__TS__StringSubstr(data, i * SYNC_MAX_CHUNK_SIZE, SYNC_MAX_CHUNK_SIZE),
i,
chunks
))
i = i + 1
end
end
end
self._startTime = getElapsedTime()
self.status = 1
if self.options.timeout > 0 then
__TS__New(Timer):start(
self.options.timeout,
false,
function()
Timer:fromExpired():destroy()
if self.onError and self.status == 1 then
self.onError({data = "Timeout", status = 3, time = self.startTime}, self)
end
end
)
end
return true
end
SyncRequest.prototype["then"] = function(self, callback)
self.onResponse = callback
return self
end
function SyncRequest.prototype.allocate(self)
if ____exports.SyncRequest.index ~= 0 then
local id = ____exports.SyncRequest.index
____exports.SyncRequest.index = ____exports.SyncRequest.indicies[id + 1]
return id
else
local ____exports_SyncRequest_0, ____counter_1 = ____exports.SyncRequest, "counter"
____exports_SyncRequest_0[____counter_1] = ____exports_SyncRequest_0[____counter_1] + 1
return ____exports.SyncRequest.counter
end
end
function SyncRequest.prototype.send(self, packet)
local prefix = packet.chunk == -1 and SYNC_PREFIX or SYNC_PREFIX_CHUNK
if self.from == MapPlayer:fromLocal() and not BlzSendSyncData(
prefix,
tostring(packet)
) then
print("SyncData: Network Error")
end
end
function SyncRequest.fromIndex(self, index)
return self.cache[index + 1]
end
function SyncRequest.init(self)
if self.initialized then
return
end
do
local i = 0
while i < bj_MAX_PLAYER_SLOTS do
local p = MapPlayer:fromIndex(i)
if p.controller == MAP_CONTROL_USER and p.slotState == PLAYER_SLOT_STATE_PLAYING then
self.eventTrigger:registerPlayerSyncEvent(p, SYNC_PREFIX, false)
self.eventTrigger:registerPlayerSyncEvent(p, SYNC_PREFIX_CHUNK, false)
end
i = i + 1
end
end
self.eventTrigger:addAction(function()
self:onSync()
end)
self.initialized = true
end
function SyncRequest.onSync(self)
local packet = __TS__New(
SyncIncomingPacket,
BlzGetTriggerSyncPrefix(),
BlzGetTriggerSyncData()
)
if not packet.req then
return
end
local ____packet_req_2, ____currentChunk_3 = packet.req, "currentChunk"
____packet_req_2[____currentChunk_3] = ____packet_req_2[____currentChunk_3] + 1
packet.req.chunks[packet.chunk + 1] = packet.data
if packet.chunk >= packet.chunks then
if packet.req.onResponse then
local data = table.concat(packet.req.chunks, "")
local status = 2
packet.req.status = 2
packet.req.onResponse(
{
data = data,
status = status,
time = getElapsedTime()
},
packet.req
)
end
end
end
SyncRequest.cache = {}
SyncRequest.counter = 0
SyncRequest.defaultOptions = {timeout = 0}
SyncRequest.eventTrigger = __TS__New(Trigger)
SyncRequest.index = 0
SyncRequest.indicies = {}
SyncRequest.initialized = false
return ____exports
end,
["lua_modules.w3ts.system.host"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local findHost, lobbyTimes, checkTimer, hostCallbacks, localJoinTime, localStartTime, host, isChecking
local ____index = require("lua_modules.w3ts.handles.index")
local MapPlayer = ____index.MapPlayer
local ____timer = require("lua_modules.w3ts.handles.timer")
local Timer = ____timer.Timer
local ____index = require("lua_modules.w3ts.hooks.index")
local addScriptHook = ____index.addScriptHook
local W3TS_HOOK = ____index.W3TS_HOOK
local ____base64 = require("lua_modules.w3ts.system.base64")
local base64Decode = ____base64.base64Decode
local base64Encode = ____base64.base64Encode
local ____binaryreader = require("lua_modules.w3ts.system.binaryreader")
local BinaryReader = ____binaryreader.BinaryReader
local ____binarywriter = require("lua_modules.w3ts.system.binarywriter")
local BinaryWriter = ____binarywriter.BinaryWriter
local ____sync = require("lua_modules.w3ts.system.sync")
local SyncRequest = ____sync.SyncRequest
function findHost()
isChecking = true
if localStartTime == 0 then
localStartTime = os.clock()
end
local writer = __TS__New(BinaryWriter)
writer:writeFloat(localStartTime - localJoinTime)
local ____self_0 = __TS__New(
SyncRequest,
MapPlayer:fromLocal(),
base64Encode(tostring(writer))
)
____self_0["then"](
____self_0,
function(res, req)
local data = base64Decode(res.data)
local reader = __TS__New(BinaryReader, data)
local syncedTime = reader:readFloat()
local from = MapPlayer:fromEvent()
lobbyTimes[from.id + 1] = syncedTime
local hostTime = 0
local hostId = 0
do
local i = 0
while i < bj_MAX_PLAYERS do
do
local p = MapPlayer:fromIndex(i)
if p.slotState ~= PLAYER_SLOT_STATE_PLAYING or p.controller ~= MAP_CONTROL_USER then
goto __continue14
end
if not lobbyTimes[p.id + 1] then
return
end
if lobbyTimes[p.id + 1] > hostTime then
hostTime = lobbyTimes[p.id + 1]
hostId = p.id
end
end
::__continue14::
i = i + 1
end
end
host = MapPlayer:fromIndex(hostId)
checkTimer:destroy()
for ____, cb in ipairs(hostCallbacks) do
cb()
end
end
):catch(function(res)
print("findHost Error: " .. tostring(res.status))
isChecking = false
end)
end
lobbyTimes = {}
checkTimer = __TS__New(Timer)
hostCallbacks = {}
localJoinTime = 0
localStartTime = 0
isChecking = false
function ____exports.getHost()
if host then
return host
elseif not isChecking then
checkTimer:start(0, false, findHost)
end
return
end
function ____exports.onHostDetect(callback)
if host then
callback()
else
hostCallbacks[#hostCallbacks + 1] = callback
end
end
local function onConfig()
if localJoinTime == 0 then
localJoinTime = os.clock()
end
end
local function onMain()
checkTimer:start(0, false, findHost)
end
addScriptHook(W3TS_HOOK.MAIN_AFTER, onMain)
addScriptHook(W3TS_HOOK.CONFIG_BEFORE, onConfig)
return ____exports
end,
["lua_modules.w3ts.system.index"] = function(...)
local ____exports = {}
do
local ____export = require("lua_modules.w3ts.system.base64")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.system.binaryreader")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.system.binarywriter")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.system.file")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.system.gametime")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.system.host")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.system.sync")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
return ____exports
end,
["lua_modules.w3ts.utils.color"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local __TS__New = ____lualib.__TS__New
local __TS__NumberToString = ____lualib.__TS__NumberToString
local ____exports = {}
local toHex, orderedPlayerColors
function toHex(value)
local hex = __TS__NumberToString(value, 16)
if #hex < 2 then
hex = "0" .. hex
end
return hex
end
____exports.Color = __TS__Class()
local Color = ____exports.Color
Color.name = "Color"
function Color.prototype.____constructor(self, red, green, blue, alpha)
self.red = red
self.green = green
self.blue = blue
if alpha then
self.alpha = alpha
else
self.alpha = 255
end
end
__TS__SetDescriptor(
Color.prototype,
"code",
{get = function(self)
return (("|c" .. toHex(self.alpha)) .. toHex(self.red)) .. toHex(self.green) .. toHex(self.blue)
end},
true
)
__TS__SetDescriptor(
Color.prototype,
"name",
{get = function(self)
local index = self:playerColorIndex()
if index < #____exports.playerColors then
return ____exports.playerColorNames[index + 1]
end
return "unknown"
end},
true
)
__TS__SetDescriptor(
Color.prototype,
"playerColor",
{get = function(self)
local index = self:playerColorIndex()
if index < #____exports.playerColors then
return orderedPlayerColors[index + 1]
end
return PLAYER_COLOR_RED
end},
true
)
function Color.prototype.equals(self, other)
return self.red == other.red and self.green == other.green and self.blue == other.blue and self.alpha == other.alpha
end
function Color.prototype.playerColorIndex(self)
local i = 0
do
while i < #____exports.playerColors do
if ____exports.playerColors[i + 1]:equals(self) then
break
end
i = i + 1
end
end
return i
end
function Color.prototype.lerp(self, other, factor)
local r = MathRound(self.red * (1 - factor) + other.red * factor)
local g = MathRound(self.green * (1 - factor) + other.green * factor)
local b = MathRound(self.blue * (1 - factor) + other.blue * factor)
local a = MathRound(self.alpha * (1 - factor) + other.alpha * factor)
return __TS__New(
____exports.Color,
math.max(
0,
math.min(255, r)
),
math.max(
0,
math.min(255, g)
),
math.max(
0,
math.min(255, b)
),
math.max(
0,
math.min(255, a)
)
)
end
____exports.color = function(red, green, blue, alpha) return __TS__New(
____exports.Color,
red,
green,
blue,
alpha
) end
--- The player colors sorted by index. Does not include
-- neutrals colors.
____exports.playerColors = {
____exports.color(255, 3, 3),
____exports.color(0, 66, 255),
____exports.color(28, 230, 185),
____exports.color(84, 0, 129),
____exports.color(255, 252, 0),
____exports.color(254, 138, 14),
____exports.color(32, 192, 0),
____exports.color(229, 91, 176),
____exports.color(149, 150, 151),
____exports.color(126, 191, 241),
____exports.color(16, 98, 70),
____exports.color(78, 42, 3),
____exports.color(155, 0, 0),
____exports.color(0, 0, 195),
____exports.color(0, 234, 255),
____exports.color(190, 0, 254),
____exports.color(235, 205, 135),
____exports.color(248, 164, 139),
____exports.color(191, 255, 128),
____exports.color(220, 185, 235),
____exports.color(80, 79, 85),
____exports.color(235, 240, 255),
____exports.color(0, 120, 30),
____exports.color(164, 111, 51)
}
--- The names of players colors sorted by player index.
____exports.playerColorNames = {
"red",
"blue",
"teal",
"purple",
"yellow",
"orange",
"green",
"pink",
"gray",
"light blue",
"dark green",
"brown",
"maroon",
"navy",
"turquoise",
"violet",
"wheat",
"peach",
"mint",
"lavender",
"coal",
"snow",
"emerald",
"peanut"
}
--- An ordered list of `playercolor`s, for lookup
orderedPlayerColors = {
PLAYER_COLOR_RED,
PLAYER_COLOR_BLUE,
PLAYER_COLOR_CYAN,
PLAYER_COLOR_PURPLE,
PLAYER_COLOR_YELLOW,
PLAYER_COLOR_ORANGE,
PLAYER_COLOR_GREEN,
PLAYER_COLOR_PINK,
PLAYER_COLOR_LIGHT_GRAY,
PLAYER_COLOR_LIGHT_BLUE,
PLAYER_COLOR_AQUA,
PLAYER_COLOR_BROWN,
PLAYER_COLOR_MAROON,
PLAYER_COLOR_NAVY,
PLAYER_COLOR_TURQUOISE,
PLAYER_COLOR_VIOLET,
PLAYER_COLOR_WHEAT,
PLAYER_COLOR_PEACH,
PLAYER_COLOR_MINT,
PLAYER_COLOR_LAVENDER,
PLAYER_COLOR_COAL,
PLAYER_COLOR_SNOW,
PLAYER_COLOR_EMERALD,
PLAYER_COLOR_PEANUT
}
return ____exports
end,
["lua_modules.w3ts.utils.index"] = function(...)
local ____exports = {}
do
local ____export = require("lua_modules.w3ts.utils.color")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
return ____exports
end,
["lua_modules.w3ts.globals.index"] = function(...)
local ____exports = {}
local ____player = require("lua_modules.w3ts.handles.player")
local MapPlayer = ____player.MapPlayer
____exports.Players = {}
do
local i = 0
while i < bj_MAX_PLAYER_SLOTS do
____exports.Players[i + 1] = MapPlayer:fromHandle(Player(i))
i = i + 1
end
end
return ____exports
end,
["lua_modules.w3ts.index"] = function(...)
local ____exports = {}
local tsGlobals = require("lua_modules.w3ts.globals.index")
do
local ____export = require("lua_modules.w3ts.handles.index")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.hooks.index")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.system.index")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
do
local ____export = require("lua_modules.w3ts.utils.index")
for ____exportKey, ____exportValue in pairs(____export) do
if ____exportKey ~= "default" then
____exports[____exportKey] = ____exportValue
end
end
end
____exports.tsGlobals = tsGlobals
return ____exports
end,
["src.Utils.mapUtils"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ArrayForEach = ____lualib.__TS__ArrayForEach
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____index = require("lua_modules.w3ts.index")
local Timer = ____index.Timer
____exports.createEvent = function(____bindingPattern0)
local actions
local conditions
local events
events = ____bindingPattern0.events
conditions = ____bindingPattern0.conditions
actions = ____bindingPattern0.actions
local t = CreateTrigger()
__TS__ArrayForEach(
events,
function(____, event) return event(t) end
)
if conditions then
__TS__ArrayForEach(
conditions,
function(____, condition) return TriggerAddCondition(
t,
Condition(condition)
) end
)
end
__TS__ArrayForEach(
actions,
function(____, action) return TriggerAddAction(
t,
____exports.errorHandler(action)
) end
)
return t
end
____exports.forRange = function(j, cb)
do
local i = 0
while i < j do
cb(i)
i = i + 1
end
end
end
____exports.createTimer = function(timeout, periodic, handlerFunc)
return __TS__New(Timer):start(
timeout,
periodic,
____exports.errorHandler(handlerFunc)
)
end
____exports.errorHandler = function(cb, errorCb)
return function()
local a, b = pcall(cb)
if not a then
if type(b) == "string" then
print("Error caught: " .. b)
end
local ____ = errorCb and errorCb(b)
end
end
end
____exports.runInTrigger = function(action)
local t = CreateTrigger()
TriggerAddAction(
t,
____exports.errorHandler(action)
)
TriggerExecute(t)
end
return ____exports
end,
["src.core.04_STRUCTURES.Escaper.Escaper_functions"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local HERO_SECONDARY_TYPE_ID = ____Constants.HERO_SECONDARY_TYPE_ID
local HERO_TYPE_ID = ____Constants.HERO_TYPE_ID
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_baseColorString = ____Init_colorCodes.udg_baseColorString
local udg_colorCode = ____Init_colorCodes.udg_colorCode
____exports.ColorInfo = function(escaperToGetInfo, playerToDisplay)
local baseColor = escaperToGetInfo:getBaseColor()
local red = I2S(R2I(escaperToGetInfo:getVcRed()))
local green = I2S(R2I(escaperToGetInfo:getVcGreen()))
local blue = I2S(R2I(escaperToGetInfo:getVcBlue()))
local transparency = I2S(R2I(escaperToGetInfo:getVcTransparency()))
Text.P(playerToDisplay, ("Base color : " .. udg_colorCode[baseColor + 1]) .. udg_baseColorString[baseColor + 1])
Text.P(playerToDisplay, ((udg_colorCode[1] .. "red : ") .. red) .. " %%")
Text.P(playerToDisplay, ((udg_colorCode[7] .. "green : ") .. green) .. " %%")
Text.P(playerToDisplay, ((udg_colorCode[2] .. "blue : ") .. blue) .. " %%")
Text.P(playerToDisplay, ((udg_colorCode[9] .. "transparency : ") .. transparency) .. " %%")
end
____exports.Hero2Escaper = function(hero)
if GetUnitTypeId(hero) == HERO_TYPE_ID or GetUnitTypeId(hero) == HERO_SECONDARY_TYPE_ID then
return getUdgEscapers():get(GetUnitUserData(hero))
end
return nil
end
____exports.IsHero = function(U)
do
local i = 0
while i < NB_ESCAPERS do
local escaper = getUdgEscapers():get(i)
if escaper and escaper:getHero() == U then
return true
end
i = i + 1
end
end
return false
end
____exports.isSecondaryHero = function(U)
return ____exports.IsHero(U) and GetUnitUserData(U) >= NB_PLAYERS_MAX
end
____exports.MainSliderToSecondaryOne = function(mainSlider)
local secondaryEscaperId = GetUnitUserData(mainSlider) + NB_PLAYERS_MAX
local ____getUdgEscapers_result_get_result_getHero_result_0 = getUdgEscapers():get(secondaryEscaperId)
if ____getUdgEscapers_result_get_result_getHero_result_0 ~= nil then
____getUdgEscapers_result_get_result_getHero_result_0 = ____getUdgEscapers_result_get_result_getHero_result_0:getHero()
end
return ____getUdgEscapers_result_get_result_getHero_result_0
end
____exports.MainEscaperToSecondaryOne = function(e)
return getUdgEscapers():get(e:getEscaperId() + NB_PLAYERS_MAX)
end
____exports.GetMirrorEscaper = function(e)
if not e then
return nil
end
local mirrorEscaperId
if e:getEscaperId() >= NB_PLAYERS_MAX then
mirrorEscaperId = e:getEscaperId() - NB_PLAYERS_MAX
else
mirrorEscaperId = e:getEscaperId() + NB_PLAYERS_MAX
end
return getUdgEscapers():get(mirrorEscaperId)
end
____exports.ForceSelectHeroes = function(e)
local p = e:getControler():getPlayer()
local ____GetMirrorEscaper_result_selectHero_result_2 = ____exports.GetMirrorEscaper(e)
if ____GetMirrorEscaper_result_selectHero_result_2 ~= nil then
____GetMirrorEscaper_result_selectHero_result_2 = ____GetMirrorEscaper_result_selectHero_result_2:selectHero()
end
e:selectHero()
end
____exports.escaperId2playerId = function(escaperId)
if escaperId >= NB_PLAYERS_MAX then
return escaperId - NB_PLAYERS_MAX
else
return escaperId
end
end
return ____exports
end,
["src.core.06_COMMANDS.COMMANDS_vJass.Command_functions"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__StringSubstring = ____lualib.__TS__StringSubstring
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__StringIncludes = ____lualib.__TS__StringIncludes
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____mapUtils = require("src.Utils.mapUtils")
local forRange = ____mapUtils.forRange
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local stringReplaceAll = ____Basic_functions.stringReplaceAll
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local NB_PLAYERS_MAX_REFORGED = ____Constants.NB_PLAYERS_MAX_REFORGED
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local ColorString2Id = ____Init_colorCodes.ColorString2Id
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
____exports.rawPlayerNames = {}
local cachedPlayerNames = {}
____exports.removeHash = function(name)
local i = (string.find(name, "#", nil, true) or 0) - 1
if i == -1 then
return name
end
return __TS__StringSubstring(name, 0, i)
end
____exports.initCachedPlayerNames = function()
forRange(
24,
function(i)
cachedPlayerNames[____exports.removeHash(stringReplaceAll(
" ",
"_",
string.lower(GetPlayerName(Player(i)))
))] = i
local ____exports_rawPlayerNames_0 = ____exports.rawPlayerNames
____exports_rawPlayerNames_0[#____exports_rawPlayerNames_0 + 1] = GetPlayerName(Player(i))
end
)
end
____exports.CmdName = function(str)
local length = StringLength(str)
local outputStr = ""
local car
local i = 0
if SubString(str, 0, 1) == "-" and length > 1 then
car = SubString(str, 1, 2)
i = 1
while true do
if i >= length or car == " " then
break
end
outputStr = outputStr .. car
i = i + 1
car = SubString(str, i, i + 1)
end
end
if StringLength(outputStr) >= 1 then
return outputStr
end
return ""
end
____exports.IsCmd = function(str)
return ____exports.CmdName(str) ~= ""
end
____exports.CmdParam = function(str, paramNumber)
local length = StringLength(str)
local nameLength = StringLength(____exports.CmdName(str))
local outputStr = ""
local char
local i = 0
local currentParamNumber = 1
local lastSpaceFound_pos = nameLength + 2
if not ____exports.IsCmd(str) then
return ""
end
i = lastSpaceFound_pos + 1
if paramNumber == 0 then
return SubStringBJ(str, i, length)
end
while true do
if currentParamNumber == paramNumber or i > length then
break
end
char = SubStringBJ(str, i, i)
if char == " " and i - 1 == lastSpaceFound_pos then
return ""
end
if char == " " then
lastSpaceFound_pos = i
currentParamNumber = currentParamNumber + 1
end
i = i + 1
end
if currentParamNumber == paramNumber then
while true do
if i > length then
break
end
char = SubStringBJ(str, i, i)
if char == " " then
break
end
outputStr = outputStr .. char
i = i + 1
end
return outputStr
end
return ""
end
____exports.NbParam = function(str)
local i = 1
while ____exports.CmdParam(str, i) ~= "" do
i = i + 1
end
return i - 1
end
____exports.NoParam = function(str)
return ____exports.CmdParam(str, 0) == ""
end
____exports.IsColorString = function(colorString)
return ColorString2Id(colorString) >= 0
end
____exports.IsPlayerColorString = function(colorString)
return ColorString2Id(colorString) >= 0 and ColorString2Id(colorString) <= NB_PLAYERS_MAX
end
____exports.isPlayerId = function(arg)
do
local function ____catch()
return true, false
end
local ____try, ____hasReturned, ____returnValue = pcall(function()
return true, not not ____exports.resolvePlayerId(arg)
end)
if not ____try then
____hasReturned, ____returnValue = ____catch()
end
if ____hasReturned then
return ____returnValue
end
end
end
local blzColors2ids = __TS__New(Map)
do
local i = 0
while i < NB_PLAYERS_MAX_REFORGED do
blzColors2ids:set(
ConvertPlayerColor(i),
i
)
i = i + 1
end
end
____exports.BlzColor2Id = function(color)
return blzColors2ids:get(color)
end
function ____exports.colorId2playerId(colorId)
do
local i = 0
while i < NB_PLAYERS_MAX do
if ____exports.BlzColor2Id(GetPlayerColor(Player(i))) == colorId then
return i
end
i = i + 1
end
end
return -1
end
function ____exports.playerId2colorId(playerId)
return ____exports.BlzColor2Id(GetPlayerColor(Player(playerId))) or -1
end
____exports.resolvePlayerId = function(arg)
local larg = string.lower(arg)
local targetPlayer = -1
if larg == "s" or larg == "sel" or larg == "select" or larg == "selected" then
local ____getUdgEscapers_result_get_result_getSelectedPlayerId_result_1 = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
if ____getUdgEscapers_result_get_result_getSelectedPlayerId_result_1 ~= nil then
____getUdgEscapers_result_get_result_getSelectedPlayerId_result_1 = ____getUdgEscapers_result_get_result_getSelectedPlayerId_result_1:getSelectedPlayerId()
end
local a = (____getUdgEscapers_result_get_result_getSelectedPlayerId_result_1 or 0) + 1
if a > 0 and a <= NB_ESCAPERS then
targetPlayer = a - 1
end
elseif ____exports.IsPlayerColorString(larg) then
targetPlayer = ____exports.colorId2playerId(ColorString2Id(larg))
elseif S2I(larg) ~= 0 then
local a = S2I(larg)
if a > 0 and a <= NB_ESCAPERS then
targetPlayer = ____exports.colorId2playerId(a - 1)
end
elseif cachedPlayerNames[____exports.removeHash(larg)] then
return cachedPlayerNames[____exports.removeHash(larg)]
elseif #____exports.removeHash(larg) > 3 then
local m = MemoryHandler.getEmptyArray()
for playerName, playerId in pairs(cachedPlayerNames) do
if __TS__StringIncludes(
tostring(playerName),
____exports.removeHash(larg)
) then
m[#m + 1] = playerId
end
end
if #m == 1 then
local playerId = m[1]
MemoryHandler.destroyArray(m)
return playerId
end
MemoryHandler.destroyArray(m)
end
if targetPlayer == -1 then
error(("Invalid player: '" .. arg) .. "'", 0)
end
return targetPlayer
end
____exports.resolvePlayerIds = function(arg, cb)
local larg = string.lower(arg)
if larg == "a" or larg == "all" then
do
local i = 0
while i < NB_ESCAPERS do
local escaper = getUdgEscapers():get(i)
if escaper then
cb(escaper)
end
i = i + 1
end
end
elseif ____exports.isPlayerId(arg) then
local escaper = getUdgEscapers():get(____exports.resolvePlayerId(arg))
if escaper then
cb(escaper)
end
else
error(("Invalid player: '" .. arg) .. "'", 0)
end
end
return ____exports
end,
["src.core.API.MecHook"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local ____exports = {}
____exports.MecHook = __TS__Class()
local MecHook = ____exports.MecHook
MecHook.name = "MecHook"
function MecHook.prototype.____constructor(self, cb)
self.getId = function()
return self.id
end
self.execute = function(____, args)
return self.cb(args)
end
local ____exports_MecHook_0, ____lastId_1 = ____exports.MecHook, "lastId"
local ____exports_MecHook_lastId_2 = ____exports_MecHook_0[____lastId_1] + 1
____exports_MecHook_0[____lastId_1] = ____exports_MecHook_lastId_2
self.id = ____exports_MecHook_lastId_2
self.cb = cb
____exports.MecHook.mecHooksAll:set(self.id, self)
end
MecHook.lastId = -1
MecHook.mecHooksAll = __TS__New(Map)
MecHook.destroy = function(____, hookId)
local hook = ____exports.MecHook.mecHooksAll:get(hookId)
if hook then
local ____hook_mecHookArray_destroy_result_3 = hook.mecHookArray
if ____hook_mecHookArray_destroy_result_3 ~= nil then
____hook_mecHookArray_destroy_result_3 = ____hook_mecHookArray_destroy_result_3:destroy(hookId)
end
____exports.MecHook.mecHooksAll:delete(hookId)
return true
end
return false
end
return ____exports
end,
["src.core.API.MecHookArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____MecHook = require("src.core.API.MecHook")
local MecHook = ____MecHook.MecHook
____exports.MecHookArray = __TS__Class()
local MecHookArray = ____exports.MecHookArray
MecHookArray.name = "MecHookArray"
function MecHookArray.prototype.____constructor(self)
self.hooks = MemoryHandler.getEmptyArray()
self.new = function(____, cb)
local hook = __TS__New(MecHook, cb)
arrayPush(self.hooks, hook)
hook.mecHookArray = self
return hook:getId()
end
self.destroy = function(____, id)
local hook = self.hooks[id + 1]
if hook then
self.hooks[id] = nil
return true
else
return false
end
end
self.getHooks = function() return self.hooks end
end
function ____exports.CombineHooks(ha1, ha2)
local outHookArray = MemoryHandler.getEmptyArray()
if ha1 then
for ____, value in ipairs(ha1:getHooks()) do
arrayPush(outHookArray, value)
end
end
if ha2 then
for ____, value in ipairs(ha2:getHooks()) do
arrayPush(outHookArray, value)
end
end
return outHookArray
end
return ____exports
end,
["src.core.API.GeneralHooks"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MecHookArray = require("src.core.API.MecHookArray")
local MecHookArray = ____MecHookArray.MecHookArray
____exports.hooks = {
hooks_onBeforeCreateMonsterUnit = __TS__New(MecHookArray),
hooks_onAfterCreateMonsterUnit = __TS__New(MecHookArray)
}
return ____exports
end,
["src.core.04_STRUCTURES.Monster_properties.CircleMob"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local __TS__ArraySplice = ____lualib.__TS__ArraySplice
local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
local __TS__ArrayIndexOf = ____lualib.__TS__ArrayIndexOf
local __TS__ArrayForEach = ____lualib.__TS__ArrayForEach
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ForceAngleBetween0And360 = ____Basic_functions.ForceAngleBetween0And360
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____globals = require("globals")
local globals = ____globals.globals
local TIMER_PERIOD = 0.02
local DEFAULT_ROTATION_SPEED = 90
local DEFAULT_DIRECTION = "cw"
local DEFAULT_FACING = "cw"
____exports.CircleMob = __TS__Class()
local CircleMob = ____exports.CircleMob
CircleMob.name = "CircleMob"
function CircleMob.prototype.____constructor(self, triggerMob, rotationSpeed, direction, facing, radius)
self.mobs = {}
self.currentBaseAngle = 0
self.id = -1
self.circleTimer = nil
self.getTriggerMob = function() return self.triggerMob end
self.getSpeed = function() return self.rotationSpeed end
self.setSpeed = function(____, rotationSpeed)
self.rotationSpeed = rotationSpeed
end
self.getDirection = function() return self.direction end
self.setDirection = function(____, direction)
self.direction = direction
end
self.getFacing = function() return self.facing end
self.setFacing = function(____, facing)
self.facing = facing
end
self.getRadius = function() return self.radius end
self.setRadius = function(____, radius)
self.radius = radius
end
self.getBlockMobs = function()
return self.mobs
end
self.initialize = function()
local ____ = self.triggerMob.u and ShowUnit(self.triggerMob.u, false)
end
self.close = function()
end
self.redoMainMobPermanentEffect = function()
end
self.addBlockMob = function(____, monster)
if __TS__ArrayIncludes(
self.mobs,
monster:getId()
) then
return false
end
if monster:getId() == self.triggerMob:getId() then
return false
end
arrayPush(
self.mobs,
monster:getId()
)
monster:setCircleMobParent(self)
if not self.circleTimer then
self:activate()
end
return true
end
self.removeLastBlockMob = function()
return not not __TS__ArraySplice(self.mobs, -1, 1)
end
self.removeAllBlockMobs = function()
__TS__ArraySetLength(self.mobs, 0)
end
self.removeMob = function(____, monsterId)
__TS__ArraySplice(
self.mobs,
__TS__ArrayIndexOf(self.mobs, monsterId),
1
)
end
self.destroy = function()
self:close()
self.triggerMob:removeCircleMob()
__TS__ArrayForEach(
self:getBlockMobs(),
function(____, monsterId)
local ____table_level_monsters_get_result_2 = self.level
if ____table_level_monsters_get_result_2 ~= nil then
____table_level_monsters_get_result_2 = ____table_level_monsters_get_result_2.monsters:get(monsterId)
end
local ____table_level_monsters_get_result_createUnit_result_0 = ____table_level_monsters_get_result_2
if ____table_level_monsters_get_result_createUnit_result_0 ~= nil then
____table_level_monsters_get_result_createUnit_result_0 = ____table_level_monsters_get_result_createUnit_result_0:createUnit()
end
end
)
self:removeAllBlockMobs()
local ____table_circleTimer_destroy_result_4 = self.circleTimer
if ____table_circleTimer_destroy_result_4 ~= nil then
____table_circleTimer_destroy_result_4 = ____table_circleTimer_destroy_result_4:destroy()
end
local ____ = self.triggerMob.u and ShowUnit(self.triggerMob.u, true)
local ____ = self.level and self.level.circleMobs:removeCircleMob(self.id)
end
self.activate = function()
local ____table_circleTimer_destroy_result_6 = self.circleTimer
if ____table_circleTimer_destroy_result_6 ~= nil then
____table_circleTimer_destroy_result_6 = ____table_circleTimer_destroy_result_6:destroy()
end
self:initialize()
local directionReal = self.direction == "ccw" and 1 or -1
self.circleTimer = createTimer(
TIMER_PERIOD,
true,
function()
if not self.triggerMob.u then
return
end
local centerX = GetUnitX(self.triggerMob.u)
local centerY = GetUnitY(self.triggerMob.u)
local mobCount = #self.mobs
local angleDiff = 360 / I2R(mobCount)
local angle = self.currentBaseAngle
for ____, monsterId in ipairs(self.mobs) do
local ____table_level_monsters_get_result_8 = self.level
if ____table_level_monsters_get_result_8 ~= nil then
____table_level_monsters_get_result_8 = ____table_level_monsters_get_result_8.monsters:get(monsterId)
end
local mob = ____table_level_monsters_get_result_8
local ____mob_u_10 = mob
if ____mob_u_10 ~= nil then
____mob_u_10 = ____mob_u_10.u
end
if ____mob_u_10 then
local unitX = centerX + self.radius * CosBJ(angle)
local unitY = centerY + self.radius * SinBJ(angle)
local facingAngle = angle + 90 * directionReal
if globals.MAP_MIN_X <= unitX and globals.MAP_MAX_X >= unitX then
SetUnitX(mob.u, unitX)
end
if globals.MAP_MIN_Y <= unitY and globals.MAP_MAX_Y >= unitY then
SetUnitY(mob.u, unitY)
end
BlzSetUnitFacingEx(mob.u, facingAngle)
end
angle = angle + angleDiff
end
self.currentBaseAngle = ForceAngleBetween0And360(self.currentBaseAngle + directionReal * self.rotationSpeed * TIMER_PERIOD)
end
)
end
self.toJson = function()
local blockMobIds = {}
for ____, monsterId in ipairs(self.mobs) do
local ____table_level_monsters_get_result_14 = self.level
if ____table_level_monsters_get_result_14 ~= nil then
____table_level_monsters_get_result_14 = ____table_level_monsters_get_result_14.monsters:get(monsterId)
end
local ____table_level_monsters_get_result_isDeleted_result_12 = ____table_level_monsters_get_result_14
if ____table_level_monsters_get_result_isDeleted_result_12 ~= nil then
____table_level_monsters_get_result_isDeleted_result_12 = ____table_level_monsters_get_result_isDeleted_result_12:isDeleted()
end
if not ____table_level_monsters_get_result_isDeleted_result_12 then
arrayPush(blockMobIds, monsterId)
end
end
local output = MemoryHandler.getEmptyObject()
output.id = self.id
output.mainMobId = self.triggerMob.id
output.blockMobsIds = blockMobIds
output.rotationSpeed = self.rotationSpeed
output.direction = self.direction
output.facing = self.facing
output.radius = self.radius
return output
end
self.triggerMob = triggerMob
triggerMob:setCircleMob(self)
self.rotationSpeed = rotationSpeed or DEFAULT_ROTATION_SPEED
self.direction = direction or DEFAULT_DIRECTION
self.facing = facing or DEFAULT_FACING
self.radius = radius
end
return ____exports
end,
["src.core.04_STRUCTURES.Monster.Monster_functions"] = function(...)
local ____exports = {}
local ____ThemeUtils = require("src.Utils.ThemeUtils")
local ThemeUtils = ____ThemeUtils.ThemeUtils
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local GetCurrentMonsterPlayer = ____Basic_functions.GetCurrentMonsterPlayer
local ____Constants = require("src.core.01_libraries.Constants")
local ENNEMY_PLAYER = ____Constants.ENNEMY_PLAYER
local MOBS_VARIOUS_COLORS = ____Constants.MOBS_VARIOUS_COLORS
local ____Monster = require("src.core.04_STRUCTURES.Monster.Monster")
local Monster = ____Monster.Monster
local monster
local ATTACK_SKILL = FourCC("Aatk")
local ABILITY_1_LIFE = FourCC("ABV1")
local ABILITY_10_LIFE = FourCC("ABV2")
local ABILITY_100_LIFE = FourCC("ABV3")
local ABILITY_1000_LIFE = FourCC("ABV4")
local ABILITY_10000_LIFE = FourCC("ABV5")
local ABILITY_ANNULER_VISION = FourCC("A0AV")
local ABILITY_FORME_CORBEAU = FourCC("Amrf")
____exports.UnitAddRemoveLifeAbility = function(u, lifeAbility)
UnitAddAbility(u, lifeAbility)
SetUnitAbilityLevel(u, lifeAbility, 2)
UnitRemoveAbility(u, lifeAbility)
end
____exports.UnitAddMaxLife = function(u, lifeToAdd)
while true do
if lifeToAdd <= 0 then
break
end
if lifeToAdd >= 10000 then
____exports.UnitAddRemoveLifeAbility(u, ABILITY_10000_LIFE)
lifeToAdd = lifeToAdd - 10000
else
if lifeToAdd >= 1000 then
____exports.UnitAddRemoveLifeAbility(u, ABILITY_1000_LIFE)
lifeToAdd = lifeToAdd - 1000
else
if lifeToAdd >= 100 then
____exports.UnitAddRemoveLifeAbility(u, ABILITY_100_LIFE)
lifeToAdd = lifeToAdd - 100
else
if lifeToAdd >= 10 then
____exports.UnitAddRemoveLifeAbility(u, ABILITY_10_LIFE)
lifeToAdd = lifeToAdd - 10
else
____exports.UnitAddRemoveLifeAbility(u, ABILITY_1_LIFE)
lifeToAdd = lifeToAdd - 1
end
end
end
end
end
end
____exports.SetUnitMaxLife = function(u, newMaxLife)
local maxLife = R2I(GetUnitState(u, UNIT_STATE_MAX_LIFE))
if newMaxLife <= maxLife then
return false
end
____exports.UnitAddMaxLife(u, newMaxLife - maxLife)
return true
end
____exports.NewImmobileMonsterForPlayer = function(mt, p, x, y, angle)
local unitTypeId = mt:getUnitTypeId()
if Monster.forceUnitTypeIdForNextMonster > 0 then
unitTypeId = Monster.forceUnitTypeIdForNextMonster
Monster.forceUnitTypeIdForNextMonster = 0
end
if Monster.forceXforNextMonster ~= 0 then
x = Monster.forceXforNextMonster
Monster.forceXforNextMonster = 0
end
if Monster.forceYforNextMonster ~= 0 then
y = Monster.forceYforNextMonster
Monster.forceYforNextMonster = 0
end
local themeMonsterType = ThemeUtils.getRandomAvailableMonsterType()
if themeMonsterType then
unitTypeId = themeMonsterType:getUnitTypeId()
mt = themeMonsterType
end
local scale
if angle == -1 then
monster = CreateUnit(
p,
unitTypeId,
x,
y,
GetRandomDirectionDeg()
)
else
monster = CreateUnit(
p,
unitTypeId,
x,
y,
angle
)
end
SetUnitUseFood(monster, false)
if mt:isClickable() then
____exports.SetUnitMaxLife(
monster,
mt:getMaxLife()
)
else
UnitAddAbility(
monster,
FourCC("Aloc")
)
UnitAddAbility(monster, ABILITY_ANNULER_VISION)
end
local immoSkill = mt:getImmolationSkill() or 0
local ____ = immoSkill > 0 and UnitAddAbility(monster, immoSkill)
scale = mt:getScale()
if scale ~= -1 then
SetUnitScale(monster, scale, scale, scale)
end
SetUnitMoveSpeed(
monster,
mt:getUnitMoveSpeed()
)
if not MOBS_VARIOUS_COLORS then
SetUnitColor(
monster,
ConvertPlayerColor(24)
)
end
UnitRemoveAbility(monster, ATTACK_SKILL)
UnitRemoveType(monster, UNIT_TYPE_PEON)
if mt:getHeight() ~= -1 then
UnitAddAbility(monster, ABILITY_FORME_CORBEAU)
SetUnitFlyHeight(
monster,
mt:getHeight(),
0
)
end
return monster
end
____exports.NewImmobileMonster = function(mt, x, y, angle)
local p
if mt:isClickable() then
p = ENNEMY_PLAYER
else
p = GetCurrentMonsterPlayer()
end
return ____exports.NewImmobileMonsterForPlayer(
mt,
p,
x,
y,
angle
)
end
____exports.NewPatrolMonster = function(mt, x1, y1, x2, y2)
x1 = Monster.forceX1forNextMonster ~= 0 and Monster.forceX1forNextMonster or x1
x2 = Monster.forceX2forNextMonster ~= 0 and Monster.forceX2forNextMonster or x2
y1 = Monster.forceY1forNextMonster ~= 0 and Monster.forceY1forNextMonster or y1
y2 = Monster.forceY2forNextMonster ~= 0 and Monster.forceY2forNextMonster or y2
Monster.forceX1forNextMonster = 0
Monster.forceX2forNextMonster = 0
Monster.forceY1forNextMonster = 0
Monster.forceY2forNextMonster = 0
local angle = bj_RADTODEG * Atan2(y1 - y2, x1 - x2)
monster = ____exports.NewImmobileMonster(mt, x1, y1, angle)
IssuePointOrder(monster, "patrol", x2, y2)
return monster
end
return ____exports
end,
["src.core.04_STRUCTURES.Caster.CasterShot"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
local ____globals = require("globals")
local globals = ____globals.globals
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local ____Monster_functions = require("src.core.04_STRUCTURES.Monster.Monster_functions")
local NewImmobileMonster = ____Monster_functions.NewImmobileMonster
local PERIOD = 0.01
____exports.CasterShot = __TS__Class()
local CasterShot = ____exports.CasterShot
CasterShot.name = "CasterShot"
function CasterShot.prototype.____constructor(self, monsterType, Xdep, Ydep, angle, speed, portee)
self.destroy = function()
RemoveUnit(self.unite)
self.unite = nil
self.trig:destroy()
self.trig = nil
end
self.x = Xdep
self.y = Ydep
self.diffX = speed * CosBJ(angle) * PERIOD
self.diffY = speed * SinBJ(angle) * PERIOD
self.nbTeleportationsRestantes = R2I(portee / speed / PERIOD)
self.unite = NewImmobileMonster(monsterType, Xdep, Ydep, angle)
local shot = self
self.trig = createTimer(
PERIOD,
true,
function()
shot.x = shot.x + shot.diffX
shot.y = shot.y + shot.diffY
if shot.x >= globals.MAP_MIN_X and shot.x <= globals.MAP_MAX_X then
SetUnitX(shot.unite, shot.x)
end
if shot.y >= globals.MAP_MIN_Y and shot.y <= globals.MAP_MAX_Y then
SetUnitY(shot.unite, shot.y)
end
shot.nbTeleportationsRestantes = shot.nbTeleportationsRestantes - 1
if shot.nbTeleportationsRestantes == 0 then
shot:destroy()
end
end
)
end
return ____exports
end,
["src.core.04_STRUCTURES.Caster.CasterType"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local TEAL = ____Constants.TEAL
local TERRAIN_DATA_DISPLAY_TIME = ____Constants.TERRAIN_DATA_DISPLAY_TIME
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgLevels = ____globals.getUdgLevels
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_colorCode = ____Init_colorCodes.udg_colorCode
____exports.DEFAULT_CASTER_PROJECTILE_SPEED = 600
____exports.MIN_CASTER_PROJECTILE_SPEED = 100
____exports.DEFAULT_CASTER_RANGE = 1000
____exports.MIN_CASTER_LOAD_TIME = 0.2
____exports.DEFAULT_CASTER_LOAD_TIME = 1
____exports.DEFAULT_CASTER_ANIMATION = "spell"
____exports.CasterType = __TS__Class()
local CasterType = ____exports.CasterType
CasterType.name = "CasterType"
function CasterType.prototype.____constructor(self, label, casterMonsterType, projectileMonsterType, range, projectileSpeed, loadTime, animation)
self.setLabel = function(____, label)
self.label = label
end
self.refresh = function()
local levelsMaking = {}
local levelAlreadyChecked
local nbLevelsMaking = 0
local currentLevel = getUdgLevels():getCurrentLevel()
currentLevel:refreshCastersOfType(self)
do
local i = 0
while i < NB_ESCAPERS do
local escaper = getUdgEscapers():get(i)
if escaper then
if escaper:getMakingLevel() ~= currentLevel then
levelAlreadyChecked = false
do
local j = 0
while j < nbLevelsMaking do
if escaper:getMakingLevel() == levelsMaking[j + 1] then
levelAlreadyChecked = true
break
end
j = j + 1
end
end
if not levelAlreadyChecked then
levelsMaking[nbLevelsMaking + 1] = escaper:getMakingLevel()
nbLevelsMaking = nbLevelsMaking + 1
end
end
end
i = i + 1
end
end
do
local i = 0
while i < nbLevelsMaking do
levelsMaking[i + 1]:refreshCastersOfType(self)
i = i + 1
end
end
end
self.destroy = function()
getUdgLevels():removeCastersOfType(self)
end
self.getCasterMonsterType = function()
return self.casterMonsterType
end
self.setCasterMonsterType = function(____, newCasterMonsterType)
self.casterMonsterType = newCasterMonsterType
self:refresh()
end
self.getProjectileMonsterType = function()
return self.projectileMonsterType
end
self.setProjectileMonsterType = function(____, newProjectileMonsterType)
self.projectileMonsterType = newProjectileMonsterType
end
self.getRange = function()
return self.range
end
self.setRange = function(____, newRange)
if newRange <= 0 then
return false
end
self.range = newRange
return true
end
self.getProjectileSpeed = function()
return self.projectileSpeed
end
self.setProjectileSpeed = function(____, newSpeed)
if newSpeed <= 0 then
return false
end
self.projectileSpeed = newSpeed
return true
end
self.getLoadTime = function()
return self.loadTime
end
self.setLoadTime = function(____, loadTime)
if loadTime < ____exports.MIN_CASTER_LOAD_TIME then
return false
end
self.loadTime = loadTime
return true
end
self.getAnimation = function()
return self.animation
end
self.setAnimation = function(____, animation)
self.animation = animation
end
self.displayForPlayer = function(____, p)
local space = " "
local aliasDisplay = self.theAlias and " " .. self.theAlias or ""
local display = ((udg_colorCode[TEAL + 1] .. self.label) .. aliasDisplay) .. " : "
display = ((((((display .. self.casterMonsterType.label) .. space) .. self.projectileMonsterType.label) .. space) .. "range: ") .. R2S(self.range)) .. space
display = ((((((display .. "projectileSpeed: ") .. R2S(self.projectileSpeed)) .. space) .. "loadTime: ") .. R2S(self.loadTime)) .. space) .. self.animation
Text.P_timed(p, TERRAIN_DATA_DISPLAY_TIME, display)
end
self.toJson = function()
local output = MemoryHandler.getEmptyObject()
output.label = self.label
output.alias = self.theAlias
output.casterMonsterTypeLabel = self.casterMonsterType.label
output.projectileMonsterTypeLabel = self.projectileMonsterType.label
output.range = self.range
output.projectileSpeed = self.projectileSpeed
output.loadTime = self.loadTime
output.animation = self.animation
return output
end
if range <= 0 or projectileSpeed <= 0 then
error("CasterType: range and projectileSpeed must be positive", 0)
end
self.label = label
self.casterMonsterType = casterMonsterType
self.projectileMonsterType = projectileMonsterType
self.range = range
self.projectileSpeed = projectileSpeed
self.loadTime = loadTime
self.animation = animation
end
function CasterType.prototype.setAlias(self, theAlias)
self.theAlias = theAlias
return self
end
return ____exports
end,
["src.core.04_STRUCTURES.Caster.Caster"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__Delete = ____lualib.__TS__Delete
local Map = ____lualib.Map
local ____exports = {}
local errorHandlerCasterTryToShoot
local ____mapUtils = require("src.Utils.mapUtils")
local errorHandler = ____mapUtils.errorHandler
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsOnGround = ____Basic_functions.IsOnGround
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local ____Monster = require("src.core.04_STRUCTURES.Monster.Monster")
local Monster = ____Monster.Monster
local ____Monster_functions = require("src.core.04_STRUCTURES.Monster.Monster_functions")
local NewImmobileMonster = ____Monster_functions.NewImmobileMonster
local ____CasterShot = require("src.core.04_STRUCTURES.Caster.CasterShot")
local CasterShot = ____CasterShot.CasterShot
local escaper
local caster
local PRECISION_TIR = 40
local PRECISION_DIFF_POS_HERO = 20
local ECART_CHECK = 0.05
local x1
local y1
local angleSlider
local sliderSpeed
local x2
local y2
local x3
local y3
local k1
local k2
local Xk1
local Yk1
local Xk2
local Yk2
local XintersectionDevantHeros
local YintersectionDevantHeros
local function CalculerPointsIntersections()
if caster then
local decalSurX = 50
local a
local b
local c
local discriminant
local hero = escaper:getHero()
if not hero then
return
end
if sliderSpeed >= 0 then
angleSlider = GetUnitFacing(hero)
else
angleSlider = GetUnitFacing(hero) + 180
end
x2 = x1 + decalSurX
y2 = y1 + TanBJ(angleSlider) * decalSurX
a = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)
b = 2 * ((x2 - x1) * (x1 - x3) + (y2 - y1) * (y1 - y3))
c = x3 * x3 + y3 * y3 + x1 * x1 + y1 * y1 - 2 * (x3 * x1 + y3 * y1) - caster:getRange() * caster:getRange()
discriminant = b * b - 4 * a * c
if discriminant < 0 then
k1 = 0
k2 = 0
else
k1 = (-b + SquareRoot(b * b - 4 * a * c)) / (2 * a)
Xk1 = x1 + k1 * (x2 - x1)
Yk1 = y1 + k1 * (y2 - y1)
k2 = (-b - SquareRoot(b * b - 4 * a * c)) / (2 * a)
Xk2 = x1 + k2 * (x2 - x1)
Yk2 = y1 + k2 * (y2 - y1)
end
end
end
local function TrouverTempsIdeal(tempsMax)
local tempsIdeal = 0
if caster then
local diffTemps = PRECISION_DIFF_POS_HERO / sliderSpeed
local temps = 0
local xHero
local yHero
local xBoule
local yBoule
local angleBouleHero
local distHeroBoule
local distHeroBouleMin = 99999999999
while true do
if temps >= tempsMax then
break
end
xHero = x1 + sliderSpeed * CosBJ(angleSlider) * temps
yHero = y1 + sliderSpeed * SinBJ(angleSlider) * temps
angleBouleHero = Atan2BJ(yHero - y3, xHero - x3)
xBoule = x3 + caster:getProjectileSpeed() * CosBJ(angleBouleHero) * temps
yBoule = y3 + caster:getProjectileSpeed() * SinBJ(angleBouleHero) * temps
distHeroBoule = SquareRoot((xHero - xBoule) * (xHero - xBoule) + (yHero - yBoule) * (yHero - yBoule))
if distHeroBoule < distHeroBouleMin then
distHeroBouleMin = distHeroBoule
tempsIdeal = temps
end
temps = temps + diffTemps
end
if distHeroBouleMin > PRECISION_TIR then
tempsIdeal = -1
end
end
return tempsIdeal
end
local function CasterTryToShoot()
local xHero = 0
local yHero = 0
local tempsMax
local tempsIdeal
local angleDeTir
local sensPoint1positif
local sensPoint2positif
local tempsPoint1
local tempsPoint2
local escapersToShoot = {}
local nbRemainingEscapersToShoot
local i
local tirOk = false
local estShootable
local numEscaper
caster = ____exports.Caster.anyTimerId2Caster:get(GetHandleId(GetExpiredTimer()))
if not caster or not caster.u then
return
end
i = 0
while i < caster.nbEscapersInRange do
escapersToShoot[i + 1] = caster.escapersInRange[i + 1]
i = i + 1
end
nbRemainingEscapersToShoot = caster.nbEscapersInRange
while not tirOk and nbRemainingEscapersToShoot > 0 do
numEscaper = GetRandomInt(0, nbRemainingEscapersToShoot - 1)
escaper = escapersToShoot[numEscaper + 1]
local hero = escaper:getHero()
if hero then
estShootable = false
if escaper:isAlive() then
x1 = GetUnitX(hero)
y1 = GetUnitY(hero)
x3 = caster:getX()
y3 = caster:getY()
estShootable = SquareRoot((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3)) <= caster:getRange()
end
if not estShootable then
caster:escaperOutOfRangeOrDead(escaper)
i = numEscaper
while i ~= nbRemainingEscapersToShoot - 1 do
escapersToShoot[i + 1] = escapersToShoot[i + 1 + 1]
i = i + 1
end
nbRemainingEscapersToShoot = nbRemainingEscapersToShoot - 1
else
if escaper:isSliding() then
sliderSpeed = escaper:getSlideSpeed()
elseif GetUnitCurrentOrder(hero) ~= 0 then
sliderSpeed = escaper:getWalkSpeed()
else
sliderSpeed = 0
end
if sliderSpeed == 0 then
xHero = x1
yHero = y1
tirOk = true
else
CalculerPointsIntersections()
if sliderSpeed < 0 then
sliderSpeed = -sliderSpeed
end
if k1 == 0 and k2 == 0 then
return
end
if CosBJ(angleSlider) ~= 0 then
sensPoint1positif = (Xk1 - x1) * CosBJ(angleSlider) > 0
sensPoint2positif = (Xk2 - x1) * CosBJ(angleSlider) > 0
else
sensPoint1positif = (Yk1 - y1) * SinBJ(angleSlider) > 0
sensPoint2positif = (Yk2 - y1) * SinBJ(angleSlider) > 0
end
if sensPoint1positif == sensPoint2positif then
tempsPoint1 = SquareRoot((x1 - Xk1) * (x1 - Xk1) + (y1 - Yk1) * (y1 - Yk1)) / sliderSpeed
tempsPoint2 = SquareRoot((x1 - Xk2) * (x1 - Xk2) + (y1 - Yk2) * (y1 - Yk2)) / sliderSpeed
if tempsPoint1 > tempsPoint2 then
XintersectionDevantHeros = Xk1
YintersectionDevantHeros = Yk1
tempsMax = tempsPoint1
else
XintersectionDevantHeros = Xk2
YintersectionDevantHeros = Yk2
tempsMax = tempsPoint2
end
else
if sensPoint1positif then
XintersectionDevantHeros = Xk1
YintersectionDevantHeros = Yk1
tempsMax = SquareRoot((x1 - Xk1) * (x1 - Xk1) + (y1 - Yk1) * (y1 - Yk1)) / sliderSpeed
else
XintersectionDevantHeros = Xk2
YintersectionDevantHeros = Yk2
tempsMax = SquareRoot((x1 - Xk2) * (x1 - Xk2) + (y1 - Yk2) * (y1 - Yk2)) / sliderSpeed
end
end
if IsOnGround(hero) then
tempsIdeal = TrouverTempsIdeal(tempsMax)
else
tempsIdeal = -1
end
if tempsIdeal ~= -1 then
xHero = x1 + sliderSpeed * CosBJ(angleSlider) * tempsIdeal
yHero = y1 + sliderSpeed * SinBJ(angleSlider) * tempsIdeal
tirOk = true
end
end
if tirOk then
if caster:isEnabled() then
angleDeTir = Atan2BJ(yHero - y3, xHero - x3)
SetUnitFacing(caster.u, angleDeTir)
SetUnitAnimation(
caster.u,
caster:getAnimation()
)
__TS__New(
CasterShot,
caster:getProjectileMonsterType(),
x3,
y3,
angleDeTir,
caster:getProjectileSpeed(),
caster:getRange()
)
end
else
i = numEscaper
while i ~= nbRemainingEscapersToShoot - 1 do
escapersToShoot[i + 1] = escapersToShoot[i + 1 + 1]
i = i + 1
end
nbRemainingEscapersToShoot = nbRemainingEscapersToShoot - 1
tirOk = false
end
end
end
end
if tirOk then
local ____ = caster.t and TimerStart(
caster.t,
caster:getLoadTime(),
false,
errorHandlerCasterTryToShoot
)
caster.canShoot = false
elseif caster.nbEscapersInRange == 0 then
caster.canShoot = true
else
local ____ = caster.t and TimerStart(caster.t, ECART_CHECK, false, errorHandlerCasterTryToShoot)
end
end
errorHandlerCasterTryToShoot = errorHandler(CasterTryToShoot)
____exports.CasterUnitWithinRange_Actions = function()
local escaperInRange = Hero2Escaper(GetTriggerUnit())
if not escaperInRange then
return
end
local caster = ____exports.Caster.anyTriggerWithinRangeId2Caster:get(GetHandleId(GetTriggeringTrigger()))
if caster then
caster.escapersInRange[caster.nbEscapersInRange + 1] = escaperInRange
caster.nbEscapersInRange = caster.nbEscapersInRange + 1
if caster.canShoot then
local ____ = caster.t and TimerStart(caster.t, 0, false, errorHandlerCasterTryToShoot)
end
end
end
--- Caster class
____exports.Caster = __TS__Class()
local Caster = ____exports.Caster
Caster.name = "Caster"
__TS__ClassExtends(Caster, Monster)
function Caster.prototype.____constructor(self, casterType, x, y, angle, forceId)
if forceId == nil then
forceId = nil
end
Monster.prototype.____constructor(self, nil, forceId)
self.escapersInRange = {}
self.isEnabled = function()
return self.enabled
end
self.getX = function()
return self.x
end
self.getY = function()
return self.y
end
self.getRange = function()
return self.casterType:getRange()
end
self.getProjectileSpeed = function()
return self.casterType:getProjectileSpeed()
end
self.getCasterUnit = function()
return self.u
end
self.getProjectileMonsterType = function()
return self.casterType:getProjectileMonsterType()
end
self.getLoadTime = function()
return self.casterType:getLoadTime()
end
self.getCasterType = function()
return self.casterType
end
self.getAnimation = function()
return self.casterType:getAnimation()
end
self.createUnit = function()
self.nbEscapersInRange = 0
self.canShoot = true
Monster.prototype.createUnit(
self,
function() return NewImmobileMonster(
self.casterType:getCasterMonsterType(),
self.x,
self.y,
self.angle
) end
)
self.trg_unitWithinRange = CreateTrigger()
local ____ = self.u and TriggerRegisterUnitInRangeSimple(
self.trg_unitWithinRange,
self.casterType:getRange(),
self.u
)
TriggerAddAction(
self.trg_unitWithinRange,
errorHandler(____exports.CasterUnitWithinRange_Actions)
)
____exports.Caster.anyTriggerWithinRangeId2Caster:set(
GetHandleId(self.trg_unitWithinRange),
self
)
self.t = CreateTimer()
____exports.Caster.anyTimerId2Caster:set(
GetHandleId(self.t),
self
)
self.enabled = true
end
self.destroyTriggers = function()
if self.trg_unitWithinRange then
____exports.Caster.anyTriggerWithinRangeId2Caster:delete(GetHandleId(self.trg_unitWithinRange))
DestroyTrigger(self.trg_unitWithinRange)
__TS__Delete(self, "trg_unitWithinRange")
end
if self.t then
____exports.Caster.anyTimerId2Caster:delete(GetHandleId(self.t))
DestroyTimer(self.t)
__TS__Delete(self, "t")
end
end
self.removeUnit = function()
Monster.prototype.removeUnit(self)
self:destroyTriggers()
end
self.killUnit = function()
local ____ = self.u and KillUnit(self.u)
self:destroyTriggers()
end
self.refresh = function()
if self.u then
self:removeUnit()
self:createUnit()
end
end
self.destroy = function()
Monster.prototype.destroy(self)
self:destroyTriggers()
end
self.escaperOutOfRangeOrDead = function(____, escaper)
local i = 0
while escaper ~= self.escapersInRange[i + 1] and i ~= self.nbEscapersInRange do
i = i + 1
end
if i < self.nbEscapersInRange then
while i ~= self.nbEscapersInRange - 1 do
self.escapersInRange[i + 1] = self.escapersInRange[i + 1 + 1]
i = i + 1
end
self.nbEscapersInRange = self.nbEscapersInRange - 1
end
end
self.casterType = casterType
self.x = x
self.y = y
self.angle = angle
self.nbEscapersInRange = 0
self.canShoot = true
self.enabled = false
end
function Caster.prototype.toJson(self)
local output = Monster.prototype.toJson(self)
if output then
do
do
do
output.casterTypeLabel = self.casterType.label
output.x = R2I(self.x)
end
output.y = R2I(self.y)
end
output.angle = R2I(self.angle)
end
end
return output
end
Caster.anyTriggerWithinRangeId2Caster = __TS__New(Map)
Caster.anyTimerId2Caster = __TS__New(Map)
return ____exports
end,
["src.core.04_STRUCTURES.Monster.MonsterNoMove"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local ____exports = {}
local ____globals = require("globals")
local udg_monsters = ____globals.udg_monsters
local ____Monster = require("src.core.04_STRUCTURES.Monster.Monster")
local Monster = ____Monster.Monster
local ____Monster_functions = require("src.core.04_STRUCTURES.Monster.Monster_functions")
local NewImmobileMonster = ____Monster_functions.NewImmobileMonster
____exports.MonsterNoMove = __TS__Class()
local MonsterNoMove = ____exports.MonsterNoMove
MonsterNoMove.name = "MonsterNoMove"
__TS__ClassExtends(MonsterNoMove, Monster)
function MonsterNoMove.prototype.____constructor(self, mt, x, y, angle, forceId)
if forceId == nil then
forceId = nil
end
Monster.prototype.____constructor(self, mt, forceId)
self.createUnit = function()
Monster.prototype.createUnit(
self,
function() return self.mt and NewImmobileMonster(self.mt, self.x, self.y, self.angle) or nil end
)
end
self.x = x
self.y = y
self.angle = angle
end
function MonsterNoMove.prototype.toJson(self)
local output = Monster.prototype.toJson(self)
if output then
output.x = R2I(self.x)
output.y = R2I(self.y)
output.angle = R2I(self.angle)
end
return output
end
MonsterNoMove.count = function()
local n = 0
for _, monster in pairs(udg_monsters) do
if __TS__InstanceOf(monster, ____exports.MonsterNoMove) then
n = n + 1
end
end
return n
end
return ____exports
end,
["src.core.04_STRUCTURES.Monster.MonsterSimplePatrol"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local simplePatrolMobs
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local ____globals = require("globals")
local udg_monsters = ____globals.udg_monsters
local ____Monster = require("src.core.04_STRUCTURES.Monster.Monster")
local Monster = ____Monster.Monster
local ____MonsterMultiplePatrols = require("src.core.04_STRUCTURES.Monster.MonsterMultiplePatrols")
local MonsterMultiplePatrols = ____MonsterMultiplePatrols.MonsterMultiplePatrols
local ____Monster_functions = require("src.core.04_STRUCTURES.Monster.Monster_functions")
local NewPatrolMonster = ____Monster_functions.NewPatrolMonster
____exports.initMonsterSimplePatrol = function()
simplePatrolMobs = CreateGroup()
local checkSimplePatrolMobsPeriod = 5
local function CheckSimplePatrolMobsEnum()
if GetUnitCurrentOrder(GetEnumUnit()) == 0 then
udg_monsters[GetUnitUserData(GetEnumUnit())]:createUnit()
end
end
local function CheckSimplePatrolMobs_Actions()
ForGroup(simplePatrolMobs, CheckSimplePatrolMobsEnum)
end
local function Init_MonsterSimplePatrol()
createTimer(checkSimplePatrolMobsPeriod, true, CheckSimplePatrolMobs_Actions)
end
Init_MonsterSimplePatrol()
end
____exports.MonsterSimplePatrol = __TS__Class()
local MonsterSimplePatrol = ____exports.MonsterSimplePatrol
MonsterSimplePatrol.name = "MonsterSimplePatrol"
__TS__ClassExtends(MonsterSimplePatrol, Monster)
function MonsterSimplePatrol.prototype.____constructor(self, mt, x1, y1, x2, y2, forceId)
if forceId == nil then
forceId = nil
end
Monster.prototype.____constructor(self, mt, forceId)
self.killUnit = function()
if self.u and IsUnitAliveBJ(self.u) then
GroupRemoveUnit(simplePatrolMobs, self.u)
Monster.prototype.killUnit(self)
end
end
self.createUnit = function()
Monster.prototype.createUnit(
self,
function() return self.mt and NewPatrolMonster(
self.mt,
self.x1,
self.y1,
self.x2,
self.y2
) or nil end
)
local ____ = self.u and GroupAddUnit(simplePatrolMobs, self.u)
end
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
end
function MonsterSimplePatrol.prototype.removeUnit(self)
if self.u then
GroupRemoveUnit(simplePatrolMobs, self.u)
Monster.prototype.removeUnit(self)
end
end
function MonsterSimplePatrol.prototype.toJson(self)
local output = Monster.prototype.toJson(self)
if output then
output.x1 = R2I(self.x1)
output.y1 = R2I(self.y1)
output.x2 = R2I(self.x2)
output.y2 = R2I(self.y2)
end
return output
end
MonsterSimplePatrol.count = function()
local n = 0
for _, monster in pairs(udg_monsters) do
if __TS__InstanceOf(monster, ____exports.MonsterSimplePatrol) then
n = n + 1
end
end
return n
end
____exports.createMonsterSmartPatrol = function(mt, x1, y1, x2, y2, forceId)
if forceId == nil then
forceId = nil
end
local maxDistance = math.sqrt(math.abs(x1 - x2) ^ 2 + math.abs(y1 - y2) ^ 2)
local maxTiles = 6 * 128
if maxDistance < maxTiles then
return __TS__New(
____exports.MonsterSimplePatrol,
mt,
x1,
y1,
x2,
y2,
forceId
)
else
local amountOfPatrols = math.ceil(maxDistance / maxTiles)
local dx = (x1 - x2) / amountOfPatrols
local dy = (y1 - y2) / amountOfPatrols
MonsterMultiplePatrols:destroyLocs()
do
local i = 0
while i <= amountOfPatrols do
local ddx = i * dx
local ddy = i * dy
MonsterMultiplePatrols:storeNewLoc(x1 - ddx, y1 - ddy)
i = i + 1
end
end
return __TS__New(MonsterMultiplePatrols, mt, "string", forceId)
end
end
return ____exports
end,
["src.core.04_STRUCTURES.Monster.Monster_count"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local ____exports = {}
local ____MonsterMultiplePatrols = require("src.core.04_STRUCTURES.Monster.MonsterMultiplePatrols")
local MonsterMultiplePatrols = ____MonsterMultiplePatrols.MonsterMultiplePatrols
local ____MonsterNoMove = require("src.core.04_STRUCTURES.Monster.MonsterNoMove")
local MonsterNoMove = ____MonsterNoMove.MonsterNoMove
local ____MonsterSimplePatrol = require("src.core.04_STRUCTURES.Monster.MonsterSimplePatrol")
local MonsterSimplePatrol = ____MonsterSimplePatrol.MonsterSimplePatrol
____exports.countMonstersAccordingToMode = function(monsters, mode)
if not mode then
mode = "all"
end
local n = 0
for _, monster in pairs(monsters) do
if mode == "all" then
n = n + 1
elseif mode == "moving" and (__TS__InstanceOf(monster, MonsterSimplePatrol) or __TS__InstanceOf(monster, MonsterMultiplePatrols)) then
n = n + 1
elseif mode == "not moving" and __TS__InstanceOf(monster, MonsterNoMove) then
n = n + 1
end
end
return n
end
return ____exports
end,
["src.core.04_STRUCTURES.Monster.MonsterArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__Delete = ____lualib.__TS__Delete
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsUnitBetweenLocs = ____Basic_functions.IsUnitBetweenLocs
local arrayPush = ____Basic_functions.arrayPush
local ____MecHookArray = require("src.core.API.MecHookArray")
local MecHookArray = ____MecHookArray.MecHookArray
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____Caster = require("src.core.04_STRUCTURES.Caster.Caster")
local Caster = ____Caster.Caster
local ____Monster_count = require("src.core.04_STRUCTURES.Monster.Monster_count")
local countMonstersAccordingToMode = ____Monster_count.countMonstersAccordingToMode
____exports.MONSTER_NEAR_DIFF_MAX = 64
____exports.MonsterArray = __TS__Class()
local MonsterArray = ____exports.MonsterArray
MonsterArray.name = "MonsterArray"
__TS__ClassExtends(MonsterArray, BaseArray)
function MonsterArray.prototype.____constructor(self, level)
BaseArray.prototype.____constructor(self, false)
self.hooks_onBeforeCreateMonsterUnit = __TS__New(MecHookArray)
self.hooks_onAfterCreateMonsterUnit = __TS__New(MecHookArray)
self.getLevel = function()
return self.level
end
self.new = function(____, monster, createUnit)
self:_new(monster)
if createUnit then
monster:createUnit()
end
if self.level then
monster.level = self.level
end
end
self.count = function(____, mode) return countMonstersAccordingToMode(self.data, mode) end
self.removeMonster = function(____, monsterId)
__TS__Delete(self.data, monsterId)
end
self.getMonsterNear = function(____, x, y, filterMonsterClassName)
for _, monster in pairs(self.data) do
if monster and monster.u then
local xMob = GetUnitX(monster.u)
local yMob = GetUnitY(monster.u)
if not filterMonsterClassName or monster.constructor.name == filterMonsterClassName then
if RAbsBJ(x - xMob) < ____exports.MONSTER_NEAR_DIFF_MAX and RAbsBJ(y - yMob) < ____exports.MONSTER_NEAR_DIFF_MAX then
return monster
end
end
end
end
return nil
end
self.createMonstersUnits = function()
for _, monster in pairs(self.data) do
monster:createUnit()
end
end
self.removeMonstersUnits = function()
for _, monster in pairs(self.data) do
monster:removeUnit()
end
end
self.recreateMonstersUnitsOfType = function(____, mt)
for _, monster in pairs(self.data) do
if monster:getMonsterType() == mt then
monster:createUnit()
end
end
end
self.clearMonster = function(____, monsterId)
if self.data[monsterId] then
self.data[monsterId]:destroy()
__TS__Delete(self.data, monsterId)
return true
else
return false
end
end
self.clearMonstersOfType = function(____, mt)
for _, monster in pairs(self.data) do
if monster:getMonsterType() == mt then
__TS__Delete(
self.data,
monster:getId()
)
monster:destroy()
end
end
end
self.getLast = function()
local last = nil
for _, monster in pairs(self.data) do
last = monster
end
return last
end
self.removeLast = function(____, destroy)
if destroy == nil then
destroy = true
end
local last = self:getLast()
if last then
if destroy then
last:destroy()
else
last:createUnit()
end
__TS__Delete(self.data, last.id)
return true
end
return false
end
self.removeAllWithoutDestroy = function()
while self:removeLast(false) do
end
end
self.onBeforeCreateMonsterUnit = function(____, cb)
return self.hooks_onBeforeCreateMonsterUnit:new(cb)
end
self.onAfterCreateMonsterUnit = function(____, cb)
return self.hooks_onAfterCreateMonsterUnit:new(cb)
end
self.level = level
end
function MonsterArray.prototype.getMonstersBetweenLocs(self, x1, y1, x2, y2, filterMonsterClassName)
local filterMonsterClassNameArr = nil
local clearArrayAtEnd = false
if filterMonsterClassName then
if type(filterMonsterClassName) == "string" then
filterMonsterClassNameArr = MemoryHandler.getEmptyArray()
clearArrayAtEnd = true
filterMonsterClassNameArr[1] = filterMonsterClassName
else
filterMonsterClassNameArr = filterMonsterClassName
end
end
local filteredMonsters = MemoryHandler.getEmptyArray()
for _, monster in pairs(self.data) do
if monster.u then
if not filterMonsterClassNameArr or __TS__ArrayIncludes(filterMonsterClassNameArr, monster.constructor.name) then
if IsUnitBetweenLocs(
monster.u,
x1,
y1,
x2,
y2
) then
arrayPush(filteredMonsters, monster)
end
end
end
end
if clearArrayAtEnd then
local ____ = filterMonsterClassNameArr and MemoryHandler.destroyArray(filterMonsterClassNameArr)
end
return filteredMonsters
end
function MonsterArray.prototype.refreshCastersOfType(self, ct)
for _, monster in pairs(self.data) do
local ____ = __TS__InstanceOf(monster, Caster) and monster:getCasterType() == ct and monster:refresh()
end
end
function MonsterArray.prototype.removeCastersOfType(self, ct)
for _, monster in pairs(self.data) do
local ____ = __TS__InstanceOf(monster, Caster) and monster:getCasterType() == ct and monster:destroy()
end
end
function MonsterArray.prototype.containsMonster(self, monster)
for _, m in pairs(self.data) do
if m == monster then
return true
end
end
return false
end
return ____exports
end,
["src.core.04_STRUCTURES.Monster_properties.ClearMob"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__New = ____lualib.__TS__New
local __TS__Delete = ____lualib.__TS__Delete
local Map = ____lualib.Map
local ____exports = {}
local TemporarilyEnableMonster
local ____EffectUtils = require("src.Utils.EffectUtils")
local EffectUtils = ____EffectUtils.EffectUtils
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____MonsterArray = require("src.core.04_STRUCTURES.Monster.MonsterArray")
local MonsterArray = ____MonsterArray.MonsterArray
____exports.CLEAR_MOB_MAX_DURATION = 300
____exports.FRONT_MONTANT_DURATION = 0.03
local TRIGGER_MOB = 0
local TIMER_ACTIVATED = 1
local TIMER_FRONT_MONTANT = 2
local udp_currentTimer
local TRIGGER_MOB_PERMANENT_EFFECT = "Abilities\\Spells\\Orc\\StasisTrap\\StasisTotemTarget.mdl"
local function ClearMobTimerExpires()
local clearMob = ____exports.ClearMob.anyTimerActivatedId2ClearMob:get(GetHandleId(GetExpiredTimer()))
if clearMob then
clearMob:initialize()
udp_currentTimer = GetExpiredTimer()
clearMob:getBlockMobs():forAll(TemporarilyEnableMonster)
end
end
local function ClearMobFrontMontantTimerExpires()
local clearMob = ____exports.ClearMob.anyTimerFrontMontantId2ClearMob:get(GetHandleId(GetExpiredTimer()))
if clearMob then
if clearMob:isBeingActivated() then
clearMob:getTriggerMob():setVertexColor(70, 100, 70)
end
end
end
local function KillMonster(monster)
monster:killUnit()
end
local function TemporarilyDisableMonster(monster)
monster:temporarilyDisable(udp_currentTimer)
end
TemporarilyEnableMonster = function(monster)
monster:temporarilyEnable(udp_currentTimer)
end
____exports.ClearMob = __TS__Class()
local ClearMob = ____exports.ClearMob
ClearMob.name = "ClearMob"
function ClearMob.prototype.____constructor(self, triggerMob, disableDuration)
self.id = -1
self.getDisableDuration = function()
return self.disableDuration
end
self.setDisableDuration = function(____, disableDuration)
if disableDuration > ____exports.CLEAR_MOB_MAX_DURATION or disableDuration < ____exports.FRONT_MONTANT_DURATION then
return false
end
self.disableDuration = disableDuration
return true
end
self.getTriggerMob = function()
return self.triggerMob
end
self.setTriggerMob = function(____, newTriggerMob)
if not newTriggerMob or self.triggerMob == newTriggerMob then
return false
end
if self.triggerMob then
self.triggerMob:removeClearMob()
end
____exports.ClearMob.anyTriggerMob2ClearMob:delete(self.triggerMob)
____exports.ClearMob.anyTriggerMob2ClearMob:set(newTriggerMob, self)
self.triggerMob = newTriggerMob
newTriggerMob:setClearMob(self)
return true
end
self.getBlockMobs = function()
return self.blockMobs
end
self.initialize = function()
self.triggerMob:setBaseColor("blue")
self.triggerMob:setVertexColor(30, 60, 100)
if not self.triggerMobPermanentEffect and self.triggerMob.u then
self.triggerMobPermanentEffect = EffectUtils.addSpecialEffectTarget(TRIGGER_MOB_PERMANENT_EFFECT, self.triggerMob.u, "origin")
end
self.enabled = true
end
self.close = function()
if self.triggerMobPermanentEffect then
EffectUtils.destroyEffect(self.triggerMobPermanentEffect)
__TS__Delete(self, "triggerMobPermanentEffect")
end
end
self.redoTriggerMobPermanentEffect = function()
if self.triggerMobPermanentEffect then
EffectUtils.destroyEffect(self.triggerMobPermanentEffect)
__TS__Delete(self, "triggerMobPermanentEffect")
end
if self.triggerMob.u then
self.triggerMobPermanentEffect = EffectUtils.addSpecialEffectTarget(TRIGGER_MOB_PERMANENT_EFFECT, self.triggerMob.u, "origin")
end
end
self.addBlockMob = function(____, monster)
if self.blockMobs:containsMonster(monster) then
return false
end
self.blockMobs:new(monster, false)
return true
end
self.removeLastBlockMob = function()
local ____table_blockMobs_getLast_result_temporarilyEnable_result_0 = self.blockMobs:getLast()
if ____table_blockMobs_getLast_result_temporarilyEnable_result_0 ~= nil then
____table_blockMobs_getLast_result_temporarilyEnable_result_0 = ____table_blockMobs_getLast_result_temporarilyEnable_result_0:temporarilyEnable(self.timerActivated)
end
return self.blockMobs:removeLast(false)
end
self.removeAllBlockMobs = function()
udp_currentTimer = self.timerActivated
self.blockMobs:forAll(TemporarilyEnableMonster)
self.blockMobs:removeAllWithoutDestroy()
end
self.destroy = function()
____exports.ClearMob.anyTriggerMob2ClearMob:delete(self.triggerMob)
____exports.ClearMob.anyTimerActivatedId2ClearMob:delete(GetHandleId(self.timerActivated))
____exports.ClearMob.anyTimerFrontMontantId2ClearMob:delete(GetHandleId(self.timerFrontMontant))
self:close()
self.triggerMob:reinitColor()
self.triggerMob:removeClearMob()
self:removeAllBlockMobs()
DestroyTimer(self.timerActivated)
DestroyTimer(self.timerFrontMontant)
local ____ = self.level and self.level.clearMobs:removeClearMob(self.id)
end
self.isBeingActivated = function()
return TimerGetRemaining(self.timerActivated) > 0
end
self.activate = function()
if not self.enabled then
return
end
if self.disableDuration == 0 then
self.blockMobs:forAll(KillMonster)
self.enabled = false
else
udp_currentTimer = self.timerActivated
TimerStart(self.timerActivated, self.disableDuration, false, ClearMobTimerExpires)
self.blockMobs:forAll(TemporarilyDisableMonster)
TimerStart(self.timerFrontMontant, ____exports.FRONT_MONTANT_DURATION, false, ClearMobFrontMontantTimerExpires)
end
self.triggerMob:setBaseColor("green")
self.triggerMob:setVertexColor(40, 100, 40)
end
self.toJson = function()
local blockMobIds = {}
for _, monster in pairs(self.blockMobs:getAll()) do
if not monster:isDeleted() then
arrayPush(blockMobIds, monster.id)
end
end
local output = MemoryHandler.getEmptyObject()
output.id = self.id
output.triggerMobId = self.triggerMob.id
output.disableDuration = self.disableDuration
output.blockMobsIds = blockMobIds
return output
end
if disableDuration ~= 0 and (disableDuration > ____exports.CLEAR_MOB_MAX_DURATION or disableDuration < ____exports.FRONT_MONTANT_DURATION) then
error(self.constructor.name .. " : wrong disable duration", 0)
end
self.triggerMob = triggerMob
triggerMob:setClearMob(self)
self.disableDuration = disableDuration
self.timerActivated = CreateTimer()
self.timerFrontMontant = CreateTimer()
self.enabled = true
____exports.ClearMob.anyTriggerMob2ClearMob:set(triggerMob, self)
____exports.ClearMob.anyTimerActivatedId2ClearMob:set(
GetHandleId(self.timerActivated),
self
)
____exports.ClearMob.anyTimerFrontMontantId2ClearMob:set(
GetHandleId(self.timerFrontMontant),
self
)
self.blockMobs = __TS__New(MonsterArray)
end
ClearMob.anyTimerFrontMontantId2ClearMob = __TS__New(Map)
ClearMob.anyTimerActivatedId2ClearMob = __TS__New(Map)
ClearMob.anyTriggerMob2ClearMob = __TS__New(Map)
return ____exports
end,
["src.core.04_STRUCTURES.Monster_properties.PortalMob"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ArrayForEach = ____lualib.__TS__ArrayForEach
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local StopUnit = ____Basic_functions.StopUnit
____exports.PORTAL_MOB_MAX_FREEZE_DURATION = 10
____exports.PortalMob = __TS__Class()
local PortalMob = ____exports.PortalMob
PortalMob.name = "PortalMob"
function PortalMob.prototype.____constructor(self, triggerMob, freezeDuration, portalEffect, portalEffectDuration)
self.id = -1
self.timers = MemoryHandler.getEmptyArray()
self.getTriggerMob = function() return self.triggerMob end
self.getTargetMob = function() return self.targetMob end
self.initialize = function()
end
self.close = function()
end
self.redoTriggerMobPermanentEffect = function()
end
self.setTriggerMob = function(____, monster)
if self.triggerMob then
return false
end
self.triggerMob = monster
local ____table_triggerMob_setPortalMob_result_0 = self.triggerMob
if ____table_triggerMob_setPortalMob_result_0 ~= nil then
____table_triggerMob_setPortalMob_result_0 = ____table_triggerMob_setPortalMob_result_0:setPortalMob(self)
end
return true
end
self.setTargetMob = function(____, monster)
if self.targetMob then
return false
end
self.targetMob = monster
local ____table_targetMob_setPortalMob_result_2 = self.targetMob
if ____table_targetMob_setPortalMob_result_2 ~= nil then
____table_targetMob_setPortalMob_result_2 = ____table_targetMob_setPortalMob_result_2:setPortalMob(self)
end
return true
end
self.getFreezeDuration = function() return self.freezeDuration end
self.setFreezeDuration = function(____, freezeDuration)
if freezeDuration < 0 or freezeDuration > ____exports.PORTAL_MOB_MAX_FREEZE_DURATION then
error(self.constructor.name .. " : invalid freeze duration", 0)
end
self.freezeDuration = freezeDuration
end
self.getPortalEffect = function() return self.portalEffect end
self.setPortalEffect = function(____, portalEffect)
self.portalEffect = portalEffect
end
self.getPortalEffectDuration = function() return self.portalEffectDuration end
self.setPortalEffectDuration = function(____, portalEffectDuration)
self.portalEffectDuration = portalEffectDuration or self.freezeDuration or 1
end
self.destroy = function()
local ____table_triggerMob_removePortalMob_result_4 = self.triggerMob
if ____table_triggerMob_removePortalMob_result_4 ~= nil then
____table_triggerMob_removePortalMob_result_4 = ____table_triggerMob_removePortalMob_result_4:removePortalMob()
end
local ____table_targetMob_removePortalMob_result_6 = self.targetMob
if ____table_targetMob_removePortalMob_result_6 ~= nil then
____table_targetMob_removePortalMob_result_6 = ____table_targetMob_removePortalMob_result_6:removePortalMob()
end
local ____ = self.level and self.level.portalMobs:removePortalMob(self.id)
__TS__ArrayForEach(
self.timers,
function(____, t) return t:destroy() end
)
MemoryHandler.destroyArray(self.timers)
end
self.activate = function(____, monster, escaper, hero)
if not self.targetMob or escaper:isPortalCooldown() then
return
end
local targetMob = self.triggerMob == monster and self.targetMob or self.triggerMob
local ____targetMob_u_8 = targetMob
if ____targetMob_u_8 ~= nil then
____targetMob_u_8 = ____targetMob_u_8.u
end
if not ____targetMob_u_8 then
return
end
StopUnit(hero)
escaper:moveHero(
GetUnitX(targetMob.u),
GetUnitY(targetMob.u)
)
SetUnitFlyHeight(
hero,
GetUnitFlyHeight(targetMob.u),
0
)
escaper:setLastZ(BlzGetUnitZ(hero))
escaper:setOldDiffZ(0)
escaper:setSpeedZ(0)
escaper:enablePortalCooldown()
local ____ = self.portalEffect and escaper:createPortalEffect(self.portalEffect)
if self.freezeDuration > 0 then
SetUnitAnimation(hero, "channel")
escaper:absoluteSlideSpeed(0)
escaper:setCanClick(false)
local ____self_timers_10 = self.timers
____self_timers_10[#____self_timers_10 + 1] = createTimer(
self.freezeDuration,
false,
function()
escaper:stopAbsoluteSlideSpeed()
escaper:setCanClick(true)
SetUnitAnimation(hero, "stand")
escaper:disablePortalCooldown(0.5)
end
)
else
escaper:disablePortalCooldown(0.5)
end
local ____self_portalEffect_13 = self.portalEffect
if ____self_portalEffect_13 then
local ____self_timers_11 = self.timers
local ____temp_12 = #____self_timers_11 + 1
____self_timers_11[____temp_12] = createTimer(
self.portalEffectDuration,
false,
function()
escaper:destroyPortalEffect()
end
)
____self_portalEffect_13 = ____temp_12
end
if escaper.panCameraOnPortal then
escaper:moveCameraToHeroIfNecessary()
end
end
self.toJson = function()
local output = MemoryHandler.getEmptyObject()
output.id = self.id
local ____table_triggerMob_id_14 = self.triggerMob
if ____table_triggerMob_id_14 ~= nil then
____table_triggerMob_id_14 = ____table_triggerMob_id_14.id
end
output.triggerMobId = ____table_triggerMob_id_14
local ____table_targetMob_id_16 = self.targetMob
if ____table_targetMob_id_16 ~= nil then
____table_targetMob_id_16 = ____table_targetMob_id_16.id
end
output.targetMobId = ____table_targetMob_id_16
output.freezeDuration = self.freezeDuration
output.portalEffect = self.portalEffect
output.portalEffectDuration = self.portalEffectDuration
return output
end
if freezeDuration < 0 or freezeDuration > ____exports.PORTAL_MOB_MAX_FREEZE_DURATION then
error(self.constructor.name .. " : invalid freeze duration", 0)
end
self.triggerMob = triggerMob
self.targetMob = nil
triggerMob:setPortalMob(self)
self.freezeDuration = freezeDuration
self.portalEffect = portalEffect
self.portalEffectDuration = portalEffectDuration or freezeDuration or 1
end
return ____exports
end,
["src.core.04_STRUCTURES.Monster.trig_Monsters_clickable_set_life"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local ____globals = require("globals")
local udg_monsters = ____globals.udg_monsters
local PERIOD = 0.1
____exports.monstersClickable = CreateGroup()
local function forEachClickableMonster()
local monsterUnit = GetEnumUnit()
local currentLife = GetUnitState(monsterUnit, UNIT_STATE_LIFE)
local monster = udg_monsters[GetUnitUserData(monsterUnit)]
if monster then
local previousLife = I2R(monster:getLife())
local diffLife = RMaxBJ(currentLife, previousLife) - RMinBJ(currentLife, previousLife)
if diffLife < 100 then
SetUnitLifeBJ(
GetEnumUnit(),
previousLife - 0.9
)
else
while not (diffLife <= 0) do
monster:setLife(R2I(previousLife) - 10000)
diffLife = diffLife - 10000
end
end
end
end
____exports.init_TrigMonstersClickableSetLife = function()
createTimer(
PERIOD,
true,
function()
ForGroup(____exports.monstersClickable, forEachClickableMonster)
end
)
end
return ____exports
end,
["src.core.04_STRUCTURES.Monster.Monster"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____globals = require("globals")
local udg_monsters = ____globals.udg_monsters
local ____Constants = require("src.core.01_libraries.Constants")
local MOBS_VARIOUS_COLORS = ____Constants.MOBS_VARIOUS_COLORS
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local ColorString2Id = ____Init_colorCodes.ColorString2Id
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local IsColorString = ____Command_functions.IsColorString
local ____GeneralHooks = require("src.core.API.GeneralHooks")
local hooks = ____GeneralHooks.hooks
local ____MecHookArray = require("src.core.API.MecHookArray")
local CombineHooks = ____MecHookArray.CombineHooks
local ____trig_Monsters_clickable_set_life = require("src.core.04_STRUCTURES.Monster.trig_Monsters_clickable_set_life")
local monstersClickable = ____trig_Monsters_clickable_set_life.monstersClickable
____exports.Monster = __TS__Class()
local Monster = ____exports.Monster
Monster.name = "Monster"
function Monster.prototype.____constructor(self, monsterType, forceId)
if forceId == nil then
forceId = nil
end
self.deleted = false
self.getId = function()
return self.id
end
self.setClearMob = function(____, clearMob)
self.clearMob = clearMob
end
self.getClearMob = function()
return self.clearMob
end
self.removeClearMob = function()
__TS__Delete(self, "clearMob")
end
self.setPortalMob = function(____, portalMob)
self.portalMob = portalMob
end
self.getPortalMob = function()
return self.portalMob
end
self.getCircleMob = function()
return self.circleMob
end
self.getCircleMobParent = function()
return self.circleMobParent
end
self.getJumpPad = function() return self.jumpPad end
self.setJumpPad = function(____, jumpPad)
self.jumpPad = jumpPad
end
self.getJumpPadEffect = function() return self.jumpPadEffect end
self.setJumpPadEffect = function(____, jumpPadEffect)
self.jumpPadEffect = jumpPadEffect
end
self.delete = function()
if self.u then
self:removeUnit()
end
self.deleted = true
end
self.undelete = function()
self.deleted = false
self:createUnit()
end
self.isDeleted = function()
return self.deleted
end
self.getLife = function()
return self.life
end
self.setLife = function(____, life)
self.life = life
if life > 0 then
local ____ = self.u and SetUnitLifeBJ(
self.u,
I2R(life) - 0.5
)
else
self:killUnit()
end
end
self.getMonsterType = function()
return self.mt
end
self.setMonsterType = function(____, mt)
if mt == self.mt then
return false
end
self.mt = mt
self:createUnit()
return true
end
self.temporarilyDisable = function(____, disablingTimer)
if not self.disablingTimer or self.disablingTimer == disablingTimer or TimerGetRemaining(disablingTimer) > TimerGetRemaining(self.disablingTimer) then
local ____table_mt_getImmolationSkill_result_3 = self.mt
if ____table_mt_getImmolationSkill_result_3 ~= nil then
____table_mt_getImmolationSkill_result_3 = ____table_mt_getImmolationSkill_result_3:getImmolationSkill()
end
local immoSkill = ____table_mt_getImmolationSkill_result_3 or 0
self.disablingTimer = disablingTimer
local ____ = self.u and immoSkill > 0 and UnitRemoveAbility(self.u, immoSkill)
local ____ = self.u and SetUnitVertexColorBJ(
self.u,
self.vcRed,
self.vcGreen,
self.vcBlue,
____exports.Monster.DISABLE_TRANSPARENCY
)
self.vcTransparency = ____exports.Monster.DISABLE_TRANSPARENCY
end
end
self.temporarilyEnable = function(____, disablingTimer)
if self.disablingTimer == disablingTimer then
local ____table_mt_getImmolationSkill_result_5 = self.mt
if ____table_mt_getImmolationSkill_result_5 ~= nil then
____table_mt_getImmolationSkill_result_5 = ____table_mt_getImmolationSkill_result_5:getImmolationSkill()
end
local immoSkill = ____table_mt_getImmolationSkill_result_5 or 0
local ____ = self.u and immoSkill > 0 and UnitAddAbility(self.u, immoSkill)
local ____ = self.u and SetUnitVertexColorBJ(
self.u,
self.vcRed,
self.vcGreen,
self.vcBlue,
0
)
self.vcTransparency = 0
end
end
self.setBaseColor = function(____, colorString)
local baseColorId
if IsColorString(colorString) then
baseColorId = ColorString2Id(colorString)
if baseColorId < 0 or baseColorId > NB_PLAYERS_MAX then
return
end
self.baseColorId = baseColorId
if self.u ~= nil then
if baseColorId == 0 then
local ____ = self.u and SetUnitColor(self.u, PLAYER_COLOR_RED)
else
local ____ = self.u and SetUnitColor(
self.u,
ConvertPlayerColor(baseColorId)
)
end
end
end
end
self.setVertexColor = function(____, vcRed, vcGreen, vcBlue)
self.vcRed = vcRed
self.vcGreen = vcGreen
self.vcBlue = vcBlue
if self.u ~= nil then
local ____ = self.u and SetUnitVertexColorBJ(
self.u,
vcRed,
vcGreen,
vcBlue,
self.vcTransparency
)
end
end
self.reinitColor = function()
local initBaseColorId
self.baseColorId = -1
self.vcRed = 100
self.vcGreen = 100
self.vcBlue = 100
self.vcTransparency = 0
if self.u ~= nil then
if MOBS_VARIOUS_COLORS and self.u then
initBaseColorId = GetPlayerId(GetOwningPlayer(self.u))
else
initBaseColorId = 12
end
if initBaseColorId == 0 then
local ____ = self.u and SetUnitColor(self.u, PLAYER_COLOR_RED)
else
local ____ = self.u and SetUnitColor(
self.u,
ConvertPlayerColor(initBaseColorId)
)
end
local ____ = self.u and SetUnitVertexColorBJ(
self.u,
self.vcRed,
self.vcGreen,
self.vcBlue,
self.vcTransparency
)
end
end
self.mt = monsterType
if forceId ~= nil then
self.id = forceId
if ____exports.Monster.lastInstanceId < forceId then
____exports.Monster.lastInstanceId = forceId
end
else
local ____exports_Monster_0, ____lastInstanceId_1 = ____exports.Monster, "lastInstanceId"
local ____exports_Monster_lastInstanceId_2 = ____exports_Monster_0[____lastInstanceId_1] + 1
____exports_Monster_0[____lastInstanceId_1] = ____exports_Monster_lastInstanceId_2
self.id = ____exports_Monster_lastInstanceId_2
end
udg_monsters[self.id] = self
self.life = 0
self.baseColorId = -1
self.vcRed = 100
self.vcGreen = 100
self.vcBlue = 100
self.vcTransparency = 0
end
function Monster.prototype.removePortalMob(self)
__TS__Delete(self, "portalMob")
end
function Monster.prototype.setCircleMob(self, circleMob)
self.circleMob = circleMob
end
function Monster.prototype.removeCircleMob(self)
__TS__Delete(self, "circleMob")
end
function Monster.prototype.setCircleMobParent(self, circleMobParent)
self.circleMobParent = circleMobParent
end
function Monster.prototype.removeCircleMobParent(self)
__TS__Delete(self, "circleMobParent")
end
function Monster.prototype.getCircleMobs(self)
return self.circleMob or self.circleMobParent
end
function Monster.prototype.removeUnit(self)
if self.u then
GroupRemoveUnit(monstersClickable, self.u)
RemoveUnit(self.u)
__TS__Delete(self, "u")
__TS__Delete(self, "disablingTimer")
end
end
function Monster.prototype.killUnit(self)
if self.u and IsUnitAliveBJ(self.u) then
KillUnit(self.u)
end
end
function Monster.prototype.createUnit(self, createUnitFunc)
if self:isDeleted() then
return
end
if createUnitFunc then
self.createUnitFunc = createUnitFunc
end
if not self.createUnitFunc then
return
end
local ____CombineHooks_9 = CombineHooks
local ____table_level_monsters_hooks_onBeforeCreateMonsterUnit_7 = self.level
if ____table_level_monsters_hooks_onBeforeCreateMonsterUnit_7 ~= nil then
____table_level_monsters_hooks_onBeforeCreateMonsterUnit_7 = ____table_level_monsters_hooks_onBeforeCreateMonsterUnit_7.monsters.hooks_onBeforeCreateMonsterUnit
end
local hookArray = ____CombineHooks_9(____table_level_monsters_hooks_onBeforeCreateMonsterUnit_7, hooks.hooks_onBeforeCreateMonsterUnit)
if hookArray then
local forceUnitTypeId = 0
local forceX = 0
local forceY = 0
local forceX1 = 0
local forceY1 = 0
local forceX2 = 0
local forceY2 = 0
local quit = false
for ____, hook in ipairs(hookArray) do
local output = hook:execute(self)
if output == false then
quit = true
elseif output then
local ____output_unitTypeId_10 = output.unitTypeId
if ____output_unitTypeId_10 then
forceUnitTypeId = output.unitTypeId
____output_unitTypeId_10 = forceUnitTypeId
end
local ____output_x_11 = output.x
if ____output_x_11 then
forceX = output.x
____output_x_11 = forceX
end
local ____output_y_12 = output.y
if ____output_y_12 then
forceY = output.y
____output_y_12 = forceY
end
local ____output_x1_13 = output.x1
if ____output_x1_13 then
forceX1 = output.x1
____output_x1_13 = forceX1
end
local ____output_y1_14 = output.y1
if ____output_y1_14 then
forceY1 = output.y1
____output_y1_14 = forceY1
end
local ____output_x2_15 = output.x2
if ____output_x2_15 then
forceX2 = output.x2
____output_x2_15 = forceX2
end
local ____output_y2_16 = output.y2
if ____output_y2_16 then
forceY2 = output.y2
____output_y2_16 = forceY2
end
end
end
if quit then
MemoryHandler.destroyArray(hookArray)
return
end
local ____temp_18 = forceUnitTypeId > 0
if ____temp_18 then
local ____forceUnitTypeId_17 = forceUnitTypeId
____exports.Monster.forceUnitTypeIdForNextMonster = ____forceUnitTypeId_17
____temp_18 = ____forceUnitTypeId_17
end
local ____temp_20 = forceX ~= 0
if ____temp_20 then
local ____forceX_19 = forceX
____exports.Monster.forceXforNextMonster = ____forceX_19
____temp_20 = ____forceX_19
end
local ____temp_22 = forceY ~= 0
if ____temp_22 then
local ____forceY_21 = forceY
____exports.Monster.forceYforNextMonster = ____forceY_21
____temp_22 = ____forceY_21
end
local ____temp_24 = forceX1 ~= 0
if ____temp_24 then
local ____forceX1_23 = forceX1
____exports.Monster.forceX1forNextMonster = ____forceX1_23
____temp_24 = ____forceX1_23
end
local ____temp_26 = forceY1 ~= 0
if ____temp_26 then
local ____forceY1_25 = forceY1
____exports.Monster.forceY1forNextMonster = ____forceY1_25
____temp_26 = ____forceY1_25
end
local ____temp_28 = forceX2 ~= 0
if ____temp_28 then
local ____forceX2_27 = forceX2
____exports.Monster.forceX2forNextMonster = ____forceX2_27
____temp_28 = ____forceX2_27
end
local ____temp_30 = forceY2 ~= 0
if ____temp_30 then
local ____forceY2_29 = forceY2
____exports.Monster.forceY2forNextMonster = ____forceY2_29
____temp_30 = ____forceY2_29
end
end
MemoryHandler.destroyArray(hookArray)
local previouslyEnabled = not not self.u
local isMonsterAlive = self.u and IsUnitAliveBJ(self.u)
if previouslyEnabled then
self:removeUnit()
end
self.u = self.createUnitFunc()
local ____ = self.u and SetUnitUserData(self.u, self.id)
if self.mt and self.mt:isClickable() then
self.life = self.mt:getMaxLife()
local ____ = self.u and GroupAddUnit(monstersClickable, self.u)
end
if previouslyEnabled then
if self.disablingTimer and TimerGetRemaining(self.disablingTimer) > 0 then
self:temporarilyDisable(self.disablingTimer)
end
if not isMonsterAlive then
self:killUnit()
end
if self.baseColorId ~= -1 then
if self.baseColorId == 0 then
local ____ = self.u and SetUnitColor(self.u, PLAYER_COLOR_RED)
else
local ____ = self.u and SetUnitColor(
self.u,
ConvertPlayerColor(self.baseColorId)
)
end
end
local ____ = self.u and SetUnitVertexColorBJ(
self.u,
self.vcRed,
self.vcGreen,
self.vcBlue,
self.vcTransparency
)
end
if self.clearMob then
self.clearMob:redoTriggerMobPermanentEffect()
end
local ____CombineHooks_33 = CombineHooks
local ____table_level_monsters_hooks_onAfterCreateMonsterUnit_31 = self.level
if ____table_level_monsters_hooks_onAfterCreateMonsterUnit_31 ~= nil then
____table_level_monsters_hooks_onAfterCreateMonsterUnit_31 = ____table_level_monsters_hooks_onAfterCreateMonsterUnit_31.monsters.hooks_onAfterCreateMonsterUnit
end
local hookArray2 = ____CombineHooks_33(____table_level_monsters_hooks_onAfterCreateMonsterUnit_31, hooks.hooks_onAfterCreateMonsterUnit)
if hookArray2 then
for ____, hook in ipairs(hookArray2) do
hook:execute(self)
end
end
MemoryHandler.destroyArray(hookArray2)
end
function Monster.prototype.destroy(self)
if self.u then
self:removeUnit()
end
if self.clearMob then
self.clearMob:destroy()
end
if self.portalMob then
self.portalMob:destroy()
end
if self.circleMob then
self.circleMob:destroy()
end
if self.circleMobParent then
self.circleMobParent:removeMob(self.id)
end
__TS__Delete(udg_monsters, self.id)
local ____table_level_monsters_removeMonster_result_34 = self.level
if ____table_level_monsters_removeMonster_result_34 ~= nil then
____table_level_monsters_removeMonster_result_34 = ____table_level_monsters_removeMonster_result_34.monsters:removeMonster(self.id)
end
end
function Monster.prototype.toJson(self)
if self:isDeleted() then
return false
else
local output = MemoryHandler.getEmptyObject()
output.id = self.id
output.monsterClassName = self.constructor.name
local ____table_mt_label_36 = self.mt
if ____table_mt_label_36 ~= nil then
____table_mt_label_36 = ____table_mt_label_36.label
end
output.monsterTypeLabel = ____table_mt_label_36
output.jumpPad = self.jumpPad
output.jumpPadEffect = self.jumpPadEffect
return output
end
end
Monster.forceUnitTypeIdForNextMonster = 0
Monster.forceXforNextMonster = 0
Monster.forceYforNextMonster = 0
Monster.forceX1forNextMonster = 0
Monster.forceY1forNextMonster = 0
Monster.forceX2forNextMonster = 0
Monster.forceY2forNextMonster = 0
Monster.DISABLE_TRANSPARENCY = 80
Monster.lastInstanceId = -1
return ____exports
end,
["src.core.04_STRUCTURES.Monster.MonsterMultiplePatrols"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArrayForEach = ____lualib.__TS__ArrayForEach
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayValuesRound = ____Basic_functions.arrayValuesRound
local GetLocDist = ____Basic_functions.GetLocDist
local ____Constants = require("src.core.01_libraries.Constants")
local PATROL_DISTANCE_MIN = ____Constants.PATROL_DISTANCE_MIN
local ____globals = require("globals")
local udg_monsters = ____globals.udg_monsters
local ____mapUtils = require("src.Utils.mapUtils")
local errorHandler = ____mapUtils.errorHandler
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local IsHero = ____Escaper_functions.IsHero
local ____Monster = require("src.core.04_STRUCTURES.Monster.Monster")
local Monster = ____Monster.Monster
local ____Monster_functions = require("src.core.04_STRUCTURES.Monster.Monster_functions")
local NewPatrolMonster = ____Monster_functions.NewPatrolMonster
local function NewRegion(x, y)
local r = Rect(x - 16, y - 16, x + 16, y + 16)
local R = CreateRegion()
RegionAddRect(R, r)
RemoveRect(r)
return R
end
local function MonsterMultiplePatrols_move_Actions()
local monster
local MMP
if IsHero(GetTriggerUnit()) then
return
end
monster = udg_monsters[GetUnitUserData(GetTriggerUnit())]
if __TS__InstanceOf(monster, ____exports.MonsterMultiplePatrols) then
if monster:getCurrentTrigger() == GetTriggeringTrigger() then
monster:nextMove()
end
end
end
____exports.MonsterMultiplePatrols = __TS__Class()
local MonsterMultiplePatrols = ____exports.MonsterMultiplePatrols
MonsterMultiplePatrols.name = "MonsterMultiplePatrols"
__TS__ClassExtends(MonsterMultiplePatrols, Monster)
function MonsterMultiplePatrols.prototype.____constructor(self, mt, mode, forceId)
if forceId == nil then
forceId = nil
end
Monster.prototype.____constructor(self, mt, forceId)
self.x = {}
self.y = {}
self.r = {}
self.t = {}
self.getCurrentTrigger = function()
return self.currentTrigger
end
self.nextMove = function()
local lastLocInd = #self.x - 1
self:disableTrigger(self.currentMove)
if self.sens == 0 or self.sens == 1 then
if self.currentMove >= lastLocInd then
if self.sens == 0 then
self.currentMove = 0
else
self.sens = 2
self.currentMove = self.currentMove - 1
end
else
self.currentMove = self.currentMove + 1
end
else
if self.currentMove <= 0 then
self.sens = 1
self.currentMove = 1
else
self.currentMove = self.currentMove - 1
end
end
self:activateMove(self.currentMove)
end
self.createUnit = function()
if #self.x < 2 then
return
end
Monster.prototype.createUnit(
self,
function() return self.mt and NewPatrolMonster(
self.mt,
self.x[1],
self.y[1],
self.x[2],
self.y[2]
) or nil end
)
self.currentMove = 1
if self.sens == 2 then
self.sens = 1
end
EnableTrigger(self.t[2])
self.currentTrigger = self.t[2]
end
self.getX = function(____, id)
return self.x[id + 1]
end
self.getY = function(____, id)
return self.y[id + 1]
end
self.destroyLastLoc = function()
local lastLocInd = #self.x - 1
if lastLocInd < 0 then
return false
end
DestroyTrigger(self.t[lastLocInd + 1])
RemoveRegion(self.r[lastLocInd + 1])
__TS__Delete(self.t, lastLocInd + 1)
__TS__Delete(self.r, lastLocInd + 1)
__TS__Delete(self.x, lastLocInd + 1)
__TS__Delete(self.y, lastLocInd + 1)
if lastLocInd == 1 then
self:removeUnit()
end
if lastLocInd == self.currentMove then
self.currentMove = self.currentMove - 1
self:activateMove(self.currentMove)
end
return true
end
self.destroy = function()
while self:destroyLastLoc() do
end
Monster.prototype.destroy(self)
end
if mode ~= "normal" and mode ~= "string" then
error(((self.constructor.name .. " : wrong mode \"") .. mode) .. "\"", 0)
end
if mode == "normal" then
self.sens = 0
else
self.sens = 1
end
__TS__ArrayForEach(
____exports.MonsterMultiplePatrols.X,
function(____, x, n)
local y = ____exports.MonsterMultiplePatrols.Y[n + 1]
self.x[n + 1] = x
self.y[n + 1] = y
self.r[n + 1] = NewRegion(x, y)
self.t[n + 1] = CreateTrigger()
DisableTrigger(self.t[n + 1])
TriggerAddAction(
self.t[n + 1],
errorHandler(MonsterMultiplePatrols_move_Actions)
)
TriggerRegisterEnterRegionSimple(self.t[n + 1], self.r[n + 1])
end
)
self.currentMove = -1
____exports.MonsterMultiplePatrols:destroyLocs()
end
function MonsterMultiplePatrols.storeNewLoc(self, x, y)
local nbLocsBefore = #____exports.MonsterMultiplePatrols.X
____exports.MonsterMultiplePatrols.X[nbLocsBefore + 1] = x
____exports.MonsterMultiplePatrols.Y[nbLocsBefore + 1] = y
return true
end
function MonsterMultiplePatrols.destroyLocs(self)
____exports.MonsterMultiplePatrols.X = {}
____exports.MonsterMultiplePatrols.Y = {}
end
function MonsterMultiplePatrols.prototype.disableTrigger(self, id)
DisableTrigger(self.t[id + 1])
end
function MonsterMultiplePatrols.prototype.activateMove(self, id)
EnableTrigger(self.t[id + 1])
self.currentTrigger = self.t[id + 1]
local ____ = self.u and IssuePointOrder(self.u, "move", self.x[id + 1], self.y[id + 1])
end
function MonsterMultiplePatrols.prototype.addNewLocAt(self, id, x, y)
self.x[id + 1] = x
self.y[id + 1] = y
self.r[id + 1] = NewRegion(x, y)
self.t[id + 1] = CreateTrigger()
DisableTrigger(self.t[id + 1])
TriggerAddAction(
self.t[id + 1],
errorHandler(MonsterMultiplePatrols_move_Actions)
)
TriggerRegisterEnterRegionSimple(self.t[id + 1], self.r[id + 1])
end
function MonsterMultiplePatrols.prototype.addNewLoc(self, x, y)
local lastLocInd = #self.x - 1
if GetLocDist(
self:getX(lastLocInd),
self:getY(lastLocInd),
x,
y
) <= PATROL_DISTANCE_MIN then
return 2
end
if lastLocInd >= 0 and self.sens == 0 and GetLocDist(self.x[1], self.y[1], x, y) <= PATROL_DISTANCE_MIN then
return 1
end
lastLocInd = lastLocInd + 1
self:addNewLocAt(lastLocInd, x, y)
if lastLocInd == 1 then
self:createUnit()
end
return 0
end
function MonsterMultiplePatrols.prototype.toJson(self)
local output = Monster.prototype.toJson(self)
if output then
output.mode = self.sens > 0 and "string" or "normal"
output.xArr = arrayValuesRound(self.x)
output.yArr = arrayValuesRound(self.y)
end
return output
end
MonsterMultiplePatrols.X = {}
MonsterMultiplePatrols.Y = {}
MonsterMultiplePatrols.count = function()
local n = 0
for _, monster in pairs(udg_monsters) do
if __TS__InstanceOf(monster, ____exports.MonsterMultiplePatrols) then
n = n + 1
end
end
return n
end
return ____exports
end,
["src.Utils.ProgressionUtils"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Delete = ____lualib.__TS__Delete
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____MonsterMultiplePatrols = require("src.core.04_STRUCTURES.Monster.MonsterMultiplePatrols")
local MonsterMultiplePatrols = ____MonsterMultiplePatrols.MonsterMultiplePatrols
local ____MonsterNoMove = require("src.core.04_STRUCTURES.Monster.MonsterNoMove")
local MonsterNoMove = ____MonsterNoMove.MonsterNoMove
local ____globals = require("globals")
local getUdgLevels = ____globals.getUdgLevels
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____MonsterSimplePatrol = require("src.core.04_STRUCTURES.Monster.MonsterSimplePatrol")
local MonsterSimplePatrol = ____MonsterSimplePatrol.MonsterSimplePatrol
local function initProgressionUtils()
local segments = {}
local progressionMap = {}
local levelSegments = {}
local function init()
if true then
segments = {}
progressionMap = {}
local tileMap = {}
local levelMap = {}
local tts = getUdgTerrainTypes()
local y = globals.MAP_MIN_Y
local currentSegment = 0
while y <= globals.MAP_MAX_Y do
local x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
local tt = tts:getTerrainType(x, y)
if tt and tt.kind == "slide" then
if not tileMap[x] then
tileMap[x] = {}
end
local ____tileMap_index_index_0 = tileMap[x - LARGEUR_CASE]
if ____tileMap_index_index_0 ~= nil then
____tileMap_index_index_0 = ____tileMap_index_index_0[y - LARGEUR_CASE]
end
local a = ____tileMap_index_index_0
local ____tileMap_x_index_2 = tileMap[x]
if ____tileMap_x_index_2 ~= nil then
____tileMap_x_index_2 = ____tileMap_x_index_2[y - LARGEUR_CASE]
end
local b = ____tileMap_x_index_2
local ____tileMap_index_index_4 = tileMap[x + LARGEUR_CASE]
if ____tileMap_index_index_4 ~= nil then
____tileMap_index_index_4 = ____tileMap_index_index_4[y - LARGEUR_CASE]
end
local c = ____tileMap_index_index_4
local ____tileMap_index_y_6 = tileMap[x - LARGEUR_CASE]
if ____tileMap_index_y_6 ~= nil then
____tileMap_index_y_6 = ____tileMap_index_y_6[y]
end
local d = ____tileMap_index_y_6
local ____temp_8 = a or b or c or d
if not ____temp_8 then
currentSegment = currentSegment + 1
____temp_8 = currentSegment
end
local newValue = ____temp_8
tileMap[x][y] = newValue
if not segments[newValue] then
segments[newValue] = {}
end
arrayPush(segments[newValue], {x = x, y = y})
local opts = MemoryHandler.getEmptyArray()
arrayPush(opts, a)
arrayPush(opts, b)
arrayPush(opts, c)
arrayPush(opts, d)
for ____, o in ipairs(opts) do
if o and newValue ~= o then
for ____, s in ipairs(segments[o]) do
tileMap[s.x][s.y] = newValue
arrayPush(segments[newValue], s)
end
__TS__Delete(segments, o)
end
end
opts:__destroy()
end
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
local function addLevelMapPoint(levelIndex, x, y)
local nx = math.floor(x / LARGEUR_CASE) * LARGEUR_CASE
local ny = math.floor(y / LARGEUR_CASE) * LARGEUR_CASE
if not levelMap[nx] then
levelMap[nx] = {}
end
levelMap[nx][ny] = levelIndex
end
for levelIndex, level in pairs(getUdgLevels():getAll()) do
for _, monster in pairs(level.monsters:getAll()) do
if __TS__InstanceOf(monster, MonsterSimplePatrol) then
addLevelMapPoint(levelIndex, (monster.x1 + monster.x2) / 2, (monster.y1 + monster.y2) / 2)
elseif __TS__InstanceOf(monster, MonsterNoMove) then
addLevelMapPoint(levelIndex, monster.x, monster.y)
elseif __TS__InstanceOf(monster, MonsterMultiplePatrols) then
local prevX = 0
local prevY = 0
do
local i = 0
while i < #monster.x do
local nextX = monster.x[i + 1]
local nextY = monster.y[i + 1]
if i ~= 0 then
addLevelMapPoint(levelIndex, (prevX + nextX) / 2, (prevY + nextY) / 2)
end
prevX = nextX
prevY = nextY
i = i + 1
end
end
end
end
end
local directions = {
{x = -LARGEUR_CASE, y = 0},
{x = LARGEUR_CASE, y = 0},
{x = 0, y = -LARGEUR_CASE},
{x = 0, y = LARGEUR_CASE},
{x = -LARGEUR_CASE, y = -LARGEUR_CASE},
{x = -LARGEUR_CASE, y = LARGEUR_CASE},
{x = LARGEUR_CASE, y = -LARGEUR_CASE},
{x = LARGEUR_CASE, y = LARGEUR_CASE}
}
local function BFS_far(point, distanceMap)
local visited = MemoryHandler.getEmptyObject()
visited[(tostring(point.x) .. "_") .. tostring(point.y)] = true
local queue = MemoryHandler.getEmptyArray()
arrayPush(queue, {point, 0})
local farthestPoint = point
local maxDistance = 0
while #queue > 0 do
local currentPoint, distance = table.unpack(table.remove(queue, 1))
if distance > maxDistance then
maxDistance = distance
farthestPoint = currentPoint
end
for ____, dir in ipairs(directions) do
local newPoint = {x = currentPoint.x + dir.x, y = currentPoint.y + dir.y}
local key = (tostring(newPoint.x) .. "_") .. tostring(newPoint.y)
local ____tileMap_newPoint_x_newPoint_y_9 = tileMap[newPoint.x]
if ____tileMap_newPoint_x_newPoint_y_9 ~= nil then
____tileMap_newPoint_x_newPoint_y_9 = ____tileMap_newPoint_x_newPoint_y_9[newPoint.y]
end
if ____tileMap_newPoint_x_newPoint_y_9 and not visited[key] then
visited[key] = true
local newDistance = distance + 1
arrayPush(queue, {newPoint, newDistance})
if distanceMap then
if not distanceMap[newPoint.x] then
distanceMap[newPoint.x] = {}
end
distanceMap[newPoint.x][newPoint.y] = newDistance
end
end
end
end
queue:__destroy()
visited:__destroy()
return {farthestPoint, maxDistance}
end
for _, segment in pairs(segments) do
local distanceMap = {}
local farthestPoint, _ = table.unpack(BFS_far(segment[1]))
local _2, longestDistance = table.unpack(BFS_far(farthestPoint, distanceMap))
local foundLevelIndex = -1
for ____, tile in ipairs(segment) do
local ____levelMap_tile_x_tile_y_11 = levelMap[tile.x]
if ____levelMap_tile_x_tile_y_11 ~= nil then
____levelMap_tile_x_tile_y_11 = ____levelMap_tile_x_tile_y_11[tile.y]
end
local levelIndex = ____levelMap_tile_x_tile_y_11
if levelIndex then
foundLevelIndex = levelIndex
break
end
end
if foundLevelIndex ~= -1 then
if not levelSegments[foundLevelIndex] then
levelSegments[foundLevelIndex] = {numSegments = 0, segmentsMaxDistance = 0}
end
local ____levelSegments_foundLevelIndex_13, ____numSegments_14 = levelSegments[foundLevelIndex], "numSegments"
____levelSegments_foundLevelIndex_13[____numSegments_14] = ____levelSegments_foundLevelIndex_13[____numSegments_14] + 1
local ____levelSegments_foundLevelIndex_15, ____segmentsMaxDistance_16 = levelSegments[foundLevelIndex], "segmentsMaxDistance"
____levelSegments_foundLevelIndex_15[____segmentsMaxDistance_16] = ____levelSegments_foundLevelIndex_15[____segmentsMaxDistance_16] + longestDistance
for ____, tile in ipairs(segment) do
do
local ____distanceMap_tile_x_tile_y_17 = distanceMap[tile.x]
if ____distanceMap_tile_x_tile_y_17 ~= nil then
____distanceMap_tile_x_tile_y_17 = ____distanceMap_tile_x_tile_y_17[tile.y]
end
local progression = ____distanceMap_tile_x_tile_y_17
if not progression then
goto __continue38
end
if not progressionMap[tile.x] then
progressionMap[tile.x] = {}
end
progressionMap[tile.x][tile.y] = {levelIndex = foundLevelIndex, segmentMaxDistance = longestDistance, progression = progression}
end
::__continue38::
end
end
end
ServiceManager.getService("Multiboard").setProgressionEnabled(true)
end
end
local function calculatePlayerProgression(escaper)
local hero = escaper:getHero()
if not hero then
return -1
end
local xHero = math.floor(GetUnitX(hero) / LARGEUR_CASE) * LARGEUR_CASE
local yHero = math.floor(GetUnitY(hero) / LARGEUR_CASE) * LARGEUR_CASE
local ____progressionMap_xHero_yHero_19 = progressionMap[xHero]
if ____progressionMap_xHero_yHero_19 ~= nil then
____progressionMap_xHero_yHero_19 = ____progressionMap_xHero_yHero_19[yHero]
end
local heroProgression = ____progressionMap_xHero_yHero_19
if not heroProgression then
return -1
end
return math.floor(heroProgression.progression / levelSegments[heroProgression.levelIndex].segmentsMaxDistance * 100 + 0.5)
end
local progressionState = {}
local function resetPlayerProgressionState(escaper)
if progressionState[escaper:getId()] then
progressionState[escaper:getId()]:__destroy()
__TS__Delete(
progressionState,
escaper:getId()
)
end
end
local function getPlayerProgression(escaper)
local nextProgression = calculatePlayerProgression(escaper)
if not progressionState[escaper:getId()] then
progressionState[escaper:getId()] = MemoryHandler.getEmptyObject()
progressionState[escaper:getId()].reverse = false
progressionState[escaper:getId()].progression = -1
end
if nextProgression ~= -1 then
if progressionState[escaper:getId()].progression == -1 then
progressionState[escaper:getId()].reverse = nextProgression > 50
end
progressionState[escaper:getId()].progression = nextProgression
end
if progressionState[escaper:getId()].progression == -1 then
return 0
end
if progressionState[escaper:getId()].reverse then
return 100 - progressionState[escaper:getId()].progression
else
return progressionState[escaper:getId()].progression
end
end
return {init = init, getPlayerProgression = getPlayerProgression, resetPlayerProgressionState = resetPlayerProgressionState}
end
____exports.progressionUtils = initProgressionUtils()
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make.Make"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsIssuedOrder = ____Basic_functions.IsIssuedOrder
local StopUnit = ____Basic_functions.StopUnit
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
____exports.MAKE_LAST_CLIC_UNIT_ID = FourCC("e001")
____exports.MAKE_CANT_CANCEL_MORE = "Nothing else to cancel !"
____exports.MAKE_CANT_REDO_MORE = "Nothing else to redo !"
local function TriggerActions()
local ____Hero2Escaper_result_getMake_result_2 = Hero2Escaper(GetTriggerUnit())
if ____Hero2Escaper_result_getMake_result_2 ~= nil then
____Hero2Escaper_result_getMake_result_2 = ____Hero2Escaper_result_getMake_result_2:getMake()
end
local ____Hero2Escaper_result_getMake_result_doActions_result_0 = ____Hero2Escaper_result_getMake_result_2
if ____Hero2Escaper_result_getMake_result_doActions_result_0 ~= nil then
____Hero2Escaper_result_getMake_result_doActions_result_0 = ____Hero2Escaper_result_getMake_result_doActions_result_0.doActions()
end
end
____exports.Make = __TS__Class()
local Make = ____exports.Make
Make.name = "Make"
function Make.prototype.____constructor(self, maker, kind, forSpecificLevel, escaper)
if forSpecificLevel == nil then
forSpecificLevel = true
end
if escaper == nil then
escaper = nil
end
self.orderX = 0
self.orderY = 0
self.enableTrigger = function()
if self.t then
DestroyTrigger(self.t)
end
if self.maker then
self.t = createEvent({
events = {
function(t) return self.maker and TriggerRegisterUnitEvent(t, self.maker, EVENT_UNIT_ISSUED_POINT_ORDER) end,
function(t) return self.maker and TriggerRegisterUnitEvent(t, self.maker, EVENT_UNIT_ISSUED_TARGET_ORDER) end
},
actions = {TriggerActions}
})
end
end
self.cancelLastAction = function()
return false
end
self.redoLastAction = function()
return false
end
self.maker = maker
self.kind = kind
if maker then
escaper = Hero2Escaper(maker)
self.makerOwner = GetOwningPlayer(maker)
end
if not escaper then
error("Make : escaper not found", 0)
end
self.escaper = escaper
self.makerOwner = escaper:getPlayer()
self.t = nil
self:enableTrigger()
self.forSpecificLevel = forSpecificLevel
end
function Make.prototype.destroy(self)
if self.t then
DestroyTrigger(self.t)
end
end
function Make.prototype.doBaseActions(self)
local targetWidget = GetOrderTarget()
if targetWidget then
self.orderX = GetWidgetX(targetWidget)
self.orderY = GetWidgetX(targetWidget)
else
if not IsIssuedOrder("smart") then
return false
end
self.orderX = GetOrderPointX()
self.orderY = GetOrderPointY()
end
if self.escaper.roundToGrid then
self.orderX = math.floor(self.orderX / self.escaper.roundToGrid + 0.5) * self.escaper.roundToGrid
self.orderY = math.floor(self.orderY / self.escaper.roundToGrid + 0.5) * self.escaper.roundToGrid
end
local ____ = self.maker and StopUnit(self.maker)
return true
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeAction"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
____exports.MakeAction = __TS__Class()
local MakeAction = ____exports.MakeAction
MakeAction.name = "MakeAction"
function MakeAction.prototype.____constructor(self, level)
self.getLevel = function()
return self.level
end
self.level = level
self.isActionMadeB = true
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakePropertyChangeAction"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeAction")
local MakeAction = ____MakeAction.MakeAction
____exports.MakePropertyChangeAction = __TS__Class()
local MakePropertyChangeAction = ____exports.MakePropertyChangeAction
MakePropertyChangeAction.name = "MakePropertyChangeAction"
__TS__ClassExtends(MakePropertyChangeAction, MakeAction)
function MakePropertyChangeAction.prototype.____constructor(self, level, targetObject, propertyName, propertyValue, setCb, oldPropertyValue)
MakeAction.prototype.____constructor(self, level)
self.destroy = function()
end
self.cancel = function()
if not self.isActionMadeB then
return false
end
self.isActionMadeB = false
self.setCb(self.targetObject, self.oldPropertyValue)
local ____ = self.owner and Text.P(
self.owner:getPlayer(),
((("Undo '" .. self.propertyName) .. "' to '") .. tostring(self.oldPropertyValue)) .. "'"
)
return true
end
self.redo = function()
if self.isActionMadeB then
return false
end
self.isActionMadeB = true
self.setCb(self.targetObject, self.propertyValue)
local ____ = self.owner and Text.P(
self.owner:getPlayer(),
((("Redo '" .. self.propertyName) .. "' to '") .. tostring(self.propertyValue)) .. "'"
)
return true
end
self.targetObject = targetObject
self.propertyName = propertyName
self.propertyValue = propertyValue
self.setCb = setCb
self.oldPropertyValue = oldPropertyValue
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make.MakePropertyChange"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
local ____MakePropertyChangeAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakePropertyChangeAction")
local MakePropertyChangeAction = ____MakePropertyChangeAction.MakePropertyChangeAction
____exports.MakePropertyChange = __TS__Class()
local MakePropertyChange = ____exports.MakePropertyChange
MakePropertyChange.name = "MakePropertyChange"
__TS__ClassExtends(MakePropertyChange, Make)
function MakePropertyChange.prototype.____constructor(self, maker, propertyName, propertyValue, validCb, getCb, setCb)
Make.prototype.____constructor(self, maker, "makePropertyChange")
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local targetObject = self.validCb(self.orderX, self.orderY)
if not targetObject then
Text.erP(self.makerOwner, "invalid object clicked for your making level")
return
end
local oldPropertyValue = self.getCb(targetObject)
self.setCb(targetObject, self.propertyValue)
Text.P(
self.makerOwner,
((("Changed '" .. self.propertyName) .. "' to '") .. tostring(self.propertyValue)) .. "'"
)
self.escaper:destroyMake()
self.escaper:newAction(__TS__New(
MakePropertyChangeAction,
self.escaper:getMakingLevel(),
targetObject,
self.propertyName,
self.propertyValue,
self.setCb,
oldPropertyValue
))
end
end
self.propertyName = propertyName
self.propertyValue = propertyValue
self.validCb = validCb
self.getCb = getCb
self.setCb = setCb
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeMonsterAction"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeAction")
local MakeAction = ____MakeAction.MakeAction
____exports.MakeMonsterAction = __TS__Class()
local MakeMonsterAction = ____exports.MakeMonsterAction
MakeMonsterAction.name = "MakeMonsterAction"
__TS__ClassExtends(MakeMonsterAction, MakeAction)
function MakeMonsterAction.prototype.____constructor(self, level, monster)
MakeAction.prototype.____constructor(self, level)
self.destroy = function()
if not self.isActionMadeB then
self.monster:destroy()
end
end
self.cancel = function()
if not self.isActionMadeB then
return false
end
self.monster:delete()
self.isActionMadeB = false
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"monster creation cancelled"
)
return true
end
self.redo = function()
if self.isActionMadeB then
return false
end
self.monster:undelete()
self.isActionMadeB = true
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"monster creation redone"
)
return true
end
self.monster = monster
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_create_casters.MakeCaster"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
local ____Caster = require("src.core.04_STRUCTURES.Caster.Caster")
local Caster = ____Caster.Caster
local ____MakeMonsterAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeMonsterAction")
local MakeMonsterAction = ____MakeMonsterAction.MakeMonsterAction
____exports.MakeCaster = __TS__Class()
local MakeCaster = ____exports.MakeCaster
MakeCaster.name = "MakeCaster"
__TS__ClassExtends(MakeCaster, Make)
function MakeCaster.prototype.____constructor(self, maker, casterType, angle)
Make.prototype.____constructor(self, maker, "casterCreate")
self.getCasterType = function()
return self.casterType
end
self.getAngle = function()
return self.angle
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local caster = __TS__New(
Caster,
self:getCasterType(),
self.orderX,
self.orderY,
self:getAngle()
)
self.escaper:getMakingLevel().monsters:new(caster, true)
self.escaper:newAction(__TS__New(
MakeMonsterAction,
self.escaper:getMakingLevel(),
caster
))
end
end
self.casterType = casterType
self.angle = angle
end
return ____exports
end,
["src.core.04_STRUCTURES.Meteor.Meteor"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
____exports.METEOR_NORMAL = FourCC("MND1")
____exports.METEOR_CHEAT = FourCC("MCD1")
____exports.udg_meteors = {}
local lastInstanceId = -1
____exports.Meteor = __TS__Class()
local Meteor = ____exports.Meteor
Meteor.name = "Meteor"
function Meteor.prototype.____constructor(self, x, y)
self.deleted = false
self.getId = function()
return self.id
end
self.getItem = function()
return self.item
end
self.removeMeteorItem = function()
if self.item then
RemoveItem(self.item)
end
end
self.createMeteorItem = function()
if self.item then
self:removeMeteorItem()
end
self.item = CreateItem(____exports.METEOR_NORMAL, self.x, self.y)
local ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0 = getUdgTerrainTypes():getTerrainType(self.x, self.y)
if ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0 ~= nil then
____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0 = ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0:getKind()
end
if ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0 == "slide" then
SetItemDroppable(self.item, false)
end
SetItemUserData(self.item, self.id)
end
self.delete = function()
if self.item then
self:removeMeteorItem()
end
self.deleted = true
end
self.undelete = function()
self.deleted = false
self:createMeteorItem()
end
self.isDeleted = function()
return self.deleted
end
self.destroy = function()
if self.item ~= nil then
self:removeMeteorItem()
end
local ____ = self.level and self.level.meteors:removeMeteor(self.id)
__TS__Delete(____exports.udg_meteors, self.id)
end
self.replace = function()
local ____ = self.item and SetItemPosition(self.item, self.x, self.y)
end
self.toJson = function()
if self:isDeleted() then
return false
else
local output = MemoryHandler.getEmptyObject()
output.x = R2I(self.x)
output.y = R2I(self.y)
return output
end
end
self.x = x
self.y = y
lastInstanceId = lastInstanceId + 1
self.id = lastInstanceId
____exports.udg_meteors[self.id] = self
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeMeteorAction"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeAction")
local MakeAction = ____MakeAction.MakeAction
____exports.MakeMeteorAction = __TS__Class()
local MakeMeteorAction = ____exports.MakeMeteorAction
MakeMeteorAction.name = "MakeMeteorAction"
__TS__ClassExtends(MakeMeteorAction, MakeAction)
function MakeMeteorAction.prototype.____constructor(self, level, meteor)
MakeAction.prototype.____constructor(self, level)
self.destroy = function()
if not self.isActionMadeB then
self.meteor:destroy()
end
end
self.cancel = function()
if not self.isActionMadeB then
return false
end
self.meteor:delete()
self.isActionMadeB = false
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"meteor creation cancelled"
)
return true
end
self.redo = function()
if self.isActionMadeB then
return false
end
self.meteor:undelete()
self.isActionMadeB = true
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"meteor creation redone"
)
return true
end
self.meteor = meteor
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_create_meteors.MakeMeteor"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MakeMeteorAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeMeteorAction")
local MakeMeteorAction = ____MakeMeteorAction.MakeMeteorAction
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
local ____Meteor = require("src.core.04_STRUCTURES.Meteor.Meteor")
local Meteor = ____Meteor.Meteor
____exports.MakeMeteor = __TS__Class()
local MakeMeteor = ____exports.MakeMeteor
MakeMeteor.name = "MakeMeteor"
__TS__ClassExtends(MakeMeteor, Make)
function MakeMeteor.prototype.____constructor(self, maker)
Make.prototype.____constructor(self, maker, "meteorCreate")
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local meteor = __TS__New(Meteor, self.orderX, self.orderY)
self.escaper:getMakingLevel().meteors:new(meteor, true)
self.escaper:newAction(__TS__New(
MakeMeteorAction,
self.escaper:getMakingLevel(),
meteor
))
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
local MAKE_LAST_CLIC_UNIT_ID = ____Make.MAKE_LAST_CLIC_UNIT_ID
____exports.MakeOneByOneOrTwoClicks = __TS__Class()
local MakeOneByOneOrTwoClicks = ____exports.MakeOneByOneOrTwoClicks
MakeOneByOneOrTwoClicks.name = "MakeOneByOneOrTwoClicks"
__TS__ClassExtends(MakeOneByOneOrTwoClicks, Make)
function MakeOneByOneOrTwoClicks.prototype.____constructor(self, maker, kind, mode, acceptedModes, forSpecificLevel)
if mode == nil then
mode = ""
end
if acceptedModes == nil then
acceptedModes = nil
end
if forSpecificLevel == nil then
forSpecificLevel = true
end
Make.prototype.____constructor(self, maker, kind, forSpecificLevel)
self.lastX = 0
self.lastY = 0
self.acceptedModes = {"oneByOne", "twoClics"}
self.isLastLocSavedUsed = function()
return self.lastLocSavedIsUsed
end
self.saveLoc = function(____, x, y)
self.lastX = x
self.lastY = y
self.lastLocIsSaved = true
self.lastLocSavedIsUsed = true
local ____ = self.unitLastClic and RemoveUnit(self.unitLastClic)
self.unitLastClic = CreateUnit(
self.makerOwner,
MAKE_LAST_CLIC_UNIT_ID,
x,
y,
GetRandomDirectionDeg()
)
self.escaper:destroyCancelledActions()
end
self.unsaveLoc = function()
if not self.lastLocSavedIsUsed then
return false
end
local ____ = self.unitLastClic and RemoveUnit(self.unitLastClic)
self.lastLocSavedIsUsed = false
return true
end
self.unsaveLocDefinitely = function()
self:unsaveLoc()
self.lastLocIsSaved = false
local ____ = self.unitLastClic and RemoveUnit(self.unitLastClic)
__TS__Delete(self, "unitLastClic")
end
self.cancelLastAction = function()
return self:unsaveLoc()
end
self.redoLastAction = function()
if self.lastLocIsSaved and not self.lastLocSavedIsUsed then
self:saveLoc(self.lastX, self.lastY)
return true
end
return false
end
self.getMode = function()
return self.mode
end
self.destroy = function()
Make.prototype.destroy(self)
if self.unitLastClic then
RemoveUnit(self.unitLastClic)
end
end
if acceptedModes then
self.acceptedModes = acceptedModes
end
if not __TS__ArrayIncludes(self.acceptedModes, mode) then
error(((self.constructor.name .. " : wrong mode \"") .. mode) .. "\"", 0)
end
self.mode = mode
self.lastLocIsSaved = false
self.lastLocSavedIsUsed = false
end
return ____exports
end,
["src.core.04_STRUCTURES.MonsterSpawn.SimpleUnitRecycler"] = function(...)
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
____exports.initSimpleUnitRecycler = function()
local units = MemoryHandler.getEmptyArray()
local function destroy()
for ____, u in ipairs(units) do
RemoveUnit(u)
end
MemoryHandler.destroyArray(units)
end
return {
getUnit = function()
local u = table.remove(units, 1)
if u then
ShowUnit(u, true)
end
return u
end,
removeUnit = function(u)
ShowUnit(u, false)
arrayPush(units, u)
end,
destroy = destroy,
reinit = function()
destroy()
units = MemoryHandler.getEmptyArray()
end
}
end
return ____exports
end,
["src.core.04_STRUCTURES.MonsterSpawn.MonsterSpawn"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__MathSign = ____lualib.__TS__MathSign
local __TS__Class = ____lualib.__TS__Class
local __TS__Delete = ____lualib.__TS__Delete
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Point = require("src.Utils.Point")
local createPoint = ____Point.createPoint
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local errorHandler = ____mapUtils.errorHandler
local ____MecHookArray = require("src.core.API.MecHookArray")
local CombineHooks = ____MecHookArray.CombineHooks
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local GetCurrentMonsterPlayer = ____Basic_functions.GetCurrentMonsterPlayer
local arrayPush = ____Basic_functions.arrayPush
local convertAngleToDirection = ____Basic_functions.convertAngleToDirection
local ____Constants = require("src.core.01_libraries.Constants")
local ENNEMY_PLAYER = ____Constants.ENNEMY_PLAYER
local GREY = ____Constants.GREY
local MOBS_VARIOUS_COLORS = ____Constants.MOBS_VARIOUS_COLORS
local TERRAIN_DATA_DISPLAY_TIME = ____Constants.TERRAIN_DATA_DISPLAY_TIME
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____GeneralHooks = require("src.core.API.GeneralHooks")
local hooks = ____GeneralHooks.hooks
local ____Monster = require("src.core.04_STRUCTURES.Monster.Monster")
local Monster = ____Monster.Monster
local ____Monster_functions = require("src.core.04_STRUCTURES.Monster.Monster_functions")
local NewImmobileMonsterForPlayer = ____Monster_functions.NewImmobileMonsterForPlayer
local ____SimpleUnitRecycler = require("src.core.04_STRUCTURES.MonsterSpawn.SimpleUnitRecycler")
local initSimpleUnitRecycler = ____SimpleUnitRecycler.initSimpleUnitRecycler
local DECALAGE_UNSPAWN = 200
local DELAY_BETWEEN_SPAWN_AND_MOVEMENT = 0.5
local function createDiagonalRegions(startX, startY, endX, endY, size)
local regions = MemoryHandler.getEmptyArray()
local distance = math.sqrt((endX - startX) ^ 2 + (endY - startY) ^ 2)
local numRegions = math.floor(distance / size)
local xStep = (endX - startX) / numRegions
local yStep = (endY - startY) / numRegions
do
local i = 0
while i < numRegions do
local topLeft = createPoint(startX + i * xStep, startY + i * yStep)
local bottomRight = createPoint(topLeft.x + size, topLeft.y + size)
regions[#regions + 1] = {topLeft = topLeft, bottomRight = bottomRight}
i = i + 1
end
end
return regions
end
local function expand(v, d)
return v + d * __TS__MathSign(v)
end
--- class MonsterSpawn
____exports.MonsterSpawn = __TS__Class()
local MonsterSpawn = ____exports.MonsterSpawn
MonsterSpawn.name = "MonsterSpawn"
function MonsterSpawn.prototype.____constructor(self, label, mt, rotation, frequence, x1, y1, x2, y2)
self.spawnAmount = 1
self.spawnOffset = 0
self.initialDelay = 0
self.unspawnregpoints = {}
self.multiRegionPatrols = false
self.multiRegionDx = 0
self.multiRegionDy = 0
self.x1 = {}
self.y1 = {}
self.x2 = {}
self.y2 = {}
self.r = {}
self.t = {}
self.fixedSpawnOffsetBounce = false
self.fixedSpawnOffsetMirrored = false
self.bouncing = false
self.mirrored = false
self._futureBouncing = nil
self.simpleUnitRecycler = initSimpleUnitRecycler()
self._active = false
self.getLabel = function()
return self.label
end
self.getMonsterType = function()
return self.mt
end
self.getMinX = function() return self.minX end
self.getMaxX = function() return self.maxX end
self.getMinY = function() return self.minY end
self.getMaxY = function() return self.maxY end
self.getRotatedPoints = function()
local rotatedPoints = MemoryHandler.getEmptyArray()
for ____, point in ipairs(self.points) do
arrayPush(
rotatedPoints,
self:baseApplyRotation(point.x, point.y, (self.rotation == 90 or self.rotation == 270) and self.rotation + 90 or self.rotation)
)
end
return rotatedPoints
end
self.deactivate = function()
self._active = false
local ____table_initialDelayTimer_pause_result_destroy_result_0 = self.initialDelayTimer
if ____table_initialDelayTimer_pause_result_destroy_result_0 ~= nil then
____table_initialDelayTimer_pause_result_destroy_result_0 = ____table_initialDelayTimer_pause_result_destroy_result_0:pause():destroy()
end
if self.multiRegionPatrols then
do
local i = 0
while i < #self.x1 do
DestroyTrigger(self.t[i + 1])
RemoveRegion(self.r[i + 1])
__TS__Delete(self.t, i + 1)
__TS__Delete(self.r, i + 1)
__TS__Delete(self.x1, i + 1)
__TS__Delete(self.y1, i + 1)
__TS__Delete(self.x2, i + 1)
__TS__Delete(self.y2, i + 1)
i = i + 1
end
end
end
if self.tSpawn then
DestroyTrigger(self.tSpawn)
__TS__Delete(self, "tSpawn")
end
if self.tUnspawn then
DestroyTrigger(self.tUnspawn)
__TS__Delete(self, "tUnspawn")
end
if self.monsters then
ForGroup(
self.monsters,
function() return self.simpleUnitRecycler.removeUnit(GetEnumUnit()) end
)
DestroyGroup(self.monsters)
__TS__Delete(self, "monsters")
end
end
self.createUnspawnReg = function()
local x1
local y1
local x2
local y2
x1 = self.maxX
x2 = self.maxX
y1 = self.minY - DECALAGE_UNSPAWN
y2 = self.maxY + DECALAGE_UNSPAWN
if self.rotation ~= 90 and self.rotation ~= 270 then
local ____temp_2 = self:applyRotation(x1, y1)
local nx1 = ____temp_2.x
local ny1 = ____temp_2.y
local ____temp_3 = self:applyRotation(x2, y2)
local nx2 = ____temp_3.x
local ny2 = ____temp_3.y
x1 = nx1
y1 = ny1
x2 = nx2
y2 = ny2
else
x1 = self.minX - DECALAGE_UNSPAWN
x2 = self.maxX + DECALAGE_UNSPAWN
y1 = self.minY
y2 = self.minY
local ____temp_4 = self:baseApplyRotation(x1, y1, self.rotation + 90)
local nx1 = ____temp_4.x
local ny1 = ____temp_4.y
local ____temp_5 = self:baseApplyRotation(x2, y2, self.rotation + 90)
local nx2 = ____temp_5.x
local ny2 = ____temp_5.y
x1 = nx1
y1 = ny1
x2 = nx2
y2 = ny2
end
self.unspawnReg = CreateRegion()
local isDiagonal = self.rotation %% 90 ~= 0
if isDiagonal then
self.unspawnregpoints = {}
local regions = createDiagonalRegions(
x1,
y1,
x2,
y2,
32
)
for ____, region in ipairs(regions) do
local r = Rect(region.topLeft.x, region.topLeft.y, region.bottomRight.x, region.bottomRight.y)
RegionAddRect(self.unspawnReg, r)
RemoveRect(r)
local ____self_unspawnregpoints_6 = self.unspawnregpoints
____self_unspawnregpoints_6[#____self_unspawnregpoints_6 + 1] = {region.topLeft.x, region.topLeft.y, region.bottomRight.x, region.bottomRight.y}
end
regions:__destroy(true)
else
local r = Rect(x1, y1, x2, y2)
RegionAddRect(self.unspawnReg, r)
RemoveRect(r)
self.unspawnregpoints = {{x1, y1, x2, y2}}
end
local maxDistance = math.abs((self.rotation == 0 or self.rotation == 180) and self.minX - self.maxX or self.minY - self.maxY)
local maxTiles = 6 * 128
self.multiRegionPatrols = not isDiagonal and maxDistance >= maxTiles
if self.multiRegionPatrols then
local amountOfPatrols = math.ceil(maxDistance / maxTiles)
local dx = math.floor((self.minX - self.maxX) / amountOfPatrols + 0.5)
local dy = math.floor((self.minY - self.maxY) / amountOfPatrols + 0.5)
self.multiRegionDx = dx
self.multiRegionDy = dy
do
local n = 0
while n < amountOfPatrols - 1 do
local reg = CreateRegion()
local ddx = (n + 1) * dx
local ddy = (n + 1) * dy
local calcX = x1 == x2
local calcY = y1 == y2
local nx1 = self.minX - (calcX and ddx or 0)
local ny1 = self.minY - (calcY and ddy or 0)
local nx2 = calcX and nx1 - 16 or self.maxX
local ny2 = calcY and ny1 - 16 or self.maxY
local r = Rect(nx1, ny1, nx2, ny2)
RegionAddRect(reg, r)
RemoveRect(r)
local ____self_unspawnregpoints_7 = self.unspawnregpoints
____self_unspawnregpoints_7[#____self_unspawnregpoints_7 + 1] = {nx1, ny1, nx2, ny2}
local t = CreateTrigger()
____exports.MonsterSpawn.anyTrigId2MonsterSpawn:set(
GetHandleId(t),
self
)
TriggerRegisterEnterRegion(t, reg, nil)
TriggerAddAction(
t,
function()
local ms = ____exports.MonsterSpawn.anyTrigId2MonsterSpawn:get(GetHandleId(GetTriggeringTrigger()))
if ms and ms.monsters and IsUnitInGroup(
GetTriggerUnit(),
ms.monsters
) then
local u = GetTriggerUnit()
local x = math.floor(GetUnitX(u) + 0.5)
local y = math.floor(GetUnitY(u) + 0.5)
local nddx = (n + 1) * dx
local nddy = (n + 1) * dy
nddx = expand(nddx, DECALAGE_UNSPAWN)
nddy = expand(nddy, DECALAGE_UNSPAWN)
if self.rotation == 0 then
x = self.minX - nddx
elseif self.rotation == 270 then
y = self.maxY + nddy
elseif self.rotation == 180 then
x = self.maxX + nddx
else
y = self.minY - nddy
end
IssuePointOrder(u, "move", x, y)
end
end
)
self.x1[n + 1] = nx1
self.y1[n + 1] = ny1
self.x2[n + 1] = nx2
self.y2[n + 1] = ny2
self.r[n + 1] = reg
self.t[n + 1] = t
n = n + 1
end
end
end
end
self.MonsterStartMovement = function()
if not self._active then
return
end
local mobTimer = GetExpiredTimer()
local ms = ____exports.MonsterSpawn.anyTimerId2MonsterSpawn:get(GetHandleId(mobTimer))
____exports.MonsterSpawn.anyTimerId2MonsterSpawn:delete(GetHandleId(mobTimer))
if ms then
local mobUnit = ____exports.MonsterSpawn.anyTimerId2Unit:get(GetHandleId(mobTimer))
____exports.MonsterSpawn.anyTimerId2Unit:delete(GetHandleId(mobTimer))
if mobUnit then
local spawnIndex = ____exports.MonsterSpawn.anyTimerId2SpawnIndex:get(GetHandleId(mobTimer))
____exports.MonsterSpawn.anyTimerId2SpawnIndex:delete(GetHandleId(mobTimer))
if spawnIndex ~= nil then
local spawnAmount = ____exports.MonsterSpawn.anyTimerId2SpawnAmount:get(GetHandleId(mobTimer))
____exports.MonsterSpawn.anyTimerId2SpawnAmount:delete(GetHandleId(mobTimer))
if spawnAmount ~= nil then
ms:startMobMovement(mobUnit, ms, spawnIndex, spawnAmount)
UnitAddAbility(
mobUnit,
FourCC("Aloc")
)
DestroyTimer(mobTimer)
end
end
end
end
end
self.MonsterSpawn_Actions = errorHandler(function()
local ms = ____exports.MonsterSpawn.anyTrigId2MonsterSpawn:get(GetHandleId(GetTriggeringTrigger()))
if ms then
do
local spawnIndex = 0
while spawnIndex < ms:getSpawnAmount() do
local mobUnit = ms:createMob()
if mobUnit then
local mobTimer = CreateTimer()
____exports.MonsterSpawn.anyTimerId2MonsterSpawn:set(
GetHandleId(mobTimer),
ms
)
____exports.MonsterSpawn.anyTimerId2Unit:set(
GetHandleId(mobTimer),
mobUnit
)
____exports.MonsterSpawn.anyTimerId2SpawnIndex:set(
GetHandleId(mobTimer),
spawnIndex
)
____exports.MonsterSpawn.anyTimerId2SpawnAmount:set(
GetHandleId(mobTimer),
ms:getSpawnAmount()
)
TimerStart(mobTimer, DELAY_BETWEEN_SPAWN_AND_MOVEMENT, false, self.MonsterStartMovement)
SetUnitOwner(mobUnit, ENNEMY_PLAYER, false)
ShowUnit(mobUnit, false)
UnitRemoveAbility(
mobUnit,
FourCC("Aloc")
)
local ____ = ms.monsters and GroupAddUnit(ms.monsters, mobUnit)
end
spawnIndex = spawnIndex + 1
end
end
if self._futureBouncing ~= nil then
self.bouncing = self._futureBouncing
self._futureBouncing = nil
end
end
end)
self.activate = function()
self._active = true
self.monsters = CreateGroup()
if self.initialDelay == 0 then
self.tSpawn = CreateTrigger()
____exports.MonsterSpawn.anyTrigId2MonsterSpawn:set(
GetHandleId(self.tSpawn),
self
)
TriggerRegisterTimerEvent(self.tSpawn, 1 / self.frequence, true)
TriggerAddAction(self.tSpawn, self.MonsterSpawn_Actions)
else
self.initialDelayTimer = createTimer(
self.initialDelay,
false,
function()
self.tSpawn = CreateTrigger()
____exports.MonsterSpawn.anyTrigId2MonsterSpawn:set(
GetHandleId(self.tSpawn),
self
)
TriggerRegisterTimerEvent(self.tSpawn, 1 / self.frequence, true)
TriggerAddAction(self.tSpawn, self.MonsterSpawn_Actions)
end
)
end
local function UnspawMonster_Actions()
local ms = ____exports.MonsterSpawn.anyTrigId2MonsterSpawn:get(GetHandleId(GetTriggeringTrigger()))
if ms and ms.monsters and IsUnitInGroup(
GetTriggerUnit(),
ms.monsters
) then
GroupRemoveUnit(
ms.monsters,
GetTriggerUnit()
)
self.simpleUnitRecycler.removeUnit(GetTriggerUnit())
end
end
self:createUnspawnReg()
self.tUnspawn = CreateTrigger()
____exports.MonsterSpawn.anyTrigId2MonsterSpawn:set(
GetHandleId(self.tUnspawn),
self
)
local ____ = self.unspawnReg and TriggerRegisterEnterRegion(self.tUnspawn, self.unspawnReg, nil)
TriggerAddAction(self.tUnspawn, UnspawMonster_Actions)
end
self.destroy = function()
self:deactivate()
local ____ = self.level and self.level.monsterSpawns:removeMonsterSpawn(self.id)
self.simpleUnitRecycler.destroy()
self.points:__destroy(true)
end
self.calcValOffset = function(____, a, b, spawnIndex, spawnAmount)
if self.fixedSpawnOffset ~= nil then
if self.lastSpawnVal == nil then
self.lastSpawnVal = a
end
if self.lastSpawnValMirrored == nil then
self.lastSpawnValMirrored = b
end
if self.spawnOffset ~= 0 then
if spawnIndex == 0 then
self.lastSpawnVal = self.lastSpawnVal + (self.bouncing and -1 or 1) * self.fixedSpawnOffset
self.lastSpawnValMirrored = self.lastSpawnValMirrored - (self.bouncing and -1 or 1) * self.fixedSpawnOffset
end
else
self.lastSpawnVal = self.lastSpawnVal + (self.bouncing and -1 or 1) * self.fixedSpawnOffset
self.lastSpawnValMirrored = self.lastSpawnValMirrored - (self.bouncing and -1 or 1) * self.fixedSpawnOffset
end
local minX = self.lastSpawnVal
local maxX = self.lastSpawnVal
if self.spawnOffset ~= 0 then
minX = self.lastSpawnVal
maxX = self.lastSpawnVal + self.spawnOffset * (spawnAmount - 1)
end
if maxX + self.fixedSpawnOffset > b then
if self.fixedSpawnOffsetBounce then
self._futureBouncing = true
else
self.lastSpawnVal = a
self.lastSpawnValMirrored = b
end
elseif minX - self.fixedSpawnOffset < a then
if self.fixedSpawnOffsetBounce then
self._futureBouncing = false
else
self.lastSpawnVal = b
self.lastSpawnValMirrored = a
end
end
local spawnVal = self.lastSpawnVal
local spawnValMirrored = self.lastSpawnValMirrored
if self.spawnOffset ~= 0 then
spawnVal = spawnVal + self.spawnOffset * spawnIndex
spawnValMirrored = spawnValMirrored - self.spawnOffset * spawnIndex
end
if self.fixedSpawnOffsetMirrored then
if self.mirrored then
self.mirrored = false
return spawnValMirrored
else
self.mirrored = true
return spawnVal
end
else
return spawnVal
end
else
return GetRandomInt(a, b)
end
end
self.startMobMovement = function(____, mobUnit, ms, spawnIndex, spawnAmount)
local p
local x1
local y1
local x2
local y2
local facing
x1 = self.minX
x2 = self.maxX + DECALAGE_UNSPAWN
y1 = self:calcValOffset(
self:getMinY(),
self:getMaxY(),
spawnIndex,
spawnAmount
)
y2 = y1
if self.multiRegionPatrols then
x2 = self.minX - self.multiRegionDx + 16
end
if self.rotation == 90 or self.rotation == 270 then
x1 = self:calcValOffset(self.minX, self.maxX, spawnIndex, spawnAmount)
x2 = x1
y1 = self.maxY
y2 = self.minY - DECALAGE_UNSPAWN
if self.multiRegionPatrols then
y2 = self.maxY + self.multiRegionDy - 16
end
end
if self.rotation == 0 then
facing = 0
elseif self.rotation == 270 then
facing = 270
elseif self.rotation == 180 then
facing = 180
else
facing = 90
end
local nx1
local ny1
local nx2
local ny2
if self.rotation == 90 or self.rotation == 270 then
do
local ____temp_8 = self:baseApplyRotation(x1, y1, self.rotation + 90)
local x = ____temp_8.x
local y = ____temp_8.y
nx1 = x
ny1 = y
end
do
local ____temp_9 = self:baseApplyRotation(x2, y2, self.rotation + 90)
local x = ____temp_9.x
local y = ____temp_9.y
nx2 = x
ny2 = y
end
else
do
local ____temp_10 = self:applyRotation(x1, y1)
local x = ____temp_10.x
local y = ____temp_10.y
nx1 = x
ny1 = y
end
do
local ____temp_11 = self:applyRotation(x2, y2)
local x = ____temp_11.x
local y = ____temp_11.y
nx2 = x
ny2 = y
end
end
BlzSetUnitFacingEx(mobUnit, facing)
SetUnitX(mobUnit, nx1)
SetUnitY(mobUnit, ny1)
if ms:getMonsterType():isClickable() then
p = ENNEMY_PLAYER
else
p = GetCurrentMonsterPlayer()
end
SetUnitOwner(mobUnit, p, MOBS_VARIOUS_COLORS)
ShowUnit(mobUnit, true)
IssuePointOrder(mobUnit, "move", nx2, ny2)
end
self.createMob = function()
local angle
if self.rotation == 0 then
angle = 180
elseif self.rotation == 270 then
angle = 90
elseif self.rotation == 180 then
angle = 0
else
angle = -90
end
local monster = self.simpleUnitRecycler.getUnit()
if not monster then
local ____CombineHooks_14 = CombineHooks
local ____table_level_monsters_hooks_onBeforeCreateMonsterUnit_12 = self.level
if ____table_level_monsters_hooks_onBeforeCreateMonsterUnit_12 ~= nil then
____table_level_monsters_hooks_onBeforeCreateMonsterUnit_12 = ____table_level_monsters_hooks_onBeforeCreateMonsterUnit_12.monsters.hooks_onBeforeCreateMonsterUnit
end
local hookArray = ____CombineHooks_14(____table_level_monsters_hooks_onBeforeCreateMonsterUnit_12, hooks.hooks_onBeforeCreateMonsterUnit)
if hookArray then
local forceUnitTypeId = 0
local quit = false
for ____, hook in ipairs(hookArray) do
local unitData = MemoryHandler.getEmptyObject()
unitData.mt = self.mt
local output = hook:execute(unitData)
MemoryHandler.destroyObject(unitData)
if output == false then
quit = true
elseif output and output.unitTypeId then
forceUnitTypeId = output.unitTypeId
end
end
if quit then
MemoryHandler.destroyArray(hookArray)
return
end
if forceUnitTypeId > 0 then
Monster.forceUnitTypeIdForNextMonster = forceUnitTypeId
end
end
MemoryHandler.destroyArray(hookArray)
monster = NewImmobileMonsterForPlayer(
self.mt,
ENNEMY_PLAYER,
(self.minX + self.maxX) / 2,
(self.minY + self.maxY) / 2,
angle
)
end
local ____CombineHooks_17 = CombineHooks
local ____table_level_monsters_hooks_onAfterCreateMonsterUnit_15 = self.level
if ____table_level_monsters_hooks_onAfterCreateMonsterUnit_15 ~= nil then
____table_level_monsters_hooks_onAfterCreateMonsterUnit_15 = ____table_level_monsters_hooks_onAfterCreateMonsterUnit_15.monsters.hooks_onAfterCreateMonsterUnit
end
local hookArray2 = ____CombineHooks_17(____table_level_monsters_hooks_onAfterCreateMonsterUnit_15, hooks.hooks_onAfterCreateMonsterUnit)
if hookArray2 then
for ____, hook in ipairs(hookArray2) do
local unitData = MemoryHandler.getEmptyObject()
unitData.mt = self.mt
unitData.u = monster
hook:execute(unitData)
MemoryHandler.destroyObject(unitData)
end
end
MemoryHandler.destroyArray(hookArray2)
return monster
end
self.setLabel = function(____, newLabel)
self.label = newLabel
end
self.setMonsterType = function(____, mt)
self.mt = mt
if self._active then
self:refresh()
end
end
self.setRotation = function(____, rotation)
self.rotation = rotation
if self._active then
self:refresh()
end
local ____table_level_updateDebugRegions_result_18 = self.level
if ____table_level_updateDebugRegions_result_18 ~= nil then
____table_level_updateDebugRegions_result_18 = ____table_level_updateDebugRegions_result_18:updateDebugRegions()
end
end
self.setFrequence = function(____, frequence)
self.frequence = frequence
local ____ = self.tSpawn and DestroyTrigger(self.tSpawn)
self.tSpawn = CreateTrigger()
____exports.MonsterSpawn.anyTrigId2MonsterSpawn:set(
GetHandleId(self.tSpawn),
self
)
TriggerRegisterTimerEvent(self.tSpawn, 1 / self.frequence, true)
TriggerAddAction(self.tSpawn, self.MonsterSpawn_Actions)
end
self.displayForPlayer = function(____, p)
local display = ((((((udg_colorCode[GREY + 1] .. self.label) .. " : ") .. self.mt.label) .. " ") .. convertAngleToDirection(self.rotation)) .. " ") .. R2S(self.frequence)
Text.P_timed(p, TERRAIN_DATA_DISPLAY_TIME, display)
end
self.getSpawnAmount = function() return self.spawnAmount end
self.setSpawnAmount = function(____, spawnAmount)
self.spawnAmount = spawnAmount
end
self.getSpawnOffset = function() return self.spawnOffset end
self.setSpawnOffset = function(____, spawnOffset)
self.spawnOffset = spawnOffset or 0
end
self.getInitialDelay = function() return self.initialDelay end
self.setInitialDelay = function(____, initialDelay)
self.initialDelay = initialDelay
end
self.getFixedSpawnOffset = function() return self.fixedSpawnOffset end
self.setFixedSpawnOffset = function(____, fixedSpawnOffset)
self.fixedSpawnOffset = fixedSpawnOffset
end
self.getFixedSpawnOffsetBounce = function() return self.fixedSpawnOffsetBounce end
self.setFixedSpawnOffsetBounce = function(____, fixedSpawnOffsetBounce)
self.fixedSpawnOffsetBounce = fixedSpawnOffsetBounce or false
end
self.getFixedSpawnOffsetMirrored = function() return self.fixedSpawnOffsetMirrored end
self.setFixedSpawnOffsetMirrored = function(____, fixedSpawnOffsetMirrored)
self.fixedSpawnOffsetMirrored = fixedSpawnOffsetMirrored or false
end
self.baseApplyRotation = function(____, x, y, rotation)
local theta = Deg2Rad(rotation)
local c = math.cos(theta)
local s = math.sin(theta)
local newX = (x - self.anchor.x) * c - (y - self.anchor.y) * s + self.anchor.x
local newY = (x - self.anchor.x) * s + (y - self.anchor.y) * c + self.anchor.y
return createPoint(newX, newY)
end
self.applyRotation = function(____, x, y)
return self:baseApplyRotation(x, y, self.rotation)
end
self.calculateCenterPoint = function(____, topLeftX, topLeftY, bottomRightX, bottomRightY)
local centerX = (topLeftX + bottomRightX) / 2
local centerY = (topLeftY + bottomRightY) / 2
return {x = centerX, y = centerY}
end
self.refresh = function()
self:deactivate()
self.simpleUnitRecycler.reinit()
self:activate()
end
self.toJson = function()
local output = MemoryHandler.getEmptyObject()
output.label = self.label
output.monsterTypeLabel = self.mt.label
output.sens = self.rotation
output.frequence = self.frequence
output.spawnAmount = self.spawnAmount
output.spawnOffset = self.spawnOffset
output.initialDelay = self.initialDelay
output.fixedSpawnOffset = self.fixedSpawnOffset
output.fixedSpawnOffsetBounce = self.fixedSpawnOffsetBounce
output.fixedSpawnOffsetMirrored = self.fixedSpawnOffsetMirrored
output.minX = R2I(self.minX)
output.minY = R2I(self.minY)
output.maxX = R2I(self.maxX)
output.maxY = R2I(self.maxY)
return output
end
self.rotation = rotation
self.id = ____exports.MonsterSpawn:getNextId()
self.label = label
self.mt = mt
self.frequence = frequence
self.minX = math.floor(RMinBJ(x1, x2) + 0.5)
self.minY = math.floor(RMinBJ(y1, y2) + 0.5)
self.maxX = math.floor(RMaxBJ(x1, x2) + 0.5)
self.maxY = math.floor(RMaxBJ(y1, y2) + 0.5)
self.points = MemoryHandler.getEmptyArray()
arrayPush(
self.points,
createPoint(
math.floor(RMinBJ(x1, x2) + 0.5),
math.floor(RMinBJ(y1, y2) + 0.5)
)
)
arrayPush(
self.points,
createPoint(
math.floor(RMaxBJ(x1, x2) + 0.5),
math.floor(RMinBJ(y1, y2) + 0.5)
)
)
arrayPush(
self.points,
createPoint(
math.floor(RMaxBJ(x1, x2) + 0.5),
math.floor(RMaxBJ(y1, y2) + 0.5)
)
)
arrayPush(
self.points,
createPoint(
math.floor(RMinBJ(x1, x2) + 0.5),
math.floor(RMaxBJ(y1, y2) + 0.5)
)
)
self.anchor = self:calculateCenterPoint(self.minX, self.minY, self.maxX, self.maxY)
end
function MonsterSpawn.prototype.getId(self)
return self.id
end
MonsterSpawn.anyTrigId2MonsterSpawn = __TS__New(Map)
MonsterSpawn.anyTimerId2Unit = __TS__New(Map)
MonsterSpawn.anyTimerId2SpawnIndex = __TS__New(Map)
MonsterSpawn.anyTimerId2SpawnAmount = __TS__New(Map)
MonsterSpawn.anyTimerId2MonsterSpawn = __TS__New(Map)
MonsterSpawn.lastInstanceId = -1
MonsterSpawn.getNextId = function()
local ____exports_MonsterSpawn_20, ____lastInstanceId_21 = ____exports.MonsterSpawn, "lastInstanceId"
local ____exports_MonsterSpawn_lastInstanceId_22 = ____exports_MonsterSpawn_20[____lastInstanceId_21] + 1
____exports_MonsterSpawn_20[____lastInstanceId_21] = ____exports_MonsterSpawn_lastInstanceId_22
return ____exports_MonsterSpawn_lastInstanceId_22
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_create_monster_spawn.MakeMonsterSpawn"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MonsterSpawn = require("src.core.04_STRUCTURES.MonsterSpawn.MonsterSpawn")
local MonsterSpawn = ____MonsterSpawn.MonsterSpawn
____exports.MakeMonsterSpawn = __TS__Class()
local MakeMonsterSpawn = ____exports.MakeMonsterSpawn
MakeMonsterSpawn.name = "MakeMonsterSpawn"
__TS__ClassExtends(MakeMonsterSpawn, MakeOneByOneOrTwoClicks)
function MakeMonsterSpawn.prototype.____constructor(self, maker, label, mt, sens, frequence)
MakeOneByOneOrTwoClicks.prototype.____constructor(
self,
maker,
"monsterSpawnCreate",
"",
{""}
)
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
if self:isLastLocSavedUsed() then
local level = self.escaper:getMakingLevel()
local ms = __TS__New(
MonsterSpawn,
self.label,
self.mt,
self.sens,
self.frequence,
self.lastX,
self.lastY,
self.orderX,
self.orderY
)
level.monsterSpawns:new(ms, true)
Text.mkP(self.makerOwner, ("monster spawn \"" .. self.label) .. "\" created")
self.escaper:destroyMake()
else
self:saveLoc(self.orderX, self.orderY)
end
end
end
self.label = label
self.mt = mt
self.sens = sens
self.frequence = frequence
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_create_monsters.MakeMonsterMultiplePatrols"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__Delete = ____lualib.__TS__Delete
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeMonsterAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeMonsterAction")
local MakeMonsterAction = ____MakeMonsterAction.MakeMonsterAction
local ____MonsterMultiplePatrols = require("src.core.04_STRUCTURES.Monster.MonsterMultiplePatrols")
local MonsterMultiplePatrols = ____MonsterMultiplePatrols.MonsterMultiplePatrols
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
local MAKE_LAST_CLIC_UNIT_ID = ____Make.MAKE_LAST_CLIC_UNIT_ID
____exports.MakeMonsterMultiplePatrols = __TS__Class()
local MakeMonsterMultiplePatrols = ____exports.MakeMonsterMultiplePatrols
MakeMonsterMultiplePatrols.name = "MakeMonsterMultiplePatrols"
__TS__ClassExtends(MakeMonsterMultiplePatrols, Make)
function MakeMonsterMultiplePatrols.prototype.____constructor(self, maker, mode, mt)
Make.prototype.____constructor(self, maker, "monsterCreateMultiplePatrols")
self.lastX = {}
self.lastY = {}
self.getMonsterType = function()
return self.mt
end
self.getMode = function()
return self.mode
end
self.getMonster = function()
return self.monster
end
self.nextMonster = function()
self.lastLocId = -1
self.locPointeur = -1
local ____ = self.unitLastClic and RemoveUnit(self.unitLastClic)
__TS__Delete(self, "unitLastClic")
if self.monster then
self.escaper:newAction(__TS__New(
MakeMonsterAction,
self.escaper:getMakingLevel(),
self.monster
))
__TS__Delete(self, "monster")
end
end
self.getLocPointeur = function()
return self.locPointeur
end
self.setUnitLastClicPosition = function(____, x, y)
if not self.unitLastClic then
self.unitLastClic = CreateUnit(
self.makerOwner,
MAKE_LAST_CLIC_UNIT_ID,
x,
y,
GetRandomDirectionDeg()
)
else
SetUnitPosition(self.unitLastClic, x, y)
end
end
self.saveLoc = function(____, x, y)
self.locPointeur = self.locPointeur + 1
self.lastX[self.locPointeur + 1] = x
self.lastY[self.locPointeur + 1] = y
self.lastLocId = self.locPointeur
self:setUnitLastClicPosition(x, y)
self.escaper:destroyCancelledActions()
end
self.unsaveLoc = function()
if self.locPointeur < 0 then
return false
end
local ____ = self.monster and self.monster:destroyLastLoc()
self.locPointeur = self.locPointeur - 1
if self.locPointeur >= 0 then
self:setUnitLastClicPosition(self.lastX[self.locPointeur + 1], self.lastY[self.locPointeur + 1])
else
local ____ = self.unitLastClic and RemoveUnit(self.unitLastClic)
local ____ = self.monster and self.monster:removeUnit()
end
return true
end
self.setMonster = function(____, monster)
if self.monster then
self.monster:destroy()
end
self.monster = monster
end
self.cancelLastAction = function()
return self:unsaveLoc()
end
self.redoLastAction = function()
if self.locPointeur < self.lastLocId then
self.locPointeur = self.locPointeur + 1
local ____ = self.monster and self.monster:addNewLoc(self.lastX[self.locPointeur + 1], self.lastY[self.locPointeur + 1])
self:setUnitLastClicPosition(self.lastX[self.locPointeur + 1], self.lastY[self.locPointeur + 1])
return true
end
return false
end
self.destroy = function()
if self.monster then
self.escaper:newAction(__TS__New(
MakeMonsterAction,
self.escaper:getMakingLevel(),
self.monster
))
end
local ____ = self.unitLastClic and RemoveUnit(self.unitLastClic)
Make.prototype.destroy(self)
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local erreur
if self:getLocPointeur() >= 0 then
if self.monster then
erreur = self.monster:addNewLoc(self.orderX, self.orderY)
if erreur > 0 then
if erreur == 2 then
Text.erP(self.makerOwner, "Too close to the last location !")
end
if erreur == 1 then
Text.erP(self.makerOwner, "Too close to the first location !")
end
else
self:saveLoc(self.orderX, self.orderY)
end
end
else
MonsterMultiplePatrols:destroyLocs()
MonsterMultiplePatrols:storeNewLoc(self.orderX, self.orderY)
self:saveLoc(self.orderX, self.orderY)
local monster = __TS__New(
MonsterMultiplePatrols,
self:getMonsterType(),
self:getMode()
)
self.escaper:getMakingLevel().monsters:new(monster, true)
self:setMonster(monster)
end
end
end
if mode ~= "normal" and mode ~= "string" then
error(((self.constructor.name .. " : wrong mode \"") .. mode) .. "\"", 0)
end
self.mt = mt
self.mode = mode
self.lastLocId = -1
self.locPointeur = -1
end
return ____exports
end,
["src.core.04_STRUCTURES.TerrainType.Terrain_type_functions"] = function(...)
local ____exports = {}
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
____exports.TerrainTypeId2TerrainType = function(terrainTypeId)
for _, terrainType in pairs(getUdgTerrainTypes():getAll()) do
if terrainType:getTerrainTypeId() == terrainTypeId then
return terrainType
end
end
return nil
end
____exports.IsTerrainTypeOfKind = function(terrainTypeId, terrainTypeKind)
local terrainType = ____exports.TerrainTypeId2TerrainType(terrainTypeId)
if terrainType == nil then
return false
end
return terrainTypeKind == terrainType:getKind()
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_create_monsters.MakeMonsterSimplePatrol"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local GetLocDist = ____Basic_functions.GetLocDist
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Constants = require("src.core.01_libraries.Constants")
local PATROL_DISTANCE_MIN = ____Constants.PATROL_DISTANCE_MIN
local ____MonsterSimplePatrol = require("src.core.04_STRUCTURES.Monster.MonsterSimplePatrol")
local createMonsterSmartPatrol = ____MonsterSimplePatrol.createMonsterSmartPatrol
local ____Terrain_type_functions = require("src.core.04_STRUCTURES.TerrainType.Terrain_type_functions")
local IsTerrainTypeOfKind = ____Terrain_type_functions.IsTerrainTypeOfKind
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
local ____MakeMonsterAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeMonsterAction")
local MakeMonsterAction = ____MakeMonsterAction.MakeMonsterAction
____exports.MakeMonsterSimplePatrol = __TS__Class()
local MakeMonsterSimplePatrol = ____exports.MakeMonsterSimplePatrol
MakeMonsterSimplePatrol.name = "MakeMonsterSimplePatrol"
__TS__ClassExtends(MakeMonsterSimplePatrol, MakeOneByOneOrTwoClicks)
function MakeMonsterSimplePatrol.prototype.____constructor(self, maker, mode, mt)
MakeOneByOneOrTwoClicks.prototype.____constructor(
self,
maker,
"monsterCreateSimplePatrol",
mode,
{"normal", "string", "auto"}
)
self.getMonsterType = function()
return self.mt
end
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
local monster = nil
local x1 = 0
local y1 = 0
local x2 = 0
local y2 = 0
local dist = 0
local angle = 0
local found
if __TS__ArrayIncludes(
{"normal", "string"},
self:getMode()
) then
if self:isLastLocSavedUsed() then
if GetLocDist(self.lastX, self.lastY, self.orderX, self.orderY) <= PATROL_DISTANCE_MIN then
Text.erP(self.makerOwner, "Too close to the start location !")
return
else
monster = createMonsterSmartPatrol(
self:getMonsterType(),
self.lastX,
self.lastY,
self.orderX,
self.orderY
)
if self:getMode() == "normal" then
self:unsaveLocDefinitely()
else
self:saveLoc(self.orderX, self.orderY)
end
end
else
self:saveLoc(self.orderX, self.orderY)
end
end
if self:getMode() == "auto" then
if IsTerrainTypeOfKind(
GetTerrainType(self.orderX, self.orderY),
"death"
) then
Text.erP(self.makerOwner, "You clicked on a death terrain !")
return
end
found = false
dist = ____exports.MakeMonsterSimplePatrol.MIN_DIST
while true do
if found or dist > ____exports.MakeMonsterSimplePatrol.MAX_DIST then
break
end
angle = 0
x1 = self.orderX + dist * CosBJ(angle)
y1 = self.orderY + dist * SinBJ(angle)
found = IsTerrainTypeOfKind(
GetTerrainType(x1, y1),
"death"
)
if found then
break
end
angle = 90
x1 = self.orderX + dist * CosBJ(angle)
y1 = self.orderY + dist * SinBJ(angle)
found = IsTerrainTypeOfKind(
GetTerrainType(x1, y1),
"death"
)
if found then
break
end
angle = 180
x1 = self.orderX + dist * CosBJ(angle)
y1 = self.orderY + dist * SinBJ(angle)
found = IsTerrainTypeOfKind(
GetTerrainType(x1, y1),
"death"
)
if found then
break
end
angle = 270
x1 = self.orderX + dist * CosBJ(angle)
y1 = self.orderY + dist * SinBJ(angle)
found = IsTerrainTypeOfKind(
GetTerrainType(x1, y1),
"death"
)
if found then
break
end
angle = 1
while true do
if found or angle >= 360 then
break
end
x1 = self.orderX + dist * CosBJ(angle)
y1 = self.orderY + dist * SinBJ(angle)
found = IsTerrainTypeOfKind(
GetTerrainType(x1, y1),
"death"
)
angle = angle + ____exports.MakeMonsterSimplePatrol.ECART_ANGLE
end
angle = angle - ____exports.MakeMonsterSimplePatrol.ECART_ANGLE
dist = dist + ____exports.MakeMonsterSimplePatrol.ECART_DIST
end
if not found then
Text.erP(self.makerOwner, "Death terrain too far !")
return
end
while true do
if not IsTerrainTypeOfKind(
GetTerrainType(x1, y1),
"death"
) then
break
end
dist = dist - 1
x1 = self.orderX + dist * CosBJ(angle)
y1 = self.orderY + dist * SinBJ(angle)
end
dist = dist + ____exports.MakeMonsterSimplePatrol.distOnTerrain + 1
x1 = self.orderX + dist * CosBJ(angle)
y1 = self.orderY + dist * SinBJ(angle)
if angle >= 180 then
angle = angle - 180
else
angle = angle + 180
end
found = false
dist = ____exports.MakeMonsterSimplePatrol.MIN_DIST
while true do
if found or dist > ____exports.MakeMonsterSimplePatrol.MAX_DIST then
break
end
x2 = self.orderX + dist * CosBJ(angle)
y2 = self.orderY + dist * SinBJ(angle)
found = IsTerrainTypeOfKind(
GetTerrainType(x2, y2),
"death"
)
dist = dist + ____exports.MakeMonsterSimplePatrol.ECART_DIST
end
if not found then
Text.erP(self.makerOwner, "Death terrain too far for the second location !")
return
end
while true do
if not IsTerrainTypeOfKind(
GetTerrainType(x2, y2),
"death"
) then
break
end
dist = dist - 1
x2 = self.orderX + dist * CosBJ(angle)
y2 = self.orderY + dist * SinBJ(angle)
end
dist = dist + ____exports.MakeMonsterSimplePatrol.distOnTerrain + 1
x2 = self.orderX + dist * CosBJ(angle)
y2 = self.orderY + dist * SinBJ(angle)
monster = createMonsterSmartPatrol(
self:getMonsterType(),
x1,
y1,
x2,
y2
)
end
if monster then
self.escaper:getMakingLevel().monsters:new(monster, true)
self.escaper:newAction(__TS__New(
MakeMonsterAction,
self.escaper:getMakingLevel(),
monster
))
end
end
end
if not mt then
error(self.constructor.name .. " : monster type required", 0)
end
self.mt = mt
end
function MakeMonsterSimplePatrol.changeDistOnTerrain(self, newDist)
if newDist < 0 or newDist > ____exports.MakeMonsterSimplePatrol.DIST_ON_TERRAIN_MAX then
return false
end
____exports.MakeMonsterSimplePatrol.distOnTerrain = newDist
return true
end
function MakeMonsterSimplePatrol.changeDistOnTerrainDefault(self)
____exports.MakeMonsterSimplePatrol.distOnTerrain = ____exports.MakeMonsterSimplePatrol.DIST_ON_TERRAIN_DEFAULT
end
MakeMonsterSimplePatrol.MIN_DIST = 5
MakeMonsterSimplePatrol.MAX_DIST = 2000
MakeMonsterSimplePatrol.ECART_DIST = 32
MakeMonsterSimplePatrol.ECART_ANGLE = 9
MakeMonsterSimplePatrol.DIST_ON_TERRAIN_MAX = 300
MakeMonsterSimplePatrol.DIST_ON_TERRAIN_DEFAULT = 50
MakeMonsterSimplePatrol.distOnTerrain = 50
return ____exports
end,
["src.core.04_STRUCTURES.Monster.MonsterTeleport"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArrayForEach = ____lualib.__TS__ArrayForEach
local __TS__Delete = ____lualib.__TS__Delete
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local ____exports = {}
local ____globals = require("globals")
local udg_monsters = ____globals.udg_monsters
local ____Monster = require("src.core.04_STRUCTURES.Monster.Monster")
local Monster = ____Monster.Monster
local ____Monster_functions = require("src.core.04_STRUCTURES.Monster.Monster_functions")
local NewImmobileMonster = ____Monster_functions.NewImmobileMonster
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayValuesRound = ____Basic_functions.arrayValuesRound
____exports.WAIT = 1000000
____exports.HIDE = 2000000
____exports.MONSTER_TELEPORT_PERIOD_MIN = 0.1
____exports.MONSTER_TELEPORT_PERIOD_MAX = 10
local function MonsterTeleport_move_Actions()
local monsterTP = ____exports.MonsterTeleport.anyMonsterTeleportTimerId2MonsterTeleport:get(GetHandleId(GetExpiredTimer()))
if monsterTP then
monsterTP:nextMove()
end
end
____exports.MonsterTeleport = __TS__Class()
local MonsterTeleport = ____exports.MonsterTeleport
MonsterTeleport.name = "MonsterTeleport"
__TS__ClassExtends(MonsterTeleport, Monster)
function MonsterTeleport.prototype.____constructor(self, mt, period, angle, mode, forceId)
if forceId == nil then
forceId = nil
end
Monster.prototype.____constructor(self, mt, forceId)
self.x = {}
self.y = {}
self.killUnit = function()
Monster.prototype.killUnit(self)
PauseTimer(self.t)
end
self.getPeriod = function()
return self.period
end
self.createUnit = function()
if #self.x < 1 then
return
end
Monster.prototype.createUnit(
self,
function() return self.mt and NewImmobileMonster(self.mt, self.x[1], self.y[1], self.angle) or nil end
)
self.currentLoc = 0
if self.sens == 2 then
self.sens = 1
end
TimerStart(self.t, self.period, true, MonsterTeleport_move_Actions)
end
self.nextMove = function()
local lastLocInd = #self.x - 1
if self.sens == 0 or self.sens == 1 then
if self.currentLoc >= lastLocInd then
if self.sens == 0 then
self.currentLoc = 0
else
self.sens = 2
self.currentLoc = self.currentLoc - 1
end
else
self.currentLoc = self.currentLoc + 1
end
else
if self.currentLoc <= 0 then
self.sens = 1
self.currentLoc = 1
else
self.currentLoc = self.currentLoc - 1
end
end
if self.u then
local x = self:getX(self.currentLoc)
local y = self:getY(self.currentLoc)
if x == ____exports.HIDE and y == ____exports.HIDE then
ShowUnit(self.u, false)
elseif x ~= ____exports.WAIT or y ~= ____exports.WAIT then
if IsUnitHidden(self.u) then
ShowUnit(self.u, true)
if self.mt and not self.mt:isClickable() then
UnitRemoveAbility(
self.u,
FourCC("Aloc")
)
UnitAddAbility(
self.u,
FourCC("Aloc")
)
end
end
SetUnitX(self.u, x)
SetUnitY(self.u, y)
end
end
end
self.getX = function(____, id)
return self.x[id + 1]
end
self.getY = function(____, id)
return self.y[id + 1]
end
self.addNewLocAt = function(____, id, x, y)
self.x[id + 1] = x
self.y[id + 1] = y
end
self.addNewLoc = function(____, x, y)
local newLastLocInd = #self.x
self:addNewLocAt(newLastLocInd, x, y)
if newLastLocInd == 0 then
self:createUnit()
end
return true
end
self.destroyLastLoc = function()
local lastLocInd = #self.x - 1
if lastLocInd < 0 then
return false
end
if lastLocInd == 0 then
PauseTimer(self.t)
local ____ = self.u and RemoveUnit(self.u)
end
__TS__Delete(self.x, lastLocInd + 1)
__TS__Delete(self.y, lastLocInd + 1)
return true
end
self.destroy = function()
____exports.MonsterTeleport.anyMonsterTeleportTimerId2MonsterTeleport:delete(GetHandleId(self.t))
DestroyTimer(self.t)
Monster.prototype.destroy(self)
end
if mode ~= "normal" and mode ~= "string" then
error(((self.constructor.name .. " : wrong mode \"") .. mode) .. "\"", 0)
end
if period < ____exports.MONSTER_TELEPORT_PERIOD_MIN or period > ____exports.MONSTER_TELEPORT_PERIOD_MAX then
error(
((self.constructor.name .. " : wrong period \"") .. tostring(period)) .. "\"",
0
)
end
if mode == "normal" then
self.sens = 0
else
self.sens = 1
end
self.angle = angle
self.period = period
self.t = CreateTimer()
____exports.MonsterTeleport.anyMonsterTeleportTimerId2MonsterTeleport:set(
GetHandleId(self.t),
self
)
__TS__ArrayForEach(
____exports.MonsterTeleport.X,
function(____, x, n)
local y = ____exports.MonsterTeleport.Y[n + 1]
self.x[n + 1] = x
self.y[n + 1] = y
end
)
self.currentLoc = -1
____exports.MonsterTeleport:destroyLocs()
end
function MonsterTeleport.storeNewLoc(self, x, y)
local nbLocsBefore = #____exports.MonsterTeleport.X
____exports.MonsterTeleport.X[nbLocsBefore + 1] = x
____exports.MonsterTeleport.Y[nbLocsBefore + 1] = y
return true
end
function MonsterTeleport.destroyLocs(self)
____exports.MonsterTeleport.X = {}
____exports.MonsterTeleport.Y = {}
end
function MonsterTeleport.prototype.removeUnit(self)
Monster.prototype.removeUnit(self)
PauseTimer(self.t)
end
function MonsterTeleport.prototype.setPeriod(self, period)
if period < ____exports.MONSTER_TELEPORT_PERIOD_MIN or period > ____exports.MONSTER_TELEPORT_PERIOD_MAX then
return false
end
self.period = period
if self.u and IsUnitAliveBJ(self.u) then
TimerStart(self.t, self.period, true, MonsterTeleport_move_Actions)
end
return true
end
function MonsterTeleport.prototype.toJson(self)
local output = Monster.prototype.toJson(self)
if output then
output.mode = self.sens > 0 and "string" or "normal"
output.period = self.period
output.angle = R2I(self.angle)
output.xArr = arrayValuesRound(self.x)
output.yArr = arrayValuesRound(self.y)
end
return output
end
MonsterTeleport.X = {}
MonsterTeleport.Y = {}
MonsterTeleport.anyMonsterTeleportTimerId2MonsterTeleport = __TS__New(Map)
MonsterTeleport.count = function()
local n = 0
for _, monster in pairs(udg_monsters) do
if __TS__InstanceOf(monster, ____exports.MonsterTeleport) then
n = n + 1
end
end
return n
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_create_monsters.MakeMonsterTeleport"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__Delete = ____lualib.__TS__Delete
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MakeMonsterAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeMonsterAction")
local MakeMonsterAction = ____MakeMonsterAction.MakeMonsterAction
local ____MonsterTeleport = require("src.core.04_STRUCTURES.Monster.MonsterTeleport")
local HIDE = ____MonsterTeleport.HIDE
local MonsterTeleport = ____MonsterTeleport.MonsterTeleport
local MONSTER_TELEPORT_PERIOD_MAX = ____MonsterTeleport.MONSTER_TELEPORT_PERIOD_MAX
local MONSTER_TELEPORT_PERIOD_MIN = ____MonsterTeleport.MONSTER_TELEPORT_PERIOD_MIN
local WAIT = ____MonsterTeleport.WAIT
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
local MAKE_LAST_CLIC_UNIT_ID = ____Make.MAKE_LAST_CLIC_UNIT_ID
____exports.MakeMonsterTeleport = __TS__Class()
local MakeMonsterTeleport = ____exports.MakeMonsterTeleport
MakeMonsterTeleport.name = "MakeMonsterTeleport"
__TS__ClassExtends(MakeMonsterTeleport, Make)
function MakeMonsterTeleport.prototype.____constructor(self, maker, mode, mt, period, angle)
Make.prototype.____constructor(self, maker, "monsterCreateTeleport")
self.lastX = {}
self.lastY = {}
self.getMonsterType = function()
return self.mt
end
self.getPeriod = function()
return self.period
end
self.getAngle = function()
return self.angle
end
self.getMode = function()
return self.mode
end
self.getMonster = function()
return self.monster
end
self.nextMonster = function()
self.lastLocId = -1
self.locPointeur = -1
local ____ = self.unitLastClic and RemoveUnit(self.unitLastClic)
__TS__Delete(self, "unitLastClic")
if self.monster then
self.escaper:newAction(__TS__New(
MakeMonsterAction,
self.escaper:getMakingLevel(),
self.monster
))
__TS__Delete(self, "monster")
end
end
self.addWaitPeriod = function()
if self.locPointeur < 0 then
return false
end
if self:saveLoc(WAIT, WAIT) then
local ____ = self.monster and self.monster:addNewLoc(WAIT, WAIT)
return true
end
return false
end
self.addHidePeriod = function()
if self.locPointeur < 0 then
return false
end
if self:saveLoc(HIDE, HIDE) then
local ____ = self.monster and self.monster:addNewLoc(HIDE, HIDE)
return true
end
return false
end
self.getLocPointeur = function()
return self.locPointeur
end
self.setUnitLastClicPosition = function(____, x, y)
if not self.unitLastClic then
self.unitLastClic = CreateUnit(
self.makerOwner,
MAKE_LAST_CLIC_UNIT_ID,
x,
y,
GetRandomDirectionDeg()
)
else
SetUnitPosition(self.unitLastClic, x, y)
end
end
self.saveLoc = function(____, x, y)
self.locPointeur = self.locPointeur + 1
self.lastX[self.locPointeur + 1] = x
self.lastY[self.locPointeur + 1] = y
self.lastLocId = self.locPointeur
if not (x == y and (x == WAIT or x == HIDE)) then
self:setUnitLastClicPosition(x, y)
end
self.escaper:destroyCancelledActions()
return true
end
self.unsaveLoc = function()
local x
local y
local i
if self.locPointeur < 0 then
return false
end
local ____ = self.monster and self.monster:destroyLastLoc()
self.locPointeur = self.locPointeur - 1
if self.locPointeur >= 0 then
x = self.lastX[self.locPointeur + 1]
y = self.lastY[self.locPointeur + 1]
i = self.locPointeur
while true do
if i < 0 or not (x == y and (x == WAIT or x == HIDE)) then
break
end
i = i - 1
x = self.lastX[i + 1]
y = self.lastY[i + 1]
end
if i >= 0 then
self:setUnitLastClicPosition(self.lastX[i + 1], self.lastY[i + 1])
else
local ____ = self.unitLastClic and RemoveUnit(self.unitLastClic)
__TS__Delete(self, "unitLastClic")
end
else
local ____ = self.unitLastClic and RemoveUnit(self.unitLastClic)
__TS__Delete(self, "unitLastClic")
end
return true
end
self.setMonster = function(____, monster)
if self.monster then
self.monster:destroy()
end
self.monster = monster
end
self.cancelLastAction = function()
return self:unsaveLoc()
end
self.redoLastAction = function()
if self.locPointeur < self.lastLocId then
self.locPointeur = self.locPointeur + 1
local ____ = self.monster and self.monster:addNewLoc(self.lastX[self.locPointeur + 1], self.lastY[self.locPointeur + 1])
self:setUnitLastClicPosition(self.lastX[self.locPointeur + 1], self.lastY[self.locPointeur + 1])
return true
end
return false
end
self.destroy = function()
if self.monster then
self.escaper:newAction(__TS__New(
MakeMonsterAction,
self.escaper:getMakingLevel(),
self.monster
))
end
local ____ = self.unitLastClic and RemoveUnit(self.unitLastClic)
Make.prototype.destroy(self)
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
if self:getLocPointeur() >= 0 then
if self.monster then
self.monster:addNewLoc(self.orderX, self.orderY)
self:saveLoc(self.orderX, self.orderY)
end
else
MonsterTeleport:destroyLocs()
MonsterTeleport:storeNewLoc(self.orderX, self.orderY)
self:saveLoc(self.orderX, self.orderY)
local monster = __TS__New(
MonsterTeleport,
self:getMonsterType(),
self:getPeriod(),
self:getAngle(),
self:getMode()
)
self.escaper:getMakingLevel().monsters:new(monster, true)
self:setMonster(monster)
end
end
end
if mode ~= "normal" and mode ~= "string" then
error(((self.constructor.name .. " : wrong mode \"") .. mode) .. "\"", 0)
end
if period < MONSTER_TELEPORT_PERIOD_MIN or period > MONSTER_TELEPORT_PERIOD_MAX then
error(
((self.constructor.name .. " : wrong periode \"") .. tostring(period)) .. "\"",
0
)
end
self.mt = mt
self.mode = mode
self.period = period
self.angle = angle
self.lastLocId = -1
self.locPointeur = -1
end
return ____exports
end,
["src.core.04_STRUCTURES.Level.StaticSlide"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ArrayIndexOf = ____lualib.__TS__ArrayIndexOf
local __TS__ArraySplice = ____lualib.__TS__ArraySplice
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local IsIssuedOrder = ____Basic_functions.IsIssuedOrder
local StopUnit = ____Basic_functions.StopUnit
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local globals = ____globals.globals
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local IsHero = ____Escaper_functions.IsHero
local SLIDE_PERIOD_TPs = 0.01
____exports.StaticSlide = __TS__Class()
local StaticSlide = ____exports.StaticSlide
StaticSlide.name = "StaticSlide"
function StaticSlide.prototype.____constructor(self, x1, y1, x2, y2, x3, y3, x4, y4, angle, speed)
self.slidingPlayers = {}
self.triggers = {}
self.destroy = function()
self:activate(false)
local ____ = self.level and self.id and self.level.staticSlides:removeStaticSlide(self.id)
end
self.removePlayer = function(____, playerId)
local itemIndex = __TS__ArrayIndexOf(self.slidingPlayers, playerId)
if itemIndex ~= -1 then
local ____getUdgEscapers_result_get_result_enableSlide_result_0 = getUdgEscapers():get(playerId)
if ____getUdgEscapers_result_get_result_enableSlide_result_0 ~= nil then
____getUdgEscapers_result_get_result_enableSlide_result_0 = ____getUdgEscapers_result_get_result_enableSlide_result_0:enableSlide(true)
end
local ____getUdgEscapers_result_get_result_setStaticSliding_result_2 = getUdgEscapers():get(playerId)
if ____getUdgEscapers_result_get_result_setStaticSliding_result_2 ~= nil then
____getUdgEscapers_result_get_result_setStaticSliding_result_2 = ____getUdgEscapers_result_get_result_setStaticSliding_result_2:setStaticSliding(false)
end
__TS__ArraySplice(self.slidingPlayers, itemIndex, 1)
end
end
self.activate = function(____, activ)
if activ then
local rect = Rect(self.x1, self.y1, self.x2, self.y2)
arrayPush(
self.triggers,
createEvent({
events = {function(t) return TriggerRegisterEnterRectSimple(t, rect) end},
actions = {function()
local hero = GetTriggerUnit()
local escaper = Hero2Escaper(hero)
if IsHero(hero) and escaper and not escaper:isStaticSliding() and not __TS__ArrayIncludes(
self.slidingPlayers,
escaper:getEscaperId()
) then
arrayPush(
self.slidingPlayers,
escaper:getEscaperId()
)
escaper:setStaticSliding(true)
SetUnitFacing(hero, self.angle)
local ____Hero2Escaper_result_enableSlide_result_4 = Hero2Escaper(hero)
if ____Hero2Escaper_result_enableSlide_result_4 ~= nil then
____Hero2Escaper_result_enableSlide_result_4 = ____Hero2Escaper_result_enableSlide_result_4:enableSlide(false)
end
local ____Hero2Escaper_result_setLastTerrainType_result_6 = Hero2Escaper(hero)
if ____Hero2Escaper_result_setLastTerrainType_result_6 ~= nil then
____Hero2Escaper_result_setLastTerrainType_result_6 = ____Hero2Escaper_result_setLastTerrainType_result_6:setLastTerrainType(nil)
end
end
end}
})
)
RemoveRect(rect)
local rect2 = Rect(self.x3, self.y3, self.x4, self.y4)
arrayPush(
self.triggers,
createEvent({
events = {function(t) return TriggerRegisterEnterRectSimple(t, rect2) end},
actions = {function()
local hero = GetTriggerUnit()
local ____self_removePlayer_10 = self.removePlayer
local ____Hero2Escaper_result_getEscaperId_result_8 = Hero2Escaper(hero)
if ____Hero2Escaper_result_getEscaperId_result_8 ~= nil then
____Hero2Escaper_result_getEscaperId_result_8 = ____Hero2Escaper_result_getEscaperId_result_8:getEscaperId()
end
____self_removePlayer_10(self, ____Hero2Escaper_result_getEscaperId_result_8 or -1)
end}
})
)
RemoveRect(rect2)
arrayPush(
self.triggers,
createEvent({
events = {function(t) return TriggerRegisterTimerEventPeriodic(t, SLIDE_PERIOD_TPs) end},
actions = {function()
for ____, playerId in ipairs(self.slidingPlayers) do
do
local targetPlayer = getUdgEscapers():get(playerId)
if not targetPlayer then
self:removePlayer(playerId)
goto __continue15
end
local hero = targetPlayer:getHero()
if not hero then
self:removePlayer(playerId)
goto __continue15
end
local x = GetUnitX(hero)
local y = GetUnitY(hero)
local distanceSlidePerPeriod = self.speed * SLIDE_PERIOD_TPs
local newX = x + distanceSlidePerPeriod * Cos(Deg2Rad(self.angle))
local newY = y + distanceSlidePerPeriod * Sin(Deg2Rad(self.angle))
if newX >= globals.MAP_MIN_X and newX <= globals.MAP_MAX_X then
SetUnitX(hero, newX)
end
if newY >= globals.MAP_MIN_Y and newY <= globals.MAP_MAX_Y then
SetUnitY(hero, newY)
end
targetPlayer:refreshCerclePosition()
end
::__continue15::
end
end}
})
)
arrayPush(
self.triggers,
createEvent({
events = {
function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER) end,
function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER) end
},
actions = {function()
local ____self_slidingPlayers_13 = self.slidingPlayers
local ____Hero2Escaper_result_getEscaperId_result_11 = Hero2Escaper(GetTriggerUnit())
if ____Hero2Escaper_result_getEscaperId_result_11 ~= nil then
____Hero2Escaper_result_getEscaperId_result_11 = ____Hero2Escaper_result_getEscaperId_result_11:getEscaperId()
end
if __TS__ArrayIncludes(____self_slidingPlayers_13, ____Hero2Escaper_result_getEscaperId_result_11 or -1) then
if not IsIssuedOrder("smart") then
return
end
StopUnit(GetTriggerUnit())
end
end}
})
)
else
for ____, playerId in ipairs(self.slidingPlayers) do
self:removePlayer(playerId)
end
for ____, trigger in ipairs(self.triggers) do
DestroyTrigger(trigger)
end
end
end
self.containsPoint = function(____, x, y)
local x1 = math.min(self.x1, self.x2)
local x2 = math.max(self.x1, self.x2)
local x3 = math.min(self.x3, self.x4)
local x4 = math.max(self.x3, self.x4)
local y1 = math.min(self.y1, self.y2)
local y2 = math.max(self.y1, self.y2)
local y3 = math.min(self.y3, self.y4)
local y4 = math.max(self.y3, self.y4)
return x >= x1 and x <= x2 and y >= y1 and y <= y2 or x >= x3 and x <= x4 and y >= y3 and y <= y4
end
self.getX1 = function() return self.x1 end
self.getX2 = function() return self.x2 end
self.getX3 = function() return self.x3 end
self.getX4 = function() return self.x4 end
self.getY1 = function() return self.y1 end
self.getY2 = function() return self.y2 end
self.getY3 = function() return self.y3 end
self.getY4 = function() return self.y4 end
self.getSpeed = function() return self.speed end
self.getAngle = function() return self.angle end
self.setSpeed = function(____, speed)
self.speed = speed
end
self.setAngle = function(____, angle)
self.angle = angle
end
self.toJson = function()
local output = MemoryHandler.getEmptyObject()
output.x1 = R2I(self.x1)
output.y1 = R2I(self.y1)
output.x2 = R2I(self.x2)
output.y2 = R2I(self.y2)
output.x3 = R2I(self.x3)
output.y3 = R2I(self.y3)
output.x4 = R2I(self.x4)
output.y4 = R2I(self.y4)
output.angle = R2I(self.angle)
output.speed = R2I(self.speed)
return output
end
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
self.x3 = x3
self.y3 = y3
self.x4 = x4
self.y4 = y4
self.angle = angle
self.speed = speed
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_create_static_slide.MakeDeleteStaticSlide"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
____exports.MakeDeleteStaticSlide = __TS__Class()
local MakeDeleteStaticSlide = ____exports.MakeDeleteStaticSlide
MakeDeleteStaticSlide.name = "MakeDeleteStaticSlide"
__TS__ClassExtends(MakeDeleteStaticSlide, Make)
function MakeDeleteStaticSlide.prototype.____constructor(self, maker)
Make.prototype.____constructor(self, maker, "deleteStaticSlide")
self.clickMade = function(____, staticSlide)
staticSlide:destroy()
Text.mkP(self.makerOwner, "static slide removed")
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local staticSlide = self.escaper:getMakingLevel().staticSlides:getStaticSlideFromPoint(self.orderX, self.orderY)
if staticSlide then
self:clickMade(staticSlide)
else
Text.erP(self.makerOwner, "no static slide clicked for your making level")
end
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_create_static_slide.MakeStaticSlide"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Point = require("src.Utils.Point")
local createPoint = ____Point.createPoint
____exports.MakeStaticSlide = __TS__Class()
local MakeStaticSlide = ____exports.MakeStaticSlide
MakeStaticSlide.name = "MakeStaticSlide"
__TS__ClassExtends(MakeStaticSlide, Make)
function MakeStaticSlide.prototype.____constructor(self, maker, angle, speed)
Make.prototype.____constructor(self, maker, "createStaticSlide")
self.points = MemoryHandler.getEmptyArray()
self.createStaticSlide = function()
local ____table_points__0_x_0 = self.points[1]
if ____table_points__0_x_0 ~= nil then
____table_points__0_x_0 = ____table_points__0_x_0.x
end
local ____table_points__0_x_0_4 = ____table_points__0_x_0
if ____table_points__0_x_0_4 then
local ____table_points__0_y_2 = self.points[1]
if ____table_points__0_y_2 ~= nil then
____table_points__0_y_2 = ____table_points__0_y_2.y
end
____table_points__0_x_0_4 = ____table_points__0_y_2
end
local ____table_points__0_x_0_4_7 = ____table_points__0_x_0_4
if ____table_points__0_x_0_4_7 then
local ____table_points__1_x_5 = self.points[2]
if ____table_points__1_x_5 ~= nil then
____table_points__1_x_5 = ____table_points__1_x_5.x
end
____table_points__0_x_0_4_7 = ____table_points__1_x_5
end
local ____table_points__0_x_0_4_7_10 = ____table_points__0_x_0_4_7
if ____table_points__0_x_0_4_7_10 then
local ____table_points__1_y_8 = self.points[2]
if ____table_points__1_y_8 ~= nil then
____table_points__1_y_8 = ____table_points__1_y_8.y
end
____table_points__0_x_0_4_7_10 = ____table_points__1_y_8
end
local ____table_points__0_x_0_4_7_10_13 = ____table_points__0_x_0_4_7_10
if ____table_points__0_x_0_4_7_10_13 then
local ____table_points__2_x_11 = self.points[3]
if ____table_points__2_x_11 ~= nil then
____table_points__2_x_11 = ____table_points__2_x_11.x
end
____table_points__0_x_0_4_7_10_13 = ____table_points__2_x_11
end
local ____table_points__0_x_0_4_7_10_13_16 = ____table_points__0_x_0_4_7_10_13
if ____table_points__0_x_0_4_7_10_13_16 then
local ____table_points__2_y_14 = self.points[3]
if ____table_points__2_y_14 ~= nil then
____table_points__2_y_14 = ____table_points__2_y_14.y
end
____table_points__0_x_0_4_7_10_13_16 = ____table_points__2_y_14
end
local ____table_points__0_x_0_4_7_10_13_16_19 = ____table_points__0_x_0_4_7_10_13_16
if ____table_points__0_x_0_4_7_10_13_16_19 then
local ____table_points__3_x_17 = self.points[4]
if ____table_points__3_x_17 ~= nil then
____table_points__3_x_17 = ____table_points__3_x_17.x
end
____table_points__0_x_0_4_7_10_13_16_19 = ____table_points__3_x_17
end
local ____table_points__0_x_0_4_7_10_13_16_19_22 = ____table_points__0_x_0_4_7_10_13_16_19
if ____table_points__0_x_0_4_7_10_13_16_19_22 then
local ____table_points__3_y_20 = self.points[4]
if ____table_points__3_y_20 ~= nil then
____table_points__3_y_20 = ____table_points__3_y_20.y
end
____table_points__0_x_0_4_7_10_13_16_19_22 = ____table_points__3_y_20
end
if ____table_points__0_x_0_4_7_10_13_16_19_22 then
self.staticSlide = self.escaper:getMakingLevel().staticSlides:new(
self.points[1].x,
self.points[1].y,
self.points[2].x,
self.points[2].y,
self.points[3].x,
self.points[3].y,
self.points[4].x,
self.points[4].y,
self.angle,
self.speed
)
self.staticSlide:activate(true)
end
end
self.clickMade = function()
Text.mkP(self.makerOwner, "point added")
arrayPush(
self.points,
createPoint(self.orderX, self.orderY)
)
if #self.points == 4 then
self:createStaticSlide()
Text.mkP(self.makerOwner, "static slide made")
self.escaper:destroyMake()
end
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
self:clickMade()
end
end
self.angle = angle
self.speed = speed
end
function MakeStaticSlide.prototype.destroy(self)
self.points:__destroy(true)
Make.prototype.destroy(self)
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeDeleteMonstersAction"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeAction")
local MakeAction = ____MakeAction.MakeAction
____exports.MakeDeleteMonstersAction = __TS__Class()
local MakeDeleteMonstersAction = ____exports.MakeDeleteMonstersAction
MakeDeleteMonstersAction.name = "MakeDeleteMonstersAction"
__TS__ClassExtends(MakeDeleteMonstersAction, MakeAction)
function MakeDeleteMonstersAction.prototype.____constructor(self, level, suppressedMonsters)
MakeAction.prototype.____constructor(self, level)
self.destroy = function()
if self.isActionMadeB then
for ____, monster in ipairs(self.suppressedMonsters) do
monster:destroy()
end
end
end
self.cancel = function()
if not self.isActionMadeB then
return false
end
for ____, monster in ipairs(self.suppressedMonsters) do
monster:undelete()
end
self.isActionMadeB = false
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"monster deleting cancelled"
)
return true
end
self.redo = function()
if self.isActionMadeB then
return false
end
for ____, monster in ipairs(self.suppressedMonsters) do
monster:delete()
end
self.isActionMadeB = true
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"monster deleting redone"
)
return true
end
if #suppressedMonsters == 0 then
error("no monster suppressed", 0)
end
self.suppressedMonsters = suppressedMonsters
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_delete_casters.MakeDeleteCasters"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Caster = require("src.core.04_STRUCTURES.Caster.Caster")
local Caster = ____Caster.Caster
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeDeleteMonstersAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeDeleteMonstersAction")
local MakeDeleteMonstersAction = ____MakeDeleteMonstersAction.MakeDeleteMonstersAction
____exports.MakeDeleteCasters = __TS__Class()
local MakeDeleteCasters = ____exports.MakeDeleteCasters
MakeDeleteCasters.name = "MakeDeleteCasters"
__TS__ClassExtends(MakeDeleteCasters, MakeOneByOneOrTwoClicks)
function MakeDeleteCasters.prototype.____constructor(self, maker, mode)
MakeOneByOneOrTwoClicks.prototype.____constructor(self, maker, "deleteCasters", mode)
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
local caster
local suppressedCasters = {}
local nbCastersRemoved = 0
if self:getMode() == "oneByOne" then
local monster = self.escaper:getMakingLevel().monsters:getMonsterNear(self.orderX, self.orderY, "Caster")
caster = __TS__InstanceOf(monster, Caster) and monster or nil
if caster and caster.u then
caster:delete()
arrayPush(suppressedCasters, caster)
nbCastersRemoved = 1
end
else
if not self:isLastLocSavedUsed() then
self:saveLoc(self.orderX, self.orderY)
return
end
local casters = self.escaper:getMakingLevel().monsters:getMonstersBetweenLocs(
self.lastX,
self.lastY,
self.orderX,
self.orderY,
"Caster"
)
for ____, caster in ipairs(casters) do
caster:delete()
local ____ = __TS__InstanceOf(caster, Caster) and arrayPush(suppressedCasters, caster)
nbCastersRemoved = nbCastersRemoved + 1
end
MemoryHandler.destroyArray(casters)
end
if nbCastersRemoved <= 1 then
Text.mkP(
self.makerOwner,
I2S(nbCastersRemoved) .. " caster removed."
)
else
Text.mkP(
self.makerOwner,
I2S(nbCastersRemoved) .. " casters removed."
)
end
if nbCastersRemoved > 0 then
self.escaper:newAction(__TS__New(
MakeDeleteMonstersAction,
self.escaper:getMakingLevel(),
suppressedCasters
))
end
self:unsaveLocDefinitely()
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeDeleteMeteorsAction"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeAction")
local MakeAction = ____MakeAction.MakeAction
____exports.MakeDeleteMeteorsAction = __TS__Class()
local MakeDeleteMeteorsAction = ____exports.MakeDeleteMeteorsAction
MakeDeleteMeteorsAction.name = "MakeDeleteMeteorsAction"
__TS__ClassExtends(MakeDeleteMeteorsAction, MakeAction)
function MakeDeleteMeteorsAction.prototype.____constructor(self, level, suppressedMeteors)
MakeAction.prototype.____constructor(self, level)
self.destroy = function()
if self.isActionMadeB then
for ____, meteor in ipairs(self.suppressedMeteors) do
meteor:destroy()
end
end
end
self.cancel = function()
if not self.isActionMadeB then
return false
end
for ____, meteor in ipairs(self.suppressedMeteors) do
meteor:undelete()
end
self.isActionMadeB = false
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"meteor deleting cancelled"
)
return true
end
self.redo = function()
if self.isActionMadeB then
return false
end
for ____, meteor in ipairs(self.suppressedMeteors) do
meteor:delete()
end
self.isActionMadeB = true
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"meteor deleting redone"
)
return true
end
if #suppressedMeteors == 0 then
error("no meteor suppressed", 0)
end
self.suppressedMeteors = suppressedMeteors
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_delete_meteors.MakeDeleteMeteors"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Meteor = require("src.core.04_STRUCTURES.Meteor.Meteor")
local METEOR_NORMAL = ____Meteor.METEOR_NORMAL
local udg_meteors = ____Meteor.udg_meteors
local ____MakeDeleteMeteorsAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeDeleteMeteorsAction")
local MakeDeleteMeteorsAction = ____MakeDeleteMeteorsAction.MakeDeleteMeteorsAction
____exports.MakeDeleteMeteors = __TS__Class()
local MakeDeleteMeteors = ____exports.MakeDeleteMeteors
MakeDeleteMeteors.name = "MakeDeleteMeteors"
__TS__ClassExtends(MakeDeleteMeteors, MakeOneByOneOrTwoClicks)
function MakeDeleteMeteors.prototype.____constructor(self, maker, mode)
MakeOneByOneOrTwoClicks.prototype.____constructor(self, maker, "deleteMeteors", mode)
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
local meteor
local suppressedMeteors = {}
local nbMeteorsRemoved = 0
if self:getMode() == "oneByOne" then
if GetItemTypeId(GetOrderTargetItem()) ~= METEOR_NORMAL then
return
end
meteor = udg_meteors[GetItemUserData(GetOrderTargetItem())]
if meteor and meteor:getItem() then
meteor:delete()
arrayPush(suppressedMeteors, meteor)
nbMeteorsRemoved = 1
end
else
if not self:isLastLocSavedUsed() then
self:saveLoc(self.orderX, self.orderY)
return
end
local meteors = self.escaper:getMakingLevel().meteors:getMeteorsBetweenLocs(self.lastX, self.lastY, self.orderX, self.orderY)
for ____, meteor in ipairs(meteors) do
meteor:delete()
arrayPush(suppressedMeteors, meteor)
nbMeteorsRemoved = nbMeteorsRemoved + 1
end
MemoryHandler.destroyArray(meteors)
end
if nbMeteorsRemoved <= 1 then
Text.mkP(
self.makerOwner,
I2S(nbMeteorsRemoved) .. " meteor removed."
)
else
Text.mkP(
self.makerOwner,
I2S(nbMeteorsRemoved) .. " meteors removed."
)
end
if nbMeteorsRemoved > 0 then
self.escaper:newAction(__TS__New(
MakeDeleteMeteorsAction,
self.escaper:getMakingLevel(),
suppressedMeteors
))
end
self:unsaveLocDefinitely()
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_delete_monsters.MakeDeleteMonsters"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeDeleteMonstersAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeDeleteMonstersAction")
local MakeDeleteMonstersAction = ____MakeDeleteMonstersAction.MakeDeleteMonstersAction
____exports.MakeDeleteMonsters = __TS__Class()
local MakeDeleteMonsters = ____exports.MakeDeleteMonsters
MakeDeleteMonsters.name = "MakeDeleteMonsters"
__TS__ClassExtends(MakeDeleteMonsters, MakeOneByOneOrTwoClicks)
function MakeDeleteMonsters.prototype.____constructor(self, maker, mode)
MakeOneByOneOrTwoClicks.prototype.____constructor(
self,
maker,
"deleteMonsters",
mode,
{
"oneByOne",
"all",
"noMove",
"move",
"simplePatrol",
"multiplePatrols"
}
)
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
local suppressedMonsters = {}
local nbMonstersRemoved = 0
if self:getMode() == "oneByOne" then
local monster = self.escaper:getMakingLevel().monsters:getMonsterNear(self.orderX, self.orderY)
if monster then
monster:delete()
arrayPush(suppressedMonsters, monster)
nbMonstersRemoved = 1
end
else
if not self:isLastLocSavedUsed() then
self:saveLoc(self.orderX, self.orderY)
return
end
local filterMonsterClassNameArr = nil
if self:getMode() ~= "all" then
filterMonsterClassNameArr = MemoryHandler.getEmptyArray()
if self:getMode() == "noMove" then
arrayPush(filterMonsterClassNameArr, "MonsterNoMove")
else
if self:getMode() == "move" or self:getMode() == "simplePatrol" then
arrayPush(filterMonsterClassNameArr, "MonsterSimplePatrol")
end
if self:getMode() == "move" or self:getMode() == "multiplePatrols" then
arrayPush(filterMonsterClassNameArr, "MonsterMultiplePatrols")
end
end
end
local monsters = self.escaper:getMakingLevel().monsters:getMonstersBetweenLocs(
self.lastX,
self.lastY,
self.orderX,
self.orderY,
filterMonsterClassNameArr
)
if filterMonsterClassNameArr then
MemoryHandler.destroyArray(filterMonsterClassNameArr)
end
for ____, monster in ipairs(monsters) do
monster:delete()
arrayPush(suppressedMonsters, monster)
end
nbMonstersRemoved = #monsters
MemoryHandler.destroyArray(monsters)
end
if nbMonstersRemoved <= 1 then
Text.mkP(
self.makerOwner,
I2S(nbMonstersRemoved) .. " monster removed."
)
else
Text.mkP(
self.makerOwner,
I2S(nbMonstersRemoved) .. " monsters removed."
)
end
if nbMonstersRemoved > 0 then
self.escaper:newAction(__TS__New(
MakeDeleteMonstersAction,
self.escaper:getMakingLevel(),
suppressedMonsters
))
end
self:unsaveLocDefinitely()
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_monster_properties.MakeCircleMob"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArraySplice = ____lualib.__TS__ArraySplice
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
____exports.MakeCircleMob = __TS__Class()
local MakeCircleMob = ____exports.MakeCircleMob
MakeCircleMob.name = "MakeCircleMob"
__TS__ClassExtends(MakeCircleMob, Make)
function MakeCircleMob.prototype.____constructor(self, maker, speed, direction, facing, radius)
Make.prototype.____constructor(self, maker, "createCircleMob")
self.triggerMob = nil
self.mobs = {}
self.indexLastBlockNotCancelledMob = 0
self.firstClickRadius = false
self.createCircleMob = function()
if not self.radius then
self.radius = 400
end
if self.triggerMob then
self.circleMob = self.escaper:getMakingLevel().circleMobs:new(
self.triggerMob,
self.speed,
self.direction,
self.facing,
self.radius
)
end
end
self.addBlockMob = function(____, monster)
local nbBlockMobs = #self.mobs
do
local i = self.indexLastBlockNotCancelledMob + 1
while i < nbBlockMobs do
__TS__ArraySplice(self.mobs, -1, 1)
i = i + 1
end
end
local ____ = self.circleMob and self.circleMob:addBlockMob(monster)
arrayPush(self.mobs, monster)
self.indexLastBlockNotCancelledMob = self.indexLastBlockNotCancelledMob + 1
end
self.cancelOneBlockMob = function()
if self.circleMob and self.circleMob:removeLastBlockMob() then
if self.indexLastBlockNotCancelledMob ~= 0 then
self.indexLastBlockNotCancelledMob = self.indexLastBlockNotCancelledMob - 1
end
return true
end
return false
end
self.redoOneBlockMob = function()
if self.circleMob and self.indexLastBlockNotCancelledMob < #self.mobs - 1 then
self.indexLastBlockNotCancelledMob = self.indexLastBlockNotCancelledMob + 1
local monster = self.mobs[self.indexLastBlockNotCancelledMob + 1]
self.circleMob:addBlockMob(monster)
return true
end
return false
end
self.clickMade = function(____, monster)
if not self.circleMob then
self.triggerMob = monster
self:createCircleMob()
local msg = "Center mob selected. "
if self.firstClickRadius then
msg = msg .. "Now click to at a chosen distance from the center mob to define the radius"
else
msg = msg .. "Now click on monsters to form the circle"
end
Text.mkP(self.makerOwner, msg)
else
if not self.circleMob:getTriggerMob() then
Text.erP(self.makerOwner, "the circle mob you are working on has been removed")
self.escaper:destroyMake()
return
end
if monster:getId() == self.circleMob:getTriggerMob():getId() or __TS__ArrayIncludes(
self.circleMob:getBlockMobs(),
monster:getId()
) then
Text.erP(self.makerOwner, "this monster is already a block mob of this circle mob")
return
else
self:addBlockMob(monster)
Text.mkP(self.makerOwner, "circle mob added")
end
end
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local ____self_firstClickRadius_2 = self.firstClickRadius
if ____self_firstClickRadius_2 then
local ____table_triggerMob_u_0 = self.triggerMob
if ____table_triggerMob_u_0 ~= nil then
____table_triggerMob_u_0 = ____table_triggerMob_u_0.u
end
____self_firstClickRadius_2 = ____table_triggerMob_u_0
end
if ____self_firstClickRadius_2 then
self.firstClickRadius = false
local x1 = GetUnitX(self.triggerMob.u)
local y1 = GetUnitY(self.triggerMob.u)
local x2 = self.orderX
local y2 = self.orderY
self.radius = math.sqrt((x1 - x2) ^ 2 + (y1 - y2) ^ 2)
local ____table_circleMob_setRadius_result_3 = self.circleMob
if ____table_circleMob_setRadius_result_3 ~= nil then
____table_circleMob_setRadius_result_3 = ____table_circleMob_setRadius_result_3:setRadius(self.radius)
end
Text.mkP(
self.makerOwner,
("Set radius to: '" .. tostring(self.radius)) .. "'. Now click on monsters to form the circle"
)
return
end
local monster = self.escaper:getMakingLevel().monsters:getMonsterNear(self.orderX, self.orderY)
if not monster then
Text.erP(self.makerOwner, "no monster clicked for your making level")
else
self:clickMade(monster)
end
end
end
self.cancelLastAction = function()
if self.circleMob then
if self:cancelOneBlockMob() then
Text.mkP(self.makerOwner, "last block mob removed")
else
self.circleMob:destroy()
__TS__Delete(self, "circleMob")
Text.mkP(self.makerOwner, "circle mob removed")
end
return true
else
return false
end
end
self.redoLastAction = function()
if not self.circleMob then
if self.triggerMob then
self:createCircleMob()
Text.mkP(self.makerOwner, "trigger mob added for a new circle mob")
return true
else
return false
end
elseif self:redoOneBlockMob() then
Text.mkP(self.makerOwner, "block mob added")
return true
else
return false
end
end
self.speed = speed
self.direction = direction
self.facing = facing
self.radius = radius
self.firstClickRadius = not radius
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_monster_properties.MakeClearMob"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__ArraySplice = ____lualib.__TS__ArraySplice
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____ClearMob = require("src.core.04_STRUCTURES.Monster_properties.ClearMob")
local CLEAR_MOB_MAX_DURATION = ____ClearMob.CLEAR_MOB_MAX_DURATION
local FRONT_MONTANT_DURATION = ____ClearMob.FRONT_MONTANT_DURATION
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
____exports.MakeClearMob = __TS__Class()
local MakeClearMob = ____exports.MakeClearMob
MakeClearMob.name = "MakeClearMob"
__TS__ClassExtends(MakeClearMob, Make)
function MakeClearMob.prototype.____constructor(self, maker, disableDuration)
Make.prototype.____constructor(self, maker, "createClearMob")
self.blockMobs = {}
self.createClearMob = function()
if self.triggerMob then
self.clearMob = self.escaper:getMakingLevel().clearMobs:new(self.triggerMob, self.disableDuration, true)
end
end
self.addBlockMob = function(____, monster)
local nbBlockMobs = #self.blockMobs
do
local i = self.indexLastBlockNotCancelledMob + 1
while i < nbBlockMobs do
__TS__ArraySplice(self.blockMobs, -1, 1)
i = i + 1
end
end
local ____ = self.clearMob and self.clearMob:addBlockMob(monster)
arrayPush(self.blockMobs, monster)
self.indexLastBlockNotCancelledMob = self.indexLastBlockNotCancelledMob + 1
end
self.cancelOneBlockMob = function()
if self.clearMob and self.clearMob:removeLastBlockMob() then
if self.indexLastBlockNotCancelledMob ~= 0 then
self.indexLastBlockNotCancelledMob = self.indexLastBlockNotCancelledMob - 1
end
return true
end
return false
end
self.redoOneBlockMob = function()
if self.clearMob and self.indexLastBlockNotCancelledMob < #self.blockMobs - 1 then
self.indexLastBlockNotCancelledMob = self.indexLastBlockNotCancelledMob + 1
local monster = self.blockMobs[self.indexLastBlockNotCancelledMob + 1]
self.clearMob:addBlockMob(monster)
return true
end
return false
end
self.clickMade = function(____, monster)
if not self.clearMob then
self.triggerMob = monster
self:createClearMob()
Text.mkP(self.makerOwner, "trigger mob added for a new clear mob")
else
if not self.clearMob:getTriggerMob() then
Text.erP(self.makerOwner, "the clear mob you are working on has been removed")
self.escaper:destroyMake()
return
end
if self.clearMob:getBlockMobs():containsMonster(monster) then
Text.erP(self.makerOwner, "this monster is already a block mob of this clear mob")
return
else
self:addBlockMob(monster)
Text.mkP(self.makerOwner, "block mob added")
end
end
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local monster = self.escaper:getMakingLevel().monsters:getMonsterNear(self.orderX, self.orderY)
if not monster then
Text.erP(self.makerOwner, "no monster clicked for your making level")
else
self:clickMade(monster)
end
end
end
self.cancelLastAction = function()
if self.clearMob then
if self:cancelOneBlockMob() then
Text.mkP(self.makerOwner, "last block mob removed")
else
self.clearMob:destroy()
__TS__Delete(self, "clearMob")
Text.mkP(self.makerOwner, "clear mob removed")
end
return true
else
return false
end
end
self.redoLastAction = function()
if not self.clearMob then
if self.triggerMob then
self:createClearMob()
Text.mkP(self.makerOwner, "trigger mob added for a new clear mob")
return true
else
return false
end
elseif self:redoOneBlockMob() then
Text.mkP(self.makerOwner, "block mob added")
return true
else
return false
end
end
if disableDuration ~= 0 and (disableDuration > CLEAR_MOB_MAX_DURATION or disableDuration < FRONT_MONTANT_DURATION) then
error("ClearMob : wrong duration", 0)
end
self.disableDuration = disableDuration
self.indexLastBlockNotCancelledMob = 0
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_monster_properties.MakeDeleteCircleMob"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
____exports.MakeDeleteCircleMob = __TS__Class()
local MakeDeleteCircleMob = ____exports.MakeDeleteCircleMob
MakeDeleteCircleMob.name = "MakeDeleteCircleMob"
__TS__ClassExtends(MakeDeleteCircleMob, Make)
function MakeDeleteCircleMob.prototype.____constructor(self, maker)
Make.prototype.____constructor(self, maker, "deleteCircleMob")
self.clickMade = function(____, circleMob)
circleMob:destroy()
Text.mkP(self.makerOwner, "circle mob removed")
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local monster = self.escaper:getMakingLevel().monsters:getMonsterNear(self.orderX, self.orderY)
local ____monster_getCircleMobs_result_0 = monster
if ____monster_getCircleMobs_result_0 ~= nil then
____monster_getCircleMobs_result_0 = ____monster_getCircleMobs_result_0:getCircleMobs()
end
local circleMob = ____monster_getCircleMobs_result_0
if circleMob then
self:clickMade(circleMob)
else
Text.erP(self.makerOwner, "no circle mob clicked for your making level")
end
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_monster_properties.MakeDeleteClearMob"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
____exports.MakeDeleteClearMob = __TS__Class()
local MakeDeleteClearMob = ____exports.MakeDeleteClearMob
MakeDeleteClearMob.name = "MakeDeleteClearMob"
__TS__ClassExtends(MakeDeleteClearMob, Make)
function MakeDeleteClearMob.prototype.____constructor(self, maker)
Make.prototype.____constructor(self, maker, "deleteClearMob")
self.clickMade = function(____, clearMob)
clearMob:destroy()
Text.mkP(self.makerOwner, "clear mob removed")
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local monster = self.escaper:getMakingLevel().monsters:getMonsterNear(self.orderX, self.orderY)
local ____monster_getClearMob_result_0 = monster
if ____monster_getClearMob_result_0 ~= nil then
____monster_getClearMob_result_0 = ____monster_getClearMob_result_0:getClearMob()
end
local clearMob = ____monster_getClearMob_result_0
if clearMob then
self:clickMade(clearMob)
else
Text.erP(self.makerOwner, "no clear mob clicked for your making level")
end
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_monster_properties.MakeDeletePortalMob"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
____exports.MakeDeletePortalMob = __TS__Class()
local MakeDeletePortalMob = ____exports.MakeDeletePortalMob
MakeDeletePortalMob.name = "MakeDeletePortalMob"
__TS__ClassExtends(MakeDeletePortalMob, Make)
function MakeDeletePortalMob.prototype.____constructor(self, maker)
Make.prototype.____constructor(self, maker, "deletePortalMob")
self.clickMade = function(____, portalMob)
portalMob:destroy()
Text.mkP(self.makerOwner, "portal mob removed")
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local monster = self.escaper:getMakingLevel().monsters:getMonsterNear(self.orderX, self.orderY)
local ____monster_getPortalMob_result_0 = monster
if ____monster_getPortalMob_result_0 ~= nil then
____monster_getPortalMob_result_0 = ____monster_getPortalMob_result_0:getPortalMob()
end
local portalMob = ____monster_getPortalMob_result_0
if portalMob then
self:clickMade(portalMob)
else
Text.erP(self.makerOwner, "no portal mob clicked for your making level")
end
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_monster_properties.MakePortalMob"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
local ____PortalMob = require("src.core.04_STRUCTURES.Monster_properties.PortalMob")
local PORTAL_MOB_MAX_FREEZE_DURATION = ____PortalMob.PORTAL_MOB_MAX_FREEZE_DURATION
____exports.MakePortalMob = __TS__Class()
local MakePortalMob = ____exports.MakePortalMob
MakePortalMob.name = "MakePortalMob"
__TS__ClassExtends(MakePortalMob, Make)
function MakePortalMob.prototype.____constructor(self, maker, freezeDuration, portalEffect, portalEffectDuration)
Make.prototype.____constructor(self, maker, "createPortalMob")
self.targetMob = nil
self.portalEffectDuration = nil
self.createPortalMob = function()
if self.triggerMob then
self.portalMob = self.escaper:getMakingLevel().portalMobs:new(self.triggerMob, self.freezeDuration, self.portalEffect, self.portalEffectDuration)
end
end
self.setTargetMob = function(____, monster)
local ____table_portalMob_setTargetMob_result_0 = self.portalMob
if ____table_portalMob_setTargetMob_result_0 ~= nil then
____table_portalMob_setTargetMob_result_0 = ____table_portalMob_setTargetMob_result_0:setTargetMob(monster)
end
self.targetMob = monster
return true
end
self.cancelOneTargetMob = function()
if self.portalMob and self.portalMob:setTriggerMob(nil) then
return true
end
return false
end
self.redoOneTargetMob = function()
if self.portalMob and not self.portalMob:getTriggerMob() then
self.portalMob:setTriggerMob(self.targetMob)
return true
end
return false
end
self.clickMade = function(____, monster)
if not self.portalMob then
self.triggerMob = monster
self:createPortalMob()
Text.mkP(self.makerOwner, "trigger mob added for a new portal mob")
else
if not self.portalMob:getTriggerMob() then
Text.erP(self.makerOwner, "the portal mob you are working on has been removed")
self.escaper:destroyMake()
return
end
if self.portalMob:getTargetMob() == monster then
Text.erP(self.makerOwner, "this monster is already a target mob of this portal mob")
return
else
self:setTargetMob(monster)
Text.mkP(self.makerOwner, "target mob added")
self.escaper:destroyMake()
end
end
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local monster = self.escaper:getMakingLevel().monsters:getMonsterNear(self.orderX, self.orderY)
if not monster then
Text.erP(self.makerOwner, "no monster clicked for your making level")
else
self:clickMade(monster)
end
end
end
self.cancelLastAction = function()
if self.portalMob then
if self:cancelOneTargetMob() then
Text.mkP(self.makerOwner, "last target mob removed")
else
self.portalMob:destroy()
__TS__Delete(self, "portalMob")
Text.mkP(self.makerOwner, "portal mob removed")
end
return true
else
return false
end
end
self.redoLastAction = function()
if not self.portalMob then
if self.triggerMob then
self:createPortalMob()
Text.mkP(self.makerOwner, "trigger mob added for a new portal mob")
return true
else
return false
end
elseif self:redoOneTargetMob() then
Text.mkP(self.makerOwner, "target mob added")
return true
else
return false
end
end
if freezeDuration ~= 0 and (freezeDuration > PORTAL_MOB_MAX_FREEZE_DURATION or freezeDuration < 0) then
error("PortalMob : wrong duration", 0)
end
self.freezeDuration = freezeDuration
self.portalEffect = portalEffect
self.portalEffectDuration = portalEffectDuration
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_set_unit_properties.MakeGetUnitTeleportPeriod"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
local ____MonsterTeleport = require("src.core.04_STRUCTURES.Monster.MonsterTeleport")
local MonsterTeleport = ____MonsterTeleport.MonsterTeleport
____exports.MakeGetUnitTeleportPeriod = __TS__Class()
local MakeGetUnitTeleportPeriod = ____exports.MakeGetUnitTeleportPeriod
MakeGetUnitTeleportPeriod.name = "MakeGetUnitTeleportPeriod"
__TS__ClassExtends(MakeGetUnitTeleportPeriod, Make)
function MakeGetUnitTeleportPeriod.prototype.____constructor(self, maker)
Make.prototype.____constructor(self, maker, "getUnitTeleportPeriod")
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local monster = self.escaper:getMakingLevel().monsters:getMonsterNear(self.orderX, self.orderY)
if __TS__InstanceOf(monster, MonsterTeleport) then
Text.mkP(
self.makerOwner,
("period : " .. R2S(monster:getPeriod())) .. " s"
)
end
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_set_unit_properties.MakeSetUnitMonsterType"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
____exports.MakeSetUnitMonsterType = __TS__Class()
local MakeSetUnitMonsterType = ____exports.MakeSetUnitMonsterType
MakeSetUnitMonsterType.name = "MakeSetUnitMonsterType"
__TS__ClassExtends(MakeSetUnitMonsterType, MakeOneByOneOrTwoClicks)
function MakeSetUnitMonsterType.prototype.____constructor(self, maker, mode, mt)
MakeOneByOneOrTwoClicks.prototype.____constructor(self, maker, "setUnitMonsterType", mode)
self.getMonsterType = function()
return self.mt
end
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
local nbMonstersFixed = 0
if self:getMode() == "oneByOne" then
local monster = self.escaper:getMakingLevel().monsters:getMonsterNear(self.orderX, self.orderY)
if monster then
if monster:setMonsterType(self:getMonsterType()) then
nbMonstersFixed = 1
end
end
else
if not self:isLastLocSavedUsed() then
self:saveLoc(self.orderX, self.orderY)
return
end
local monsters = self.escaper:getMakingLevel().monsters:getMonstersBetweenLocs(self.lastX, self.lastY, self.orderX, self.orderY)
for ____, monster in ipairs(monsters) do
if monster:setMonsterType(self:getMonsterType()) then
nbMonstersFixed = nbMonstersFixed + 1
end
end
MemoryHandler.destroyArray(monsters)
end
if nbMonstersFixed <= 1 then
Text.mkP(
self.makerOwner,
I2S(nbMonstersFixed) .. " monster fixed."
)
else
Text.mkP(
self.makerOwner,
I2S(nbMonstersFixed) .. " monsters fixed."
)
end
self:unsaveLocDefinitely()
end
end
self.mt = mt
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_set_unit_properties.MakeSetUnitTeleportPeriod"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MonsterTeleport = require("src.core.04_STRUCTURES.Monster.MonsterTeleport")
local MONSTER_TELEPORT_PERIOD_MAX = ____MonsterTeleport.MONSTER_TELEPORT_PERIOD_MAX
local MONSTER_TELEPORT_PERIOD_MIN = ____MonsterTeleport.MONSTER_TELEPORT_PERIOD_MIN
local MonsterTeleport = ____MonsterTeleport.MonsterTeleport
____exports.MakeSetUnitTeleportPeriod = __TS__Class()
local MakeSetUnitTeleportPeriod = ____exports.MakeSetUnitTeleportPeriod
MakeSetUnitTeleportPeriod.name = "MakeSetUnitTeleportPeriod"
__TS__ClassExtends(MakeSetUnitTeleportPeriod, MakeOneByOneOrTwoClicks)
function MakeSetUnitTeleportPeriod.prototype.____constructor(self, maker, mode, period)
MakeOneByOneOrTwoClicks.prototype.____constructor(self, maker, "setUnitTeleportPeriod", mode)
self.getPeriod = function()
return self.period
end
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
local nbMonstersFixed = 0
if self:getMode() == "oneByOne" then
local monsterTP = self.escaper:getMakingLevel().monsters:getMonsterNear(self.orderX, self.orderY, "MonsterTeleport")
if __TS__InstanceOf(monsterTP, MonsterTeleport) then
monsterTP:setPeriod(self:getPeriod())
nbMonstersFixed = 1
end
else
if not self:isLastLocSavedUsed() then
self:saveLoc(self.orderX, self.orderY)
return
end
local monstersTP = self.escaper:getMakingLevel().monsters:getMonstersBetweenLocs(
self.lastX,
self.lastY,
self.orderX,
self.orderY,
"MonsterTeleport"
)
for ____, monsterTP in ipairs(monstersTP) do
if __TS__InstanceOf(monsterTP, MonsterTeleport) then
monsterTP:setPeriod(self:getPeriod())
end
nbMonstersFixed = nbMonstersFixed + 1
end
MemoryHandler.destroyArray(monstersTP)
end
if nbMonstersFixed <= 1 then
Text.mkP(
self.makerOwner,
I2S(nbMonstersFixed) .. " monster fixed."
)
else
Text.mkP(
self.makerOwner,
I2S(nbMonstersFixed) .. " monsters fixed."
)
end
self:unsaveLocDefinitely()
end
end
if period < MONSTER_TELEPORT_PERIOD_MIN or period > MONSTER_TELEPORT_PERIOD_MAX then
error(
((self.constructor.name .. " : wrong period \"") .. tostring(period)) .. "\"",
0
)
end
self.period = period
end
return ____exports
end,
["src.core.08_GAME.Afk_mode.Afk_mode"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local forRange = ____mapUtils.forRange
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local escaperId2playerId = ____Escaper_functions.escaperId2playerId
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local playerId2colorId = ____Command_functions.playerId2colorId
local function initAfkMode()
local timeMinAfk = 20
local Z = -50
local SIZE = 8
local TRANSPARENCY = 0
local isAfk = {}
local isActive = {}
local afkModeTimers = {}
local afkModeTextTags = {}
local afkModeCbs = {}
local killAllAfkTimer = CreateTimer()
local function AreAllAliveHeroesAfk()
local someoneAlive = false
local someoneDead = false
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
local ____getUdgEscapers_result_get_result_getHero_result_0 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_getHero_result_0 ~= nil then
____getUdgEscapers_result_get_result_getHero_result_0 = ____getUdgEscapers_result_get_result_getHero_result_0:getHero()
end
local hero = ____getUdgEscapers_result_get_result_getHero_result_0
if hero ~= nil then
if IsUnitAliveBJ(hero) then
someoneAlive = true
if not isAfk[i + 1] then
return false
end
else
someoneDead = true
end
end
i = i + 1
end
return someoneAlive and someoneDead
end
local function KillAllHeroesIfAfk()
local i = 0
if ____exports.AfkMode.AreAllAliveHeroesAfk() then
while true do
if i >= NB_ESCAPERS then
break
end
local ____getUdgEscapers_result_get_result_getHero_result_2 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_getHero_result_2 ~= nil then
____getUdgEscapers_result_get_result_getHero_result_2 = ____getUdgEscapers_result_get_result_getHero_result_2:getHero()
end
local hero = ____getUdgEscapers_result_get_result_getHero_result_2
if hero and IsUnitAliveBJ(hero) and isAfk[i + 1] then
local ____getUdgEscapers_result_get_result_kill_result_4 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_kill_result_4 ~= nil then
____getUdgEscapers_result_get_result_kill_result_4 = ____getUdgEscapers_result_get_result_kill_result_4:kill()
end
end
i = i + 1
end
end
end
local function KillAllHeroesAfkInFourSeconds()
TimerStart(killAllAfkTimer, 4, false, KillAllHeroesIfAfk)
end
local function SetAfkMode(escaperId)
local playerId = escaperId2playerId(escaperId)
if afkModeTextTags[escaperId + 1] ~= nil then
DestroyTextTag(afkModeTextTags[escaperId + 1])
end
local ____getUdgEscapers_result_get_result_getHero_result_6 = getUdgEscapers():get(escaperId)
if ____getUdgEscapers_result_get_result_getHero_result_6 ~= nil then
____getUdgEscapers_result_get_result_getHero_result_6 = ____getUdgEscapers_result_get_result_getHero_result_6:getHero()
end
local hero = ____getUdgEscapers_result_get_result_getHero_result_6
if hero and IsUnitAliveBJ(hero) then
afkModeTextTags[escaperId + 1] = CreateTextTagUnitBJ(
udg_colorCode[playerId2colorId(playerId) + 1] .. "AFK|r",
hero,
Z,
SIZE,
100,
100,
100,
TRANSPARENCY
)
end
isAfk[escaperId + 1] = true
isActive[escaperId + 1] = false
end
local function StopAfk(escaperId)
if isAfk[escaperId + 1] then
isAfk[escaperId + 1] = false
DestroyTextTag(afkModeTextTags[escaperId + 1])
afkModeTextTags[escaperId + 1] = nil
end
isActive[escaperId + 1] = false
end
local function GetAfkModeTimeExpiresCodeFromId(id)
SetAfkMode(id)
if ____exports.AfkMode.AreAllAliveHeroesAfk() then
KillAllHeroesAfkInFourSeconds()
end
end
forRange(
NB_PLAYERS_MAX,
function(i)
afkModeTimers[i + 1] = CreateTimer()
afkModeCbs[i + 1] = function()
____exports.AfkMode.GetAfkModeTimeExpiresCodeFromId(i)
end
isAfk[i + 1] = false
afkModeTextTags[i + 1] = nil
end
)
local function resetAfk(playerId)
____exports.AfkMode.StopAfk(playerId)
isActive[playerId + 1] = true
TimerStart(____exports.AfkMode.afkModeTimers[playerId + 1], ____exports.AfkMode.timeMinAfk, false, ____exports.AfkMode.afkModeCbs[playerId + 1])
end
return {
timeMinAfk = timeMinAfk,
isAfk = isAfk,
isActive = isActive,
afkModeTimers = afkModeTimers,
afkModeTextTags = afkModeTextTags,
afkModeCbs = afkModeCbs,
AreAllAliveHeroesAfk = AreAllAliveHeroesAfk,
KillAllHeroesIfAfk = KillAllHeroesIfAfk,
KillAllHeroesAfkInFourSeconds = KillAllHeroesAfkInFourSeconds,
SetAfkMode = SetAfkMode,
StopAfk = StopAfk,
GetAfkModeTimeExpiresCodeFromId = GetAfkModeTimeExpiresCodeFromId,
resetAfk = resetAfk
}
end
____exports.AfkMode = initAfkMode()
return ____exports
end,
["src.Utils.SaveLoad.TreeLib.EncodingBase64"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__StringCharAt = ____lualib.__TS__StringCharAt
local __TS__StringCharCodeAt = ____lualib.__TS__StringCharCodeAt
local ____exports = {}
local PADCHAR = "="
local ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
____exports.EncodingBase64 = __TS__Class()
local EncodingBase64 = ____exports.EncodingBase64
EncodingBase64.name = "EncodingBase64"
function EncodingBase64.prototype.____constructor(self)
end
function EncodingBase64.getbyte64(self, s, i)
local idx = (string.find(
ALPHA,
__TS__StringCharAt(s, i),
nil,
true
) or 0) - 1
if idx == -1 then
error("Cannot decode base64", 0)
end
return idx
end
function EncodingBase64.Decode(self, s)
local pads
local i
local b10
local imax = #s
if imax == 0 then
return s
end
if imax %% 4 ~= 0 then
error("Cannot decode base64", 0)
end
pads = 0
if __TS__StringCharAt(s, imax - 1) == PADCHAR then
pads = 1
if __TS__StringCharAt(s, imax - 2) == PADCHAR then
pads = 2
end
imax = imax - 4
end
local x = {}
do
i = 0
while i < imax do
b10 = self:getbyte64(s, i) << 18 | self:getbyte64(s, i + 1) << 12 | self:getbyte64(s, i + 2) << 6 | self:getbyte64(s, i + 3)
x[#x + 1] = string.char(b10 >> 16, b10 >> 8 & 255, b10 & 255)
i = i + 4
end
end
repeat
local ____switch11 = pads
local ____cond11 = ____switch11 == 1
if ____cond11 then
b10 = self:getbyte64(s, i) << 18 | self:getbyte64(s, i + 1) << 12 | self:getbyte64(s, i + 2) << 6
x[#x + 1] = string.char(b10 >> 16, b10 >> 8 & 255)
break
end
____cond11 = ____cond11 or ____switch11 == 2
if ____cond11 then
b10 = self:getbyte64(s, i) << 18 | self:getbyte64(s, i + 1) << 12
x[#x + 1] = string.char(b10 >> 16)
break
end
until true
return table.concat(x, "")
end
function EncodingBase64.getbyte(self, s, i)
local x = __TS__StringCharCodeAt(s, i)
if x > 255 then
error("INVALID_CHARACTER_ERR: DOM Exception 5", 0)
end
return x
end
function EncodingBase64.Encode(self, s)
local b10
local i
local x = {}
local imax = #s - #s %% 3
if #s == 0 then
return s
end
do
i = 0
while i < imax do
b10 = self:getbyte(s, i) << 16 | self:getbyte(s, i + 1) << 8 | self:getbyte(s, i + 2)
x[#x + 1] = __TS__StringCharAt(ALPHA, b10 >> 18)
x[#x + 1] = __TS__StringCharAt(ALPHA, b10 >> 12 & 63)
x[#x + 1] = __TS__StringCharAt(ALPHA, b10 >> 6 & 63)
x[#x + 1] = __TS__StringCharAt(ALPHA, b10 & 63)
i = i + 3
end
end
repeat
local ____switch17 = #s - imax
local ____cond17 = ____switch17 == 1
if ____cond17 then
b10 = self:getbyte(s, i) << 16
x[#x + 1] = ((__TS__StringCharAt(ALPHA, b10 >> 18) .. __TS__StringCharAt(ALPHA, b10 >> 12 & 63)) .. PADCHAR) .. PADCHAR
break
end
____cond17 = ____cond17 or ____switch17 == 2
if ____cond17 then
b10 = self:getbyte(s, i) << 16 | self:getbyte(s, i + 1) << 8
x[#x + 1] = ((__TS__StringCharAt(ALPHA, b10 >> 18) .. __TS__StringCharAt(ALPHA, b10 >> 12 & 63)) .. __TS__StringCharAt(ALPHA, b10 >> 6 & 63)) .. PADCHAR
break
end
until true
return table.concat(x, "")
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeLastActions"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
____exports.MakeLastActions = __TS__Class()
local MakeLastActions = ____exports.MakeLastActions
MakeLastActions.name = "MakeLastActions"
function MakeLastActions.prototype.____constructor(self, owner)
self.lastActions = {}
self.lastActionId = -1
self.lastActionEffective = -1
self.newAction = function(____, action)
local i
if self.lastActionEffective < self.lastActionId then
i = self.lastActionEffective + 1
while i <= self.lastActionId do
self.lastActions[i]:destroy()
i = i + 1
end
end
self.lastActionEffective = self.lastActionEffective + 1
self.lastActions[self.lastActionEffective] = action
self.lastActionId = self.lastActionEffective
action.owner = self.owner
return action
end
self.cancelLastAction = function()
if self.lastActionEffective < 0 then
return false
end
if not self.lastActions[self.lastActionEffective] then
Text.erP(
self.owner:getPlayer(),
"action obsolète"
)
else
if not self.lastActions[self.lastActionEffective]:cancel() then
Text.erA("error : action already cancelled for player " .. I2S(GetPlayerId(self.owner:getPlayer())))
end
end
self.lastActionEffective = self.lastActionEffective - 1
return true
end
self.redoLastAction = function()
if self.lastActionEffective == self.lastActionId then
return false
end
self.lastActionEffective = self.lastActionEffective + 1
if not self.lastActions[self.lastActionEffective] then
Text.erP(
self.owner:getPlayer(),
"action obsolète"
)
else
if not self.lastActions[self.lastActionEffective]:redo() then
Text.erA("error : action already redone for player " .. I2S(GetPlayerId(self.owner:getPlayer())))
end
end
return true
end
self.deleteSpecificActionsForLevel = function(____, level)
local lastActionEffective = self.lastActions[self.lastActionEffective]
local highestId = -1
for actionId, action in pairs(self.lastActions) do
if action:getLevel() == level then
action:destroy()
__TS__Delete(self.lastActions, actionId)
else
if actionId > highestId then
highestId = actionId
end
end
end
self.lastActionId = highestId
if lastActionEffective then
do
local i = 0
while i <= self.lastActionId do
if self.lastActions[i] == lastActionEffective then
self.lastActionEffective = i
break
end
i = i + 1
end
end
end
end
self.destroyCancelledActions = function()
if self.lastActionEffective == self.lastActionId then
return
end
while self.lastActionId > self.lastActionEffective do
self.lastActions[self.lastActionId]:destroy()
self.lastActionId = self.lastActionId - 1
end
end
self.destroyAllActions = function()
for _, makeAction in pairs(self.lastActions) do
makeAction:destroy()
end
self.lastActionId = -1
self.lastActionEffective = -1
end
self.destroy = function()
self:destroyAllActions()
end
self.owner = owner
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_create_monsters.MakeMonsterNoMove"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MakeMonsterAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeMonsterAction")
local MakeMonsterAction = ____MakeMonsterAction.MakeMonsterAction
local ____MonsterNoMove = require("src.core.04_STRUCTURES.Monster.MonsterNoMove")
local MonsterNoMove = ____MonsterNoMove.MonsterNoMove
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
____exports.MakeMonsterNoMove = __TS__Class()
local MakeMonsterNoMove = ____exports.MakeMonsterNoMove
MakeMonsterNoMove.name = "MakeMonsterNoMove"
__TS__ClassExtends(MakeMonsterNoMove, Make)
function MakeMonsterNoMove.prototype.____constructor(self, maker, mt, facingAngle)
Make.prototype.____constructor(self, maker, "monsterCreateNoMove")
self.getMonsterType = function()
return self.mt
end
self.getFacingAngle = function()
return self.facingAngle
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local monster = __TS__New(
MonsterNoMove,
self:getMonsterType(),
self.orderX,
self.orderY,
self:getFacingAngle()
)
self.escaper:getMakingLevel().monsters:new(monster, true)
self.escaper:newAction(__TS__New(
MakeMonsterAction,
self.escaper:getMakingLevel(),
monster
))
end
end
self.cancelLastAction = function()
return false
end
self.redoLastAction = function()
return false
end
self.mt = mt
self.facingAngle = facingAngle
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_do_nothing.MakeDoNothing"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
____exports.MakeDoNothing = __TS__Class()
local MakeDoNothing = ____exports.MakeDoNothing
MakeDoNothing.name = "MakeDoNothing"
__TS__ClassExtends(MakeDoNothing, Make)
function MakeDoNothing.prototype.____constructor(self, maker)
Make.prototype.____constructor(self, maker, "doNothing", false)
self.doActions = function()
Make.prototype.doBaseActions(self)
end
end
return ____exports
end,
["src.core.07_TRIGGERS.Triggers_to_modify_terrains.Exchange_terrains"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local terrainA
local terrainB
local function ModifyTerrain()
local terrainType
local y = globals.MAP_MIN_Y
while y <= globals.MAP_MAX_Y do
local x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
terrainType = GetTerrainType(x, y)
if terrainType == terrainA then
ChangeTerrainType(x, y, terrainB)
elseif terrainType == terrainB then
ChangeTerrainType(x, y, terrainA)
end
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
end
____exports.ExchangeTerrains = function(terrainTypeLabelA, terrainTypeLabelB)
local terrainTypeA = getUdgTerrainTypes():getByLabel(terrainTypeLabelA)
local terrainTypeB = getUdgTerrainTypes():getByLabel(terrainTypeLabelB)
if terrainTypeA == terrainTypeB or not terrainTypeA or not terrainTypeB then
return false
end
terrainA = terrainTypeA:getTerrainTypeId()
terrainB = terrainTypeB:getTerrainTypeId()
ModifyTerrain()
terrainTypeA:setTerrainTypeId(terrainB)
terrainTypeB:setTerrainTypeId(terrainA)
return true
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_exchange_terrains.MakeExchangeTerrains"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local ____Exchange_terrains = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Exchange_terrains")
local ExchangeTerrains = ____Exchange_terrains.ExchangeTerrains
____exports.MakeExchangeTerrains = __TS__Class()
local MakeExchangeTerrains = ____exports.MakeExchangeTerrains
MakeExchangeTerrains.name = "MakeExchangeTerrains"
__TS__ClassExtends(MakeExchangeTerrains, MakeOneByOneOrTwoClicks)
function MakeExchangeTerrains.prototype.____constructor(self, maker)
MakeOneByOneOrTwoClicks.prototype.____constructor(
self,
maker,
"exchangeTerrains",
"",
{""},
false
)
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
if self:isLastLocSavedUsed() then
local terrainTypeA = getUdgTerrainTypes():getTerrainType(self.lastX, self.lastY)
local terrainTypeB = getUdgTerrainTypes():getTerrainType(self.orderX, self.orderY)
local ____ = terrainTypeA and terrainTypeB and ExchangeTerrains(terrainTypeA.label, terrainTypeB.label)
self:unsaveLocDefinitely()
else
self:saveLoc(self.orderX, self.orderY)
end
end
end
end
return ____exports
end,
["src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_max"] = function(...)
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local stringReplaceAll = ____Basic_functions.stringReplaceAll
local function initTerrainTypeMax()
local terrainMap = {
[1] = "Ldrt",
[2] = "Ldro",
[3] = "Ldrg",
[4] = "Lrok",
[5] = "Lgrs",
[6] = "Lgrd",
[7] = "Fdrt",
[8] = "Fdro",
[9] = "Fdrg",
[10] = "Frok",
[11] = "Fgrs",
[12] = "Fgrd",
[13] = "Wdrt",
[14] = "Wdro",
[15] = "Wsng",
[16] = "Wrok",
[17] = "Wgrs",
[18] = "Wsnw",
[19] = "Bdrt",
[20] = "Bdrh",
[21] = "Bdrr",
[22] = "Bdrg",
[23] = "Bdsr",
[24] = "Bdsd",
[25] = "Bflr",
[26] = "Bgrr",
[27] = "Adrt",
[28] = "Adrd",
[29] = "Agrs",
[30] = "Arck",
[31] = "Agrd",
[32] = "Avin",
[33] = "Adrg",
[34] = "Alvd",
[35] = "Cdrt",
[36] = "Cdrd",
[37] = "Cpos",
[38] = "Crck",
[39] = "Cvin",
[40] = "Cgrs",
[41] = "Clvg",
[42] = "Ndrt",
[43] = "Ndrd",
[44] = "Nrck",
[45] = "Ngrs",
[46] = "Nice",
[47] = "Nsnw",
[48] = "Nsnr",
[49] = "Ydrt",
[50] = "Ydtr",
[51] = "Yblm",
[52] = "Ybtl",
[53] = "Ysqd",
[54] = "Yrtl",
[55] = "Ygsb",
[56] = "Yhdg",
[57] = "Ywmb",
[58] = "Vdrt",
[59] = "Vdrr",
[60] = "Vcrp",
[61] = "Vcbp",
[62] = "Vstp",
[63] = "Vgrs",
[64] = "Vrck",
[65] = "Vgrt",
[66] = "Qdrt",
[67] = "Qdrr",
[68] = "Qcrp",
[69] = "Qcbp",
[70] = "Qstp",
[71] = "Qgrs",
[72] = "Qrck",
[73] = "Qgrt",
[74] = "Xdrt",
[75] = "Xdtr",
[76] = "Xblm",
[77] = "Xbtl",
[78] = "Xsqd",
[79] = "Xrtl",
[80] = "Xgsb",
[81] = "Xhdg",
[82] = "Xwmb",
[83] = "Ddrt",
[84] = "Dbrk",
[85] = "Drds",
[86] = "Dlvc",
[87] = "Dlav",
[88] = "Ddkr",
[89] = "Dgrs",
[90] = "Dsqd",
[91] = "Gdrt",
[92] = "Gbrk",
[93] = "Grds",
[94] = "Glvc",
[95] = "Glav",
[96] = "Gdkr",
[97] = "Ggrs",
[98] = "Gsqd",
[99] = "Zdrt",
[100] = "Zdtr",
[101] = "Zdrg",
[102] = "Zbks",
[103] = "Zsan",
[104] = "Zbkl",
[105] = "Ztil",
[106] = "Zgrs",
[107] = "Zvin",
[108] = "Idrt",
[109] = "Idtr",
[110] = "Idki",
[111] = "Ibkb",
[112] = "Irbk",
[113] = "Itbk",
[114] = "Iice",
[115] = "Ibsq",
[116] = "Isnw",
[117] = "Odrt",
[118] = "Odtr",
[119] = "Osmb",
[120] = "Ofst",
[121] = "Olgb",
[122] = "Orok",
[123] = "Ofsl",
[124] = "Oaby",
[125] = "Kdrt",
[126] = "Kfsl",
[127] = "Kdts",
[128] = "Kfst",
[129] = "Ksmb",
[130] = "Klgb",
[131] = "Ksqt",
[132] = "Kdkt",
[133] = "Jdrt",
[134] = "Jdtr",
[135] = "Jblm",
[136] = "Jbtl",
[137] = "Jsqd",
[138] = "Jrtl",
[139] = "Jgsb",
[140] = "Jhdg",
[141] = "Jwmb",
[142] = "cAc2",
[143] = "cAc1",
[144] = "cBc2",
[145] = "cBc1",
[146] = "cKc1",
[147] = "cKc2",
[148] = "cYc2",
[149] = "cYc1",
[150] = "cXc2",
[151] = "cXc1",
[152] = "cJc2",
[153] = "cJc1",
[154] = "cDc2",
[155] = "cDc1",
[156] = "cCc2",
[157] = "cCc1",
[158] = "cIc2",
[159] = "cIc1",
[160] = "cFc2",
[161] = "cFc1",
[162] = "cLc2",
[163] = "cLc1",
[164] = "cWc2",
[165] = "cWc1",
[166] = "cNc2",
[167] = "cNc1",
[168] = "cOc1",
[169] = "cOc2",
[170] = "cZc2",
[171] = "cZc1",
[172] = "cGc2",
[173] = "cGc1",
[174] = "cVc2",
[175] = "cVc1",
[176] = "cQc2",
[177] = "cQc1"
}
local reversedTerrainMap = {
Ldrt = 1,
Ldro = 2,
Ldrg = 3,
Lrok = 4,
Lgrs = 5,
Lgrd = 6,
Fdrt = 7,
Fdro = 8,
Fdrg = 9,
Frok = 10,
Fgrs = 11,
Fgrd = 12,
Wdrt = 13,
Wdro = 14,
Wsng = 15,
Wrok = 16,
Wgrs = 17,
Wsnw = 18,
Bdrt = 19,
Bdrh = 20,
Bdrr = 21,
Bdrg = 22,
Bdsr = 23,
Bdsd = 24,
Bflr = 25,
Bgrr = 26,
Adrt = 27,
Adrd = 28,
Agrs = 29,
Arck = 30,
Agrd = 31,
Avin = 32,
Adrg = 33,
Alvd = 34,
Cdrt = 35,
Cdrd = 36,
Cpos = 37,
Crck = 38,
Cvin = 39,
Cgrs = 40,
Clvg = 41,
Ndrt = 42,
Ndrd = 43,
Nrck = 44,
Ngrs = 45,
Nice = 46,
Nsnw = 47,
Nsnr = 48,
Ydrt = 49,
Ydtr = 50,
Yblm = 51,
Ybtl = 52,
Ysqd = 53,
Yrtl = 54,
Ygsb = 55,
Yhdg = 56,
Ywmb = 57,
Vdrt = 58,
Vdrr = 59,
Vcrp = 60,
Vcbp = 61,
Vstp = 62,
Vgrs = 63,
Vrck = 64,
Vgrt = 65,
Qdrt = 66,
Qdrr = 67,
Qcrp = 68,
Qcbp = 69,
Qstp = 70,
Qgrs = 71,
Qrck = 72,
Qgrt = 73,
Xdrt = 74,
Xdtr = 75,
Xblm = 76,
Xbtl = 77,
Xsqd = 78,
Xrtl = 79,
Xgsb = 80,
Xhdg = 81,
Xwmb = 82,
Ddrt = 83,
Dbrk = 84,
Drds = 85,
Dlvc = 86,
Dlav = 87,
Ddkr = 88,
Dgrs = 89,
Dsqd = 90,
Gdrt = 91,
Gbrk = 92,
Grds = 93,
Glvc = 94,
Glav = 95,
Gdkr = 96,
Ggrs = 97,
Gsqd = 98,
Zdrt = 99,
Zdtr = 100,
Zdrg = 101,
Zbks = 102,
Zsan = 103,
Zbkl = 104,
Ztil = 105,
Zgrs = 106,
Zvin = 107,
Idrt = 108,
Idtr = 109,
Idki = 110,
Ibkb = 111,
Irbk = 112,
Itbk = 113,
Iice = 114,
Ibsq = 115,
Isnw = 116,
Odrt = 117,
Odtr = 118,
Osmb = 119,
Ofst = 120,
Olgb = 121,
Orok = 122,
Ofsl = 123,
Oaby = 124,
Kdrt = 125,
Kfsl = 126,
Kdts = 127,
Kfst = 128,
Ksmb = 129,
Klgb = 130,
Ksqt = 131,
Kdkt = 132,
Jdrt = 133,
Jdtr = 134,
Jblm = 135,
Jbtl = 136,
Jsqd = 137,
Jrtl = 138,
Jgsb = 139,
Jhdg = 140,
Jwmb = 141,
cAc2 = 142,
cAc1 = 143,
cBc2 = 144,
cBc1 = 145,
cKc1 = 146,
cKc2 = 147,
cYc2 = 148,
cYc1 = 149,
cXc2 = 150,
cXc1 = 151,
cJc2 = 152,
cJc1 = 153,
cDc2 = 154,
cDc1 = 155,
cCc2 = 156,
cCc1 = 157,
cIc2 = 158,
cIc1 = 159,
cFc2 = 160,
cFc1 = 161,
cLc2 = 162,
cLc1 = 163,
cWc2 = 164,
cWc1 = 165,
cNc2 = 166,
cNc1 = 167,
cOc1 = 168,
cOc2 = 169,
cZc2 = 170,
cZc1 = 171,
cGc2 = 172,
cGc1 = 173,
cVc2 = 174,
cVc1 = 175,
cQc2 = 176,
cQc1 = 177
}
local reversedTerrainMapFourCC = (function()
local mapFourCC = {}
for str in pairs(reversedTerrainMap) do
mapFourCC[FourCC(str)] = reversedTerrainMap[str]
end
return mapFourCC
end)()
local function TerrainTypeMaxId2TerrainTypeId(maxId)
return terrainMap[maxId] and FourCC(terrainMap[maxId]) or 0
end
local function TerrainTypeId2TerrainTypeMaxId(terrainTypeId)
return reversedTerrainMapFourCC[terrainTypeId] or 0
end
local function TerrainTypeId2TerrainTypeAsciiString(terrainType)
return terrainMap[reversedTerrainMapFourCC[terrainType]] or "none"
end
local function TerrainTypeAsciiString2TerrainTypeId(terrainTypeAsciiString)
local withoutQuotes = stringReplaceAll("'", "", terrainTypeAsciiString)
return FourCC(terrainMap[reversedTerrainMap[withoutQuotes]]) or 0
end
return {TerrainTypeMaxId2TerrainTypeId = TerrainTypeMaxId2TerrainTypeId, TerrainTypeId2TerrainTypeMaxId = TerrainTypeId2TerrainTypeMaxId, TerrainTypeAsciiString2TerrainTypeId = TerrainTypeAsciiString2TerrainTypeId, TerrainTypeId2TerrainTypeAsciiString = TerrainTypeId2TerrainTypeAsciiString}
end
____exports.TerrainTypeMax = initTerrainTypeMax()
return ____exports
end,
["src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_grass"] = function(...)
local ____exports = {}
local ____Terrain_type_max = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_max")
local TerrainTypeMax = ____Terrain_type_max.TerrainTypeMax
local function initTerrainTypeGrass()
local terrainMap = {
[1] = 5,
[2] = 11,
[3] = 12,
[4] = 17,
[5] = 26,
[6] = 29,
[7] = 40,
[8] = 45,
[9] = 55,
[10] = 63,
[11] = 65,
[12] = 71,
[13] = 73,
[14] = 80,
[15] = 106,
[16] = 107,
[17] = 139
}
local reversedTerrainMap = {
[5] = 1,
[11] = 2,
[12] = 3,
[17] = 4,
[26] = 5,
[29] = 6,
[40] = 7,
[45] = 8,
[55] = 9,
[63] = 10,
[65] = 11,
[71] = 12,
[73] = 13,
[80] = 14,
[106] = 15,
[107] = 16,
[139] = 17
}
local function TerrainTypeGrassId2MaxId(grassId)
return terrainMap[grassId] or 0
end
local function TerrainTypeMaxId2GrassId(maxId)
return reversedTerrainMap[maxId] or 0
end
local function TerrainTypeGrassId2TerrainTypeId(grassId)
return TerrainTypeMax.TerrainTypeMaxId2TerrainTypeId(TerrainTypeGrassId2MaxId(grassId))
end
return {TerrainTypeGrassId2MaxId = TerrainTypeGrassId2MaxId, TerrainTypeMaxId2GrassId = TerrainTypeMaxId2GrassId, TerrainTypeGrassId2TerrainTypeId = TerrainTypeGrassId2TerrainTypeId}
end
____exports.TerrainTypeGrass = initTerrainTypeGrass()
return ____exports
end,
["src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_names_and_data"] = function(...)
local ____exports = {}
local ____Terrain_type_grass = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_grass")
local TerrainTypeGrass = ____Terrain_type_grass.TerrainTypeGrass
local ____Terrain_type_max = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_max")
local TerrainTypeMax = ____Terrain_type_max.TerrainTypeMax
local TERRAIN_TYPE_NAMES = {}
local TERRAIN_TYPE_DATA = {}
local NB_TERRAINS_TOTAL = 177
local function initTerrainTypeNamesAndData()
local function init_TerrainTypeNamesAndData()
local maxId
local terrain
local grassId
local S
TERRAIN_TYPE_NAMES[2] = "Eté de Lordaeron - Terre"
TERRAIN_TYPE_NAMES[3] = "Eté de Lordaeron - Terre rocailleuse"
TERRAIN_TYPE_NAMES[4] = "Eté de Lordaeron - Terre herbeuse"
TERRAIN_TYPE_NAMES[5] = "Eté de Lordaeron - Rochers"
TERRAIN_TYPE_NAMES[6] = "Eté de Lordaeron - Herbe"
TERRAIN_TYPE_NAMES[7] = "Eté de Lordaeron - Herbe sombre"
TERRAIN_TYPE_NAMES[8] = "Automne de Lordaeron - Terre"
TERRAIN_TYPE_NAMES[9] = "Automne de Lordaeron - Terre rocailleuse"
TERRAIN_TYPE_NAMES[10] = "Automne de Lordaeron - Terre herbeuse"
TERRAIN_TYPE_NAMES[11] = "Automne de Lordaeron - Rochers"
TERRAIN_TYPE_NAMES[12] = "Automne de Lordaeron - Herbe"
TERRAIN_TYPE_NAMES[13] = "Automne de Lordaeron - Herbe sombre"
TERRAIN_TYPE_NAMES[14] = "Hiver de Lordaeron - Terre"
TERRAIN_TYPE_NAMES[15] = "Hiver de Lordaeron - Terre rocailleuse"
TERRAIN_TYPE_NAMES[16] = "Hiver de Lordaeron - Terre herbeuse"
TERRAIN_TYPE_NAMES[17] = "Hiver de Lordaeron - Rochers"
TERRAIN_TYPE_NAMES[18] = "Hiver de Lordaeron - Herbe"
TERRAIN_TYPE_NAMES[19] = "Hiver de Lordaeron - Neige"
TERRAIN_TYPE_NAMES[20] = "Barrens - Terre"
TERRAIN_TYPE_NAMES[21] = "Barrens - Terre rocailleuse"
TERRAIN_TYPE_NAMES[22] = "Barrens - Cailloux"
TERRAIN_TYPE_NAMES[23] = "Barrens - Terre herbeuse"
TERRAIN_TYPE_NAMES[24] = "Barrens - Désert"
TERRAIN_TYPE_NAMES[25] = "Barrens - Désert sombre"
TERRAIN_TYPE_NAMES[26] = "Barrens - Rochers"
TERRAIN_TYPE_NAMES[27] = "Barrens - Herbe"
TERRAIN_TYPE_NAMES[28] = "Ashenvale - Terre"
TERRAIN_TYPE_NAMES[29] = "Ashenvale - Terre rocailleuse"
TERRAIN_TYPE_NAMES[30] = "Ashenvale - Herbe"
TERRAIN_TYPE_NAMES[31] = "Ashenvale - Rochers"
TERRAIN_TYPE_NAMES[32] = "Ashenvale - Touffes d'herbe"
TERRAIN_TYPE_NAMES[33] = "Ashenvale - Vignes"
TERRAIN_TYPE_NAMES[34] = "Ashenvale - Terre herbeuse"
TERRAIN_TYPE_NAMES[35] = "Ashenvale - Feuilles"
TERRAIN_TYPE_NAMES[36] = "Felwood - Terre"
TERRAIN_TYPE_NAMES[37] = "Felwood - Terre rocailleuse"
TERRAIN_TYPE_NAMES[38] = "Felwood - Poison"
TERRAIN_TYPE_NAMES[39] = "Felwood - Rochers"
TERRAIN_TYPE_NAMES[40] = "Felwood - Vignes"
TERRAIN_TYPE_NAMES[41] = "Felwood - Herbe"
TERRAIN_TYPE_NAMES[42] = "Felwood - Feuilles"
TERRAIN_TYPE_NAMES[43] = "Northrend - Terre"
TERRAIN_TYPE_NAMES[44] = "Northrend - Terre sombre"
TERRAIN_TYPE_NAMES[45] = "Northrend - Rochers"
TERRAIN_TYPE_NAMES[46] = "Northrend - Herbe"
TERRAIN_TYPE_NAMES[47] = "Northrend - Glace"
TERRAIN_TYPE_NAMES[48] = "Northrend - Neige"
TERRAIN_TYPE_NAMES[49] = "Northrend - Neige rocailleuse"
TERRAIN_TYPE_NAMES[50] = "Cité - Terre"
TERRAIN_TYPE_NAMES[51] = "Cité - Terre rocailleuse"
TERRAIN_TYPE_NAMES[52] = "Cité - Marbre noir"
TERRAIN_TYPE_NAMES[53] = "Cité - Briques"
TERRAIN_TYPE_NAMES[54] = "Cité - Dalles carrées"
TERRAIN_TYPE_NAMES[55] = "Cité - Dalles rondes"
TERRAIN_TYPE_NAMES[56] = "Cité - Herbe"
TERRAIN_TYPE_NAMES[57] = "Cité - Jardin"
TERRAIN_TYPE_NAMES[58] = "Cité - Marbre blanc"
TERRAIN_TYPE_NAMES[59] = "Village - Terre"
TERRAIN_TYPE_NAMES[60] = "Village - Terre rocailleuse"
TERRAIN_TYPE_NAMES[61] = "Village - Champs"
TERRAIN_TYPE_NAMES[62] = "Village - Chemin caillouteux"
TERRAIN_TYPE_NAMES[63] = "Village - Chemin pavé"
TERRAIN_TYPE_NAMES[64] = "Village - Herbe courte"
TERRAIN_TYPE_NAMES[65] = "Village - Rochers"
TERRAIN_TYPE_NAMES[66] = "Village - Herbe épaisse"
TERRAIN_TYPE_NAMES[67] = "Village en automne - Terre"
TERRAIN_TYPE_NAMES[68] = "Village en automne - Terre rocailleuse"
TERRAIN_TYPE_NAMES[69] = "Village en automne - Champs"
TERRAIN_TYPE_NAMES[70] = "Village en automne - Chemin caillouteux"
TERRAIN_TYPE_NAMES[71] = "Village en automne - Chemin pavé"
TERRAIN_TYPE_NAMES[72] = "Village en automne - Herbe courte"
TERRAIN_TYPE_NAMES[73] = "Village en automne - Rochers"
TERRAIN_TYPE_NAMES[74] = "Village en automne - Herbe épaisse"
TERRAIN_TYPE_NAMES[75] = "Dalaran - Terre"
TERRAIN_TYPE_NAMES[76] = "Dalaran - Terre rocailleuse"
TERRAIN_TYPE_NAMES[77] = "Dalaran - Marbre noir"
TERRAIN_TYPE_NAMES[78] = "Dalaran - Briques"
TERRAIN_TYPE_NAMES[79] = "Dalaran - Dalles carrées"
TERRAIN_TYPE_NAMES[80] = "Dalaran - Dalles rondes"
TERRAIN_TYPE_NAMES[81] = "Dalaran - Herbe"
TERRAIN_TYPE_NAMES[82] = "Dalaran - Jardin"
TERRAIN_TYPE_NAMES[83] = "Dalaran - Marbre blanc"
TERRAIN_TYPE_NAMES[84] = "Donjon - Terre"
TERRAIN_TYPE_NAMES[85] = "Donjon - Briques"
TERRAIN_TYPE_NAMES[86] = "Donjon - Pierres rouges"
TERRAIN_TYPE_NAMES[87] = "Donjon - Fissures de lave"
TERRAIN_TYPE_NAMES[88] = "Donjon - Lave"
TERRAIN_TYPE_NAMES[89] = "Donjon - Rochers noirs"
TERRAIN_TYPE_NAMES[90] = "Donjon - Pierres grises"
TERRAIN_TYPE_NAMES[91] = "Donjon - Dalles carrées"
TERRAIN_TYPE_NAMES[92] = "Souterrain - Terre"
TERRAIN_TYPE_NAMES[93] = "Souterrain - Briques"
TERRAIN_TYPE_NAMES[94] = "Souterrain - Pierres rouges"
TERRAIN_TYPE_NAMES[95] = "Souterrain - Morceaux de glace"
TERRAIN_TYPE_NAMES[96] = "Souterrain - Glace"
TERRAIN_TYPE_NAMES[97] = "Souterrain - Rochers noirs"
TERRAIN_TYPE_NAMES[98] = "Souterrain - Pierres grises"
TERRAIN_TYPE_NAMES[99] = "Souterrain - Dalles carrées"
TERRAIN_TYPE_NAMES[100] = "Ruines englouties - Terre"
TERRAIN_TYPE_NAMES[101] = "Ruines englouties - Terre rocailleuse"
TERRAIN_TYPE_NAMES[102] = "Ruines englouties - Terre herbeuse"
TERRAIN_TYPE_NAMES[103] = "Ruines englouties - Petites briques"
TERRAIN_TYPE_NAMES[104] = "Ruines englouties - Sable"
TERRAIN_TYPE_NAMES[105] = "Ruines englouties - Grandes briques"
TERRAIN_TYPE_NAMES[106] = "Ruines englouties - Dalles rondes"
TERRAIN_TYPE_NAMES[107] = "Ruines englouties - Herbe"
TERRAIN_TYPE_NAMES[108] = "Ruines englouties - Herbe sombre"
TERRAIN_TYPE_NAMES[109] = "Glacier d'Icecrown - Terre"
TERRAIN_TYPE_NAMES[110] = "Glacier d'Icecrown - Terre rocailleuse"
TERRAIN_TYPE_NAMES[111] = "Glacier d'Icecrown - Glace sombre"
TERRAIN_TYPE_NAMES[112] = "Glacier d'Icecrown - Briques noires"
TERRAIN_TYPE_NAMES[113] = "Glacier d'Icecrown - Briques runiques"
TERRAIN_TYPE_NAMES[114] = "Glacier d'Icecrown - Briques empilées"
TERRAIN_TYPE_NAMES[115] = "Glacier d'Icecrown - Glace"
TERRAIN_TYPE_NAMES[116] = "Glacier d'Icecrown - Carrés noirs"
TERRAIN_TYPE_NAMES[117] = "Glacier d'Icecrown - Neige"
TERRAIN_TYPE_NAMES[118] = "Terres dévastées - Terre"
TERRAIN_TYPE_NAMES[119] = "Terres dévastées - Terre claire"
TERRAIN_TYPE_NAMES[120] = "Terres dévastées - Terre rocailleuse"
TERRAIN_TYPE_NAMES[121] = "Terres dévastées - Terre craquelée"
TERRAIN_TYPE_NAMES[122] = "Terres dévastées - Pierres plates"
TERRAIN_TYPE_NAMES[123] = "Terres dévastées - Rochers"
TERRAIN_TYPE_NAMES[124] = "Terres dévastées - Pierres plates claires"
TERRAIN_TYPE_NAMES[125] = "Terres dévastées - Abysse"
TERRAIN_TYPE_NAMES[126] = "Catacombes - Terre"
TERRAIN_TYPE_NAMES[127] = "Catacombes - Terre claire"
TERRAIN_TYPE_NAMES[128] = "Catacombes - Terre rocailleuse"
TERRAIN_TYPE_NAMES[129] = "Catacombes - Pierres plates"
TERRAIN_TYPE_NAMES[130] = "Catacombes - Petites briques"
TERRAIN_TYPE_NAMES[131] = "Catacombes - Grandes briques"
TERRAIN_TYPE_NAMES[132] = "Catacombes - Dalles carrées"
TERRAIN_TYPE_NAMES[133] = "Catacombes - Dalles sombres"
TERRAIN_TYPE_NAMES[134] = "Ruines de Dalaran - Terre"
TERRAIN_TYPE_NAMES[135] = "Ruines de Dalaran - Terre rocailleuse"
TERRAIN_TYPE_NAMES[136] = "Ruines de Dalaran - Marbre noir"
TERRAIN_TYPE_NAMES[137] = "Ruines de Dalaran - Dalles en brique"
TERRAIN_TYPE_NAMES[138] = "Ruines de Dalaran - Dalles carrées"
TERRAIN_TYPE_NAMES[139] = "Ruines de Dalaran - Dalles rondes"
TERRAIN_TYPE_NAMES[140] = "Ruines de Dalaran - Herbe"
TERRAIN_TYPE_NAMES[141] = "Ruines de Dalaran - Jardin"
TERRAIN_TYPE_NAMES[142] = "Ruines de Dalaran - Marbre blanc"
TERRAIN_TYPE_NAMES[143] = "Ashenvale - Falaise"
TERRAIN_TYPE_NAMES[144] = "Ashenvale - Falaise herbeuse"
TERRAIN_TYPE_NAMES[145] = "Barrens - Falaise désertique"
TERRAIN_TYPE_NAMES[146] = "Barrens - Falaise herbeuse"
TERRAIN_TYPE_NAMES[147] = "Catacombes - Falaise"
TERRAIN_TYPE_NAMES[148] = "Catacombes - Falaise de tuiles noires"
TERRAIN_TYPE_NAMES[149] = "Cité - Falaise"
TERRAIN_TYPE_NAMES[150] = "Cité - Falaise de tuiles carrées"
TERRAIN_TYPE_NAMES[151] = "Dalaran - Falaise"
TERRAIN_TYPE_NAMES[152] = "Dalaran - Falaise de tuiles carrées"
TERRAIN_TYPE_NAMES[153] = "Ruines de Dalaran - Falaise"
TERRAIN_TYPE_NAMES[154] = "Ruines de Dalaran - Falaise de tuiles carrées"
TERRAIN_TYPE_NAMES[155] = "Donjon - Falaise"
TERRAIN_TYPE_NAMES[156] = "Donjon - Falaise de tuiles carrées"
TERRAIN_TYPE_NAMES[157] = "Felwood - Falaise"
TERRAIN_TYPE_NAMES[158] = "Felwood - Falaise herbeuse"
TERRAIN_TYPE_NAMES[159] = "Glacier d'Icecrown - Falaise de briques runiques"
TERRAIN_TYPE_NAMES[160] = "Glacier d'Icecrown - Falaise enneigée"
TERRAIN_TYPE_NAMES[161] = "Automne de Lordaeron - Falaise"
TERRAIN_TYPE_NAMES[162] = "Automne de Lordaeron - Falaise herbeuse"
TERRAIN_TYPE_NAMES[163] = "Eté de Lordaeron - Falaise"
TERRAIN_TYPE_NAMES[164] = "Eté de Lordaeron - Falaise herbeuse"
TERRAIN_TYPE_NAMES[165] = "Hiver de Lordaeron - Falaise herbeuse"
TERRAIN_TYPE_NAMES[166] = "Hiver de Lordaeron - Falaise enneigée"
TERRAIN_TYPE_NAMES[167] = "Northrend - Falaise"
TERRAIN_TYPE_NAMES[168] = "Northrend - Falaise enneigée"
TERRAIN_TYPE_NAMES[169] = "Terres dévastées - Falaise abyssale"
TERRAIN_TYPE_NAMES[170] = "Terres dévastées - Falaise ardue"
TERRAIN_TYPE_NAMES[171] = "Ruines englouties - Falaise"
TERRAIN_TYPE_NAMES[172] = "Ruines englouties - Falaise de tuiles larges"
TERRAIN_TYPE_NAMES[173] = "Souterrain - Falaise"
TERRAIN_TYPE_NAMES[174] = "Souterrain - Falaise de tuiles carrées"
TERRAIN_TYPE_NAMES[175] = "Village - Falaise"
TERRAIN_TYPE_NAMES[176] = "Village - Falaise d'herbe épaisse"
TERRAIN_TYPE_NAMES[177] = "Village en automne - Falaise"
TERRAIN_TYPE_NAMES[178] = "Village en automne - Falaise d'herbe épaisse"
maxId = 1
while maxId <= NB_TERRAINS_TOTAL do
terrain = TerrainTypeMax.TerrainTypeMaxId2TerrainTypeId(maxId)
S = (((((TERRAIN_TYPE_NAMES[maxId + 1] .. " : ") .. I2S(maxId)) .. " ") .. "'") .. TerrainTypeMax.TerrainTypeId2TerrainTypeAsciiString(terrain)) .. "'"
grassId = TerrainTypeGrass.TerrainTypeMaxId2GrassId(maxId)
if grassId ~= 0 then
S = (S .. " g") .. I2S(grassId)
end
TERRAIN_TYPE_DATA[maxId + 1] = S
maxId = maxId + 1
end
end
return {TERRAIN_TYPE_NAMES = TERRAIN_TYPE_NAMES, TERRAIN_TYPE_DATA = TERRAIN_TYPE_DATA, NB_TERRAINS_TOTAL = NB_TERRAINS_TOTAL, init_TerrainTypeNamesAndData = init_TerrainTypeNamesAndData}
end
____exports.TerrainTypeNamesAndData = initTerrainTypeNamesAndData()
____exports.init_TerrainTypeNamesAndData = initTerrainTypeNamesAndData().init_TerrainTypeNamesAndData
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_get_info.MakeGetTerrainType"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_functions")
local GetTerrainData = ____Terrain_functions.GetTerrainData
____exports.MakeGetTerrainType = __TS__Class()
local MakeGetTerrainType = ____exports.MakeGetTerrainType
MakeGetTerrainType.name = "MakeGetTerrainType"
__TS__ClassExtends(MakeGetTerrainType, Make)
function MakeGetTerrainType.prototype.____constructor(self, maker)
Make.prototype.____constructor(self, maker, "getTerrainType", false)
self.doActions = function()
if Make.prototype.doBaseActions(self) then
local terrainData = GetTerrainData(GetTerrainType(self.orderX, self.orderY))
local ____ = terrainData and Text.P(self.makerOwner, terrainData)
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_start_end_visibilityModifier.MakeEnd"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
____exports.MakeEnd = __TS__Class()
local MakeEnd = ____exports.MakeEnd
MakeEnd.name = "MakeEnd"
__TS__ClassExtends(MakeEnd, MakeOneByOneOrTwoClicks)
function MakeEnd.prototype.____constructor(self, maker)
MakeOneByOneOrTwoClicks.prototype.____constructor(
self,
maker,
"endCreate",
"",
{""}
)
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
if self:isLastLocSavedUsed() then
self.escaper:getMakingLevel():newEnd(self.lastX, self.lastY, self.orderX, self.orderY)
Text.mkP(
self.makerOwner,
"end made for level " .. I2S(self.escaper:getMakingLevel():getId())
)
self.escaper:destroyMake()
else
self:saveLoc(self.orderX, self.orderY)
end
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_start_end_visibilityModifier.MakeStart"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____globals = require("globals")
local getUdgLevels = ____globals.getUdgLevels
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
____exports.MakeStart = __TS__Class()
local MakeStart = ____exports.MakeStart
MakeStart.name = "MakeStart"
__TS__ClassExtends(MakeStart, MakeOneByOneOrTwoClicks)
function MakeStart.prototype.____constructor(self, maker, forNext, facing)
MakeOneByOneOrTwoClicks.prototype.____constructor(
self,
maker,
"startCreate",
"",
{""}
)
self.forNext = function()
return self.forNextB
end
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
local level
if self:isLastLocSavedUsed() then
level = self.escaper:getMakingLevel()
if self:forNext() then
if not getUdgLevels():get(level:getId() + 1) then
getUdgLevels():new()
end
level = getUdgLevels():get(level:getId() + 1)
if not level then
Text.erP(
self.escaper:getPlayer(),
"erreur d'origine inconnue"
)
self.escaper:destroyMake()
return
end
end
level:newStart(
self.lastX,
self.lastY,
self.orderX,
self.orderY,
self.facing
)
Text.mkP(
self.makerOwner,
"start made for level " .. I2S(level:getId())
)
self.escaper:destroyMake()
else
self:saveLoc(self.orderX, self.orderY)
end
end
end
self.forNextB = forNext
self.facing = facing
end
return ____exports
end,
["src.core.03_view_all_hide_all.View_all_hide_all"] = function(...)
local ____exports = {}
local udgFogs = {udg_hideAll = nil, udg_viewAll = nil}
____exports.getUdgHideAll = function() return udgFogs.udg_hideAll end
____exports.getUdgViewAll = function() return udgFogs.udg_viewAll end
____exports.RefreshHideAllVM = function()
DestroyFogModifier(udgFogs.udg_hideAll)
udgFogs.udg_hideAll = CreateFogModifierRect(
Player(0),
FOG_OF_WAR_MASKED,
GetWorldBounds(),
true,
false
)
FogModifierStart(udgFogs.udg_hideAll)
end
function ____exports.initViewAllHideAll()
udgFogs.udg_viewAll = CreateFogModifierRect(
Player(0),
FOG_OF_WAR_VISIBLE,
GetPlayableMapRect(),
true,
false
)
udgFogs.udg_hideAll = CreateFogModifierRect(
Player(0),
FOG_OF_WAR_MASKED,
GetWorldBounds(),
true,
false
)
FogModifierStart(udgFogs.udg_hideAll)
end
return ____exports
end,
["src.core.04_STRUCTURES.Level.VisibilityModifier"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____View_all_hide_all = require("src.core.03_view_all_hide_all.View_all_hide_all")
local RefreshHideAllVM = ____View_all_hide_all.RefreshHideAllVM
____exports.VisibilityModifier = __TS__Class()
local VisibilityModifier = ____exports.VisibilityModifier
VisibilityModifier.name = "VisibilityModifier"
function VisibilityModifier.prototype.____constructor(self, x1, y1, x2, y2)
self.destroy = function()
DestroyFogModifier(self.fm)
local ____ = self.level and self.id and self.level.visibilities:removeVisibility(self.id)
end
self.activate = function(____, activ)
if activ then
FogModifierStart(self.fm)
else
FogModifierStop(self.fm)
end
end
self.copy = function()
return __TS__New(
____exports.VisibilityModifier,
self.x1,
self.y1,
self.x2,
self.y2
)
end
self.toJson = function()
local output = MemoryHandler.getEmptyObject()
output.x1 = R2I(self.x1)
output.y1 = R2I(self.y1)
output.x2 = R2I(self.x2)
output.y2 = R2I(self.y2)
return output
end
local visionRect = Rect(x1, y1, x2, y2)
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
self.fm = CreateFogModifierRect(
Player(0),
FOG_OF_WAR_VISIBLE,
visionRect,
true,
false
)
RemoveRect(visionRect)
RefreshHideAllVM()
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeVisibilityModifierAction"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeAction")
local MakeAction = ____MakeAction.MakeAction
____exports.MakeVisibilityModifierAction = __TS__Class()
local MakeVisibilityModifierAction = ____exports.MakeVisibilityModifierAction
MakeVisibilityModifierAction.name = "MakeVisibilityModifierAction"
__TS__ClassExtends(MakeVisibilityModifierAction, MakeAction)
function MakeVisibilityModifierAction.prototype.____constructor(self, level, visibilityModifier)
MakeAction.prototype.____constructor(self, level)
self.cancel = function()
if not self.isActionMadeB then
return false
end
self.visibilityModifierSave = self.visibilityModifierPointeur:copy()
self.visibilityModifierPointeur:destroy()
self.isActionMadeB = false
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"visibility creation cancelled"
)
return true
end
self.redo = function()
if self.isActionMadeB or not self.level or not self.visibilityModifierSave then
return false
end
local vm = self.level:newVisibilityModifierFromExisting(self.visibilityModifierSave)
if not vm then
local ____ = self.owner and Text.erP(
self.owner:getPlayer(),
"can't recreate visibility, full for this level"
)
else
self.visibilityModifierPointeur = vm
vm:activate(true)
__TS__Delete(self, "visibilityModifierSave")
end
self.isActionMadeB = true
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"visibility creation redone"
)
return true
end
self.destroy = function()
if self.visibilityModifierSave then
self.visibilityModifierSave:destroy()
end
end
self.isActionMadeB = true
self.visibilityModifierPointeur = visibilityModifier
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_start_end_visibilityModifier.MakeVisibilityModifier"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeVisibilityModifierAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeVisibilityModifierAction")
local MakeVisibilityModifierAction = ____MakeVisibilityModifierAction.MakeVisibilityModifierAction
____exports.MakeVisibilityModifier = __TS__Class()
local MakeVisibilityModifier = ____exports.MakeVisibilityModifier
MakeVisibilityModifier.name = "MakeVisibilityModifier"
__TS__ClassExtends(MakeVisibilityModifier, MakeOneByOneOrTwoClicks)
function MakeVisibilityModifier.prototype.____constructor(self, maker)
MakeOneByOneOrTwoClicks.prototype.____constructor(
self,
maker,
"visibilityModifierCreate",
"",
{""}
)
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
local newVisibilityModifier
if self:isLastLocSavedUsed() then
newVisibilityModifier = self.escaper:getMakingLevel():newVisibilityModifier(self.lastX, self.lastY, self.orderX, self.orderY)
if not newVisibilityModifier then
Text.erP(self.makerOwner, "can't create visibility, full for this level")
else
newVisibilityModifier:activate(true)
self.escaper:newAction(__TS__New(
MakeVisibilityModifierAction,
self.escaper:getMakingLevel(),
newVisibilityModifier
))
Text.mkP(
self.makerOwner,
"visibility rectangle made for level " .. I2S(self.escaper:getMakingLevel():getId())
)
end
self:unsaveLocDefinitely()
else
self:saveLoc(self.orderX, self.orderY)
end
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeTerrainCopyPasteAction"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local ____MakeAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeAction")
local MakeAction = ____MakeAction.MakeAction
____exports.MakeTerrainCopyPasteAction = __TS__Class()
local MakeTerrainCopyPasteAction = ____exports.MakeTerrainCopyPasteAction
MakeTerrainCopyPasteAction.name = "MakeTerrainCopyPasteAction"
__TS__ClassExtends(MakeTerrainCopyPasteAction, MakeAction)
function MakeTerrainCopyPasteAction.prototype.____constructor(self, x1, y1, x2, y2, x3, y3, x4, y4)
MakeAction.prototype.____constructor(self)
self.terrainModificationCancel = function()
local x = self.minX
local y = self.minY
while y <= self.maxY do
while x <= self.maxX do
local terrainType = self.terrainTypesBefore[x + 1][y + 1]
if terrainType and terrainType:getTerrainTypeId() ~= 0 then
ChangeTerrainType(
x,
y,
terrainType:getTerrainTypeId()
)
end
x = x + LARGEUR_CASE
end
x = self.minX
y = y + LARGEUR_CASE
end
end
self.terrainModificationRedo = function()
local x = self.minX
local y = self.minY
while y <= self.maxY do
while x <= self.maxX do
local terrainType = self.terrainTypesAfter[x + 1][y + 1]
if terrainType and terrainType:getTerrainTypeId() ~= 0 then
ChangeTerrainType(
x,
y,
terrainType:getTerrainTypeId()
)
end
x = x + LARGEUR_CASE
end
x = self.minX
y = y + LARGEUR_CASE
end
end
self.cancel = function()
if not self.isActionMadeB then
return false
end
self:terrainModificationCancel()
self.isActionMadeB = false
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"terrain copy/paste cancelled"
)
return true
end
self.redo = function()
if self.isActionMadeB then
return false
end
self:terrainModificationRedo()
self.isActionMadeB = true
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"terrain copy/paste redone"
)
return true
end
self.destroy = function()
MemoryHandler.destroyArray(self.terrainTypesBefore, true)
MemoryHandler.destroyArray(self.terrainTypesAfter, true)
end
local ____globals_0 = globals
local MAP_MIN_X = ____globals_0.MAP_MIN_X
local MAP_MIN_Y = ____globals_0.MAP_MIN_Y
local MAP_MAX_X = ____globals_0.MAP_MAX_X
local MAP_MAX_Y = ____globals_0.MAP_MAX_Y
local xCopy
local yCopy
local xPaste
local yPaste
local minXcopy = RMinBJ(x1, x2)
local maxXcopy = RMaxBJ(x1, x2)
local minYcopy = RMinBJ(y1, y2)
local maxYcopy = RMaxBJ(y1, y2)
local diffX = maxXcopy - minXcopy
local diffY = maxYcopy - minYcopy
local minXpaste
local minYpaste
if x4 > x3 then
minXpaste = x3
else
minXpaste = x3 - diffX
end
if y4 > y3 then
minYpaste = y3
else
minYpaste = y3 - diffY
end
if minXpaste < MAP_MIN_X or minXpaste + diffX > MAP_MAX_X or minYpaste < MAP_MIN_Y or minYpaste + diffY > MAP_MAX_Y then
error("out of bounds", 0)
end
self.minX = minXpaste
self.minY = minYpaste
self.maxX = minXpaste + diffX
self.maxY = minYpaste + diffY
self.terrainTypesBefore = MemoryHandler.getEmptyArray()
self.terrainTypesAfter = MemoryHandler.getEmptyArray()
xPaste = minXpaste
yPaste = minYpaste
xCopy = minXcopy
yCopy = minYcopy
while yCopy <= maxYcopy do
while xCopy <= maxXcopy do
local tt = getUdgTerrainTypes():getTerrainType(xPaste, yPaste)
if tt then
local ____temp_2 = not self.terrainTypesBefore[xPaste + 1]
if ____temp_2 then
local ____MemoryHandler_getEmptyArray_result_1 = MemoryHandler.getEmptyArray()
self.terrainTypesBefore[xPaste + 1] = ____MemoryHandler_getEmptyArray_result_1
____temp_2 = ____MemoryHandler_getEmptyArray_result_1
end
self.terrainTypesBefore[xPaste + 1][yPaste + 1] = tt
end
local terrainType = getUdgTerrainTypes():getTerrainType(xCopy, yCopy)
if terrainType then
local ____temp_4 = not self.terrainTypesAfter[xPaste + 1]
if ____temp_4 then
local ____MemoryHandler_getEmptyArray_result_3 = MemoryHandler.getEmptyArray()
self.terrainTypesAfter[xPaste + 1] = ____MemoryHandler_getEmptyArray_result_3
____temp_4 = ____MemoryHandler_getEmptyArray_result_3
end
self.terrainTypesAfter[xPaste + 1][yPaste + 1] = terrainType
local terrainTypeId = terrainType:getTerrainTypeId()
if terrainTypeId ~= 0 then
ChangeTerrainType(xPaste, yPaste, terrainTypeId)
end
end
xPaste = xPaste + LARGEUR_CASE
xCopy = xCopy + LARGEUR_CASE
end
xPaste = minXpaste
xCopy = minXcopy
yPaste = yPaste + LARGEUR_CASE
yCopy = yCopy + LARGEUR_CASE
end
self.isActionMadeB = true
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_terrain.MakeTerrainCopyPaste"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
local MAKE_LAST_CLIC_UNIT_ID = ____Make.MAKE_LAST_CLIC_UNIT_ID
local ____MakeTerrainCopyPasteAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeTerrainCopyPasteAction")
local MakeTerrainCopyPasteAction = ____MakeTerrainCopyPasteAction.MakeTerrainCopyPasteAction
____exports.MakeTerrainCopyPaste = __TS__Class()
local MakeTerrainCopyPaste = ____exports.MakeTerrainCopyPaste
MakeTerrainCopyPaste.name = "MakeTerrainCopyPaste"
__TS__ClassExtends(MakeTerrainCopyPaste, Make)
function MakeTerrainCopyPaste.prototype.____constructor(self, maker)
Make.prototype.____constructor(self, maker, "terrainCopyPaste", false)
self.x1 = 0
self.y1 = 0
self.x2 = 0
self.y2 = 0
self.x3 = 0
self.y3 = 0
self.destroy = function()
Make.prototype.destroy(self)
local ____ = self.unitLastClic1 and RemoveUnit(self.unitLastClic1)
local ____ = self.unitLastClic2 and RemoveUnit(self.unitLastClic2)
local ____ = self.unitLastClic3 and RemoveUnit(self.unitLastClic3)
end
self.createUnitClic = function(____, u, x, y)
if not u then
u = CreateUnit(
self.makerOwner,
MAKE_LAST_CLIC_UNIT_ID,
x,
y,
GetRandomDirectionDeg()
)
else
SetUnitX(u, x)
SetUnitY(u, y)
end
return u
end
self.unsaveLoc = function(____, locId)
if locId == 1 then
self.isPoint1Used = false
local ____ = self.unitLastClic1 and RemoveUnit(self.unitLastClic1)
elseif locId == 2 then
self.isPoint2Used = false
local ____ = self.unitLastClic2 and RemoveUnit(self.unitLastClic2)
elseif locId == 3 then
self.isPoint3Used = false
local ____ = self.unitLastClic3 and RemoveUnit(self.unitLastClic3)
end
end
self.unsaveLocDefinitely = function(____, locId)
self:unsaveLoc(locId)
if locId == 1 then
self.isPoint1Saved = false
elseif locId == 2 then
self.isPoint2Saved = false
elseif locId == 3 then
self.isPoint3Saved = false
end
end
self.unsaveLocsDefinitely = function()
self:unsaveLocDefinitely(1)
self:unsaveLocDefinitely(2)
self:unsaveLocDefinitely(3)
end
self.saveLoc = function(____, x, y)
if not self.isPoint1Used then
self.unitLastClic1 = self:createUnitClic(self.unitLastClic1, x, y)
self.x1 = x
self.y1 = y
self.isPoint1Saved = true
self.isPoint1Used = true
self:unsaveLocDefinitely(2)
self:unsaveLocDefinitely(3)
elseif not self.isPoint2Used then
self.unitLastClic2 = self:createUnitClic(self.unitLastClic2, x, y)
self.x2 = x
self.y2 = y
self.isPoint2Saved = true
self.isPoint2Used = true
self:unsaveLocDefinitely(3)
elseif not self.isPoint3Used then
self.unitLastClic3 = self:createUnitClic(self.unitLastClic3, x, y)
self.x3 = x
self.y3 = y
self.isPoint3Saved = true
self.isPoint3Used = true
else
do
local function ____catch(____error)
if type(____error) == "string" then
Text.erP(self.makerOwner, ____error)
end
end
local ____try, ____hasReturned = pcall(function()
local action = __TS__New(
MakeTerrainCopyPasteAction,
self.x1,
self.y1,
self.x2,
self.y2,
self.x3,
self.y3,
x,
y
)
self:unsaveLocsDefinitely()
self.escaper:newAction(action)
end)
if not ____try then
____catch(____hasReturned)
end
end
end
self.escaper:destroyCancelledActions()
end
self.cancelLastAction = function()
if self.isPoint3Used then
self:unsaveLoc(3)
return true
elseif self.isPoint2Used then
self:unsaveLoc(2)
return true
elseif self.isPoint1Used then
self:unsaveLoc(1)
return true
end
return false
end
self.redoLastAction = function()
if self.isPoint1Saved and not self.isPoint1Used then
self:saveLoc(self.x1, self.y1)
return true
elseif self.isPoint2Saved and not self.isPoint2Used then
self:saveLoc(self.x2, self.y2)
return true
elseif self.isPoint3Saved and not self.isPoint3Used then
self:saveLoc(self.x3, self.y3)
return true
end
return false
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
self:saveLoc(self.orderX, self.orderY)
end
end
self.isPoint1Saved = false
self.isPoint2Saved = false
self.isPoint3Saved = false
self.isPoint1Used = false
self.isPoint2Used = false
self.isPoint3Used = false
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeTerrainCreateAction"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainBetween = ____Modify_terrain_functions.ChangeTerrainBetween
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local ____MakeAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeAction")
local MakeAction = ____MakeAction.MakeAction
____exports.MakeTerrainCreateAction = __TS__Class()
local MakeTerrainCreateAction = ____exports.MakeTerrainCreateAction
MakeTerrainCreateAction.name = "MakeTerrainCreateAction"
__TS__ClassExtends(MakeTerrainCreateAction, MakeAction)
function MakeTerrainCreateAction.prototype.____constructor(self, terrainTypeNew, x1, y1, x2, y2)
MakeAction.prototype.____constructor(self)
self.destroy = function()
end
self.terrainModificationCancel = function()
local x = self.minX
local y = self.minY
while y <= self.maxY do
while x <= self.maxX do
local terrainType = self.terrainTypesBefore[x + 1][y + 1]
if terrainType and terrainType:getTerrainTypeId() ~= 0 then
ChangeTerrainType(
x,
y,
terrainType:getTerrainTypeId()
)
end
x = x + LARGEUR_CASE
end
x = self.minX
y = y + LARGEUR_CASE
end
end
self.terrainModificationRedo = function()
local terrainTypeId = self.terrainTypeNew:getTerrainTypeId()
if terrainTypeId == 0 then
local ____ = self.owner and Text.erP(
self.owner:getPlayer(),
"the terrain type for this action doesn't exist anymore"
)
else
ChangeTerrainBetween(
terrainTypeId,
self.minX,
self.minY,
self.maxX,
self.maxY
)
end
end
self.cancel = function()
if not self.isActionMadeB then
return false
end
self:terrainModificationCancel()
self.isActionMadeB = false
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"terrain creation cancelled"
)
return true
end
self.redo = function()
if self.isActionMadeB then
return false
end
self:terrainModificationRedo()
self.isActionMadeB = true
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"terrain creation redone"
)
return true
end
self.minX = RMinBJ(x1, x2)
self.maxX = RMaxBJ(x1, x2)
self.minY = RMinBJ(y1, y2)
self.maxY = RMaxBJ(y1, y2)
if not terrainTypeNew or terrainTypeNew:getTerrainTypeId() == 0 then
error("this terrain type doesn't exist anymore", 0)
end
self.terrainTypesBefore = {}
local x = self.minX
local y = self.minY
while y <= self.maxY do
while x <= self.maxX do
local tt = getUdgTerrainTypes():getTerrainType(x, y)
if tt then
local ____temp_1 = not self.terrainTypesBefore[x + 1]
if ____temp_1 then
local ____temp_0 = {}
self.terrainTypesBefore[x + 1] = ____temp_0
____temp_1 = ____temp_0
end
self.terrainTypesBefore[x + 1][y + 1] = tt
end
x = x + LARGEUR_CASE
end
x = self.minX
y = y + LARGEUR_CASE
end
ChangeTerrainBetween(
terrainTypeNew:getTerrainTypeId(),
self.minX,
self.minY,
self.maxX,
self.maxY
)
self.terrainTypeNew = terrainTypeNew
self.isActionMadeB = true
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_terrain.MakeTerrainCreate"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeTerrainCreateAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeTerrainCreateAction")
local MakeTerrainCreateAction = ____MakeTerrainCreateAction.MakeTerrainCreateAction
____exports.MakeTerrainCreate = __TS__Class()
local MakeTerrainCreate = ____exports.MakeTerrainCreate
MakeTerrainCreate.name = "MakeTerrainCreate"
__TS__ClassExtends(MakeTerrainCreate, MakeOneByOneOrTwoClicks)
function MakeTerrainCreate.prototype.____constructor(self, maker, terrainType)
MakeOneByOneOrTwoClicks.prototype.____constructor(
self,
maker,
"terrainCreate",
"",
{""},
false
)
self.getTerrainType = function()
return self.terrainType
end
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
local action
if self:isLastLocSavedUsed() then
do
local function ____catch(____error)
if type(____error) == "string" then
Text.erP(
self.escaper:getPlayer(),
____error
)
end
end
local ____try, ____hasReturned = pcall(function()
action = __TS__New(
MakeTerrainCreateAction,
self:getTerrainType(),
self.lastX,
self.lastY,
self.orderX,
self.orderY
)
self.escaper:newAction(action)
self:unsaveLocDefinitely()
end)
if not ____try then
____catch(____hasReturned)
end
end
else
self:saveLoc(self.orderX, self.orderY)
end
end
end
self.terrainType = terrainType
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make.MakeHoldClick"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
____exports.MIN_TIME_BETWEEN_ACTIONS = nil
local function onPressActions()
local escaper = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
local ____escaper_getMake_result_0 = escaper
if ____escaper_getMake_result_0 ~= nil then
____escaper_getMake_result_0 = ____escaper_getMake_result_0:getMake()
end
local make = ____escaper_getMake_result_0
if __TS__InstanceOf(make, ____exports.MakeHoldClick) then
make:doPressActions()
end
end
local function onUnpressActions()
local escaper = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
local ____escaper_getMake_result_2 = escaper
if ____escaper_getMake_result_2 ~= nil then
____escaper_getMake_result_2 = ____escaper_getMake_result_2:getMake()
end
local make = ____escaper_getMake_result_2
if __TS__InstanceOf(make, ____exports.MakeHoldClick) then
make:doUnpressActions()
end
end
local function onMouseMoveActions()
local escaper = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
local ____escaper_getMake_result_4 = escaper
if ____escaper_getMake_result_4 ~= nil then
____escaper_getMake_result_4 = ____escaper_getMake_result_4:getMake()
end
local make = ____escaper_getMake_result_4
if __TS__InstanceOf(make, ____exports.MakeHoldClick) then
make:doMouseMoveActions()
end
end
--- Class MakeHoldClick
____exports.MakeHoldClick = __TS__Class()
local MakeHoldClick = ____exports.MakeHoldClick
MakeHoldClick.name = "MakeHoldClick"
__TS__ClassExtends(MakeHoldClick, Make)
function MakeHoldClick.prototype.____constructor(self, escaper, kind, forSpecificLevel)
Make.prototype.____constructor(
self,
escaper:getHero(),
kind,
forSpecificLevel,
escaper
)
self.activeBtn = nil
self.activeBtnStr = ""
self.isPressed = false
self.tPress = nil
self.tUnpress = nil
self.tMouseMove = nil
self.timeSinceLastMouseMove = 1000
self.mouseX = 0
self.mouseY = 0
self.currentClickMinX = 0
self.currentClickMinY = 0
self.currentClickMaxX = 0
self.currentClickMaxY = 0
self.updateCurrentClickMinMaxLocations = function()
if self.currentClickMinX == 0 or self.escaper.mouseX < self.currentClickMinX then
self.currentClickMinX = self.escaper.mouseX
end
if self.currentClickMinY == 0 or self.escaper.mouseY < self.currentClickMinY then
self.currentClickMinY = self.escaper.mouseY
end
if self.currentClickMaxX == 0 or self.escaper.mouseX > self.currentClickMaxX then
self.currentClickMaxX = self.escaper.mouseX
end
if self.currentClickMaxY == 0 or self.escaper.mouseY > self.currentClickMaxY then
self.currentClickMaxY = self.escaper.mouseY
end
end
self.resetCurrentClickMinMaxLocations = function()
self.currentClickMinX = 0
self.currentClickMinY = 0
self.currentClickMaxX = 0
self.currentClickMaxY = 0
end
self.enableTriggersMouse = function()
local ____ = self.tPress and DestroyTrigger(self.tPress)
local ____ = self.tUnpress and DestroyTrigger(self.tUnpress)
local ____ = self.tMouseMove and DestroyTrigger(self.tMouseMove)
self.tPress = createEvent({
events = {function(t) return TriggerRegisterPlayerEvent(t, self.makerOwner, EVENT_PLAYER_MOUSE_DOWN) end},
actions = {onPressActions}
})
self.tUnpress = createEvent({
events = {function(t) return TriggerRegisterPlayerEvent(t, self.makerOwner, EVENT_PLAYER_MOUSE_UP) end},
actions = {onUnpressActions}
})
self.tMouseMove = createEvent({
events = {function(t) return TriggerRegisterPlayerEvent(t, self.makerOwner, EVENT_PLAYER_MOUSE_MOVE) end},
actions = {onMouseMoveActions}
})
end
self.doActions = function()
Make.prototype.doBaseActions(self)
end
self:enableTriggersMouse()
end
function MakeHoldClick.prototype.doPressActions(self)
self.activeBtn = BlzGetTriggerPlayerMouseButton()
self.activeBtnStr = self.activeBtn == MOUSE_BUTTON_TYPE_LEFT and "left" or "right"
self.isPressed = true
self:resetCurrentClickMinMaxLocations()
self:doMouseMoveActions()
end
function MakeHoldClick.prototype.doUnpressActions(self)
self.isPressed = false
end
function MakeHoldClick.prototype.doMouseMoveActions(self)
if self.isPressed then
self.escaper.mouseX = BlzGetTriggerPlayerMouseX()
self.escaper.mouseY = BlzGetTriggerPlayerMouseY()
self:updateCurrentClickMinMaxLocations()
if self.tTimeSinceLastMouseMove then
self.timeSinceLastMouseMove = TimerGetElapsed(self.tTimeSinceLastMouseMove)
end
local ____ = self.tTimeSinceLastMouseMove and DestroyTimer(self.tTimeSinceLastMouseMove)
self.tTimeSinceLastMouseMove = CreateTimer()
TimerStart(self.tTimeSinceLastMouseMove, 10, false, DoNothing)
return ____exports.MIN_TIME_BETWEEN_ACTIONS == nil or self.timeSinceLastMouseMove >= ____exports.MIN_TIME_BETWEEN_ACTIONS
end
return false
end
function MakeHoldClick.prototype.destroy(self)
Make.prototype.destroy(self)
local ____ = self.tPress and DestroyTrigger(self.tPress)
local ____ = self.tUnpress and DestroyTrigger(self.tUnpress)
local ____ = self.tMouseMove and DestroyTrigger(self.tMouseMove)
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeTerrainCreateBrushAction"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local ____MakeAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeAction")
local MakeAction = ____MakeAction.MakeAction
____exports.MakeTerrainCreateBrushAction = __TS__Class()
local MakeTerrainCreateBrushAction = ____exports.MakeTerrainCreateBrushAction
MakeTerrainCreateBrushAction.name = "MakeTerrainCreateBrushAction"
__TS__ClassExtends(MakeTerrainCreateBrushAction, MakeAction)
function MakeTerrainCreateBrushAction.prototype.____constructor(self, changingTiles)
MakeAction.prototype.____constructor(self)
self.destroy = function()
MemoryHandler.destroyArray(self.changingTiles)
end
self.terrainModificationCancel = function()
for ____, changingTile in ipairs(self.changingTiles) do
ChangeTerrainType(
changingTile.x,
changingTile.y,
changingTile.terrainTypeBefore:getTerrainTypeId()
)
end
end
self.terrainModificationRedo = function()
for ____, changingTile in ipairs(self.changingTiles) do
ChangeTerrainType(
changingTile.x,
changingTile.y,
changingTile.terrainTypeAfter:getTerrainTypeId()
)
end
end
self.cancel = function()
if not self.isActionMadeB then
return false
end
self:terrainModificationCancel()
self.isActionMadeB = false
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"terrain creation cancelled"
)
return true
end
self.redo = function()
if self.isActionMadeB then
return false
end
self:terrainModificationRedo()
self.isActionMadeB = true
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"terrain creation redone"
)
return true
end
self.changingTiles = MemoryHandler.cloneArray(changingTiles)
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_terrain.MakeTerrainCreateBrush"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local outOfBounds = ____Basic_functions.outOfBounds
local roundCoordinateToCenterOfTile = ____Basic_functions.roundCoordinateToCenterOfTile
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local ____MakeHoldClick = require("src.core.05_MAKE_STRUCTURES.Make.MakeHoldClick")
local MakeHoldClick = ____MakeHoldClick.MakeHoldClick
local ____MakeTerrainCreateBrushAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeTerrainCreateBrushAction")
local MakeTerrainCreateBrushAction = ____MakeTerrainCreateBrushAction.MakeTerrainCreateBrushAction
____exports.MakeTerrainCreateBrush = __TS__Class()
local MakeTerrainCreateBrush = ____exports.MakeTerrainCreateBrush
MakeTerrainCreateBrush.name = "MakeTerrainCreateBrush"
__TS__ClassExtends(MakeTerrainCreateBrush, MakeHoldClick)
function MakeTerrainCreateBrush.prototype.____constructor(self, escaper, terrainType, brushSize, shape)
if shape == nil then
shape = "square"
end
MakeHoldClick.prototype.____constructor(self, escaper, "terrainCreateBrush", false)
self.terrainType = terrainType
escaper:setBrushSize(brushSize)
self.shape = shape
end
function MakeTerrainCreateBrush.prototype.doMouseMoveActions(self)
if MakeHoldClick.prototype.doMouseMoveActions(self) then
local terrainTypeToApply = nil
local shapeToApply = "square"
local sizeToApply = 1
if self.activeBtn == MOUSE_BUTTON_TYPE_RIGHT then
terrainTypeToApply = self.terrainType
shapeToApply = self.shape
sizeToApply = self.escaper:getBrushSize()
elseif self.activeBtn == MOUSE_BUTTON_TYPE_LEFT then
local gumTerrainType = self.escaper:getGumTerrain()
if gumTerrainType then
terrainTypeToApply = gumTerrainType
sizeToApply = self.escaper:getGumBrushSize()
end
end
if terrainTypeToApply then
local centerX = roundCoordinateToCenterOfTile(self.escaper.mouseX)
local centerY = roundCoordinateToCenterOfTile(self.escaper.mouseY)
local offset = (sizeToApply - 1) * LARGEUR_CASE
do
local x = centerX - offset
while x <= centerX + offset do
do
local y = centerY - offset
while y <= centerY + offset do
do
if not outOfBounds(x, y) then
local terrainType = getUdgTerrainTypes():getTerrainType(x, y)
if terrainType and terrainType ~= terrainTypeToApply then
if shapeToApply == "circle" then
local diffXcenter = RAbsBJ(centerX - x)
local diffYcenter = RAbsBJ(centerY - y)
if sizeToApply ~= 1 then
if x ~= centerX and y ~= centerY and (x == centerX - offset or x == centerX + offset or y == centerY - offset or y == centerY + offset) then
goto __continue10
end
end
if sizeToApply >= 4 then
if y == centerY + offset - LARGEUR_CASE or y == centerY - offset + LARGEUR_CASE then
if diffXcenter > LARGEUR_CASE * 2 then
goto __continue10
end
end
if x == centerX + offset - LARGEUR_CASE or x == centerX - offset + LARGEUR_CASE then
if diffYcenter > LARGEUR_CASE * 2 then
goto __continue10
end
end
end
if sizeToApply == 8 then
if diffXcenter == LARGEUR_CASE * 5 and diffYcenter == LARGEUR_CASE * 5 then
goto __continue10
end
end
end
ChangeTerrainType(
x,
y,
terrainTypeToApply:getTerrainTypeId()
)
local ____ = self.changingTiles and arrayPush(self.changingTiles, {x = x, y = y, terrainTypeBefore = terrainType, terrainTypeAfter = terrainTypeToApply})
end
end
end
::__continue10::
y = y + LARGEUR_CASE
end
end
x = x + LARGEUR_CASE
end
end
end
return true
end
return false
end
function MakeTerrainCreateBrush.prototype.doPressActions(self)
self.changingTiles = MemoryHandler.getEmptyArray()
MakeHoldClick.prototype.doPressActions(self)
end
function MakeTerrainCreateBrush.prototype.doUnpressActions(self)
MakeHoldClick.prototype.doUnpressActions(self)
if self.changingTiles and #self.changingTiles > 0 then
local action = __TS__New(MakeTerrainCreateBrushAction, self.changingTiles)
self.escaper:newAction(action)
local ____ = self.changingTiles and MemoryHandler.destroyArray(self.changingTiles)
end
end
function MakeTerrainCreateBrush.prototype.destroy(self)
MakeHoldClick.prototype.destroy(self)
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeTerrainHorizontalSymmetryAction"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local ____MakeAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeAction")
local MakeAction = ____MakeAction.MakeAction
____exports.MakeTerrainHorizontalSymmetryAction = __TS__Class()
local MakeTerrainHorizontalSymmetryAction = ____exports.MakeTerrainHorizontalSymmetryAction
MakeTerrainHorizontalSymmetryAction.name = "MakeTerrainHorizontalSymmetryAction"
__TS__ClassExtends(MakeTerrainHorizontalSymmetryAction, MakeAction)
function MakeTerrainHorizontalSymmetryAction.prototype.____constructor(self, x1, y1, x2, y2)
MakeAction.prototype.____constructor(self)
self.applySymmetry = function()
local terrainTypeIds = MemoryHandler.getEmptyArray()
local i = 0
local x = self.minX
local y = self.minY
while y <= self.maxY do
while x <= self.maxX do
terrainTypeIds[i + 1] = GetTerrainType(x, y)
i = i + 1
x = x + LARGEUR_CASE
end
x = self.minX
y = y + LARGEUR_CASE
end
i = 0
x = self.maxX
y = self.minY
while y <= self.maxY do
while x >= self.minX do
ChangeTerrainType(x, y, terrainTypeIds[i + 1])
i = i + 1
x = x - LARGEUR_CASE
end
x = self.maxX
y = y + LARGEUR_CASE
end
MemoryHandler.destroyArray(terrainTypeIds)
end
self.cancel = function()
if not self.isActionMadeB then
return false
end
self:applySymmetry()
self.isActionMadeB = false
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"terrain vertical symmetry cancelled"
)
return true
end
self.redo = function()
if self.isActionMadeB then
return false
end
self:applySymmetry()
self.isActionMadeB = true
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"terrain vertical symmetry redone"
)
return true
end
self.destroy = function()
end
self.minX = RMinBJ(x1, x2)
self.maxX = RMaxBJ(x1, x2)
self.minY = RMinBJ(y1, y2)
self.maxY = RMaxBJ(y1, y2)
self.minX = I2R(R2I(self.minX / LARGEUR_CASE)) * LARGEUR_CASE
self.minY = I2R(R2I(self.minY / LARGEUR_CASE)) * LARGEUR_CASE
self.maxX = I2R(R2I(self.maxX / LARGEUR_CASE)) * LARGEUR_CASE
self.maxY = I2R(R2I(self.maxY / LARGEUR_CASE)) * LARGEUR_CASE
self:applySymmetry()
self.isActionMadeB = true
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_terrain.MakeTerrainHorizontalSymmetry"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
local ____MakeTerrainHorizontalSymmetryAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeTerrainHorizontalSymmetryAction")
local MakeTerrainHorizontalSymmetryAction = ____MakeTerrainHorizontalSymmetryAction.MakeTerrainHorizontalSymmetryAction
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
____exports.MakeTerrainHorizontalSymmetry = __TS__Class()
local MakeTerrainHorizontalSymmetry = ____exports.MakeTerrainHorizontalSymmetry
MakeTerrainHorizontalSymmetry.name = "MakeTerrainHorizontalSymmetry"
__TS__ClassExtends(MakeTerrainHorizontalSymmetry, MakeOneByOneOrTwoClicks)
function MakeTerrainHorizontalSymmetry.prototype.____constructor(self, maker)
MakeOneByOneOrTwoClicks.prototype.____constructor(
self,
maker,
"terrainHorizontalSymmetry",
"",
{""},
false
)
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
if self:isLastLocSavedUsed() then
do
local function ____catch(____error)
if type(____error) == "string" then
Text.erP(
self.escaper:getPlayer(),
____error
)
end
end
local ____try, ____hasReturned = pcall(function()
local action = __TS__New(
MakeTerrainHorizontalSymmetryAction,
self.lastX,
self.lastY,
self.orderX,
self.orderY
)
self.escaper:newAction(action)
self:unsaveLocDefinitely()
end)
if not ____try then
____catch(____hasReturned)
end
end
else
self:saveLoc(self.orderX, self.orderY)
end
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeTerrainVerticalSymmetryAction"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local ____MakeAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeAction")
local MakeAction = ____MakeAction.MakeAction
____exports.MakeTerrainVerticalSymmetryAction = __TS__Class()
local MakeTerrainVerticalSymmetryAction = ____exports.MakeTerrainVerticalSymmetryAction
MakeTerrainVerticalSymmetryAction.name = "MakeTerrainVerticalSymmetryAction"
__TS__ClassExtends(MakeTerrainVerticalSymmetryAction, MakeAction)
function MakeTerrainVerticalSymmetryAction.prototype.____constructor(self, x1, y1, x2, y2)
MakeAction.prototype.____constructor(self)
self.applySymmetry = function()
local terrainTypeIds = MemoryHandler.getEmptyArray()
local i = 0
local x = self.minX
local y = self.minY
while y <= self.maxY do
while x <= self.maxX do
terrainTypeIds[i + 1] = GetTerrainType(x, y)
i = i + 1
x = x + LARGEUR_CASE
end
x = self.minX
y = y + LARGEUR_CASE
end
i = 0
x = self.minX
y = self.maxY
while y >= self.minY do
while x <= self.maxX do
ChangeTerrainType(x, y, terrainTypeIds[i + 1])
i = i + 1
x = x + LARGEUR_CASE
end
x = self.minX
y = y - LARGEUR_CASE
end
MemoryHandler.destroyArray(terrainTypeIds)
end
self.cancel = function()
if not self.isActionMadeB then
return false
end
self:applySymmetry()
self.isActionMadeB = false
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"terrain vertical symmetry cancelled"
)
return true
end
self.redo = function()
if self.isActionMadeB then
return false
end
self:applySymmetry()
self.isActionMadeB = true
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"terrain vertical symmetry redone"
)
return true
end
self.destroy = function()
end
self.minX = RMinBJ(x1, x2)
self.maxX = RMaxBJ(x1, x2)
self.minY = RMinBJ(y1, y2)
self.maxY = RMaxBJ(y1, y2)
self.minX = I2R(R2I(self.minX / LARGEUR_CASE)) * LARGEUR_CASE
self.minY = I2R(R2I(self.minY / LARGEUR_CASE)) * LARGEUR_CASE
self.maxX = I2R(R2I(self.maxX / LARGEUR_CASE)) * LARGEUR_CASE
self.maxY = I2R(R2I(self.maxY / LARGEUR_CASE)) * LARGEUR_CASE
self:applySymmetry()
self.isActionMadeB = true
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_terrain.MakeTerrainVerticalSymmetry"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MakeOneByOneOrTwoClicks = require("src.core.05_MAKE_STRUCTURES.Make.MakeOneByOneOrTwoClicks")
local MakeOneByOneOrTwoClicks = ____MakeOneByOneOrTwoClicks.MakeOneByOneOrTwoClicks
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeTerrainVerticalSymmetryAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeTerrainVerticalSymmetryAction")
local MakeTerrainVerticalSymmetryAction = ____MakeTerrainVerticalSymmetryAction.MakeTerrainVerticalSymmetryAction
____exports.MakeTerrainVerticalSymmetry = __TS__Class()
local MakeTerrainVerticalSymmetry = ____exports.MakeTerrainVerticalSymmetry
MakeTerrainVerticalSymmetry.name = "MakeTerrainVerticalSymmetry"
__TS__ClassExtends(MakeTerrainVerticalSymmetry, MakeOneByOneOrTwoClicks)
function MakeTerrainVerticalSymmetry.prototype.____constructor(self, maker)
MakeOneByOneOrTwoClicks.prototype.____constructor(
self,
maker,
"terrainVerticalSymmetry",
"",
{""},
false
)
self.doActions = function()
if MakeOneByOneOrTwoClicks.prototype.doBaseActions(self) then
if self:isLastLocSavedUsed() then
do
local function ____catch(____error)
if type(____error) == "string" then
Text.erP(
self.escaper:getPlayer(),
____error
)
end
end
local ____try, ____hasReturned = pcall(function()
local action = __TS__New(
MakeTerrainVerticalSymmetryAction,
self.lastX,
self.lastY,
self.orderX,
self.orderY
)
self.escaper:newAction(action)
self:unsaveLocDefinitely()
end)
if not ____try then
____catch(____hasReturned)
end
end
else
self:saveLoc(self.orderX, self.orderY)
end
end
end
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeTerrainHeightAction"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakeAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeAction")
local MakeAction = ____MakeAction.MakeAction
____exports.MakeTerrainHeightAction = __TS__Class()
local MakeTerrainHeightAction = ____exports.MakeTerrainHeightAction
MakeTerrainHeightAction.name = "MakeTerrainHeightAction"
__TS__ClassExtends(MakeTerrainHeightAction, MakeAction)
function MakeTerrainHeightAction.prototype.____constructor(self, radius, height, x, y)
MakeAction.prototype.____constructor(self)
self.apply = function()
self.terrainDeform = TerrainDeformCrater(
self.x,
self.y,
self.radius,
-self.height,
0,
true
)
end
self.cancel = function()
if not self.isActionMadeB then
return false
end
local ____ = self.terrainDeform and TerrainDeformStop(self.terrainDeform, 0)
self.isActionMadeB = false
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"terrain height cancelled"
)
return true
end
self.redo = function()
if self.isActionMadeB then
return false
end
self:apply()
self.isActionMadeB = true
local ____ = self.owner and Text.mkP(
self.owner:getPlayer(),
"terrain height redone"
)
return true
end
self.destroy = function()
end
self.radius = radius
self.height = height
self.x = x
self.y = y
self:apply()
self.isActionMadeB = true
end
return ____exports
end,
["src.core.05_MAKE_STRUCTURES.Make_terrain_height.MakeTerrainHeight"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____Make = require("src.core.05_MAKE_STRUCTURES.Make.Make")
local Make = ____Make.Make
local ____MakeTerrainHeightAction = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeTerrainHeightAction")
local MakeTerrainHeightAction = ____MakeTerrainHeightAction.MakeTerrainHeightAction
____exports.MakeTerrainHeight = __TS__Class()
local MakeTerrainHeight = ____exports.MakeTerrainHeight
MakeTerrainHeight.name = "MakeTerrainHeight"
__TS__ClassExtends(MakeTerrainHeight, Make)
function MakeTerrainHeight.prototype.____constructor(self, maker, radius, height)
Make.prototype.____constructor(self, maker, "terrainHeight", false)
self.getRadius = function()
return self.radius
end
self.getHeight = function()
return self.height
end
self.doActions = function()
if Make.prototype.doBaseActions(self) then
self.escaper:newAction(__TS__New(
MakeTerrainHeightAction,
self:getRadius(),
self:getHeight(),
self.orderX,
self.orderY
))
end
end
self.radius = radius
self.height = height
end
return ____exports
end,
["src.core.04_STRUCTURES.Meteor.Meteor_functions"] = function(...)
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local StopUnit = ____Basic_functions.StopUnit
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local ____Meteor = require("src.core.04_STRUCTURES.Meteor.Meteor")
local METEOR_CHEAT = ____Meteor.METEOR_CHEAT
local METEOR_NORMAL = ____Meteor.METEOR_NORMAL
local function initMeteorFunctions()
local function HeroAddCheatMeteor(hero)
local meteor = UnitAddItemById(hero, METEOR_CHEAT)
local ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0 = getUdgTerrainTypes():getTerrainType(
GetUnitX(hero),
GetUnitY(hero)
)
if ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0 ~= nil then
____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0 = ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0:getKind()
end
if ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0 == "slide" then
SetItemDroppable(meteor, false)
end
return meteor
end
local function HeroComingToSlide_CheckItem(hero)
local meteor = UnitItemInSlot(hero, 0)
if meteor ~= nil then
SetItemDroppable(meteor, false)
end
end
local function HeroComingOutFromSlide_CheckItem(hero)
local meteor = UnitItemInSlot(hero, 0)
if meteor ~= nil then
SetItemDroppable(meteor, true)
end
end
local function ExecuteRightClicOnUnit(hero, u)
local itemCarried = UnitItemInSlot(hero, 0)
local itemCarriedType = GetItemTypeId(itemCarried)
if (itemCarriedType == METEOR_NORMAL or itemCarriedType == METEOR_CHEAT) and GetWidgetLife(u) > 0 then
UnitUseItemTarget(hero, itemCarried, u)
else
StopUnit(hero)
end
end
return {HeroAddCheatMeteor = HeroAddCheatMeteor, HeroComingToSlide_CheckItem = HeroComingToSlide_CheckItem, HeroComingOutFromSlide_CheckItem = HeroComingOutFromSlide_CheckItem, ExecuteRightClicOnUnit = ExecuteRightClicOnUnit}
end
____exports.MeteorFunctions = initMeteorFunctions()
return ____exports
end,
["src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.SlidingMax"] = function(...)
local ____exports = {}
____exports.HERO_ROTATION_SPEED = 0.9525
____exports.HERO_ROTATION_TIME_FOR_MAXIMUM_SPEED = 0.11
____exports.MAX_DEGREE_ON_WHICH_SPEED_TABLE_TAKES_CONTROL = 51
____exports.SPEED_AT_LEAST_THAN_50_DEGREES = {
[51] = 92.721,
[50] = 91.655,
[49] = 90.588,
[48] = 89.522,
[47] = 88.455,
[46] = 87.389,
[45] = 86.322,
[44] = 85.255,
[43] = 84.189,
[42] = 83.646,
[41] = 82.192,
[40] = 80.737,
[39] = 79.283,
[38] = 77.828,
[37] = 76.374,
[36] = 74.919,
[35] = 74.854,
[34] = 73.439,
[33] = 72.023,
[32] = 70.607,
[31] = 69.192,
[30] = 67.776,
[29] = 66.36,
[28] = 66.357,
[27] = 64.719,
[26] = 63.081,
[25] = 61.442,
[24] = 59.804,
[23] = 58.165,
[22] = 58.165,
[21] = 56.59,
[20] = 55.015,
[19] = 53.44,
[18] = 51.866,
[17] = 50.291,
[16] = 48.783,
[15] = 47.275,
[14] = 45.767,
[13] = 44.26,
[12] = 42.75,
[11] = 40.355,
[10] = 37.96,
[9] = 35.56,
[8] = 31.698,
[7] = 27.837,
[6] = 23.975,
[5] = 13.943,
[4] = 9.091,
[3] = 6.366,
[2] = 2.8,
[1] = 1.837,
[0] = 1.5
}
return ____exports
end,
["src.core.04_STRUCTURES.TerrainType.TerrainTypeSlide"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local TERRAIN_DATA_DISPLAY_TIME = ____Constants.TERRAIN_DATA_DISPLAY_TIME
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local COLOR_TERRAIN_SLIDE = ____Init_colorCodes.COLOR_TERRAIN_SLIDE
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____SlidingMax = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.SlidingMax")
local HERO_ROTATION_SPEED = ____SlidingMax.HERO_ROTATION_SPEED
local ____TerrainType = require("src.core.04_STRUCTURES.TerrainType.TerrainType")
local DISPLAY_SPACE = ____TerrainType.DISPLAY_SPACE
local TerrainType = ____TerrainType.TerrainType
____exports.TerrainTypeSlide = __TS__Class()
local TerrainTypeSlide = ____exports.TerrainTypeSlide
TerrainTypeSlide.name = "TerrainTypeSlide"
__TS__ClassExtends(TerrainTypeSlide, TerrainType)
function TerrainTypeSlide.prototype.____constructor(self, label, terrainTypeId, slideSpeed, canTurn, rotationSpeed)
TerrainType.prototype.____constructor(
self,
label,
terrainTypeId,
nil,
"slide",
0,
1
)
self.getSlideSpeed = function()
return self.slideSpeed
end
self.setSlideSpeed = function(____, slideSpeed)
self.slideSpeed = slideSpeed
end
self.getRotationSpeed = function()
return self.rotationSpeed
end
self.setRotationSpeed = function(____, rotationSpeed)
self.rotationSpeed = rotationSpeed
end
self.getCanTurn = function()
return self.canTurn
end
self.setCanTurn = function(____, canTurn)
if canTurn == self.canTurn then
return false
end
self.canTurn = canTurn
return true
end
self.getColor = function()
return COLOR_TERRAIN_SLIDE
end
self.displayForPlayer = function(____, p)
local display = self:baseTextForDisplay()
local displayCanTurn
if self:getCanTurn() then
displayCanTurn = "can turn"
else
displayCanTurn = "can't turn"
end
display = (((display .. I2S(R2I(self:getSlideSpeed()))) .. DISPLAY_SPACE) .. displayCanTurn) .. (self:getCanTurn() and ":" .. tostring(self.rotationSpeed) or "")
display = display .. (DISPLAY_SPACE .. "cliff") .. I2S(self.cliffClassId)
Text.P_timed(p, TERRAIN_DATA_DISPLAY_TIME, display)
end
self.destroy = function()
end
self.slideSpeed = slideSpeed
self.canTurn = canTurn
self.rotationSpeed = not canTurn and 0 or (rotationSpeed == nil and HERO_ROTATION_SPEED or rotationSpeed)
end
function TerrainTypeSlide.prototype.toJson(self)
local output = TerrainType.prototype.toJson(self)
output.slideSpeed = self:getSlideSpeed()
output.canTurn = self:getCanTurn()
output.rotationSpeed = self.rotationSpeed
return output
end
return ____exports
end,
["src.core.04_STRUCTURES.TerrainType.TerrainTypeWalk"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local TERRAIN_DATA_DISPLAY_TIME = ____Constants.TERRAIN_DATA_DISPLAY_TIME
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local COLOR_TERRAIN_WALK = ____Init_colorCodes.COLOR_TERRAIN_WALK
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____TerrainType = require("src.core.04_STRUCTURES.TerrainType.TerrainType")
local DISPLAY_SPACE = ____TerrainType.DISPLAY_SPACE
local TerrainType = ____TerrainType.TerrainType
____exports.TerrainTypeWalk = __TS__Class()
local TerrainTypeWalk = ____exports.TerrainTypeWalk
TerrainTypeWalk.name = "TerrainTypeWalk"
__TS__ClassExtends(TerrainTypeWalk, TerrainType)
function TerrainTypeWalk.prototype.____constructor(self, label, terrainTypeId, walkSpeed)
TerrainType.prototype.____constructor(
self,
label,
terrainTypeId,
nil,
"walk",
0,
1
)
self.getWalkSpeed = function()
return self.walkSpeed
end
self.setWalkSpeed = function(____, walkSpeed)
self.walkSpeed = walkSpeed
end
self.getColor = function()
return COLOR_TERRAIN_WALK
end
self.displayForPlayer = function(____, p)
local display = self:baseTextForDisplay()
display = display .. I2S(R2I(self:getWalkSpeed()))
display = display .. (DISPLAY_SPACE .. "cliff") .. I2S(self.cliffClassId)
Text.P_timed(p, TERRAIN_DATA_DISPLAY_TIME, display)
end
self.destroy = function()
end
self.walkSpeed = walkSpeed
end
function TerrainTypeWalk.prototype.toJson(self)
local output = TerrainType.prototype.toJson(self)
output.walkSpeed = R2I(self:getWalkSpeed())
return output
end
return ____exports
end,
["src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.Auto_continue_after_sliding"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____mapUtils = require("src.Utils.mapUtils")
local forRange = ____mapUtils.forRange
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local function initAutoContinueAfterSliding()
local lastClickedX = {}
local lastClickedY = {}
local lastClickedWidgets = {}
local isLastTargetALocation = {}
local udg_autoContinueAfterSliding = {}
forRange(
NB_ESCAPERS,
function(i)
udg_autoContinueAfterSliding[i + 1] = true
return true
end
)
local ECART_MAX_ANGLE = 45
local function AutoContinueAfterSliding(n)
local ____getUdgEscapers_result_get_result_getHero_result_0 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_getHero_result_0 ~= nil then
____getUdgEscapers_result_get_result_getHero_result_0 = ____getUdgEscapers_result_get_result_getHero_result_0:getHero()
end
local hero = ____getUdgEscapers_result_get_result_getHero_result_0
if not hero then
return
end
if not lastClickedY[n + 1] or not lastClickedX[n + 1] then
return
end
local angleHero2Target = Atan2(
lastClickedY[n + 1] - GetUnitY(hero),
lastClickedX[n + 1] - GetUnitX(hero)
) * bj_RADTODEG
local diffAngle = RAbsBJ(angleHero2Target - GetUnitFacing(hero))
if diffAngle > ECART_MAX_ANGLE and diffAngle < 360 - ECART_MAX_ANGLE then
return
end
if isLastTargetALocation[n + 1] then
IssuePointOrder(hero, "move", lastClickedX[n + 1], lastClickedY[n + 1])
else
local lastClickedWidget = lastClickedWidgets[n + 1]
if lastClickedWidget == nil then
return
else
if GetWidgetX(lastClickedWidget) == lastClickedX[n + 1] and GetWidgetY(lastClickedWidget) == lastClickedY[n + 1] then
IssueTargetOrder(hero, "smart", lastClickedWidget)
else
IssuePointOrder(hero, "move", lastClickedX[n + 1], lastClickedY[n + 1])
end
end
end
end
local function ClearLastClickSave(n)
isLastTargetALocation[n + 1] = false
lastClickedWidgets[n + 1] = nil
end
return {
lastClickedX = lastClickedX,
lastClickedY = lastClickedY,
isLastTargetALocation = isLastTargetALocation,
udg_autoContinueAfterSliding = udg_autoContinueAfterSliding,
AutoContinueAfterSliding = AutoContinueAfterSliding,
ClearLastClickSave = ClearLastClickSave
}
end
____exports.AutoContinueAfterSliding = initAutoContinueAfterSliding()
return ____exports
end,
["src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.CheckTerrain"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local ____exports = {}
local ____EffectUtils = require("src.Utils.EffectUtils")
local EffectUtils = ____EffectUtils.EffectUtils
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsOnGround = ____Basic_functions.IsOnGround
local ____Constants = require("src.core.01_libraries.Constants")
local CHECK_TERRAIN_PERIOD = ____Constants.CHECK_TERRAIN_PERIOD
local GM_TOUCH_DEATH_TERRAIN_EFFECT_STR = ____Constants.GM_TOUCH_DEATH_TERRAIN_EFFECT_STR
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local GetMirrorEscaper = ____Escaper_functions.GetMirrorEscaper
local ____Meteor_functions = require("src.core.04_STRUCTURES.Meteor.Meteor_functions")
local MeteorFunctions = ____Meteor_functions.MeteorFunctions
local ____TerrainTypeDeath = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeDeath")
local TerrainTypeDeath = ____TerrainTypeDeath.TerrainTypeDeath
local ____TerrainTypeSlide = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeSlide")
local TerrainTypeSlide = ____TerrainTypeSlide.TerrainTypeSlide
local ____TerrainTypeWalk = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeWalk")
local TerrainTypeWalk = ____TerrainTypeWalk.TerrainTypeWalk
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local ____Auto_continue_after_sliding = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.Auto_continue_after_sliding")
local AutoContinueAfterSliding = ____Auto_continue_after_sliding.AutoContinueAfterSliding
local TOLERANCE_ANGLE_DIFF = 5
local TOLERANCE_RAYON_DIFF = 20
local INIT_RAYON_TOLERANCE = 20
local function initCheckTerrainTrigger()
local function SlideTerrainCheck(terrainType, escaper, hero, playerId, wasSliding, wasReversed)
escaper:enableSlide(true)
if not wasSliding then
MeteorFunctions.HeroComingToSlide_CheckItem(hero)
AutoContinueAfterSliding.ClearLastClickSave(playerId)
end
if not escaper:isAbsoluteSlideSpeed() then
escaper:setSlideSpeed((escaper:getSlideMirror() and -1 or 1) * terrainType:getSlideSpeed())
end
if not escaper:isAbsoluteRotationSpeed() then
escaper:setRotationSpeed(terrainType:getRotationSpeed())
end
if escaper:getSlideSpeed() < 0 then
if wasSliding and not wasReversed and not escaper:getSlideMirror() then
escaper:reverse()
end
if not wasSliding then
escaper:reverse()
end
if wasSliding and wasReversed and escaper:getSlideMirror() then
escaper:reverse()
end
else
if wasSliding and wasReversed and not escaper:getSlideMirror() then
escaper:reverse()
end
if wasSliding and not wasReversed and escaper:getSlideMirror() then
escaper:reverse()
end
end
end
local function WalkTerrainCheck(lastTerrainType, currentTerrainType, escaper, hero, playerId, wasReversed)
escaper:enableSlide(false)
local ____lastTerrainType_getKind_result_0 = lastTerrainType
if ____lastTerrainType_getKind_result_0 ~= nil then
____lastTerrainType_getKind_result_0 = ____lastTerrainType_getKind_result_0:getKind()
end
if ____lastTerrainType_getKind_result_0 == "slide" then
MeteorFunctions.HeroComingOutFromSlide_CheckItem(hero)
if (escaper:getSlideMirror() or wasReversed) and not (escaper:getSlideMirror() and wasReversed) then
escaper:reverse()
end
if AutoContinueAfterSliding.udg_autoContinueAfterSliding[playerId + 1] and not wasReversed then
AutoContinueAfterSliding.AutoContinueAfterSliding(playerId)
end
end
if __TS__InstanceOf(currentTerrainType, TerrainTypeWalk) then
if not escaper:isAbsoluteWalkSpeed() then
escaper:setWalkSpeed(currentTerrainType:getWalkSpeed())
end
end
end
local function CheckTerrainActions(playerId)
local escaper = getUdgEscapers():get(playerId)
if not escaper then
return
end
local hero = escaper:getHero()
if not hero then
return
end
local x = GetUnitX(hero)
local y = GetUnitY(hero)
local lastTerrainType = escaper:getLastTerrainType()
local currentTerrainType = getUdgTerrainTypes():getTerrainType(x, y)
local wasSliding = escaper:isSliding()
local oldSlideSpeed = escaper:getSlideSpeed()
local ____escaper_getSlideMirror_result_2
if escaper:getSlideMirror() then
____escaper_getSlideMirror_result_2 = oldSlideSpeed >= 0
else
____escaper_getSlideMirror_result_2 = oldSlideSpeed < 0
end
local wasReversed = ____escaper_getSlideMirror_result_2
escaper:moveInvisUnit(x, y)
if escaper:isStaticSliding() then
return
end
if IsOnGround(hero) then
if not currentTerrainType or lastTerrainType == currentTerrainType and currentTerrainType:getKind() ~= "death" then
return
end
escaper:setLastTerrainType(currentTerrainType)
if __TS__InstanceOf(currentTerrainType, TerrainTypeSlide) then
SlideTerrainCheck(
currentTerrainType,
escaper,
hero,
playerId,
wasSliding,
wasReversed
)
elseif __TS__InstanceOf(currentTerrainType, TerrainTypeDeath) then
local touchedByDeathTerrain = true
local terrainTypeTolerance = nil
local toleranceDist = currentTerrainType:getToleranceDist()
if toleranceDist ~= 0 then
local tempRayonTolerance = INIT_RAYON_TOLERANCE
while true do
if not touchedByDeathTerrain or tempRayonTolerance > toleranceDist then
break
end
local angle = 0
while true do
if not touchedByDeathTerrain or angle >= 360 then
break
end
local xTolerance = x + tempRayonTolerance * CosBJ(angle)
local yTolerance = y + tempRayonTolerance * SinBJ(angle)
terrainTypeTolerance = getUdgTerrainTypes():getTerrainType(xTolerance, yTolerance)
local ____terrainTypeTolerance_getKind_result_3 = terrainTypeTolerance
if ____terrainTypeTolerance_getKind_result_3 ~= nil then
____terrainTypeTolerance_getKind_result_3 = ____terrainTypeTolerance_getKind_result_3:getKind()
end
if ____terrainTypeTolerance_getKind_result_3 ~= "death" then
touchedByDeathTerrain = false
end
angle = angle + TOLERANCE_ANGLE_DIFF
end
tempRayonTolerance = tempRayonTolerance + TOLERANCE_RAYON_DIFF
end
end
if touchedByDeathTerrain then
if escaper:isGodModeOn() then
EffectUtils.destroyEffect(EffectUtils.addSpecialEffect(GM_TOUCH_DEATH_TERRAIN_EFFECT_STR, x, y))
else
currentTerrainType:killEscaper(escaper)
escaper:enableSlide(false)
local mirrorEscaper = GetMirrorEscaper(escaper)
if mirrorEscaper then
currentTerrainType:killEscaper(mirrorEscaper)
mirrorEscaper:enableSlide(false)
end
end
elseif __TS__InstanceOf(terrainTypeTolerance, TerrainTypeSlide) then
SlideTerrainCheck(
terrainTypeTolerance,
escaper,
hero,
playerId,
wasSliding,
wasReversed
)
else
WalkTerrainCheck(
lastTerrainType,
currentTerrainType,
escaper,
hero,
playerId,
wasReversed
)
end
else
WalkTerrainCheck(
lastTerrainType,
currentTerrainType,
escaper,
hero,
playerId,
wasReversed
)
end
end
end
local function CreateCheckTerrainTrigger(playerId)
local checkTerrainTrigger = createEvent({
events = {function(t) return TriggerRegisterTimerEventPeriodic(t, CHECK_TERRAIN_PERIOD) end},
actions = {function() return CheckTerrainActions(playerId) end}
})
DisableTrigger(checkTerrainTrigger)
return checkTerrainTrigger
end
return {CreateCheckTerrainTrigger = CreateCheckTerrainTrigger}
end
____exports.CheckTerrainTrigger = initCheckTerrainTrigger()
return ____exports
end,
["src.core.08_GAME.Apm_clics_par_minute.Apm"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local playerId2colorId = ____Command_functions.playerId2colorId
local function initApm()
local nbClicsOnSlide = {}
local timeOnSlide = {}
local function init_Apm()
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
nbClicsOnSlide[i + 1] = 0
timeOnSlide[i + 1] = 0
i = i + 1
end
end
local function DisplayApm(playerId)
local time = timeOnSlide[playerId + 1]
local clics
local apm
if time > 0 then
clics = nbClicsOnSlide[playerId + 1]
apm = R2I(I2R(clics) * 60 / time)
Text.P(
Player(playerId),
(((((udg_colorCode[playerId2colorId(playerId) + 1] .. "clics : ") .. I2S(clics)) .. ", time : ") .. I2S(R2I(time))) .. ", apm : ") .. I2S(apm)
)
else
Text.P(
Player(playerId),
udg_colorCode[playerId2colorId(playerId) + 1] .. "unknown"
)
end
end
local function DisplayApmAll(playerId)
local clics
local time
local apm
local i = 0
while true do
if i > NB_PLAYERS_MAX - 1 then
break
end
if getUdgEscapers():get(i) ~= nil then
time = timeOnSlide[i + 1]
if time > 0 then
clics = nbClicsOnSlide[i + 1]
apm = R2I(I2R(clics) * 60 / time)
local ____Text_P_4 = Text.P
local ____Player_result_3 = Player(playerId)
local ____udg_colorCode_index_2 = udg_colorCode[playerId2colorId(i) + 1]
local ____getUdgEscapers_result_get_result_getDisplayName_result_0 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_getDisplayName_result_0 ~= nil then
____getUdgEscapers_result_get_result_getDisplayName_result_0 = ____getUdgEscapers_result_get_result_getDisplayName_result_0:getDisplayName()
end
____Text_P_4(
____Player_result_3,
((((((____udg_colorCode_index_2 .. tostring(____getUdgEscapers_result_get_result_getDisplayName_result_0)) .. ": clics : ") .. I2S(clics)) .. ", time : ") .. I2S(R2I(time))) .. ", apm : ") .. I2S(apm)
)
else
local ____Text_P_9 = Text.P
local ____Player_result_8 = Player(playerId)
local ____udg_colorCode_index_7 = udg_colorCode[playerId2colorId(i) + 1]
local ____getUdgEscapers_result_get_result_getDisplayName_result_5 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_getDisplayName_result_5 ~= nil then
____getUdgEscapers_result_get_result_getDisplayName_result_5 = ____getUdgEscapers_result_get_result_getDisplayName_result_5:getDisplayName()
end
____Text_P_9(
____Player_result_8,
(____udg_colorCode_index_7 .. tostring(____getUdgEscapers_result_get_result_getDisplayName_result_5)) .. ": unknown"
)
end
end
i = i + 1
end
end
return {
nbClicsOnSlide = nbClicsOnSlide,
timeOnSlide = timeOnSlide,
init_Apm = init_Apm,
DisplayApm = DisplayApm,
DisplayApmAll = DisplayApmAll
}
end
____exports.Apm = initApm()
____exports.init_Apm = ____exports.Apm.init_Apm
return ____exports
end,
["src.core.08_GAME.Apm_clics_par_minute.Cpm"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local playerId2colorId = ____Command_functions.playerId2colorId
local ____Apm = require("src.core.08_GAME.Apm_clics_par_minute.Apm")
local Apm = ____Apm.Apm
local function initCpm()
local nbCirclesOnSlide = {}
local function init_Cpm()
do
local i = 0
while i < NB_ESCAPERS do
nbCirclesOnSlide[i + 1] = 0
i = i + 1
end
end
end
local function DisplayCpm(playerId)
local time = Apm.timeOnSlide[playerId + 1]
local circles
local cpm
if time > 0 then
circles = nbCirclesOnSlide[playerId + 1]
cpm = R2I(I2R(circles) * 60 / time)
Text.P(
Player(playerId),
(((((udg_colorCode[playerId2colorId(playerId) + 1] .. "circles : ") .. I2S(circles)) .. ", time : ") .. I2S(R2I(time))) .. ", cpm : ") .. I2S(cpm)
)
else
Text.P(
Player(playerId),
udg_colorCode[playerId2colorId(playerId) + 1] .. "unknown"
)
end
end
local function DisplayCpmAll(playerId)
local circles
local time
local cpm
local i = 0
while true do
if i > NB_PLAYERS_MAX - 1 then
break
end
if getUdgEscapers():get(i) ~= nil then
time = Apm.timeOnSlide[i + 1]
if time > 0 then
circles = nbCirclesOnSlide[i + 1]
cpm = R2I(I2R(circles) * 60 / time)
local ____Text_P_4 = Text.P
local ____Player_result_3 = Player(playerId)
local ____udg_colorCode_index_2 = udg_colorCode[playerId2colorId(i) + 1]
local ____getUdgEscapers_result_get_result_getDisplayName_result_0 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_getDisplayName_result_0 ~= nil then
____getUdgEscapers_result_get_result_getDisplayName_result_0 = ____getUdgEscapers_result_get_result_getDisplayName_result_0:getDisplayName()
end
____Text_P_4(
____Player_result_3,
((((((____udg_colorCode_index_2 .. tostring(____getUdgEscapers_result_get_result_getDisplayName_result_0)) .. ": circles : ") .. I2S(circles)) .. ", time : ") .. I2S(R2I(time))) .. ", cpm : ") .. I2S(cpm)
)
else
local ____Text_P_9 = Text.P
local ____Player_result_8 = Player(playerId)
local ____udg_colorCode_index_7 = udg_colorCode[playerId2colorId(i) + 1]
local ____getUdgEscapers_result_get_result_getDisplayName_result_5 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_getDisplayName_result_5 ~= nil then
____getUdgEscapers_result_get_result_getDisplayName_result_5 = ____getUdgEscapers_result_get_result_getDisplayName_result_5:getDisplayName()
end
____Text_P_9(
____Player_result_8,
(____udg_colorCode_index_7 .. tostring(____getUdgEscapers_result_get_result_getDisplayName_result_5)) .. ": unknown"
)
end
end
i = i + 1
end
end
return {nbCirclesOnSlide = nbCirclesOnSlide, init_Cpm = init_Cpm, DisplayCpm = DisplayCpm, DisplayCpmAll = DisplayCpmAll}
end
____exports.Cpm = initCpm()
____exports.init_Cpm = ____exports.Cpm.init_Cpm
return ____exports
end,
["src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.Gravity"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local SLIDE_PERIOD = ____Constants.SLIDE_PERIOD
____exports.GRAVITY_EVERY_N_PERIOD = 2
local function initGravity()
local gravity = -45 * SLIDE_PERIOD * ____exports.GRAVITY_EVERY_N_PERIOD
local function SetGravity(newGravity)
gravity = newGravity * SLIDE_PERIOD * ____exports.GRAVITY_EVERY_N_PERIOD
end
local function GetGravity()
return gravity
end
local function GetRealGravity()
return gravity / (SLIDE_PERIOD * ____exports.GRAVITY_EVERY_N_PERIOD)
end
return {SetGravity = SetGravity, GetGravity = GetGravity, GetRealGravity = GetRealGravity}
end
____exports.Gravity = initGravity()
return ____exports
end,
["src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.Slide"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__MathSign = ____lualib.__TS__MathSign
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local SLIDE_PERIOD = ____Constants.SLIDE_PERIOD
local ____Apm = require("src.core.08_GAME.Apm_clics_par_minute.Apm")
local Apm = ____Apm.Apm
local ____Cpm = require("src.core.08_GAME.Apm_clics_par_minute.Cpm")
local Cpm = ____Cpm.Cpm
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local globals = ____globals.globals
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local GetMirrorEscaper = ____Escaper_functions.GetMirrorEscaper
local ____Gravity = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.Gravity")
local GRAVITY_EVERY_N_PERIOD = ____Gravity.GRAVITY_EVERY_N_PERIOD
local Gravity = ____Gravity.Gravity
local ____SlidingMax = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.SlidingMax")
local MAX_DEGREE_ON_WHICH_SPEED_TABLE_TAKES_CONTROL = ____SlidingMax.MAX_DEGREE_ON_WHICH_SPEED_TABLE_TAKES_CONTROL
local SPEED_AT_LEAST_THAN_50_DEGREES = ____SlidingMax.SPEED_AT_LEAST_THAN_50_DEGREES
local tmpLoc = Location(0, 0)
local function escaperTurnForOnePeriod(escaper)
if not escaper then
return
end
local hero = escaper:getHero()
if not hero then
return
end
local remainingDegrees = escaper:getRemainingDegreesToTurn()
if remainingDegrees ~= 0 then
local currentAngle = GetUnitFacing(hero)
local diffToApplyAbs = RMinBJ(
RAbsBJ(remainingDegrees),
RAbsBJ(escaper:getMaxSlideTurnPerPeriod())
)
if diffToApplyAbs > 0.05 then
local sens = remainingDegrees * escaper:getMaxSlideTurnPerPeriod() > 0 and 1 or -1
local maxIncreaseRotationSpeedPerPeriod = RAbsBJ(escaper:getMaxSlideTurnPerPeriod() * SLIDE_PERIOD / escaper.rotationTimeForMaximumSpeed)
local newSlideTurn
local curSlideTurn = escaper:getSlideCurrentTurnPerPeriod()
local increaseRotationSpeedPerPeriod = maxIncreaseRotationSpeedPerPeriod
local diffToApply
if RAbsBJ(remainingDegrees) <= MAX_DEGREE_ON_WHICH_SPEED_TABLE_TAKES_CONTROL then
local tableInd = math.floor(RAbsBJ(remainingDegrees) + 0.5)
local aimedSpeedPercentage = SPEED_AT_LEAST_THAN_50_DEGREES[tableInd]
local aimedNewSpeedPerPeriod = escaper:getMaxSlideTurnPerPeriod() * aimedSpeedPercentage * sens / 100
local diffSpeed = aimedNewSpeedPerPeriod - curSlideTurn
if RAbsBJ(diffSpeed) < maxIncreaseRotationSpeedPerPeriod then
diffToApply = aimedNewSpeedPerPeriod
else
local sensDiffToApply = diffSpeed > 0 and 1 or -1
diffToApply = curSlideTurn + sensDiffToApply * maxIncreaseRotationSpeedPerPeriod
end
escaper:setSlideCurrentTurnPerPeriod(diffToApply)
else
if sens > 0 then
newSlideTurn = RMinBJ(
curSlideTurn + increaseRotationSpeedPerPeriod,
escaper:getMaxSlideTurnPerPeriod()
)
diffToApply = RMinBJ(newSlideTurn, diffToApplyAbs)
diffToApply = RMinBJ(remainingDegrees, diffToApply)
else
newSlideTurn = RMaxBJ(
curSlideTurn - increaseRotationSpeedPerPeriod,
-escaper:getMaxSlideTurnPerPeriod()
)
diffToApply = RMaxBJ(newSlideTurn, -diffToApplyAbs)
diffToApply = RMaxBJ(remainingDegrees, diffToApply)
end
escaper:setSlideCurrentTurnPerPeriod(newSlideTurn)
end
escaper:setRemainingDegreesToTurn(remainingDegrees - diffToApply)
local newAngle = currentAngle + diffToApply
BlzSetUnitFacingEx(hero, newAngle)
end
end
end
local function initSlideTrigger()
local counters = {}
do
local i = 0
while i < NB_ESCAPERS do
counters[i + 1] = 0
i = i + 1
end
end
local function Slide_Actions(n)
local escaper = getUdgEscapers():get(n)
if not escaper then
return
end
local hero = escaper:getHero()
if not hero then
return
end
local oldX = GetUnitX(hero)
local oldY = GetUnitY(hero)
local lastZ = escaper:getLastZ()
local speedZ = escaper:getSpeedZ()
local oldDiffZ = escaper:getOldDiffZ()
local height = GetUnitFlyHeight(hero)
MoveLocation(tmpLoc, oldX, oldY)
local z = GetLocationZ(tmpLoc)
local allowTurning = escaper:getRotationSpeed() ~= 0 and (height < 1 or globals.CAN_TURN_IN_AIR)
local oldAngle = escaper.oldAngle
local newAngle = Deg2Rad(GetUnitFacing(hero))
local currentTime = os.clock()
if allowTurning and escaper.slidingMode == "max" then
escaperTurnForOnePeriod(escaper)
escaperTurnForOnePeriod(GetMirrorEscaper(escaper))
end
local newX = oldX + escaper:getSlideMovePerPeriod() * Cos(newAngle)
local newY = oldY + escaper:getSlideMovePerPeriod() * Sin(newAngle)
if newX >= globals.MAP_MIN_X and newX <= globals.MAP_MAX_X and newY >= globals.MAP_MIN_Y and newY <= globals.MAP_MAX_Y then
escaper:moveHero(newX, newY, false)
end
local ____escaper_getLastTerrainType_result_getGravity_result_0 = escaper:getLastTerrainType()
if ____escaper_getLastTerrainType_result_getGravity_result_0 ~= nil then
____escaper_getLastTerrainType_result_getGravity_result_0 = ____escaper_getLastTerrainType_result_getGravity_result_0:getGravity()
end
local gravity = ____escaper_getLastTerrainType_result_getGravity_result_0 or Gravity.GetGravity()
local ____counters_2, ____temp_3 = counters, n + 1
____counters_2[____temp_3] = ____counters_2[____temp_3] + 1
if counters[n + 1] == GRAVITY_EVERY_N_PERIOD then
counters[n + 1] = 0
local diffZ = z - lastZ
local delta
if height > 1 then
escaper:setSpeedZ(speedZ + gravity)
height = height + (speedZ - diffZ)
if height < 0 then
height = 0
end
SetUnitFlyHeight(hero, height, 0)
escaper:refreshCerclePosition()
else
delta = diffZ - oldDiffZ
if delta < gravity then
escaper:setSpeedZ(oldDiffZ + gravity)
SetUnitFlyHeight(
hero,
-diffZ + escaper:getSpeedZ(),
0
)
if not globals.CAN_TURN_IN_AIR then
SetUnitFacing(
hero,
GetUnitFacing(hero)
)
end
elseif not escaper:isAlive() then
escaper:enableSlide(false)
end
end
escaper:setLastZ(z)
escaper:setOldDiffZ(diffZ)
end
local angleDiff = newAngle - oldAngle
if angleDiff > math.pi then
angleDiff = angleDiff - 2 * math.pi
elseif angleDiff < -math.pi then
angleDiff = angleDiff + 2 * math.pi
end
if escaper.totalRotation ~= 0 and __TS__MathSign(escaper.totalRotation) ~= __TS__MathSign(angleDiff) then
escaper.totalRotation = 0
escaper.startTurningTime = currentTime
end
escaper.totalRotation = escaper.totalRotation + angleDiff
escaper.oldAngle = newAngle
if math.abs(escaper.totalRotation) >= 7 / 8 * 2 * math.pi then
escaper.totalRotation = 0
escaper.startTurningTime = currentTime
local ____Cpm_nbCirclesOnSlide_4, ____temp_5 = Cpm.nbCirclesOnSlide, n + 1
____Cpm_nbCirclesOnSlide_4[____temp_5] = ____Cpm_nbCirclesOnSlide_4[____temp_5] + 1
elseif currentTime - escaper.startTurningTime > 2 then
escaper.totalRotation = 0
escaper.startTurningTime = currentTime
end
Apm.timeOnSlide[n + 1] = Apm.timeOnSlide[n + 1] + SLIDE_PERIOD
end
local function CreateSlideTimer(escaperId)
return createTimer(
SLIDE_PERIOD,
true,
function() return Slide_Actions(escaperId) end
)
end
return {CreateSlideTimer = CreateSlideTimer}
end
____exports.SlideTrigger = initSlideTrigger()
return ____exports
end,
["src.core.04_STRUCTURES.Level.LevelProgression"] = function(...)
local ____exports = {}
local ____globals = require("globals")
local getUdgLevels = ____globals.getUdgLevels
local function areMutuallyAllied(a, b)
return a.alliedState[b:getId()] and b.alliedState[a:getId()]
end
____exports.sameLevelProgression = function(a, b)
return getUdgLevels():getLevelProgression() == "all" or getUdgLevels():getLevelProgression() == "allied" and areMutuallyAllied(b, a) or getUdgLevels():getLevelProgression() == "solo" and b:getId() == a:getId()
end
return ____exports
end,
["src.core.09_From_old_Worldedit_triggers.globals_variables_and_triggers"] = function(...)
local ____exports = {}
____exports.Globals = {
udg_has_max_name = {},
udg_tripleKillSoundOn = false,
udg_cheatCache = nil,
udg_used_terrain_types = {},
udg_nb_used_terrains = 0,
udg_cheatsUsed = false,
udg_areRedRightsOn = true,
udg_is_circleing_j = {},
udg_loc_x = {},
udg_loc_y = {},
udg_hero_j = {},
udg_terrain_slide = 0,
udg_handle = nil,
udg_x = 0
}
return ____exports
end,
["src.core.08_GAME.Mode_coop.deplacement_heros_hors_death_path"] = function(...)
local ____exports = {}
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local function initDeplacementHeroHorsDeathPath()
local GRADUATION_ANGLE = 5
local VALEUR_DECALAGE = 60
local function DeplacementHeroHorsDeathPath(hero)
local angle
local angleIdeal
local x
local y
local xDecal
local yDecal
local xHero = GetUnitX(hero)
local yHero = GetUnitY(hero)
local nbPointsNonDeath
local anglesCumules
local premierAngleNonDeath = 0
local dernierAngleNonDeath = 0
local deuxiemePremierAngleNonDeath = 0
local deuxiemeDernierAngleNonDeath = 0
local angleNonDeathTrouveALInstant = false
local ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0 = getUdgTerrainTypes():getTerrainType(xHero, yHero)
if ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0 ~= nil then
____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0 = ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0:getKind()
end
if ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_0 ~= "death" then
return
end
angle = 0
while true do
if angle >= 360 then
break
end
x = xHero + VALEUR_DECALAGE * CosBJ(angle)
y = yHero + VALEUR_DECALAGE * SinBJ(angle)
local ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_2 = getUdgTerrainTypes():getTerrainType(x, y)
if ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_2 ~= nil then
____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_2 = ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_2:getKind()
end
if ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_2 ~= "death" then
if not angleNonDeathTrouveALInstant then
if dernierAngleNonDeath == 0 then
premierAngleNonDeath = angle
else
deuxiemePremierAngleNonDeath = angle
end
angleNonDeathTrouveALInstant = true
end
else
if angleNonDeathTrouveALInstant then
if dernierAngleNonDeath == 0 then
dernierAngleNonDeath = angle - GRADUATION_ANGLE
else
deuxiemeDernierAngleNonDeath = angle - GRADUATION_ANGLE
end
angleNonDeathTrouveALInstant = false
end
end
angle = angle + GRADUATION_ANGLE
end
if angleNonDeathTrouveALInstant then
if dernierAngleNonDeath == 0 then
dernierAngleNonDeath = angle - GRADUATION_ANGLE
else
deuxiemeDernierAngleNonDeath = angle - GRADUATION_ANGLE
end
end
if deuxiemePremierAngleNonDeath == 0 then
if dernierAngleNonDeath == 0 then
return
end
angleIdeal = (dernierAngleNonDeath + premierAngleNonDeath) / 2
else
if premierAngleNonDeath ~= 0 or deuxiemeDernierAngleNonDeath ~= 355 then
if dernierAngleNonDeath - premierAngleNonDeath > deuxiemeDernierAngleNonDeath - deuxiemePremierAngleNonDeath then
angleIdeal = (dernierAngleNonDeath + premierAngleNonDeath) / 2
else
angleIdeal = (deuxiemeDernierAngleNonDeath + deuxiemePremierAngleNonDeath) / 2
end
else
angleIdeal = (dernierAngleNonDeath + deuxiemePremierAngleNonDeath) / 2 + 180
end
end
xDecal = xHero + VALEUR_DECALAGE * CosBJ(angleIdeal)
yDecal = yHero + VALEUR_DECALAGE * SinBJ(angleIdeal)
SetUnitPosition(hero, xDecal, yDecal)
end
return {DeplacementHeroHorsDeathPath = DeplacementHeroHorsDeathPath}
end
____exports.DeplacementHeroHorsDeathPath = initDeplacementHeroHorsDeathPath()
return ____exports
end,
["src.core.07_TRIGGERS.Triggers_to_modify_terrains.Change_all_terrains"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local NB_MAX_OF_TERRAINS = ____Constants.NB_MAX_OF_TERRAINS
local ____globals_variables_and_triggers = require("src.core.09_From_old_Worldedit_triggers.globals_variables_and_triggers")
local Globals = ____globals_variables_and_triggers.Globals
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local ____Terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_functions")
local AddNewTerrain = ____Terrain_functions.AddNewTerrain
local GetRandomNotUsedTerrain = ____Terrain_functions.GetRandomNotUsedTerrain
local GetRandomTerrain = ____Terrain_functions.GetRandomTerrain
local GetRandomUsedTerrain = ____Terrain_functions.GetRandomUsedTerrain
local IsTerrainAlreadyUsed = ____Terrain_functions.IsTerrainAlreadyUsed
local ____Terrain_type_max = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_max")
local TerrainTypeMax = ____Terrain_type_max.TerrainTypeMax
local function initChangeAllTerrains()
local oldTerrainTypes = {}
local newTerrainTypes = {}
local lastTerrainArrayId
local nbNewTerrains
local nbNewTerrainsAllowed
local udg_changeAllTerrainsAtRevive = false
local getTerrainNbEach = {}
local function ModifyTerrain()
local y = globals.MAP_MIN_Y
local x
local terrainTypeId
local done
local j
while y <= globals.MAP_MAX_Y do
x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
terrainTypeId = GetTerrainType(x, y)
local newGet = false
local terrainMaxId = TerrainTypeMax.TerrainTypeId2TerrainTypeMaxId(terrainTypeId)
if getTerrainNbEach[terrainMaxId + 1] then
local ____getTerrainNbEach_0, ____temp_1 = getTerrainNbEach, terrainMaxId + 1
____getTerrainNbEach_0[____temp_1] = ____getTerrainNbEach_0[____temp_1] + 1
else
getTerrainNbEach[terrainMaxId + 1] = 1
newGet = true
end
done = false
j = 0
while true do
if j > lastTerrainArrayId or done then
break
end
if terrainTypeId == oldTerrainTypes[j + 1] then
ChangeTerrainType(x, y, newTerrainTypes[j + 1])
done = true
end
j = j + 1
end
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
end
local function GetRandomTerrain_checked()
local i
local rdmTerrain
local alreadyUsed
while true do
if nbNewTerrains >= nbNewTerrainsAllowed then
rdmTerrain = GetRandomUsedTerrain()
else
rdmTerrain = GetRandomTerrain()
end
alreadyUsed = false
i = 0
while i <= lastTerrainArrayId and not alreadyUsed do
alreadyUsed = newTerrainTypes[i + 1] == rdmTerrain
i = i + 1
end
if not alreadyUsed then
break
end
end
if not IsTerrainAlreadyUsed(rdmTerrain) then
nbNewTerrains = nbNewTerrains + 1
end
return rdmTerrain
end
local function GetRandomKnownTerrain_checked()
local i
local rdmTerrain
local alreadyUsed
while true do
rdmTerrain = GetRandomUsedTerrain()
alreadyUsed = false
i = 0
while true do
if i > lastTerrainArrayId or alreadyUsed then
break
end
alreadyUsed = newTerrainTypes[i + 1] == rdmTerrain
i = i + 1
end
if not alreadyUsed then
break
end
end
return rdmTerrain
end
local function GetRandomNotKnownTerrain_checked()
local i
local rdmTerrain
local alreadyUsed
while true do
rdmTerrain = GetRandomNotUsedTerrain()
alreadyUsed = false
i = 0
while true do
if i > lastTerrainArrayId or alreadyUsed then
break
end
alreadyUsed = newTerrainTypes[i + 1] == rdmTerrain
i = i + 1
end
if not alreadyUsed then
break
end
end
return rdmTerrain
end
local function ChangeAllTerrains(mode)
if mode == nil then
mode = "normal"
end
oldTerrainTypes = {}
newTerrainTypes = {}
lastTerrainArrayId = 0
nbNewTerrains = 0
nbNewTerrainsAllowed = 0
udg_changeAllTerrainsAtRevive = false
getTerrainNbEach = {}
local terrainTypes = {}
local n
local i
n = 0
local allTT = getUdgTerrainTypes():getAll()
for _, TT in pairs(allTT) do
oldTerrainTypes[n + 1] = TT:getTerrainTypeId()
n = n + 1
end
lastTerrainArrayId = n - 1
nbNewTerrainsAllowed = NB_MAX_OF_TERRAINS - Globals.udg_nb_used_terrains
if mode == "normal" then
nbNewTerrains = 0
i = 0
while true do
if i > lastTerrainArrayId then
break
end
newTerrainTypes[i + 1] = GetRandomTerrain_checked()
i = i + 1
end
elseif mode == "known" then
i = 0
while true do
if i > lastTerrainArrayId then
break
end
newTerrainTypes[i + 1] = GetRandomKnownTerrain_checked()
i = i + 1
end
elseif mode == "notKnown" then
nbNewTerrains = lastTerrainArrayId + 1
if nbNewTerrains > nbNewTerrainsAllowed then
return false
end
i = 0
while true do
if i > lastTerrainArrayId then
break
end
newTerrainTypes[i + 1] = GetRandomNotKnownTerrain_checked()
i = i + 1
end
end
ModifyTerrain()
n = 0
for _, TT in pairs(allTT) do
TT:setTerrainTypeId(newTerrainTypes[n + 1])
AddNewTerrain(newTerrainTypes[n + 1])
n = n + 1
end
return true
end
return {udg_changeAllTerrainsAtRevive = udg_changeAllTerrainsAtRevive, ChangeAllTerrains = ChangeAllTerrains}
end
____exports.ChangeAllTerrains = initChangeAllTerrains()
return ____exports
end,
["src.core.08_GAME.Death.Lose_a_life_and_res"] = function(...)
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgLevels = ____globals.getUdgLevels
local ____Change_all_terrains = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Change_all_terrains")
local ChangeAllTerrains = ____Change_all_terrains.ChangeAllTerrains
local udg_gameIsLost = false
____exports.loseALifeAndRes = function(escaperIds)
if getUdgLevels():getLevelProgression() == "all" then
ServiceManager.getService("Lives").loseALife()
end
if ServiceManager.getService("Lives").get() < 0 then
if not udg_gameIsLost then
udg_gameIsLost = true
DisplayTextToForce(
GetPlayersAll(),
"You have no more lives !"
)
TriggerSleepAction(2)
DisplayTextToForce(
GetPlayersAll(),
"The game will restart in 10 seconds."
)
TriggerSleepAction(10)
getUdgLevels():restartTheGame()
udg_gameIsLost = false
end
else
if ChangeAllTerrains.udg_changeAllTerrainsAtRevive then
TriggerSleepAction(2)
ChangeAllTerrains.ChangeAllTerrains("normal")
TriggerSleepAction(2)
else
TriggerSleepAction(4)
end
local clonedEscaperIds = MemoryHandler.getEmptyArray()
for ____, i in ipairs(escaperIds) do
arrayPush(clonedEscaperIds, i)
end
for ____, i in ipairs(clonedEscaperIds) do
local ____getUdgEscapers_result_get_result_reviveAtStart_result_0 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_reviveAtStart_result_0 ~= nil then
____getUdgEscapers_result_get_result_reviveAtStart_result_0 = ____getUdgEscapers_result_get_result_reviveAtStart_result_0:reviveAtStart()
end
end
MemoryHandler.destroyArray(clonedEscaperIds)
if getUdgLevels():getLevelProgression() == "all" then
Text.A("|cff5c2e2eYou have lost a life !")
end
end
end
return ____exports
end,
["src.core.08_GAME.Death.A_hero_dies_check_if_all_dead_and_sounds"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ArrayFindIndex = ____lualib.__TS__ArrayFindIndex
local __TS__ArraySplice = ____lualib.__TS__ArraySplice
local __TS__ArrayIndexOf = ____lualib.__TS__ArrayIndexOf
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local runInTrigger = ____mapUtils.runInTrigger
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____Constants = require("src.core.01_libraries.Constants")
local COOP_REVIVE_DIST = ____Constants.COOP_REVIVE_DIST
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local IsHero = ____Escaper_functions.IsHero
local ____LevelProgression = require("src.core.04_STRUCTURES.Level.LevelProgression")
local sameLevelProgression = ____LevelProgression.sameLevelProgression
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____globals_variables_and_triggers = require("src.core.09_From_old_Worldedit_triggers.globals_variables_and_triggers")
local Globals = ____globals_variables_and_triggers.Globals
local ____Afk_mode = require("src.core.08_GAME.Afk_mode.Afk_mode")
local AfkMode = ____Afk_mode.AfkMode
local ____deplacement_heros_hors_death_path = require("src.core.08_GAME.Mode_coop.deplacement_heros_hors_death_path")
local DeplacementHeroHorsDeathPath = ____deplacement_heros_hors_death_path.DeplacementHeroHorsDeathPath
local ____Lose_a_life_and_res = require("src.core.08_GAME.Death.Lose_a_life_and_res")
local loseALifeAndRes = ____Lose_a_life_and_res.loseALifeAndRes
local function initReviveTrigManager()
local groups = {}
return {
createGroup = function()
local group = MemoryHandler.getEmptyArray()
arrayPush(groups, group)
return group
end,
clearGroup = function(group)
MemoryHandler.destroyArray(group)
local index = __TS__ArrayFindIndex(
groups,
function(____, item) return item == group end
)
__TS__ArraySplice(groups, index, 1)
end,
removeEscaper = function(escaperId)
for ____, group in ipairs(groups) do
local index = __TS__ArrayIndexOf(group, escaperId)
if index ~= -1 then
__TS__ArraySplice(group, index, 1)
end
end
end
}
end
____exports.reviveTrigManager = initReviveTrigManager()
____exports.InitTrig_A_hero_dies_check_if_all_dead_and_sounds = function()
local udg_nbKilled = 0
createEvent({
events = {function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_DEATH) end},
conditions = {function() return IsHero(GetTriggerUnit()) end},
actions = {function()
local hero = GetTriggerUnit()
local n = GetUnitUserData(hero)
local nbAlive = 0
local nbAliveWithoutAr = 0
local last = false
udg_nbKilled = udg_nbKilled + 1
if udg_nbKilled == 3 and Globals.udg_tripleKillSoundOn then
StartSound(gg_snd_multisquish)
udg_nbKilled = 0
end
local escaperIds = ____exports.reviveTrigManager.createGroup()
do
local i = 0
while i < NB_ESCAPERS do
local ____getUdgEscapers_result_get_result_isAlive_result_0 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_isAlive_result_0 ~= nil then
____getUdgEscapers_result_get_result_isAlive_result_0 = ____getUdgEscapers_result_get_result_isAlive_result_0:isAlive()
end
local ____getUdgEscapers_result_get_result_isAlive_result_0_4 = ____getUdgEscapers_result_get_result_isAlive_result_0
if ____getUdgEscapers_result_get_result_isAlive_result_0_4 then
local ____getUdgEscapers_result_get_result_hasAutorevive_result_2 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_hasAutorevive_result_2 ~= nil then
____getUdgEscapers_result_get_result_hasAutorevive_result_2 = ____getUdgEscapers_result_get_result_hasAutorevive_result_2:hasAutorevive()
end
____getUdgEscapers_result_get_result_isAlive_result_0_4 = not ____getUdgEscapers_result_get_result_hasAutorevive_result_2
end
if ____getUdgEscapers_result_get_result_isAlive_result_0_4 and not (getUdgEscapers():get(n) and not sameLevelProgression(
getUdgEscapers():get(n),
getUdgEscapers():get(i)
)) then
nbAlive = nbAlive + 1
end
local ____getUdgEscapers_result_get_result_isAlive_result_5 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_isAlive_result_5 ~= nil then
____getUdgEscapers_result_get_result_isAlive_result_5 = ____getUdgEscapers_result_get_result_isAlive_result_5:isAlive()
end
local ____temp_9 = not ____getUdgEscapers_result_get_result_isAlive_result_5
if ____temp_9 then
local ____getUdgEscapers_result_get_result_hasAutorevive_result_7 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_hasAutorevive_result_7 ~= nil then
____getUdgEscapers_result_get_result_hasAutorevive_result_7 = ____getUdgEscapers_result_get_result_hasAutorevive_result_7:hasAutorevive()
end
____temp_9 = not ____getUdgEscapers_result_get_result_hasAutorevive_result_7
end
if ____temp_9 and getUdgEscapers():get(i) and getUdgEscapers():get(n) and sameLevelProgression(
getUdgEscapers():get(n),
getUdgEscapers():get(i)
) then
arrayPush(escaperIds, i)
end
local ____getUdgEscapers_result_get_result_hasAutorevive_result_10 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_hasAutorevive_result_10 ~= nil then
____getUdgEscapers_result_get_result_hasAutorevive_result_10 = ____getUdgEscapers_result_get_result_hasAutorevive_result_10:hasAutorevive()
end
if not ____getUdgEscapers_result_get_result_hasAutorevive_result_10 and GetPlayerController(Player(i)) == MAP_CONTROL_USER and GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
nbAliveWithoutAr = nbAliveWithoutAr + 1
end
i = i + 1
end
end
if nbAliveWithoutAr == 0 then
____exports.reviveTrigManager.clearGroup(escaperIds)
return
end
if nbAlive == 0 then
runInTrigger(function()
loseALifeAndRes(escaperIds)
____exports.reviveTrigManager.clearGroup(escaperIds)
TriggerSleepAction(2)
StartSound(gg_snd_questFailed)
last = true
end)
else
____exports.reviveTrigManager.clearGroup(escaperIds)
if nbAlive == 1 then
StartSound(gg_snd_warning)
end
end
if AfkMode.isAfk[n + 1] then
DestroyTextTag(AfkMode.afkModeTextTags[n + 1])
else
PauseTimer(AfkMode.afkModeTimers[n + 1])
end
if AfkMode.AreAllAliveHeroesAfk() then
AfkMode.KillAllHeroesAfkInFourSeconds()
end
if last then
TriggerSleepAction(3)
else
if globals.coopModeActive then
TriggerSleepAction(1.3)
local ____getUdgEscapers_result_get_result_getHero_result_12 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_getHero_result_12 ~= nil then
____getUdgEscapers_result_get_result_getHero_result_12 = ____getUdgEscapers_result_get_result_getHero_result_12:getHero()
end
local hero2 = ____getUdgEscapers_result_get_result_getHero_result_12
if not hero2 or GetHandleId(hero) ~= GetHandleId(hero2) then
return
end
if IsUnitAliveBJ(hero2) then
TriggerSleepAction(3.7)
udg_nbKilled = udg_nbKilled - 1
return
end
local ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_14 = getUdgTerrainTypes():getTerrainType(
GetUnitX(hero2),
GetUnitY(hero2)
)
if ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_14 ~= nil then
____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_14 = ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_14:getKind()
end
if ____getUdgTerrainTypes_result_getTerrainType_result_getKind_result_14 == "death" then
DeplacementHeroHorsDeathPath.DeplacementHeroHorsDeathPath(hero2)
end
if globals.coopCircles then
do
local i = 0
while i < NB_ESCAPERS do
do
local ____temp_18 = i ~= n
if ____temp_18 then
local ____getUdgEscapers_result_get_result_isAlive_result_16 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_isAlive_result_16 ~= nil then
____getUdgEscapers_result_get_result_isAlive_result_16 = ____getUdgEscapers_result_get_result_isAlive_result_16:isAlive()
end
____temp_18 = ____getUdgEscapers_result_get_result_isAlive_result_16
end
if ____temp_18 then
local ____getUdgEscapers_result_get_result_getHero_result_19 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_getHero_result_19 ~= nil then
____getUdgEscapers_result_get_result_getHero_result_19 = ____getUdgEscapers_result_get_result_getHero_result_19:getHero()
end
local h1 = ____getUdgEscapers_result_get_result_getHero_result_19
if not h1 then
goto __continue34
end
local diffX = GetUnitX(h1) - GetUnitX(hero2)
local diffY = GetUnitY(h1) - GetUnitY(hero2)
if SquareRoot(diffX * diffX + diffY * diffY) < COOP_REVIVE_DIST then
local ____getUdgEscapers_result_get_result_coopReviveHero_result_21 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_coopReviveHero_result_21 ~= nil then
____getUdgEscapers_result_get_result_coopReviveHero_result_21 = ____getUdgEscapers_result_get_result_coopReviveHero_result_21.coopReviveHero()
end
TriggerSleepAction(3.7)
udg_nbKilled = udg_nbKilled - 1
return
end
end
end
::__continue34::
i = i + 1
end
end
local ____getUdgEscapers_result_get_result_enableTrigCoopRevive_result_23 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_enableTrigCoopRevive_result_23 ~= nil then
____getUdgEscapers_result_get_result_enableTrigCoopRevive_result_23 = ____getUdgEscapers_result_get_result_enableTrigCoopRevive_result_23:enableTrigCoopRevive()
end
end
TriggerSleepAction(3.7)
else
TriggerSleepAction(5)
end
end
SetUnitAnimation(hero, "stand")
udg_nbKilled = udg_nbKilled - 1
end}
})
end
return ____exports
end,
["src.core.08_GAME.Death.InvisUnit_is_getting_damage"] = function(...)
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____EffectUtils = require("src.Utils.EffectUtils")
local EffectUtils = ____EffectUtils.EffectUtils
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Constants = require("src.core.01_libraries.Constants")
local DUMMY_POWER_CIRCLE = ____Constants.DUMMY_POWER_CIRCLE
local GM_KILLING_EFFECT = ____Constants.GM_KILLING_EFFECT
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgMonsterTypes = ____globals.getUdgMonsterTypes
local udg_monsters = ____globals.udg_monsters
____exports.InitTrig_InvisUnit_is_getting_damage = function()
local TAILLE_UNITE = 100
local gg_trg_InvisUnit_is_getting_damage = createEvent({
events = {},
actions = {function()
local invisUnit = GetTriggerUnit()
local n = GetUnitUserData(invisUnit)
local escaper = getUdgEscapers():get(n)
if not escaper then
return
end
local killingUnit = GetEventDamageSource()
local hero = escaper:getHero()
if not hero then
return
end
local hauteurHero = BlzGetUnitZ(hero) + GetUnitFlyHeight(hero)
local hauteurKillingUnit = BlzGetUnitZ(killingUnit) + GetUnitFlyHeight(killingUnit)
if not escaper:isAlive() then
return
end
if RAbsBJ(hauteurHero - hauteurKillingUnit) < TAILLE_UNITE then
if GetUnitTypeId(killingUnit) == DUMMY_POWER_CIRCLE then
local targetPlayer = GetUnitUserData(killingUnit)
if escaper.alliedState[targetPlayer] then
if not escaper:isEscaperSecondary() then
ServiceManager.getService("Multiboard").increasePlayerScore(
GetPlayerId(escaper:getPlayer()),
"saves"
)
end
local ____getUdgEscapers_result_get_result_coopReviveHero_result_0 = getUdgEscapers():get(targetPlayer)
if ____getUdgEscapers_result_get_result_coopReviveHero_result_0 ~= nil then
____getUdgEscapers_result_get_result_coopReviveHero_result_0 = ____getUdgEscapers_result_get_result_coopReviveHero_result_0.coopReviveHero()
end
end
return
else
local monster = udg_monsters[GetUnitUserData(killingUnit)]
if monster then
local clearMob = monster:getClearMob()
local portalMob = monster:getPortalMob()
local circleMob = monster:getCircleMob()
local jumpPad = monster:getJumpPad()
if clearMob then
clearMob:activate()
return
elseif portalMob then
portalMob:activate(monster, escaper, hero)
return
elseif circleMob then
return
elseif jumpPad ~= nil then
escaper:setOldDiffZ(jumpPad)
local effect = monster:getJumpPadEffect()
if effect then
EffectUtils.destroyEffect(EffectUtils.addSpecialEffect(
effect,
GetUnitX(killingUnit),
GetUnitY(killingUnit)
))
end
return
end
end
if escaper:isGodModeOn() then
EffectUtils.destroyEffect(EffectUtils.addSpecialEffect(
GM_KILLING_EFFECT,
GetUnitX(killingUnit),
GetUnitY(killingUnit)
))
if escaper:doesGodModeKills() then
if monster then
monster:killUnit()
else
KillUnit(killingUnit)
end
end
return
end
if not escaper:isCoopInvul() then
escaper:kill()
if monster then
local effectStr = getUdgMonsterTypes():monsterUnit2KillEffectStr(killingUnit)
if effectStr then
local eff = EffectUtils.addSpecialEffect(
effectStr,
GetUnitX(invisUnit),
GetUnitY(invisUnit)
)
TriggerSleepAction(3)
EffectUtils.destroyEffect(eff)
end
end
end
end
end
end}
})
local function setTailleUnite(newSize)
TAILLE_UNITE = newSize
end
return {TAILLE_UNITE = TAILLE_UNITE, gg_trg_InvisUnit_is_getting_damage = gg_trg_InvisUnit_is_getting_damage, setTailleUnite = setTailleUnite}
end
____exports.Trig_InvisUnit_is_getting_damage = ____exports.InitTrig_InvisUnit_is_getting_damage()
return ____exports
end,
["src.core.08_GAME.Init_game.Heroes"] = function(...)
local ____exports = {}
local ____EffectUtils = require("src.Utils.EffectUtils")
local EffectUtils = ____EffectUtils.EffectUtils
local ____Point = require("src.Utils.Point")
local createPoint = ____Point.createPoint
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____double_heroes_config = require("src.core.Double_heroes.double_heroes_config")
local udg_doubleHeroesEnabled = ____double_heroes_config.udg_doubleHeroesEnabled
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local startPositions = {}
local startPositionsRandomized = {}
local playerIdsRandomized = {}
____exports.HERO_START_ANGLE = 90
local TIME_BEFORE_HERO_SPAWN = 3
local TIME_BETWEEN_EACH_HERO_SPAWN = 0.1
local EFFECT_FOR_MISSING_HEROES = "Abilities\\Spells\\Undead\\DeathPact\\DeathPactTarget.mdl"
local staticSpawns = {}
____exports.heroes = {
setEffectForMissingHeroes = function(effectStr)
EFFECT_FOR_MISSING_HEROES = effectStr
end,
setStaticSpawnPositions = function(spawns)
for ____, spawn in ipairs(spawns) do
staticSpawns[#staticSpawns + 1] = createPoint(
GetRectCenterX(spawn),
GetRectCenterY(spawn)
)
end
if #spawns > 0 then
local i = 0
while #staticSpawns < NB_ESCAPERS do
local ____spawns_1 = spawns
local ____i_0 = i
i = ____i_0 + 1
local spawn = ____spawns_1[____i_0 + 1]
staticSpawns[#staticSpawns + 1] = createPoint(
GetRectCenterX(spawn),
GetRectCenterY(spawn)
)
if i >= #spawns then
i = 0
end
end
end
end
}
local function RandomizeStartPositionsAndHeroSpawnOrder()
local alreadyAdded = {}
local n
local i
i = 0
while true do
if i >= NB_ESCAPERS then
break
end
while true do
n = GetRandomInt(0, NB_ESCAPERS - 1)
if not alreadyAdded[n + 1] then
break
end
end
startPositionsRandomized[i + 1] = #staticSpawns > 0 and Location(staticSpawns[n + 1].x, staticSpawns[n + 1].y) or startPositions[n + 1]
alreadyAdded[n + 1] = true
i = i + 1
end
i = 0
while true do
if i >= NB_ESCAPERS then
break
end
alreadyAdded[i + 1] = false
i = i + 1
end
i = 0
while true do
if i >= NB_PLAYERS_MAX then
break
end
while true do
n = GetRandomInt(0, NB_PLAYERS_MAX - 1)
if not alreadyAdded[n + 1] then
break
end
end
playerIdsRandomized[i + 1] = n
alreadyAdded[n + 1] = true
i = i + 1
end
if udg_doubleHeroesEnabled then
while true do
if i >= NB_ESCAPERS then
break
end
while true do
n = GetRandomInt(NB_PLAYERS_MAX, NB_ESCAPERS - 1)
if not alreadyAdded[n + 1] then
break
end
end
playerIdsRandomized[i + 1] = n
alreadyAdded[n + 1] = true
i = i + 1
end
end
end
____exports.init_Heroes = function()
local NB_COLUMNS = math.random() > 0.5 and 6 or 4
local NB_ROWS = NB_COLUMNS == 4 and 6 or 4
local minX = GetRectMinX(gg_rct_departLvl_0)
local minY = GetRectMinY(gg_rct_departLvl_0)
local diffX = (GetRectMaxX(gg_rct_departLvl_0) - minX) / (NB_COLUMNS - 1)
local diffY = (GetRectMaxY(gg_rct_departLvl_0) - minY) / (NB_ROWS - 1)
local x = 0
local y = 0
local n = 0
local spawnPeriod = TIME_BEFORE_HERO_SPAWN
if udg_doubleHeroesEnabled then
spawnPeriod = spawnPeriod / 2
end
while true do
if y > NB_ROWS - 1 then
break
end
while true do
if x > NB_COLUMNS - 1 then
break
end
startPositions[n + 1] = Location(minX + diffX * x, minY + diffY * y)
n = n + 1
x = x + 1
end
x = 0
y = y + 1
end
if udg_doubleHeroesEnabled then
x = 0
y = 0
while true do
if y > NB_ROWS - 1 then
break
end
while true do
if x > NB_COLUMNS - 1 then
break
end
startPositions[n + 1] = Location(minX + diffX * x, minY + diffY * y)
n = n + 1
x = x + 1
end
x = 0
y = y + 1
end
end
createEvent({
events = {function(t) return TriggerRegisterTimerEvent(t, spawnPeriod, false) end},
actions = {function()
RandomizeStartPositionsAndHeroSpawnOrder()
do
local i = 0
while i < NB_ESCAPERS do
local ____getUdgEscapers_result_get_result_getHero_result_2 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_getHero_result_2 ~= nil then
____getUdgEscapers_result_get_result_getHero_result_2 = ____getUdgEscapers_result_get_result_getHero_result_2:getHero()
end
if not ____getUdgEscapers_result_get_result_getHero_result_2 then
if GetPlayerId(GetLocalPlayer()) == i then
ClearSelection()
end
end
i = i + 1
end
end
do
local i = 0
while i < NB_ESCAPERS do
local n = playerIdsRandomized[i + 1]
if getUdgEscapers():get(n) then
local ____getUdgEscapers_result_get_result_createHero_result_4 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_createHero_result_4 ~= nil then
____getUdgEscapers_result_get_result_createHero_result_4 = ____getUdgEscapers_result_get_result_createHero_result_4:createHero(
GetLocationX(startPositionsRandomized[n + 1]),
GetLocationY(startPositionsRandomized[n + 1]),
____exports.HERO_START_ANGLE
)
end
else
EffectUtils.destroyEffect(EffectUtils.addSpecialEffectLoc(EFFECT_FOR_MISSING_HEROES, startPositionsRandomized[n + 1]))
end
startPositionsRandomized[n + 1] = nil
TriggerSleepAction(TIME_BETWEEN_EACH_HERO_SPAWN)
i = i + 1
end
end
end}
})
end
return ____exports
end,
["src.core.08_GAME.Init_game.Message_heroDies"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local forRange = ____mapUtils.forRange
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local playerId2colorId = ____Command_functions.playerId2colorId
local function initMessageHeroDies()
local MESSAGE_DURATION = 6
local TIME_BETWEEN_DEATH_AND_MESSAGE = 5
local timerSonJoue = CreateTimer()
local isSoundPlaying = false
local DUREE_SON = 3
local function GetRandomSoundHeroDies()
local n = GetRandomInt(0, 3)
if n == 0 then
return gg_snd_heroDies0
elseif n == 1 then
return gg_snd_heroDies1
elseif n == 2 then
return gg_snd_heroDies2
else
return gg_snd_heroDies3
end
end
local function GetRandomSoundAllyHeroDies()
local n = GetRandomInt(0, 3)
if n == 0 then
return gg_snd_allyHeroDies0
elseif n == 1 then
return gg_snd_allyHeroDies1
elseif n == 2 then
return gg_snd_allyHeroDies2
else
return gg_snd_allyHeroDies3
end
end
local function SoundEnd()
isSoundPlaying = false
end
local function PlaySoundHeroDies(fallenPlayer)
if not isSoundPlaying then
if GetLocalPlayer() == fallenPlayer then
StartSound(GetRandomSoundHeroDies())
else
StartSound(GetRandomSoundAllyHeroDies())
end
isSoundPlaying = true
TimerStart(timerSonJoue, DUREE_SON, false, SoundEnd)
end
end
local function DisplayDeathMessagePlayer(p)
local n = GetPlayerId(p)
TimerStart(
CreateTimer(),
TIME_BETWEEN_DEATH_AND_MESSAGE,
false,
function()
PlaySoundHeroDies(Player(n))
forRange(
NB_ESCAPERS,
function(i)
local ____getUdgEscapers_result_get_result_isIgnoringDeathMessages_result_0 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_isIgnoringDeathMessages_result_0 ~= nil then
____getUdgEscapers_result_get_result_isIgnoringDeathMessages_result_0 = ____getUdgEscapers_result_get_result_isIgnoringDeathMessages_result_0:isIgnoringDeathMessages()
end
if not ____getUdgEscapers_result_get_result_isIgnoringDeathMessages_result_0 then
local targetEscaper = getUdgEscapers():get(n)
if targetEscaper then
Text.P_timed(
Player(i),
MESSAGE_DURATION,
(udg_colorCode[playerId2colorId(n) + 1] .. targetEscaper:getDisplayName()) .. "|r has fallen."
)
end
end
end
)
DestroyTimer(GetExpiredTimer())
end
)
end
return {DisplayDeathMessagePlayer = DisplayDeathMessagePlayer}
end
____exports.MessageHeroDies = initMessageHeroDies()
return ____exports
end,
["src.core.02_bibliotheques_externes.SoundUtils"] = function(...)
local ____exports = {}
____exports.SoundPlay3DUnit = function(path, duration)
local sd = CreateSound(
path,
false,
true,
true,
10,
10,
"CombatSoundsEAX"
)
SetSoundDuration(sd, duration)
SetSoundChannel(sd, 5)
SetSoundVolume(sd, 127)
SetSoundPitch(sd, 1)
SetSoundDistances(sd, 600, 10000)
SetSoundDistanceCutoff(sd, 3000)
SetSoundConeAngles(sd, 0, 0, 127)
SetSoundConeOrientation(sd, 0, 0, 0)
return sd
end
return ____exports
end,
["src.core.08_GAME.Mode_coop.coop_init_sounds"] = function(...)
local ____exports = {}
local ____SoundUtils = require("src.core.02_bibliotheques_externes.SoundUtils")
local SoundPlay3DUnit = ____SoundUtils.SoundPlay3DUnit
function ____exports.RunCoopSoundOnHero(hero)
local coopSound = SoundPlay3DUnit("war3mapImported\\goutte.wav", 280)
AttachSoundToUnit(coopSound, hero)
StartSound(coopSound)
KillSoundWhenDone(coopSound)
end
return ____exports
end,
["src.core.DisablingInterface.EnableDisableInterface"] = function(...)
local ____exports = {}
local placeMinimap, resetMinimap
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local minimap
local minimapOriginalParent
local parentFullscreen
local minimapBackground
local consoleUIBackdrop
local consoleUI
local portrait
local minimapSize = 0.15
____exports.init_customUI = function()
createTimer(
2,
false,
function()
minimap = BlzGetFrameByName("MiniMapFrame", 0)
minimapOriginalParent = BlzFrameGetParent(minimap)
CreateLeaderboardBJ(bj_FORCE_ALL_PLAYERS, "title")
parentFullscreen = BlzGetFrameByName("Leaderboard", 0)
BlzFrameSetSize(parentFullscreen, 0, 0)
BlzFrameSetVisible(
BlzGetFrameByName("LeaderboardBackdrop", 0),
false
)
BlzFrameSetVisible(
BlzGetFrameByName("LeaderboardTitle", 0),
false
)
--- Calculate left coordinate
local screenRatio = BlzGetLocalClientWidth() / BlzGetLocalClientHeight()
local width = 0.8 * screenRatio / (4 / 3)
local left = 0.4 - width / 2
--- Place a minimapBackground for the minimap
local outOffScreeBackground = 0.2
minimapBackground = BlzCreateFrame("QuestButtonDisabledBackdropTemplate", parentFullscreen, 0, 0)
BlzFrameSetAbsPoint(minimapBackground, FRAMEPOINT_BOTTOMLEFT, left - outOffScreeBackground, -outOffScreeBackground)
BlzFrameSetAbsPoint(minimapBackground, FRAMEPOINT_TOPRIGHT, left + minimapSize + 0.005, minimapSize + 0.005)
BlzFrameSetVisible(minimapBackground, false)
consoleUIBackdrop = BlzGetFrameByName("ConsoleUIBackdrop", 0)
consoleUI = BlzGetFrameByName("ConsoleUI", 0)
portrait = BlzGetOriginFrame(ORIGIN_FRAME_PORTRAIT, 0)
end
)
end
____exports.DisableInterface = function(showMinimap)
if showMinimap == nil then
showMinimap = true
end
if showMinimap then
BlzHideOriginFrames(false)
BlzFrameSetVisible(portrait, false)
placeMinimap()
else
BlzHideOriginFrames(true)
resetMinimap()
end
BlzFrameSetVisible(consoleUIBackdrop, false)
BlzFrameSetVisible(consoleUI, false)
end
____exports.EnableInterface = function()
BlzHideOriginFrames(false)
BlzFrameSetVisible(consoleUIBackdrop, true)
BlzFrameSetVisible(consoleUI, true)
BlzFrameSetVisible(portrait, true)
resetMinimap()
end
placeMinimap = function()
--- Calculate left coordinate
local screenRatio = BlzGetLocalClientWidth() / BlzGetLocalClientHeight()
local width = 0.8 * screenRatio / (4 / 3)
local left = 0.4 - width / 2
BlzFrameSetVisible(minimapBackground, true)
BlzFrameSetParent(minimap, parentFullscreen)
BlzFrameSetAbsPoint(minimap, FRAMEPOINT_BOTTOMLEFT, left, 0)
BlzFrameSetAbsPoint(minimap, FRAMEPOINT_TOPRIGHT, left + minimapSize, minimapSize)
end
resetMinimap = function()
BlzFrameSetParent(minimap, minimapOriginalParent)
local offsetX = 0.0084
local offsetY = 0.0072
BlzFrameSetAbsPoint(minimap, FRAMEPOINT_BOTTOMLEFT, offsetX, offsetY)
BlzFrameSetAbsPoint(minimap, FRAMEPOINT_TOPRIGHT, minimapSize + offsetX, minimapSize + offsetY)
BlzFrameSetVisible(minimapBackground, false)
end
return ____exports
end,
["src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.To_turn_on_slide"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local forRange = ____mapUtils.forRange
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local AnglesDiff = ____Basic_functions.AnglesDiff
local ApplyAngleSymmetry = ____Basic_functions.ApplyAngleSymmetry
local IsLastOrderPause = ____Basic_functions.IsLastOrderPause
local IsOnGround = ____Basic_functions.IsOnGround
local StopUnit = ____Basic_functions.StopUnit
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local IsHero = ____Escaper_functions.IsHero
local MainEscaperToSecondaryOne = ____Escaper_functions.MainEscaperToSecondaryOne
local isSecondaryHero = ____Escaper_functions.isSecondaryHero
local ____TerrainTypeSlide = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeSlide")
local TerrainTypeSlide = ____TerrainTypeSlide.TerrainTypeSlide
local ____Apm = require("src.core.08_GAME.Apm_clics_par_minute.Apm")
local Apm = ____Apm.Apm
local ____double_heroes_config = require("src.core.Double_heroes.double_heroes_config")
local udg_symmetryAngle = ____double_heroes_config.udg_symmetryAngle
local ____globals = require("globals")
local globals = ____globals.globals
local ____Auto_continue_after_sliding = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.Auto_continue_after_sliding")
local AutoContinueAfterSliding = ____Auto_continue_after_sliding.AutoContinueAfterSliding
local function initTurnOnSlide()
local escaperSecond
local slider
local n
local sliderX
local sliderY
local orderWidget
local orderX
local orderY
local angle
local angleSecond
local canTurn
local udg_isDrunk = {}
local udg_drunk = {}
local udg_drunkLevel = {}
local INITIAL_DRUNK = 10
local udg_drunkEffect = {}
local DRUNK_EFFECTS = {}
local DRUNK_EFFECT_PETIT = "Abilities\\Weapons\\BloodElfMissile\\BloodElfMissile.mdl"
local DRUNK_EFFECT_MOYEN = "Abilities\\Weapons\\ChimaeraAcidMissile\\ChimaeraAcidMissile.mdl"
local DRUNK_EFFECT_GROS = "Abilities\\Weapons\\GreenDragonMissile\\GreenDragonMissile.mdl"
local trg_turnToPoint
local trg_turnToWidget
local function turnSliderToDirection(escaper, angle, triggerIsToLocation)
if triggerIsToLocation == nil then
triggerIsToLocation = nil
end
local slider = escaper:getHero()
if not slider then
return
end
if isSecondaryHero(slider) then
return
end
escaperSecond = MainEscaperToSecondaryOne(escaper)
local n = escaper:getId()
if udg_isDrunk[n + 1] then
if GetRandomInt(1, 2) == 1 then
angle = angle + udg_drunk[n + 1]
else
angle = angle - udg_drunk[n + 1]
end
end
if IsOnGround(slider) then
local terrainType = escaper:getLastTerrainType()
if __TS__InstanceOf(terrainType, TerrainTypeSlide) then
canTurn = terrainType:getCanTurn()
end
else
canTurn = globals.CAN_TURN_IN_AIR
end
angleSecond = ApplyAngleSymmetry(angle, udg_symmetryAngle)
if canTurn then
if escaper:isAbsoluteInstantTurn() then
escaper:turnInstantly(angle)
local ____escaperSecond_isSliding_result_0 = escaperSecond
if ____escaperSecond_isSliding_result_0 ~= nil then
____escaperSecond_isSliding_result_0 = ____escaperSecond_isSliding_result_0:isSliding()
end
if ____escaperSecond_isSliding_result_0 then
escaperSecond:turnInstantly(angleSecond)
end
else
if escaper.slidingMode == "max" then
local currentAngle = GetUnitFacing(slider)
escaper:setRemainingDegreesToTurn(AnglesDiff(angle, currentAngle))
else
SetUnitFacing(slider, angle)
end
local ____escaperSecond_getHero_result_2 = escaperSecond
if ____escaperSecond_getHero_result_2 ~= nil then
____escaperSecond_getHero_result_2 = ____escaperSecond_getHero_result_2:getHero()
end
local h1 = ____escaperSecond_getHero_result_2
local ____escaperSecond_isSliding_result_4 = escaperSecond
if ____escaperSecond_isSliding_result_4 ~= nil then
____escaperSecond_isSliding_result_4 = ____escaperSecond_isSliding_result_4:isSliding()
end
if ____escaperSecond_isSliding_result_4 and h1 then
escaperSecond:setRemainingDegreesToTurn(AnglesDiff(
angleSecond,
GetUnitFacing(h1)
))
end
end
escaper:setSlideLastAngleOrder(angle)
local ____escaperSecond_isSliding_result_6 = escaperSecond
if ____escaperSecond_isSliding_result_6 ~= nil then
____escaperSecond_isSliding_result_6 = ____escaperSecond_isSliding_result_6:isSliding()
end
if ____escaperSecond_isSliding_result_6 then
escaperSecond:setSlideLastAngleOrder(angleSecond)
end
end
if triggerIsToLocation ~= nil then
AutoContinueAfterSliding.lastClickedX[n + 1] = orderX
AutoContinueAfterSliding.lastClickedY[n + 1] = orderY
AutoContinueAfterSliding.isLastTargetALocation[n + 1] = triggerIsToLocation
Apm.nbClicsOnSlide[n + 1] = Apm.nbClicsOnSlide[n + 1] + 1
end
end
local function HandleTurn(triggerIsToLocation)
local escaper = Hero2Escaper(GetTriggerUnit())
if not escaper then
return
end
slider = GetTriggerUnit()
n = GetUnitUserData(slider)
sliderX = GetUnitX(slider)
sliderY = GetUnitY(slider)
if triggerIsToLocation then
orderX = GetOrderPointX()
orderY = GetOrderPointY()
else
orderWidget = GetOrderTarget()
orderX = GetWidgetX(orderWidget)
orderY = GetWidgetY(orderWidget)
end
StopUnit(slider)
if escaper:getFirstPersonHandle():isFirstPerson() then
return
end
angle = Atan2(orderY - sliderY, orderX - sliderX) * bj_RADTODEG
turnSliderToDirection(escaper, angle, triggerIsToLocation)
end
local function init_ToTurnOnSlide()
trg_turnToPoint = createEvent({
events = {function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER) end},
conditions = {function()
local escaper = Hero2Escaper(GetTriggerUnit())
local ____IsHero_result_10 = IsHero(GetTriggerUnit())
if ____IsHero_result_10 then
local ____escaper_isSliding_result_8 = escaper
if ____escaper_isSliding_result_8 ~= nil then
____escaper_isSliding_result_8 = ____escaper_isSliding_result_8:isSliding()
end
____IsHero_result_10 = not not ____escaper_isSliding_result_8
end
return ____IsHero_result_10 and not IsLastOrderPause()
end},
actions = {function() return HandleTurn(true) end}
})
trg_turnToWidget = createEvent({
events = {function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER) end},
conditions = {function()
local escaper = Hero2Escaper(GetTriggerUnit())
local ____IsHero_result_13 = IsHero(GetTriggerUnit())
if ____IsHero_result_13 then
local ____escaper_isSliding_result_11 = escaper
if ____escaper_isSliding_result_11 ~= nil then
____escaper_isSliding_result_11 = ____escaper_isSliding_result_11:isSliding()
end
____IsHero_result_13 = not not ____escaper_isSliding_result_11
end
return ____IsHero_result_13
end},
actions = {function() return HandleTurn(false) end}
})
forRange(
NB_ESCAPERS,
function(i)
udg_drunk[i + 1] = INITIAL_DRUNK
return INITIAL_DRUNK
end
)
DRUNK_EFFECTS[2] = DRUNK_EFFECT_PETIT
DRUNK_EFFECTS[3] = DRUNK_EFFECT_MOYEN
DRUNK_EFFECTS[4] = DRUNK_EFFECT_GROS
end
return {
udg_isDrunk = udg_isDrunk,
udg_drunk = udg_drunk,
udg_drunkLevel = udg_drunkLevel,
udg_drunkEffect = udg_drunkEffect,
DRUNK_EFFECTS = DRUNK_EFFECTS,
init_ToTurnOnSlide = init_ToTurnOnSlide,
turnSliderToDirection = turnSliderToDirection
}
end
____exports.TurnOnSlide = initTurnOnSlide()
____exports.init_ToTurnOnSlide = ____exports.TurnOnSlide.init_ToTurnOnSlide
return ____exports
end,
["src.core.Follow_mouse.Follow_mouse"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__Delete = ____lualib.__TS__Delete
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Auto_continue_after_sliding = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.Auto_continue_after_sliding")
local AutoContinueAfterSliding = ____Auto_continue_after_sliding.AutoContinueAfterSliding
local ____To_turn_on_slide = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.To_turn_on_slide")
local TurnOnSlide = ____To_turn_on_slide.TurnOnSlide
____exports.PRESS_TIME_TO_ENABLE_FOLLOW_MOUSE = 0.2
local FOLLOW_MOUSE_PERIOD = 0.1
local function onPressActions()
local escaper = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
local ____escaper_getFollowMouse_result_0 = escaper
if ____escaper_getFollowMouse_result_0 ~= nil then
____escaper_getFollowMouse_result_0 = ____escaper_getFollowMouse_result_0:getFollowMouse()
end
local followMouse = ____escaper_getFollowMouse_result_0
local ____ = followMouse and followMouse:doPressActions()
end
local function onUnpressActions()
local escaper = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
local ____escaper_getFollowMouse_result_2 = escaper
if ____escaper_getFollowMouse_result_2 ~= nil then
____escaper_getFollowMouse_result_2 = ____escaper_getFollowMouse_result_2:getFollowMouse()
end
local followMouse = ____escaper_getFollowMouse_result_2
local ____ = followMouse and followMouse:doUnpressActions()
end
local function onMouseMoveActions()
local escaper = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
local ____escaper_getFollowMouse_result_4 = escaper
if ____escaper_getFollowMouse_result_4 ~= nil then
____escaper_getFollowMouse_result_4 = ____escaper_getFollowMouse_result_4:getFollowMouse()
end
local followMouse = ____escaper_getFollowMouse_result_4
local ____ = followMouse and followMouse:doMouseMoveActions()
end
local function followMouseActions()
local escaper = ____exports.FollowMouse.anyTimer2escaper:get(GetExpiredTimer())
local ____escaper_getHero_result_6 = escaper
if ____escaper_getHero_result_6 ~= nil then
____escaper_getHero_result_6 = ____escaper_getHero_result_6:getHero()
end
local slider = ____escaper_getHero_result_6
if escaper and slider then
local followMouse = escaper:getFollowMouse()
if followMouse then
if escaper:isSliding() then
local ____ = followMouse.angle and TurnOnSlide.turnSliderToDirection(escaper, followMouse.angle)
else
followMouse:onStopSliding()
end
end
end
end
--- Class FollowMouse
____exports.FollowMouse = __TS__Class()
local FollowMouse = ____exports.FollowMouse
FollowMouse.name = "FollowMouse"
function FollowMouse.prototype.____constructor(self, escaper, neverDisable)
self.doPressActions = function()
local activeBtn = BlzGetTriggerPlayerMouseButton()
if activeBtn == MOUSE_BUTTON_TYPE_RIGHT then
self.tClickingTime = CreateTimer()
TimerStart(self.tClickingTime, 60, false, DoNothing)
local ____ = not self.neverDisable and self:stopFollowingMouse()
end
end
self.doUnpressActions = function()
local activeBtn = BlzGetTriggerPlayerMouseButton()
if activeBtn == MOUSE_BUTTON_TYPE_RIGHT and self.tClickingTime then
local elapsedTime = TimerGetElapsed(self.tClickingTime)
DestroyTimer(self.tClickingTime)
if elapsedTime >= ____exports.PRESS_TIME_TO_ENABLE_FOLLOW_MOUSE then
self:startFollowingMouse()
end
end
end
self.startFollowingMouse = function()
self.tFollowMouse = CreateTimer()
TimerStart(self.tFollowMouse, FOLLOW_MOUSE_PERIOD, true, followMouseActions)
____exports.FollowMouse.anyTimer2escaper:set(self.tFollowMouse, self.escaper)
local ____ = self.tMouseMove and DestroyTrigger(self.tMouseMove)
self.tMouseMove = createEvent({
events = {function(t) return TriggerRegisterPlayerEvent(
t,
self.escaper:getPlayer(),
EVENT_PLAYER_MOUSE_MOVE
) end},
actions = {onMouseMoveActions}
})
end
self.stopFollowingMouse = function()
if self.tFollowMouse then
____exports.FollowMouse.anyTimer2escaper:delete(self.tFollowMouse)
DestroyTimer(self.tFollowMouse)
__TS__Delete(self, "tFollowMouse")
local ____ = self.tMouseMove and DestroyTrigger(self.tMouseMove)
__TS__Delete(self, "angle")
end
end
self.onStopSliding = function()
self:stopFollowingMouse()
end
self.destroy = function()
self:stopFollowingMouse()
local ____ = self.tPress and DestroyTrigger(self.tPress)
local ____ = self.tUnpress and DestroyTrigger(self.tUnpress)
local ____ = self.tClickingTime and DestroyTimer(self.tClickingTime)
end
self.escaper = escaper
self.neverDisable = neverDisable
local player = escaper:getPlayer()
self.tPress = createEvent({
events = {function(t) return TriggerRegisterPlayerEvent(t, player, EVENT_PLAYER_MOUSE_DOWN) end},
actions = {onPressActions}
})
self.tUnpress = createEvent({
events = {function(t) return TriggerRegisterPlayerEvent(t, player, EVENT_PLAYER_MOUSE_UP) end},
actions = {onUnpressActions}
})
end
function FollowMouse.prototype.doMouseMoveActions(self)
if BlzGetTriggerPlayerMouseX() == 0 and BlzGetTriggerPlayerMouseY() == 0 then
return
end
self.escaper.mouseX = BlzGetTriggerPlayerMouseX()
self.escaper.mouseY = BlzGetTriggerPlayerMouseY()
local slider = self.escaper:getHero()
if slider then
local sliderX = GetUnitX(slider)
local sliderY = GetUnitY(slider)
local orderX = self.escaper.mouseX
local orderY = self.escaper.mouseY
self.angle = Atan2(orderY - sliderY, orderX - sliderX) * bj_RADTODEG
if self.tFollowMouse then
AutoContinueAfterSliding.lastClickedX[self.escaper:getId() + 1] = orderX
AutoContinueAfterSliding.lastClickedY[self.escaper:getId() + 1] = orderY
AutoContinueAfterSliding.isLastTargetALocation[self.escaper:getId() + 1] = true
end
end
end
FollowMouse.anyTimer2escaper = __TS__New(Map)
return ____exports
end,
["src.core.Keyboard_shortcuts.KeyboardShortcut"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__StringAccess = ____lualib.__TS__StringAccess
local __TS__StringSubstring = ____lualib.__TS__StringSubstring
local __TS__StringSplit = ____lualib.__TS__StringSplit
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
____exports.GetStringAssignedFromCommand = function(command)
local outputStr
local spaceFound = false
local cmdLength = StringLength(command)
local charId = 3
while true do
if charId >= cmdLength then
break
end
if SubStringBJ(command, charId, charId) == " " then
if not spaceFound then
spaceFound = true
else
outputStr = SubStringBJ(command, charId + 1, cmdLength)
if SubStringBJ(outputStr, 1, 1) == "(" and SubStringBJ(
outputStr,
StringLength(outputStr),
StringLength(outputStr)
) == ")" then
outputStr = SubStringBJ(
outputStr,
2,
StringLength(outputStr) - 1
)
end
return outputStr
end
end
charId = charId + 1
end
return nil
end
local string2AcceptedOsKey = {
["0"] = OSKEY_0,
["1"] = OSKEY_1,
["2"] = OSKEY_2,
["3"] = OSKEY_3,
["4"] = OSKEY_4,
["5"] = OSKEY_5,
["6"] = OSKEY_6,
["7"] = OSKEY_7,
["8"] = OSKEY_8,
["9"] = OSKEY_9,
a = OSKEY_A,
b = OSKEY_B,
c = OSKEY_C,
d = OSKEY_D,
e = OSKEY_E,
f = OSKEY_F,
g = OSKEY_G,
h = OSKEY_H,
i = OSKEY_I,
j = OSKEY_J,
k = OSKEY_K,
l = OSKEY_L,
m = OSKEY_M,
n = OSKEY_N,
o = OSKEY_O,
p = OSKEY_P,
q = OSKEY_Q,
r = OSKEY_R,
s = OSKEY_S,
t = OSKEY_T,
u = OSKEY_U,
v = OSKEY_V,
w = OSKEY_W,
x = OSKEY_X,
y = OSKEY_Y,
z = OSKEY_Z,
n0 = OSKEY_NUMPAD0,
n1 = OSKEY_NUMPAD1,
n2 = OSKEY_NUMPAD2,
n3 = OSKEY_NUMPAD3,
n4 = OSKEY_NUMPAD4,
n5 = OSKEY_NUMPAD5,
n6 = OSKEY_NUMPAD6,
n7 = OSKEY_NUMPAD7,
n8 = OSKEY_NUMPAD8,
n9 = OSKEY_NUMPAD9
}
local string2AllowedKeyModifier = {c = 2, s = 1}
local keyModifier2String = {[0] = "", [1] = "S", [2] = "C", [3] = "CS"}
local shortcutKeyDefinitionErrorMsg = "wrong shortcut key"
____exports.KeyboardShortcut = __TS__Class()
local KeyboardShortcut = ____exports.KeyboardShortcut
KeyboardShortcut.name = "KeyboardShortcut"
function KeyboardShortcut.prototype.____constructor(self, escaper, shortcutString, command)
self.event = nil
self.enableEvent = function()
local ____ = self.event and DestroyTrigger(self.event)
self.event = createEvent({
events = {function(t)
BlzTriggerRegisterPlayerKeyEvent(
t,
self.escaper:getPlayer(),
self.shortcutKey,
self.shortcutKeyModifier,
false
)
end},
actions = {function()
local ____ServiceManager_getService_result_0 = ServiceManager.getService("Cmd")
local ExecuteCommand = ____ServiceManager_getService_result_0.ExecuteCommand
ExecuteCommand(self.escaper, self.command)
end}
})
end
self.disableEvent = function()
local ____ = self.event and DestroyTrigger(self.event)
end
self.destroy = function()
self:disableEvent()
end
self.toDisplayString = function()
return ((keyModifier2String[self.shortcutKeyModifier] .. self.shortcutKeyStr) .. " : ") .. self.command
end
self.getShortcutString = function()
return self.shortcutString
end
self.toJson = function() return {} end
shortcutString = string.lower(shortcutString)
local len = #shortcutString
local charKey = ""
local modifier = 0
if len >= 1 then
local lastModifierCharPos = len - 2
charKey = __TS__StringAccess(shortcutString, len - 1)
if len >= 2 then
local prevChar = __TS__StringAccess(shortcutString, len - 2)
if prevChar == "n" then
charKey = prevChar .. charKey
lastModifierCharPos = len - 3
end
end
if lastModifierCharPos >= 0 then
local modifiersStr = __TS__StringSplit(
__TS__StringSubstring(shortcutString, 0, lastModifierCharPos + 1),
""
)
for ____, modifierStr in ipairs(modifiersStr) do
if not string2AllowedKeyModifier[modifierStr] then
error(shortcutKeyDefinitionErrorMsg, 0)
end
modifier = modifier + string2AllowedKeyModifier[modifierStr]
end
end
end
if not string2AcceptedOsKey[charKey] or not keyModifier2String[modifier] then
error(shortcutKeyDefinitionErrorMsg, 0)
end
if #command == 0 then
error("you need a command for your shortcut", 0)
end
self.escaper = escaper
self.shortcutString = shortcutString
self.shortcutKeyStr = charKey
self.command = (__TS__StringSubstring(command, 0, 1) == "-" and "" or "-") .. command
self.shortcutKey = string2AcceptedOsKey[charKey]
self.shortcutKeyModifier = modifier
end
return ____exports
end,
["src.core.Keyboard_shortcuts.KeyboardShortcutArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local ____exports = {}
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
____exports.KeyboardShortcutArray = __TS__Class()
local KeyboardShortcutArray = ____exports.KeyboardShortcutArray
KeyboardShortcutArray.name = "KeyboardShortcutArray"
__TS__ClassExtends(KeyboardShortcutArray, BaseArray)
function KeyboardShortcutArray.prototype.____constructor(self, escaper)
BaseArray.prototype.____constructor(self, true)
self.displayAll = function()
self:forAll(function(ks, ksId)
Text.mkP(
self.escaper:getPlayer(),
ks:toDisplayString()
)
end)
end
self.new = function(____, ks, enable)
local oldId = self:searchByShortcutString(ks:getShortcutString())
if oldId then
self:destroyOne(oldId)
end
self:_new(ks)
if enable then
ks:enableEvent()
end
end
self.destroyOneByKey = function(____, shortcutString)
local keyboardShortcutId = self:searchByShortcutString(shortcutString)
if keyboardShortcutId then
self:destroyOne(keyboardShortcutId)
return true
else
return false
end
end
self.escaper = escaper
end
function KeyboardShortcutArray.prototype.searchByShortcutString(self, shortcutString)
local output = nil
self:forAll(function(ks, ksId)
if ks:getShortcutString() == shortcutString then
output = ksId
end
end)
return output
end
return ____exports
end,
["src.core.04_STRUCTURES.Level.Level_functions"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgLevels = ____globals.getUdgLevels
____exports.IsLevelBeingMade = function(level)
do
local i = 0
while i < NB_ESCAPERS do
local escaper = getUdgEscapers():get(i)
if escaper then
if escaper:getMakingLevel() == level then
return true
end
end
i = i + 1
end
end
return getUdgLevels():getCurrentLevel() == level
end
return ____exports
end,
["src.core.04_STRUCTURES.Level.StartAndEnd"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local getUdgLevels = ____globals.getUdgLevels
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local RectInterface = __TS__Class()
RectInterface.name = "RectInterface"
function RectInterface.prototype.____constructor(self, minX, minY, maxX, maxY)
self.minX = minX
self.minY = minY
self.maxX = maxX
self.maxY = maxY
self.r = Rect(self.minX, self.minY, self.maxX, self.maxY)
end
function RectInterface.prototype.destroy(self)
RemoveRect(self.r)
end
function RectInterface.prototype.toJson(self)
local output = MemoryHandler.getEmptyObject()
output.minX = self.minX
output.minY = self.minY
output.maxX = self.maxX
output.maxY = self.maxY
return output
end
____exports.Start = __TS__Class()
local Start = ____exports.Start
Start.name = "Start"
__TS__ClassExtends(Start, RectInterface)
function Start.prototype.____constructor(self, x1, y1, x2, y2, facing)
RectInterface.prototype.____constructor(
self,
RMinBJ(x1, x2),
RMinBJ(y1, y2),
RMaxBJ(x1, x2),
RMaxBJ(y1, y2)
)
self.getRandomX = function()
return GetRandomReal(self.minX, self.maxX)
end
self.getRandomY = function()
return GetRandomReal(self.minY, self.maxY)
end
self.getCenterX = function()
return GetRectCenterX(self.r)
end
self.getCenterY = function()
return GetRectCenterY(self.r)
end
self.getFacing = function() return self.facing end
self.toJson = function()
local output = RectInterface.prototype.toJson(self)
if output then
if self.facing then
output.facing = self.facing
end
end
return output
end
self.facing = facing
end
____exports.End = __TS__Class()
local End = ____exports.End
End.name = "End"
__TS__ClassExtends(End, RectInterface)
function End.prototype.____constructor(self, levelId, x1, y1, x2, y2)
RectInterface.prototype.____constructor(
self,
RMinBJ(x1, x2),
RMinBJ(y1, y2),
RMaxBJ(x1, x2),
RMaxBJ(y1, y2)
)
self.activate = function(____, activ)
if activ then
EnableTrigger(self.endReaching)
else
DisableTrigger(self.endReaching)
end
end
self.destroy = function()
RectInterface.prototype.destroy(self)
DestroyTrigger(self.endReaching)
end
self.endReaching = createEvent({
events = {function(t) return TriggerRegisterEnterRectSimple(t, self.r) end},
actions = {function()
local finisher = Hero2Escaper(GetTriggerUnit())
if not finisher then
return
end
if getUdgLevels().levelProgressionState[finisher:getId()] ~= levelId then
return
end
if not getUdgLevels():goToNextLevel(finisher) then
DisableTrigger(self.endReaching)
Text.A("Good job ! You have finished the game.")
TriggerSleepAction(2)
Text.A("restart in 10 seconds")
TriggerSleepAction(10)
getUdgLevels():restartTheGame()
end
end}
})
DisableTrigger(self.endReaching)
end
____exports.init_StartAndEnd = function()
____exports.DEPART_PAR_DEFAUT = __TS__New(
____exports.Start,
-50,
-50,
50,
50
)
end
return ____exports
end,
["src.core.04_STRUCTURES.Escaper.EscaperEffect"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
local ____EffectUtils = require("src.Utils.EffectUtils")
local EffectUtils = ____EffectUtils.EffectUtils
____exports.EscaperEffect = __TS__Class()
local EscaperEffect = ____exports.EscaperEffect
EscaperEffect.name = "EscaperEffect"
function EscaperEffect.prototype.____constructor(self, efStr, u, bodyPart)
self.recreate = function(____, u)
self:destroy()
self.ef = EffectUtils.addSpecialEffectTarget(self.efStr, u, self.bodyPart)
end
self.toJson = function() return {} end
self.destroy = function()
EffectUtils.destroyEffect(self.ef)
end
self.efStr = efStr
self.bodyPart = bodyPart
self.ef = EffectUtils.addSpecialEffectTarget(efStr, u, bodyPart)
end
return ____exports
end,
["src.core.04_STRUCTURES.Escaper.EscaperEffectArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____EscaperEffect = require("src.core.04_STRUCTURES.Escaper.EscaperEffect")
local EscaperEffect = ____EscaperEffect.EscaperEffect
local NB_EFFECTS_LIMIT = 20
____exports.EscaperEffectArray = __TS__Class()
local EscaperEffectArray = ____exports.EscaperEffectArray
EscaperEffectArray.name = "EscaperEffectArray"
__TS__ClassExtends(EscaperEffectArray, BaseArray)
function EscaperEffectArray.prototype.____constructor(self)
BaseArray.prototype.____constructor(self, true)
self.new = function(____, efStr, u, bodyPart)
if self.lastInstanceId >= NB_EFFECTS_LIMIT - 1 then
self.data[0]:destroy()
do
local i = 0
while i < 19 do
self.data[i] = self.data[i + 1]
i = i + 1
end
end
else
self.lastInstanceId = self.lastInstanceId + 1
end
self.data[self.lastInstanceId] = __TS__New(EscaperEffect, efStr, u, bodyPart)
end
self.destroyLastEffects = function(____, numEfToDestroy)
local i = numEfToDestroy
while i > 0 and self.lastInstanceId >= 0 do
local ____ = self.data[self.lastInstanceId] and self.data[self.lastInstanceId]:destroy()
__TS__Delete(self.data, self.lastInstanceId)
self.lastInstanceId = self.lastInstanceId - 1
i = i - 1
end
end
self.hideEffects = function()
for _, ef in pairs(self.data) do
ef:destroy()
end
end
self.showEffects = function(____, u)
for _, ef in pairs(self.data) do
ef:recreate(u)
end
end
end
return ____exports
end,
["src.Utils.SaveLoad.TreeLib.EncodingHex"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
____exports.EncodingHex = __TS__Class()
local EncodingHex = ____exports.EncodingHex
EncodingHex.name = "EncodingHex"
function EncodingHex.prototype.____constructor(self)
end
function EncodingHex.To32BitHexString(self, num)
return string.format("%%08X", num)
end
function EncodingHex.ToNumber(self, someHexString)
return tonumber(someHexString, 16) or 0
end
return ____exports
end,
["src.Utils.SaveLoad.TreeLib.TreeMath"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
____exports.TreeMath = __TS__Class()
local TreeMath = ____exports.TreeMath
TreeMath.name = "TreeMath"
function TreeMath.prototype.____constructor(self)
end
function TreeMath.Clamp(self, value, min, max)
if value > max then
value = max
elseif value < min then
value = min
end
return value
end
function ____exports.RandAngle()
return GetRandomReal(0, 360)
end
function ____exports.RandPercent()
return GetRandomReal(0, 1)
end
return ____exports
end,
["src.Utils.SaveLoad.TreeLib.RGB"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local __TS__New = ____lualib.__TS__New
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
local ____exports = {}
local ____TreeMath = require("src.Utils.SaveLoad.TreeLib.TreeMath")
local TreeMath = ____TreeMath.TreeMath
____exports.RGB = __TS__Class()
local RGB = ____exports.RGB
RGB.name = "RGB"
function RGB.prototype.____constructor(self, red, green, blue)
self._red = 0
self._green = 0
self._blue = 0
self.red = red
self.green = green
self.blue = blue
end
__TS__SetDescriptor(
RGB.prototype,
"blue",
{
get = function(self)
return self._blue
end,
set = function(self, value)
self._blue = math.floor(TreeMath:Clamp(value, 0, 255))
end
},
true
)
__TS__SetDescriptor(
RGB.prototype,
"green",
{
get = function(self)
return self._green
end,
set = function(self, value)
self._green = math.floor(TreeMath:Clamp(value, 0, 255))
end
},
true
)
__TS__SetDescriptor(
RGB.prototype,
"red",
{
get = function(self)
return self._red
end,
set = function(self, value)
self._red = math.floor(TreeMath:Clamp(value, 0, 255))
end
},
true
)
__TS__ObjectDefineProperty(
RGB,
"red",
{get = function(self)
return __TS__New(____exports.RGB, 255, 0, 0)
end}
)
__TS__ObjectDefineProperty(
RGB,
"green",
{get = function(self)
return __TS__New(____exports.RGB, 0, 255, 0)
end}
)
__TS__ObjectDefineProperty(
RGB,
"blue",
{get = function(self)
return __TS__New(____exports.RGB, 0, 0, 255)
end}
)
__TS__ObjectDefineProperty(
RGB,
"teal",
{get = function(self)
return __TS__New(____exports.RGB, 0, 255, 255)
end}
)
function RGB.prototype.copy(self)
return __TS__New(____exports.RGB, self.red, self.blue, self.green)
end
function RGB.prototype.__tostring(self)
return (((("r: " .. tostring(self.red)) .. " g: ") .. tostring(self.green)) .. " b: ") .. tostring(self.blue)
end
function RGB.getFull(self)
return __TS__New(____exports.RGB, 255, 255, 255)
end
function ____exports.RGBTextString(color, ...)
local input = {...}
local ret = (("|cFF" .. string.format("%%02x", color.red)) .. string.format("%%02x", color.green)) .. string.format("%%02x", color.blue)
do
local i = 0
while i < #input do
ret = ret .. tostring(input[i + 1])
ret = ret .. " "
i = i + 1
end
end
ret = ret .. "|r"
return ret
end
return ____exports
end,
["src.Utils.SaveLoad.TreeLib.Logger"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____RGB = require("src.Utils.SaveLoad.TreeLib.RGB")
local RGB = ____RGB.RGB
local RGBTextString = ____RGB.RGBTextString
---
-- @noSelf *
____exports.Logger = __TS__Class()
local Logger = ____exports.Logger
Logger.name = "Logger"
function Logger.prototype.____constructor(self)
end
function Logger.LogVerbose(...)
if ____exports.Logger.doLogVerbose then
print(RGBTextString(____exports.Logger.COLOR_VERBOSE, "Verbose: ", ...))
end
end
function Logger.LogDebug(...)
if ____exports.Logger.doLogDebug then
print(RGBTextString(____exports.Logger.COLOR_DEBUG, "Debug: ", ...))
end
end
function Logger.LogWarning(...)
if ____exports.Logger.doLogWarning then
print(RGBTextString(____exports.Logger.COLOR_WARNING, "Warning: ", ...))
end
end
function Logger.LogCritical(...)
if ____exports.Logger.doLogCritical then
print(RGBTextString(____exports.Logger.COLOR_CRITICAL, "Critical: ", ...))
end
end
function Logger.verbose(...)
____exports.Logger.LogVerbose(...)
end
function Logger.generic(...)
____exports.Logger.LogDebug(...)
end
function Logger.warning(...)
____exports.Logger.LogWarning(...)
end
function Logger.critical(...)
____exports.Logger.LogCritical(...)
end
Logger.doLogVerbose = false
Logger.doLogDebug = true
Logger.doLogWarning = true
Logger.doLogCritical = true
Logger.COLOR_VERBOSE = __TS__New(RGB, 128, 128, 128)
Logger.COLOR_DEBUG = __TS__New(RGB, 255, 255, 255)
Logger.COLOR_WARNING = __TS__New(RGB, 255, 255, 0)
Logger.COLOR_CRITICAL = __TS__New(RGB, 255, 0, 0)
return ____exports
end,
["src.Utils.SaveLoad.TreeLib.SyncSaveLoad"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__StringSubstr = ____lualib.__TS__StringSubstr
local __TS__StringCharAt = ____lualib.__TS__StringCharAt
local __TS__StringSubstring = ____lualib.__TS__StringSubstring
local ____exports = {}
local FilePromise
local ____mapUtils = require("src.Utils.mapUtils")
local errorHandler = ____mapUtils.errorHandler
local ____EncodingBase64 = require("src.Utils.SaveLoad.TreeLib.EncodingBase64")
local EncodingBase64 = ____EncodingBase64.EncodingBase64
local ____EncodingHex = require("src.Utils.SaveLoad.TreeLib.EncodingHex")
local EncodingHex = ____EncodingHex.EncodingHex
local ____Logger = require("src.Utils.SaveLoad.TreeLib.Logger")
local Logger = ____Logger.Logger
local BASE_64_DEFAULT = true
____exports.SyncSaveLoad = function()
local syncPrefix = "S_TIO"
local syncPrefixFinish = "S_TIOF"
local syncEvent = CreateTrigger()
local allPromises = {}
do
local i = 0
while i < GetBJMaxPlayers() do
BlzTriggerRegisterPlayerSyncEvent(
syncEvent,
Player(i),
syncPrefix,
false
)
BlzTriggerRegisterPlayerSyncEvent(
syncEvent,
Player(i),
syncPrefixFinish,
false
)
i = i + 1
end
end
TriggerAddAction(
syncEvent,
errorHandler(
function()
local readData = BlzGetTriggerSyncData()
local totalChunkSize = EncodingHex:ToNumber(__TS__StringSubstr(readData, 0, 8))
local currentChunk = EncodingHex:ToNumber(__TS__StringSubstr(readData, 8, 8))
local theRest = __TS__StringSubstr(readData, 16)
Logger.verbose("Loading ", currentChunk, " out of ", totalChunkSize)
local promise = allPromises[GetPlayerId(GetTriggerPlayer()) + 1]
if promise then
if BlzGetTriggerSyncPrefix() == syncPrefix then
promise.setBuffer(currentChunk - 1, theRest)
elseif BlzGetTriggerSyncPrefix() == syncPrefixFinish then
promise.finish()
allPromises[GetPlayerId(promise.syncOwner) + 1] = nil
end
else
Logger.warning("Syncronised data in SyncSaveLoad when there is no promise present for player: " .. GetPlayerName(GetTriggerPlayer()))
end
end,
function()
allPromises[GetPlayerId(GetTriggerPlayer()) + 1] = nil
end
)
)
local function writeFile(fileName, data, base64Encode)
if base64Encode == nil then
base64Encode = BASE_64_DEFAULT
end
PreloadGenClear()
PreloadGenStart()
local rawData = data
local toCompile = base64Encode and EncodingBase64:Encode(rawData) or rawData
local chunkSize = 180
local assemble = ""
local noOfChunks = math.ceil(#toCompile / chunkSize)
Logger.verbose("rawData.length: ", #rawData)
Logger.verbose("toCompile.length: ", #toCompile)
xpcall(
function()
do
local i = 0
while i < #toCompile do
assemble = assemble .. __TS__StringCharAt(toCompile, i)
if #assemble >= chunkSize then
local header = EncodingHex:To32BitHexString(noOfChunks) .. EncodingHex:To32BitHexString(math.ceil(i / chunkSize))
Preload((("\")\ncall BlzSendSyncData(\"" .. syncPrefix) .. "\",\"") .. header .. assemble)
assemble = ""
end
i = i + 1
end
end
if #assemble > 0 then
local header = EncodingHex:To32BitHexString(noOfChunks) .. EncodingHex:To32BitHexString(noOfChunks)
Preload((("\")\ncall BlzSendSyncData(\"" .. syncPrefix) .. "\",\"") .. header .. assemble)
end
end,
Logger.critical
)
PreloadGenEnd(fileName)
end
local function writeFileWithoutPossibleLoading(fileName, data, base64Encode)
if base64Encode == nil then
base64Encode = BASE_64_DEFAULT
end
PreloadGenClear()
PreloadGenStart()
local rawData = data
local toCompile = base64Encode and EncodingBase64:Encode(rawData) or rawData
local chunkSize = 180
local assemble = ""
local noOfChunks = math.ceil(#toCompile / chunkSize)
Logger.verbose("rawData.length: ", #rawData)
Logger.verbose("toCompile.length: ", #toCompile)
xpcall(
function()
do
local i = 0
while i < noOfChunks do
local start = i * chunkSize
local ____end = i < noOfChunks - 1 and start + chunkSize or nil
assemble = __TS__StringSubstring(toCompile, start, ____end)
Preload(assemble)
i = i + 1
end
end
end,
Logger.critical
)
PreloadGenEnd(fileName)
end
local function read(fileName, reader, onFinish, base64Encode)
if base64Encode == nil then
base64Encode = BASE_64_DEFAULT
end
if allPromises[GetPlayerId(reader) + 1] == nil then
allPromises[GetPlayerId(reader) + 1] = FilePromise(reader, onFinish, base64Encode)
if GetLocalPlayer() == reader then
PreloadStart()
Preloader(fileName)
PreloadEnd(1)
BlzSendSyncData(syncPrefixFinish, "")
end
else
Logger.warning("Trying to read file when file read is already busy.")
end
return allPromises[GetPlayerId(reader) + 1]
end
return {read = read, writeFile = writeFile, writeFileWithoutPossibleLoading = writeFileWithoutPossibleLoading}
end
FilePromise = function(syncOwner, onFinish, base64Encode)
if base64Encode == nil then
base64Encode = BASE_64_DEFAULT
end
local buffer = {}
local function finish()
local loadString = table.concat(buffer, "")
local finalString = base64Encode and EncodingBase64:Decode(loadString) or loadString
Logger.verbose("loadString.length", #loadString)
Logger.verbose("onFinish", onFinish)
Logger.verbose("Finished: ")
Logger.verbose("finalString.length: ", #finalString)
onFinish(finalString)
end
return {
finish = finish,
setBuffer = function(i, s)
local ____s_0 = s
buffer[i + 1] = ____s_0
return ____s_0
end,
syncOwner = syncOwner
}
end
return ____exports
end,
["src.Utils.SaveLoad.SaveLoad"] = function(...)
local ____exports = {}
local ____SyncSaveLoad = require("src.Utils.SaveLoad.TreeLib.SyncSaveLoad")
local SyncSaveLoad = ____SyncSaveLoad.SyncSaveLoad
local BASE_64_DEFAULT = true
____exports.initSaveLoad = function()
local syncSaveLoad = SyncSaveLoad()
local localFileCache = {}
return {
saveFile = function(fileName, player, data, base64)
if base64 == nil then
base64 = BASE_64_DEFAULT
end
local ____player_1 = player
if ____player_1 then
local ____data_0 = data
localFileCache[(tostring(GetPlayerId(player)) .. "_") .. fileName] = ____data_0
____player_1 = ____data_0
end
if not player or GetLocalPlayer() == player then
syncSaveLoad.writeFile(fileName, data, base64)
end
end,
saveFileWithoutPossibleLoading = function(fileName, player, data, base64)
if base64 == nil then
base64 = BASE_64_DEFAULT
end
local ____player_3 = player
if ____player_3 then
local ____data_2 = data
localFileCache[(tostring(GetPlayerId(player)) .. "_") .. fileName] = ____data_2
____player_3 = ____data_2
end
if not player or GetLocalPlayer() == player then
syncSaveLoad.writeFileWithoutPossibleLoading(fileName, data, base64)
end
end,
readFile = function(fileName, player, onRead, base64)
if base64 == nil then
base64 = BASE_64_DEFAULT
end
if localFileCache[(tostring(GetPlayerId(player)) .. "_") .. fileName] then
onRead(localFileCache[(tostring(GetPlayerId(player)) .. "_") .. fileName])
else
syncSaveLoad.read(
fileName,
player,
function(data)
localFileCache[(tostring(GetPlayerId(player)) .. "_") .. fileName] = data
onRead(data)
end,
base64
)
end
end
}
end
return ____exports
end,
["src.core.04_STRUCTURES.Escaper.Escaper_StartCommands"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__StringStartsWith = ____lualib.__TS__StringStartsWith
local __TS__StringSubstring = ____lualib.__TS__StringSubstring
local __TS__ArraySplice = ____lualib.__TS__ArraySplice
local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local IsEscaperInGame = ____Basic_functions.IsEscaperInGame
local jsonDecode = ____Basic_functions.jsonDecode
local jsonEncode = ____Basic_functions.jsonEncode
local ____Constants = require("src.core.01_libraries.Constants")
local MEC_MSC_DATA_FILE = ____Constants.MEC_MSC_DATA_FILE
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____SaveLoad = require("src.Utils.SaveLoad.SaveLoad")
local initSaveLoad = ____SaveLoad.initSaveLoad
____exports.SaveLoad = initSaveLoad()
____exports.EscaperStartCommands = __TS__Class()
local EscaperStartCommands = ____exports.EscaperStartCommands
EscaperStartCommands.name = "EscaperStartCommands"
function EscaperStartCommands.prototype.____constructor(self, escaper)
self.startCommands = {}
self.executed = false
self.loaded = false
self.loadStartCommands = function()
if self.executed then
return
end
self.executed = true
if not IsEscaperInGame(self.escaper:getEscaperId()) then
return
end
____exports.SaveLoad.readFile(
MEC_MSC_DATA_FILE,
self.escaper:getPlayer(),
function(data)
if #data == 0 then
self.loaded = true
return
end
local decodedData = jsonDecode(data)
if type(decodedData) == "table" then
self.startCommands = decodedData
for ____, cmd in ipairs(decodedData) do
ServiceManager.getService("Cmd").ExecuteCommand(self.escaper, "-" .. cmd)
end
end
self.loaded = true
end
)
end
self.getStartCommands = function() return self.startCommands end
self.addStartCommand = function(____, startCommand)
if __TS__StringStartsWith(startCommand, "-") then
startCommand = __TS__StringSubstring(startCommand, 1)
end
arrayPush(self.startCommands, startCommand)
self:saveStartCommands()
end
self.executeStartCommand = function(____, index)
if index < 0 or index >= #self.startCommands then
return false
end
ServiceManager.getService("Cmd").ExecuteCommand(self.escaper, "-" .. self.startCommands[index + 1])
return true
end
self.removeStartCommand = function(____, index)
if index < 0 or index >= #self.startCommands then
return nil
end
local removedElement = __TS__ArraySplice(self.startCommands, index, 1)
self:saveStartCommands()
return removedElement
end
self.removeStartCommands = function()
__TS__ArraySetLength(self.startCommands, 0)
self:saveStartCommands()
end
self.saveStartCommands = function()
____exports.SaveLoad.saveFile(
MEC_MSC_DATA_FILE,
self.escaper:getPlayer(),
jsonEncode(self.startCommands)
)
end
self.isLoaded = function() return self.loaded end
self.escaper = escaper
end
return ____exports
end,
["src.core.04_STRUCTURES.Escaper.Escaper_firstPerson"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ArrayForEach = ____lualib.__TS__ArrayForEach
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____Afk_mode = require("src.core.08_GAME.Afk_mode.Afk_mode")
local AfkMode = ____Afk_mode.AfkMode
local ____LocationUtils = require("src.Utils.LocationUtils")
local GetUnitZEx = ____LocationUtils.GetUnitZEx
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local createTimer = ____mapUtils.createTimer
local forRange = ____mapUtils.forRange
local FIRSTPERSON_SPEED_PER_PERIOD = 0.2
local FIRSTPERSON_ANGLE_PER_PERIOD = 0.3
____exports.EscaperFirstPerson = __TS__Class()
local EscaperFirstPerson = ____exports.EscaperFirstPerson
EscaperFirstPerson.name = "EscaperFirstPerson"
function EscaperFirstPerson.prototype.____constructor(self, escaper)
self.forceCamTimer = nil
self.keyDownState = {UP = false, DOWN = false, LEFT = false, RIGHT = false}
self.isFirstPerson = function() return not not self.forceCamTimer end
self.toggleFirstPerson = function(____, active)
if self.escaper:isAlive() then
self.escaper:setCanClick(not active)
end
if active then
if not self.forceCamTimer then
self.forceCamTimer = createTimer(
0.001,
true,
function()
local player = self.escaper:getPlayer()
local hero = self.escaper:getHero()
if hero then
if self.escaper:isAlive() and self:isFirstPerson() then
if not (self:isKeyDownState("LEFT") and self:isKeyDownState("RIGHT")) and (self:isKeyDownState("LEFT") or self:isKeyDownState("RIGHT")) then
local angle = GetUnitFacing(hero)
if self:isKeyDownState("LEFT") then
angle = angle + FIRSTPERSON_ANGLE_PER_PERIOD
elseif self:isKeyDownState("RIGHT") then
angle = angle - FIRSTPERSON_ANGLE_PER_PERIOD
end
BlzSetUnitFacingEx(hero, angle)
end
if not (self:isKeyDownState("UP") and self:isKeyDownState("DOWN")) and (self:isKeyDownState("UP") or self:isKeyDownState("DOWN")) then
local angle = math.rad(GetUnitFacing(hero))
local fwd = 0
if self:isKeyDownState("UP") then
fwd = fwd + FIRSTPERSON_SPEED_PER_PERIOD * (self.escaper:isSliding() and 1 or 3)
elseif self:isKeyDownState("DOWN") then
fwd = fwd - FIRSTPERSON_SPEED_PER_PERIOD * (self.escaper:isSliding() and 1 or 3)
end
local newX = GetUnitX(hero) + fwd * Cos(angle)
local newY = GetUnitY(hero) + fwd * Sin(angle)
self.escaper:moveHero(newX, newY, false)
end
end
if self.escaper:isAlive() then
local isNormal = not self.escaper:isSliding() or self.escaper:getSlideMovePerPeriod() >= 0
local offsetZ = self.escaper:isLockCamHeight() and GetUnitZEx(hero) or 0
SetCameraTargetControllerNoZForPlayer(
player,
hero,
0,
0,
true
)
SetCameraFieldForPlayer(player, CAMERA_FIELD_ANGLE_OF_ATTACK, 310, 0)
SetCameraFieldForPlayer(player, CAMERA_FIELD_FIELD_OF_VIEW, 1500, 0)
SetCameraFieldForPlayer(
player,
CAMERA_FIELD_ROTATION,
GetUnitFacing(hero),
0
)
SetCameraFieldForPlayer(player, CAMERA_FIELD_ZOFFSET, offsetZ + (isNormal and 100 or -200), 0)
end
end
end
)
end
else
local ____table_forceCamTimer_destroy_result_0 = self.forceCamTimer
if ____table_forceCamTimer_destroy_result_0 ~= nil then
____table_forceCamTimer_destroy_result_0 = ____table_forceCamTimer_destroy_result_0:destroy()
end
self.forceCamTimer = nil
self.escaper:resetCamera()
end
end
self.setKeyDownState = function(____, key, state)
self.keyDownState[key] = state
end
self.isKeyDownState = function(____, key) return self.keyDownState[key] end
self.escaper = escaper
end
____exports.initFirstPerson = function()
local keyStates = {{keyDown = true, blzKeyDown = bj_KEYEVENTTYPE_DEPRESS}, {keyDown = false, blzKeyDown = bj_KEYEVENTTYPE_RELEASE}}
local keys = {{key = "UP", blzKey = bj_KEYEVENTKEY_UP}, {key = "DOWN", blzKey = bj_KEYEVENTKEY_DOWN}, {key = "LEFT", blzKey = bj_KEYEVENTKEY_LEFT}, {key = "RIGHT", blzKey = bj_KEYEVENTKEY_RIGHT}}
__TS__ArrayForEach(
keyStates,
function(____, ____bindingPattern0)
local blzKeyDown
local keyDown
keyDown = ____bindingPattern0.keyDown
blzKeyDown = ____bindingPattern0.blzKeyDown
__TS__ArrayForEach(
keys,
function(____, ____bindingPattern0)
local blzKey
local key
key = ____bindingPattern0.key
blzKey = ____bindingPattern0.blzKey
createEvent({
events = {function(t) return forRange(
NB_ESCAPERS,
function(i) return TriggerRegisterPlayerKeyEventBJ(
t,
Player(i),
blzKeyDown,
blzKey
) end
) end},
actions = {function()
local ____getUdgEscapers_result_get_result_getFirstPersonHandle_result_setKeyDownState_result_2 = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
if ____getUdgEscapers_result_get_result_getFirstPersonHandle_result_setKeyDownState_result_2 ~= nil then
____getUdgEscapers_result_get_result_getFirstPersonHandle_result_setKeyDownState_result_2 = ____getUdgEscapers_result_get_result_getFirstPersonHandle_result_setKeyDownState_result_2:getFirstPersonHandle():setKeyDownState(key, keyDown)
end
AfkMode.resetAfk(GetPlayerId(GetTriggerPlayer()))
end}
})
end
)
end
)
end
return ____exports
end,
["src.core.04_STRUCTURES.Escaper.Escaper"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__Class = ____lualib.__TS__Class
local __TS__New = ____lualib.__TS__New
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local __TS__Delete = ____lualib.__TS__Delete
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____EffectUtils = require("src.Utils.EffectUtils")
local EffectUtils = ____EffectUtils.EffectUtils
local ____LocationUtils = require("src.Utils.LocationUtils")
local GetUnitZEx = ____LocationUtils.GetUnitZEx
local ____Point = require("src.Utils.Point")
local createPoint = ____Point.createPoint
local ____ProgressionUtils = require("src.Utils.ProgressionUtils")
local progressionUtils = ____ProgressionUtils.progressionUtils
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsIssuedOrder = ____Basic_functions.IsIssuedOrder
local StopUnit = ____Basic_functions.StopUnit
local ____Constants = require("src.core.01_libraries.Constants")
local DEFAULT_CAMERA_FIELD = ____Constants.DEFAULT_CAMERA_FIELD
local DUMMY_POWER_CIRCLE = ____Constants.DUMMY_POWER_CIRCLE
local HERO_SECONDARY_TYPE_ID = ____Constants.HERO_SECONDARY_TYPE_ID
local HERO_SLIDE_SPEED = ____Constants.HERO_SLIDE_SPEED
local HERO_TYPE_ID = ____Constants.HERO_TYPE_ID
local HERO_WALK_SPEED = ____Constants.HERO_WALK_SPEED
local INVIS_UNIT_TYPE_ID = ____Constants.INVIS_UNIT_TYPE_ID
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local NB_PLAYERS_MAX_REFORGED = ____Constants.NB_PLAYERS_MAX_REFORGED
local PLAYER_INVIS_UNIT = ____Constants.PLAYER_INVIS_UNIT
local POWER_CIRCLE = ____Constants.POWER_CIRCLE
local SLIDE_PERIOD = ____Constants.SLIDE_PERIOD
local TERRAIN_KILL_EFFECT_BODY_PART = ____Constants.TERRAIN_KILL_EFFECT_BODY_PART
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MakePropertyChange = require("src.core.05_MAKE_STRUCTURES.Make.MakePropertyChange")
local MakePropertyChange = ____MakePropertyChange.MakePropertyChange
local ____MakeCaster = require("src.core.05_MAKE_STRUCTURES.Make_create_casters.MakeCaster")
local MakeCaster = ____MakeCaster.MakeCaster
local ____MakeMeteor = require("src.core.05_MAKE_STRUCTURES.Make_create_meteors.MakeMeteor")
local MakeMeteor = ____MakeMeteor.MakeMeteor
local ____MakeMonsterSpawn = require("src.core.05_MAKE_STRUCTURES.Make_create_monster_spawn.MakeMonsterSpawn")
local MakeMonsterSpawn = ____MakeMonsterSpawn.MakeMonsterSpawn
local ____MakeMonsterMultiplePatrols = require("src.core.05_MAKE_STRUCTURES.Make_create_monsters.MakeMonsterMultiplePatrols")
local MakeMonsterMultiplePatrols = ____MakeMonsterMultiplePatrols.MakeMonsterMultiplePatrols
local ____MakeMonsterSimplePatrol = require("src.core.05_MAKE_STRUCTURES.Make_create_monsters.MakeMonsterSimplePatrol")
local MakeMonsterSimplePatrol = ____MakeMonsterSimplePatrol.MakeMonsterSimplePatrol
local ____MakeMonsterTeleport = require("src.core.05_MAKE_STRUCTURES.Make_create_monsters.MakeMonsterTeleport")
local MakeMonsterTeleport = ____MakeMonsterTeleport.MakeMonsterTeleport
local ____MakeDeleteStaticSlide = require("src.core.05_MAKE_STRUCTURES.Make_create_static_slide.MakeDeleteStaticSlide")
local MakeDeleteStaticSlide = ____MakeDeleteStaticSlide.MakeDeleteStaticSlide
local ____MakeStaticSlide = require("src.core.05_MAKE_STRUCTURES.Make_create_static_slide.MakeStaticSlide")
local MakeStaticSlide = ____MakeStaticSlide.MakeStaticSlide
local ____MakeDeleteCasters = require("src.core.05_MAKE_STRUCTURES.Make_delete_casters.MakeDeleteCasters")
local MakeDeleteCasters = ____MakeDeleteCasters.MakeDeleteCasters
local ____MakeDeleteMeteors = require("src.core.05_MAKE_STRUCTURES.Make_delete_meteors.MakeDeleteMeteors")
local MakeDeleteMeteors = ____MakeDeleteMeteors.MakeDeleteMeteors
local ____MakeDeleteMonsters = require("src.core.05_MAKE_STRUCTURES.Make_delete_monsters.MakeDeleteMonsters")
local MakeDeleteMonsters = ____MakeDeleteMonsters.MakeDeleteMonsters
local ____MakeCircleMob = require("src.core.05_MAKE_STRUCTURES.Make_monster_properties.MakeCircleMob")
local MakeCircleMob = ____MakeCircleMob.MakeCircleMob
local ____MakeClearMob = require("src.core.05_MAKE_STRUCTURES.Make_monster_properties.MakeClearMob")
local MakeClearMob = ____MakeClearMob.MakeClearMob
local ____MakeDeleteCircleMob = require("src.core.05_MAKE_STRUCTURES.Make_monster_properties.MakeDeleteCircleMob")
local MakeDeleteCircleMob = ____MakeDeleteCircleMob.MakeDeleteCircleMob
local ____MakeDeleteClearMob = require("src.core.05_MAKE_STRUCTURES.Make_monster_properties.MakeDeleteClearMob")
local MakeDeleteClearMob = ____MakeDeleteClearMob.MakeDeleteClearMob
local ____MakeDeletePortalMob = require("src.core.05_MAKE_STRUCTURES.Make_monster_properties.MakeDeletePortalMob")
local MakeDeletePortalMob = ____MakeDeletePortalMob.MakeDeletePortalMob
local ____MakePortalMob = require("src.core.05_MAKE_STRUCTURES.Make_monster_properties.MakePortalMob")
local MakePortalMob = ____MakePortalMob.MakePortalMob
local ____MakeGetUnitTeleportPeriod = require("src.core.05_MAKE_STRUCTURES.Make_set_unit_properties.MakeGetUnitTeleportPeriod")
local MakeGetUnitTeleportPeriod = ____MakeGetUnitTeleportPeriod.MakeGetUnitTeleportPeriod
local ____MakeSetUnitMonsterType = require("src.core.05_MAKE_STRUCTURES.Make_set_unit_properties.MakeSetUnitMonsterType")
local MakeSetUnitMonsterType = ____MakeSetUnitMonsterType.MakeSetUnitMonsterType
local ____MakeSetUnitTeleportPeriod = require("src.core.05_MAKE_STRUCTURES.Make_set_unit_properties.MakeSetUnitTeleportPeriod")
local MakeSetUnitTeleportPeriod = ____MakeSetUnitTeleportPeriod.MakeSetUnitTeleportPeriod
local ____Afk_mode = require("src.core.08_GAME.Afk_mode.Afk_mode")
local AfkMode = ____Afk_mode.AfkMode
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgLevels = ____globals.getUdgLevels
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local ____EncodingBase64 = require("src.Utils.SaveLoad.TreeLib.EncodingBase64")
local EncodingBase64 = ____EncodingBase64.EncodingBase64
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local createTimer = ____mapUtils.createTimer
local ____MakeLastActions = require("src.core.05_MAKE_STRUCTURES.MakeLastActions.MakeLastActions")
local MakeLastActions = ____MakeLastActions.MakeLastActions
local ____MakeMonsterNoMove = require("src.core.05_MAKE_STRUCTURES.Make_create_monsters.MakeMonsterNoMove")
local MakeMonsterNoMove = ____MakeMonsterNoMove.MakeMonsterNoMove
local ____MakeDoNothing = require("src.core.05_MAKE_STRUCTURES.Make_do_nothing.MakeDoNothing")
local MakeDoNothing = ____MakeDoNothing.MakeDoNothing
local ____MakeExchangeTerrains = require("src.core.05_MAKE_STRUCTURES.Make_exchange_terrains.MakeExchangeTerrains")
local MakeExchangeTerrains = ____MakeExchangeTerrains.MakeExchangeTerrains
local ____MakeGetTerrainType = require("src.core.05_MAKE_STRUCTURES.Make_get_info.MakeGetTerrainType")
local MakeGetTerrainType = ____MakeGetTerrainType.MakeGetTerrainType
local ____MakeEnd = require("src.core.05_MAKE_STRUCTURES.Make_start_end_visibilityModifier.MakeEnd")
local MakeEnd = ____MakeEnd.MakeEnd
local ____MakeStart = require("src.core.05_MAKE_STRUCTURES.Make_start_end_visibilityModifier.MakeStart")
local MakeStart = ____MakeStart.MakeStart
local ____MakeVisibilityModifier = require("src.core.05_MAKE_STRUCTURES.Make_start_end_visibilityModifier.MakeVisibilityModifier")
local MakeVisibilityModifier = ____MakeVisibilityModifier.MakeVisibilityModifier
local ____MakeTerrainCopyPaste = require("src.core.05_MAKE_STRUCTURES.Make_terrain.MakeTerrainCopyPaste")
local MakeTerrainCopyPaste = ____MakeTerrainCopyPaste.MakeTerrainCopyPaste
local ____MakeTerrainCreate = require("src.core.05_MAKE_STRUCTURES.Make_terrain.MakeTerrainCreate")
local MakeTerrainCreate = ____MakeTerrainCreate.MakeTerrainCreate
local ____MakeTerrainCreateBrush = require("src.core.05_MAKE_STRUCTURES.Make_terrain.MakeTerrainCreateBrush")
local MakeTerrainCreateBrush = ____MakeTerrainCreateBrush.MakeTerrainCreateBrush
local ____MakeTerrainHorizontalSymmetry = require("src.core.05_MAKE_STRUCTURES.Make_terrain.MakeTerrainHorizontalSymmetry")
local MakeTerrainHorizontalSymmetry = ____MakeTerrainHorizontalSymmetry.MakeTerrainHorizontalSymmetry
local ____MakeTerrainVerticalSymmetry = require("src.core.05_MAKE_STRUCTURES.Make_terrain.MakeTerrainVerticalSymmetry")
local MakeTerrainVerticalSymmetry = ____MakeTerrainVerticalSymmetry.MakeTerrainVerticalSymmetry
local ____MakeTerrainHeight = require("src.core.05_MAKE_STRUCTURES.Make_terrain_height.MakeTerrainHeight")
local MakeTerrainHeight = ____MakeTerrainHeight.MakeTerrainHeight
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local BlzColor2Id = ____Command_functions.BlzColor2Id
local removeHash = ____Command_functions.removeHash
local ____CheckTerrain = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.CheckTerrain")
local CheckTerrainTrigger = ____CheckTerrain.CheckTerrainTrigger
local ____Slide = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.Slide")
local SlideTrigger = ____Slide.SlideTrigger
local ____SlidingMax = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.SlidingMax")
local HERO_ROTATION_SPEED = ____SlidingMax.HERO_ROTATION_SPEED
local HERO_ROTATION_TIME_FOR_MAXIMUM_SPEED = ____SlidingMax.HERO_ROTATION_TIME_FOR_MAXIMUM_SPEED
local ____A_hero_dies_check_if_all_dead_and_sounds = require("src.core.08_GAME.Death.A_hero_dies_check_if_all_dead_and_sounds")
local reviveTrigManager = ____A_hero_dies_check_if_all_dead_and_sounds.reviveTrigManager
local ____InvisUnit_is_getting_damage = require("src.core.08_GAME.Death.InvisUnit_is_getting_damage")
local Trig_InvisUnit_is_getting_damage = ____InvisUnit_is_getting_damage.Trig_InvisUnit_is_getting_damage
local ____Heroes = require("src.core.08_GAME.Init_game.Heroes")
local HERO_START_ANGLE = ____Heroes.HERO_START_ANGLE
local ____Message_heroDies = require("src.core.08_GAME.Init_game.Message_heroDies")
local MessageHeroDies = ____Message_heroDies.MessageHeroDies
local ____coop_init_sounds = require("src.core.08_GAME.Mode_coop.coop_init_sounds")
local RunCoopSoundOnHero = ____coop_init_sounds.RunCoopSoundOnHero
local ____EnableDisableInterface = require("src.core.DisablingInterface.EnableDisableInterface")
local DisableInterface = ____EnableDisableInterface.DisableInterface
local EnableInterface = ____EnableDisableInterface.EnableInterface
local ____Follow_mouse = require("src.core.Follow_mouse.Follow_mouse")
local FollowMouse = ____Follow_mouse.FollowMouse
local ____KeyboardShortcutArray = require("src.core.Keyboard_shortcuts.KeyboardShortcutArray")
local KeyboardShortcutArray = ____KeyboardShortcutArray.KeyboardShortcutArray
local ____Level = require("src.core.04_STRUCTURES.Level.Level")
local Level = ____Level.Level
local ____Level_functions = require("src.core.04_STRUCTURES.Level.Level_functions")
local IsLevelBeingMade = ____Level_functions.IsLevelBeingMade
local ____StartAndEnd = require("src.core.04_STRUCTURES.Level.StartAndEnd")
local DEPART_PAR_DEFAUT = ____StartAndEnd.DEPART_PAR_DEFAUT
local ____Meteor = require("src.core.04_STRUCTURES.Meteor.Meteor")
local METEOR_CHEAT = ____Meteor.METEOR_CHEAT
local METEOR_NORMAL = ____Meteor.METEOR_NORMAL
local udg_meteors = ____Meteor.udg_meteors
local ____TerrainTypeSlide = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeSlide")
local TerrainTypeSlide = ____TerrainTypeSlide.TerrainTypeSlide
local ____TerrainTypeWalk = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeWalk")
local TerrainTypeWalk = ____TerrainTypeWalk.TerrainTypeWalk
local ____EscaperEffectArray = require("src.core.04_STRUCTURES.Escaper.EscaperEffectArray")
local EscaperEffectArray = ____EscaperEffectArray.EscaperEffectArray
local ____Escaper_StartCommands = require("src.core.04_STRUCTURES.Escaper.Escaper_StartCommands")
local EscaperStartCommands = ____Escaper_StartCommands.EscaperStartCommands
local ____Escaper_firstPerson = require("src.core.04_STRUCTURES.Escaper.Escaper_firstPerson")
local EscaperFirstPerson = ____Escaper_firstPerson.EscaperFirstPerson
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local ColorInfo = ____Escaper_functions.ColorInfo
local GetMirrorEscaper = ____Escaper_functions.GetMirrorEscaper
local SHOW_REVIVE_EFFECTS = false
local VIPs64 = {"V29ybGRFZGl0", "TWF4aW1heG91IzI4NzI=", "U3RhbiMyMjM5OQ==", "c3Blcm1rYWdlbiMyMzQ3"}
local VIPs = __TS__ArrayMap(
VIPs64,
function(____, name64) return EncodingBase64:Decode(name64) end
)
local METEOR_EFFECT = "Abilities\\Weapons\\DemonHunterMissile\\DemonHunterMissile.mdl"
____exports.SetMeteorEffect = function(newEffect)
METEOR_EFFECT = newEffect
end
____exports.Escaper = __TS__Class()
local Escaper = ____exports.Escaper
Escaper.name = "Escaper"
function Escaper.prototype.____constructor(self, escaperId)
self.remainingDegreesToTurn = 0
self.slideMirror = false
self.slidingMode = "max"
self.rotationTimeForMaximumSpeed = HERO_ROTATION_TIME_FOR_MAXIMUM_SPEED
self.tClickWhereYouAre = nil
self.lastZ = 0
self.oldDiffZ = 0
self.speedZ = 0
self.selectedPlayerId = -1
self.roundToGrid = nil
self.portalCooldown = false
self.portalCooldownTimer = nil
self.firstPersonHandle = __TS__New(EscaperFirstPerson, self)
self.startCommandsHandle = __TS__New(EscaperStartCommands, self)
self.lockCamTarget = nil
self.lockCamRotation = nil
self.lockCamHeight = nil
self.hideLeaderboard = false
self.gumBrushSize = 1
self.brushSize = 1
self.ignoreDeathMessages = false
self.textTag = nil
self.textTagTimer = nil
self.panCameraOnRevive = "coop"
self.panCameraOnPortal = true
self.showNames = false
self.staticSliding = false
self.isNoobedit = false
self.isSpeedEdit = false
self.alliedState = {}
self.moveCamDistanceWidth = 2048
self.moveCamDistanceHeight = 1536
self.mouseX = 0
self.mouseY = 0
self.othersTransparencyState = {}
self.setOthersTransparency = function(____, escaper, ot)
self.othersTransparencyState[escaper:getId()] = ot
escaper:updateUnitVertexColor()
end
self.uiMode = "on"
self.keyboardShortcutsArray = __TS__New(KeyboardShortcutArray, self)
self.oldAngle = 0
self.totalRotation = 0
self.startTurningTime = 0
self.stats = {}
self.getColorId = function()
return BlzColor2Id(GetPlayerColor(self.p)) or -1
end
self.getEscaperId = function()
return self.escaperId
end
self.resetItem = function()
if self.hero and UnitHasItemOfTypeBJ(self.hero, METEOR_NORMAL) then
SetItemDroppable(
UnitItemInSlot(self.hero, 0),
true
)
local ____udg_meteors_GetItemUserData_result_replace_result_0 = udg_meteors[GetItemUserData(UnitItemInSlot(self.hero, 0))]
if ____udg_meteors_GetItemUserData_result_replace_result_0 ~= nil then
____udg_meteors_GetItemUserData_result_replace_result_0 = ____udg_meteors_GetItemUserData_result_replace_result_0:replace()
end
self:removeEffectMeteor()
return true
end
return false
end
self.addEffectMeteor = function()
if not self.meteorEffect and self.hero then
self.meteorEffect = EffectUtils.addSpecialEffectTarget(METEOR_EFFECT, self.hero, "hand right")
end
end
self.removeEffectMeteor = function()
if self.meteorEffect then
EffectUtils.destroyEffect(self.meteorEffect)
__TS__Delete(self, "meteorEffect")
end
end
self.selectHero = function()
local ____ = self.hero and SelectUnitAddForPlayer(
self.hero,
self.controler:getPlayer()
)
self:setIsHeroSelectedForPlayer(
self.controler:getPlayer(),
true
)
end
self.createHeroAtStart = function()
local x
local y
local ____getUdgLevels_result_getCurrentLevel_result_getStart_result_2 = getUdgLevels():getCurrentLevel(self)
if ____getUdgLevels_result_getCurrentLevel_result_getStart_result_2 ~= nil then
____getUdgLevels_result_getCurrentLevel_result_getStart_result_2 = ____getUdgLevels_result_getCurrentLevel_result_getStart_result_2:getStart()
end
local start = ____getUdgLevels_result_getCurrentLevel_result_getStart_result_2
local angle
if not start then
start = DEPART_PAR_DEFAUT
angle = HERO_START_ANGLE
else
angle = GetRandomDirectionDeg()
end
x = start:getRandomX()
y = start:getRandomY()
return self:createHero(x, y, angle)
end
self.removeHero = function()
if not self.hero then
return
end
self:resetItem()
self:kill()
RemoveUnit(self.hero)
__TS__Delete(self, "hero")
if self.invisUnit then
RemoveUnit(self.invisUnit)
__TS__Delete(self, "invisUnit")
end
__TS__Delete(self, "lastTerrainType")
local ____table_make_destroy_result_4 = self.make
if ____table_make_destroy_result_4 ~= nil then
____table_make_destroy_result_4 = ____table_make_destroy_result_4:destroy()
end
__TS__Delete(self, "make")
self.effects:hideEffects()
DisableTrigger(self.checkTerrain)
local ____ = self.slide and self.slide:pause():destroy()
ShowUnit(self.powerCircle, false)
ShowUnit(self.dummyPowerCircle, false)
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_removeHero_result_6 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_removeHero_result_6 ~= nil then
____GetMirrorEscaper_result_removeHero_result_6 = ____GetMirrorEscaper_result_removeHero_result_6:removeHero()
end
end
local ____ = self.textTag and DestroyTextTag(self.textTag)
self.textTag = nil
local ____table_textTagTimer_destroy_result_8 = self.textTagTimer
if ____table_textTagTimer_destroy_result_8 ~= nil then
____table_textTagTimer_destroy_result_8 = ____table_textTagTimer_destroy_result_8:destroy()
end
self.textTagTimer = nil
end
self.destroy = function()
self:removeHero()
if self.terrainKillEffect then
EffectUtils.destroyEffect(self.terrainKillEffect)
__TS__Delete(self, "terrainKillEffect")
end
self.effects:destroy()
local ____ = self.slide and self.slide:destroy()
DestroyTrigger(self.checkTerrain)
local ____table_discoTrigger_destroy_result_10 = self.discoTrigger
if ____table_discoTrigger_destroy_result_10 ~= nil then
____table_discoTrigger_destroy_result_10 = ____table_discoTrigger_destroy_result_10:destroy()
end
__TS__Delete(self, "discoTrigger")
getUdgEscapers():removeEscaper(self.escaperId)
RemoveUnit(self.powerCircle)
RemoveUnit(self.dummyPowerCircle)
local ____table_portalCooldownTimer_destroy_result_12 = self.portalCooldownTimer
if ____table_portalCooldownTimer_destroy_result_12 ~= nil then
____table_portalCooldownTimer_destroy_result_12 = ____table_portalCooldownTimer_destroy_result_12:destroy()
end
self.portalCooldownTimer = nil
DestroyTrigger(self.canClickTrigger)
local ____table_lastPos___destroy_result_14 = self.lastPos
if ____table_lastPos___destroy_result_14 ~= nil then
____table_lastPos___destroy_result_14 = ____table_lastPos___destroy_result_14:__destroy()
end
end
self.getId = function()
return self.escaperId
end
self.getSlideLastAngleOrder = function()
return self.slideLastAngleOrder
end
self.isSliding = function()
return not not self.slide
end
self.doesCheckTerrain = function()
return IsTriggerEnabled(self.checkTerrain)
end
self.setLastPos = function()
if not self.hero then
return
end
local lastX = GetUnitX(self.hero)
local lastY = GetUnitY(self.hero)
if not self.lastPos or self.lastPos.x ~= lastX and self.lastPos.y ~= lastY then
local ____table_lastPos___destroy_result_16 = self.lastPos
if ____table_lastPos___destroy_result_16 ~= nil then
____table_lastPos___destroy_result_16 = ____table_lastPos___destroy_result_16:__destroy()
end
self.lastPos = createPoint(lastX, lastY)
end
end
self.getHero = function()
return self.hero
end
self.isAlive = function()
return self.hero and IsUnitAliveBJ(self.hero)
end
self.isPaused = function()
return self.hero and IsUnitPaused(self.hero)
end
self.onEscaperDeath = function()
self:resetItem()
__TS__Delete(self, "lastTerrainType")
local ____ = self.invisUnit and ShowUnit(self.invisUnit, false)
self:enableCheckTerrain(false)
AfkMode.StopAfk(self.escaperId)
MessageHeroDies.DisplayDeathMessagePlayer(self.p)
self.isHeroSelectedB = false
if self.firstPersonHandle:isFirstPerson() then
self:resetCamera()
end
if not self:isEscaperSecondary() then
ServiceManager.getService("Multiboard").increasePlayerScore(
GetPlayerId(self:getPlayer()),
"deaths"
)
end
end
self.kill = function()
if self:isAlive() then
if self.hero then
KillUnit(self.hero)
end
return true
end
return false
end
self.SpecialIllidan = function()
local ____ = self.hero and SetUnitAnimation(self.hero, "Morph Alternate")
end
self.moveCameraToHeroIfNecessary = function()
if not self.hero then
return
end
if self:isLockCamTarget() then
return
end
if self.panCameraOnRevive == "none" then
return
end
local xHero = GetUnitX(self.hero)
local yHero = GetUnitY(self.hero)
local minX = GetCameraTargetPositionX() - self.moveCamDistanceWidth / 2
local minY = GetCameraTargetPositionY() - self.moveCamDistanceHeight / 2
local maxX = GetCameraTargetPositionX() + self.moveCamDistanceWidth / 2
local maxY = GetCameraTargetPositionY() + self.moveCamDistanceHeight / 2
if xHero < minX or xHero > maxX or yHero < minY or yHero > maxY then
SetCameraPositionForPlayer(self.p, xHero, yHero)
end
end
self.reviveAtStart = function()
local x = getUdgLevels():getCurrentLevel(self):getStartRandomX()
local y = getUdgLevels():getCurrentLevel(self):getStartRandomY()
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_reviveAtStart_result_18 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_reviveAtStart_result_18 ~= nil then
____GetMirrorEscaper_result_reviveAtStart_result_18 = ____GetMirrorEscaper_result_reviveAtStart_result_18:reviveAtStart()
end
end
local ____getUdgLevels_result_getCurrentLevel_result_getStart_result_getFacing_result_20 = getUdgLevels():getCurrentLevel(self):getStart()
if ____getUdgLevels_result_getCurrentLevel_result_getStart_result_getFacing_result_20 ~= nil then
____getUdgLevels_result_getCurrentLevel_result_getStart_result_getFacing_result_20 = ____getUdgLevels_result_getCurrentLevel_result_getStart_result_getFacing_result_20:getFacing()
end
local startFacing = ____getUdgLevels_result_getCurrentLevel_result_getStart_result_getFacing_result_20
local ____ = startFacing and self:turnInstantly(startFacing)
progressionUtils.resetPlayerProgressionState(self)
return self:revive(x, y)
end
self.reverse = function()
if not self.hero then
return
end
local angle = GetUnitFacing(self.hero) + 180
self:turnInstantly(angle)
if self.slideLastAngleOrder ~= -1 then
self.slideLastAngleOrder = self.slideLastAngleOrder + 180
SetUnitFacing(self.hero, self.slideLastAngleOrder)
end
end
self.resetOwner = function()
self:giveHeroControl(self)
end
self.setSelectedPlayerId = function(____, playerId)
self.selectedPlayerId = playerId
end
self.getSelectedPlayerId = function() return self.selectedPlayerId end
self.hideEffects = function()
self.effects:hideEffects()
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_hideEffects_result_22 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_hideEffects_result_22 ~= nil then
____GetMirrorEscaper_result_hideEffects_result_22 = ____GetMirrorEscaper_result_hideEffects_result_22:hideEffects()
end
end
end
self.showEffects = function()
local ____ = self.hero and self.effects:showEffects(self.hero)
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_showEffects_result_24 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_showEffects_result_24 ~= nil then
____GetMirrorEscaper_result_showEffects_result_24 = ____GetMirrorEscaper_result_showEffects_result_24:showEffects()
end
end
end
self.destroyTerrainKillEffect = function()
EffectUtils.destroyEffect(self.terrainKillEffect)
end
self.destroyPortalEffect = function()
EffectUtils.destroyEffect(self.portalEffect)
end
self.getLastTerrainType = function()
return self.lastTerrainType
end
self.getSlideMovePerPeriod = function()
return self.slideMovePerPeriod
end
self.getMaxSlideTurnPerPeriod = function()
return self.maxSlideTurnPerPeriod
end
self.setSlideCurrentTurnPerPeriod = function(____, n)
self.slideCurrentTurnPerPeriod = n
end
self.getSlideCurrentTurnPerPeriod = function()
return self.slideCurrentTurnPerPeriod
end
self.getSlideSpeed = function()
return self.slideSpeed
end
self.getRotationSpeed = function()
return self.rotationSpeed
end
self.getWalkSpeed = function()
return self.walkSpeed
end
self.isAbsoluteSlideSpeed = function()
return self.slideSpeedAbsolute
end
self.stopAbsoluteSlideSpeed = function(____, isCommand)
if isCommand == nil then
isCommand = false
end
if self.slideSpeedAbsolute then
self.slideSpeedAbsolute = false
if self.hero and self:isAlive() then
local currentTerrainType = getUdgTerrainTypes():getTerrainType(
GetUnitX(self.hero),
GetUnitY(self.hero)
)
if __TS__InstanceOf(currentTerrainType, TerrainTypeSlide) then
self:setSlideSpeed((self:getSlideMirror() and -1 or 1) * currentTerrainType:getSlideSpeed())
end
end
if isCommand then
self.slideSpeedCmd = nil
else
if self.slideSpeedCmd ~= nil then
self.slideSpeedAbsolute = true
self:setSlideSpeed(self.slideSpeedCmd)
end
end
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_stopAbsoluteSlideSpeed_result_26 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_stopAbsoluteSlideSpeed_result_26 ~= nil then
____GetMirrorEscaper_result_stopAbsoluteSlideSpeed_result_26 = ____GetMirrorEscaper_result_stopAbsoluteSlideSpeed_result_26:stopAbsoluteSlideSpeed(isCommand)
end
end
end
end
self.isAbsoluteRotationSpeed = function()
return self.rotationSpeedAbsolute
end
self.stopAbsoluteRotationSpeed = function()
if self.rotationSpeedAbsolute then
self.rotationSpeedAbsolute = false
if self.hero and self:isAlive() then
local currentTerrainType = getUdgTerrainTypes():getTerrainType(
GetUnitX(self.hero),
GetUnitY(self.hero)
)
if __TS__InstanceOf(currentTerrainType, TerrainTypeSlide) then
self:setRotationSpeed(currentTerrainType:getRotationSpeed())
end
end
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_stopAbsoluteRotationSpeed_result_28 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_stopAbsoluteRotationSpeed_result_28 ~= nil then
____GetMirrorEscaper_result_stopAbsoluteRotationSpeed_result_28 = ____GetMirrorEscaper_result_stopAbsoluteRotationSpeed_result_28:stopAbsoluteRotationSpeed()
end
end
end
end
self.isAbsoluteWalkSpeed = function()
return self.walkSpeedAbsolute
end
self.stopAbsoluteWalkSpeed = function()
if self.walkSpeedAbsolute then
self.walkSpeedAbsolute = false
if self.hero and self:isAlive() then
local currentTerrainType = getUdgTerrainTypes():getTerrainType(
GetUnitX(self.hero),
GetUnitY(self.hero)
)
if __TS__InstanceOf(currentTerrainType, TerrainTypeWalk) then
self:setWalkSpeed(currentTerrainType:getWalkSpeed())
end
end
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_stopAbsoluteWalkSpeed_result_30 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_stopAbsoluteWalkSpeed_result_30 ~= nil then
____GetMirrorEscaper_result_stopAbsoluteWalkSpeed_result_30 = ____GetMirrorEscaper_result_stopAbsoluteWalkSpeed_result_30:stopAbsoluteWalkSpeed()
end
end
end
end
self.isAbsoluteInstantTurn = function()
return self.instantTurnAbsolute
end
self.isGodModeOn = function()
return self.godMode
end
self.doesGodModeKills = function()
return self.godModeKills
end
self.getBaseColor = function()
return self.baseColorId
end
self.getVcRed = function()
return self.vcRed
end
self.getVcGreen = function()
return self.vcGreen
end
self.getVcBlue = function()
return self.vcBlue
end
self.getVcTransparency = function()
return self.vcTransparency
end
self.refreshVertexColor = function()
local ____ = self.hero and self:updateUnitVertexColor()
if not self:isEscaperSecondary() then
ColorInfo(self, self.p)
local ____GetMirrorEscaper_result_refreshVertexColor_result_32 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_refreshVertexColor_result_32 ~= nil then
____GetMirrorEscaper_result_refreshVertexColor_result_32 = ____GetMirrorEscaper_result_refreshVertexColor_result_32:refreshVertexColor()
end
end
end
self.canCheat = function()
return self.canCheatB
end
self.isMaximaxou = function()
return self.isMaximaxouB
end
self.isTrueMaximaxou = function()
return self.isTrueMaximaxouB
end
self.getPlayer = function()
return self.p
end
self.getControler = function()
return self.controler
end
self.getCameraField = function()
return self.cameraField
end
self.resetCamera = function()
ResetToGameCameraForPlayer(self.p, 0)
SetCameraFieldForPlayer(self.p, CAMERA_FIELD_TARGET_DISTANCE, self.cameraField, 0)
if self.lockCamTarget then
local hero = self.lockCamTarget:getHero()
if hero then
SetCameraTargetControllerNoZForPlayer(
self:getPlayer(),
hero,
0,
0,
false
)
end
end
end
self.hasAutorevive = function()
return self.hasAutoreviveB
end
self.getMake = function()
return self.make
end
self.destroyMakeIfForSpecificLevel = function()
if self.make and self.make.forSpecificLevel then
self:destroyMake()
end
end
self.isMakingCurrentLevel = function()
return not not self.makingLevel
end
self.destroyMake = function()
if not self.make then
return false
end
local ____ = self.make and self.make:destroy()
__TS__Delete(self, "make")
if not self:isEscaperSecondary() then
createTimer(
0,
false,
function()
local ____GetMirrorEscaper_result_hero_34 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_hero_34 ~= nil then
____GetMirrorEscaper_result_hero_34 = ____GetMirrorEscaper_result_hero_34.hero
end
local hero = ____GetMirrorEscaper_result_hero_34
if hero then
StopUnit(hero)
end
end
)
end
return true
end
self.makeDoNothing = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeDoNothing, self.hero)
end
end
self.makeMmpOrMtNext = function()
if not self.make then
return false
end
if __TS__InstanceOf(self.make, MakeMonsterMultiplePatrols) or __TS__InstanceOf(self.make, MakeMonsterTeleport) then
self.make:nextMonster()
else
return false
end
return true
end
self.makeMonsterTeleportWait = function()
if not self.make or not __TS__InstanceOf(self.make, MakeMonsterTeleport) then
return false
end
return self.make:addWaitPeriod()
end
self.makeMonsterTeleportHide = function()
if not self.make or not __TS__InstanceOf(self.make, MakeMonsterTeleport) then
return false
end
return self.make:addHidePeriod()
end
self.makeGetUnitTeleportPeriod = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeGetUnitTeleportPeriod, self.hero)
end
end
self.makeCreateMeteor = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeMeteor, self.hero)
end
end
self.makeDeleteClearMobs = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeDeleteClearMob, self.hero)
end
end
self.makeDeletePortalMobs = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeDeletePortalMob, self.hero)
end
end
self.makeDeleteCircleMob = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeDeleteCircleMob, self.hero)
end
end
self.makeDeleteStaticSlide = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeDeleteStaticSlide, self.hero)
end
end
self.makeTerrainCopyPaste = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeTerrainCopyPaste, self.hero)
end
end
self.makeTerrainVerticalSymmetry = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeTerrainVerticalSymmetry, self.hero)
end
end
self.makeTerrainHorizontalSymmetry = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeTerrainHorizontalSymmetry, self.hero)
end
end
self.makeGetTerrainType = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeGetTerrainType, self.hero)
end
end
self.makeExchangeTerrains = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeExchangeTerrains, self.hero)
end
end
self.makeCreateEnd = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeEnd, self.hero)
end
end
self.makeCreateVisibilityModifier = function()
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeVisibilityModifier, self.hero)
end
end
self.cancelLastAction = function()
if self.make then
if self.make:cancelLastAction() then
return true
end
end
return self.makeLastActions:cancelLastAction()
end
self.redoLastAction = function()
if self.makeLastActions:redoLastAction() then
return true
end
if self.make then
return self.make:redoLastAction()
end
return false
end
self.destroyAllSavedActions = function()
self.makeLastActions:destroyAllActions()
end
self.destroyCancelledActions = function()
self.makeLastActions:destroyCancelledActions()
end
self.getLastZ = function()
return self.lastZ
end
self.getOldDiffZ = function()
return self.oldDiffZ
end
self.getSpeedZ = function()
return self.speedZ
end
self.coopReviveHero = function()
local mirrorEscaper = GetMirrorEscaper(self)
local ____mirrorEscaper_getHero_result_36 = mirrorEscaper
if ____mirrorEscaper_getHero_result_36 ~= nil then
____mirrorEscaper_getHero_result_36 = ____mirrorEscaper_getHero_result_36:getHero()
end
local mirrorHero = ____mirrorEscaper_getHero_result_36
if self.hero then
local xHero = GetUnitX(self.hero)
local yHero = GetUnitY(self.hero)
self:revive(xHero, yHero, "coop")
RunCoopSoundOnHero(self.hero)
SetUnitAnimation(self.hero, "channel")
self:absoluteSlideSpeed(0)
self:setCoopInvul(true)
end
if mirrorHero and mirrorEscaper then
mirrorEscaper:revive(
GetUnitX(mirrorHero),
GetUnitY(mirrorHero),
"coop"
)
RunCoopSoundOnHero(mirrorHero)
SetUnitAnimation(mirrorHero, "channel")
mirrorEscaper:absoluteSlideSpeed(0)
mirrorEscaper:setCoopInvul(true)
end
TriggerSleepAction(1.4)
self:stopAbsoluteSlideSpeed()
local ____ = self.hero and SetUnitAnimation(self.hero, "stand")
local ____mirrorEscaper_stopAbsoluteSlideSpeed_result_38 = mirrorEscaper
if ____mirrorEscaper_stopAbsoluteSlideSpeed_result_38 ~= nil then
____mirrorEscaper_stopAbsoluteSlideSpeed_result_38 = ____mirrorEscaper_stopAbsoluteSlideSpeed_result_38:stopAbsoluteSlideSpeed()
end
local ____ = mirrorHero and SetUnitAnimation(mirrorHero, "stand")
TriggerSleepAction(0.6)
self:setCoopInvul(false)
local ____mirrorEscaper_setCoopInvul_result_40 = mirrorEscaper
if ____mirrorEscaper_setCoopInvul_result_40 ~= nil then
____mirrorEscaper_setCoopInvul_result_40 = ____mirrorEscaper_setCoopInvul_result_40:setCoopInvul(false)
end
end
self.isCoopInvul = function()
return self.coopInvul
end
self.enableTrigCoopRevive = function()
if self.hero then
ShowUnit(self.powerCircle, true)
SetUnitPathing(self.powerCircle, false)
SetUnitPosition(
self.powerCircle,
GetUnitX(self.hero),
GetUnitY(self.hero)
)
ShowUnit(self.dummyPowerCircle, true)
SetUnitPathing(self.dummyPowerCircle, false)
SetUnitPosition(
self.dummyPowerCircle,
GetUnitX(self.hero),
GetUnitY(self.hero)
)
end
end
self.refreshCerclePosition = function()
if not IsUnitHidden(self.powerCircle) and self.hero then
SetUnitPosition(
self.powerCircle,
GetUnitX(self.hero),
GetUnitY(self.hero)
)
SetUnitPosition(
self.dummyPowerCircle,
GetUnitX(self.hero),
GetUnitY(self.hero)
)
end
end
self.isEscaperSecondary = function()
return self.escaperId >= NB_PLAYERS_MAX
end
self.isPortalCooldown = function() return self.portalCooldown end
self.enablePortalCooldown = function()
self.portalCooldown = true
end
self.disablePortalCooldown = function(____, timeout)
local ____table_portalCooldownTimer_destroy_result_42 = self.portalCooldownTimer
if ____table_portalCooldownTimer_destroy_result_42 ~= nil then
____table_portalCooldownTimer_destroy_result_42 = ____table_portalCooldownTimer_destroy_result_42:destroy()
end
self.portalCooldownTimer = createTimer(
timeout,
false,
function()
self.portalCooldown = false
return false
end
)
end
self.getFirstPersonHandle = function() return self.firstPersonHandle end
self.getStartCommandsHandle = function() return self.startCommandsHandle end
self.isLockCamTarget = function() return not not self.lockCamTarget end
self.setLockCamTarget = function(____, lockCamTarget)
self.lockCamTarget = lockCamTarget
end
self.toggleLockCamRotation = function(____, lockCamRotation)
local ____table_lockCamRotation_destroy_result_44 = self.lockCamRotation
if ____table_lockCamRotation_destroy_result_44 ~= nil then
____table_lockCamRotation_destroy_result_44 = ____table_lockCamRotation_destroy_result_44:destroy()
end
self.lockCamRotation = nil
if lockCamRotation then
self.lockCamRotation = createTimer(
0.001,
true,
function()
local ____ = self.hero and SetCameraFieldForPlayer(
self:getPlayer(),
CAMERA_FIELD_ROTATION,
GetUnitFacing(self.hero),
0
)
end
)
end
end
self.toggleLockCamHeight = function(____, lockCamHeight)
local ____table_lockCamHeight_destroy_result_46 = self.lockCamHeight
if ____table_lockCamHeight_destroy_result_46 ~= nil then
____table_lockCamHeight_destroy_result_46 = ____table_lockCamHeight_destroy_result_46:destroy()
end
self.lockCamHeight = nil
if lockCamHeight then
self.lockCamHeight = createTimer(
0.001,
true,
function()
if self.hero and not self.firstPersonHandle:isFirstPerson() then
SetCameraFieldForPlayer(
self:getPlayer(),
CAMERA_FIELD_ZOFFSET,
GetUnitZEx(self.hero),
0
)
end
end
)
end
end
self.isLockCamHeight = function() return not not self.lockCamHeight end
self.setGumTerrain = function(____, terrainType)
self.gumTerrain = terrainType
end
self.getGumTerrain = function()
return self.gumTerrain
end
self.setBrushSize = function(____, size)
self.brushSize = size
end
self.getBrushSize = function()
return self.brushSize
end
self.setGumBrushSize = function(____, size)
self.gumBrushSize = size
end
self.getGumBrushSize = function()
return self.gumBrushSize
end
self.enableFollowMouseMode = function(____, flag, neverDisable)
local ____table_followMouse_destroy_result_48 = self.followMouse
if ____table_followMouse_destroy_result_48 ~= nil then
____table_followMouse_destroy_result_48 = ____table_followMouse_destroy_result_48:destroy()
end
if flag then
self.followMouse = __TS__New(FollowMouse, self, neverDisable)
else
__TS__Delete(self, "followMouse")
end
end
self.getFollowMouse = function()
return self.followMouse
end
self.getSlideMirror = function() return self.slideMirror end
self.setSlideMirror = function(____, slideMirror)
local ____slideMirror_50 = slideMirror
self.slideMirror = ____slideMirror_50
return ____slideMirror_50
end
self.isIgnoringDeathMessages = function() return self.ignoreDeathMessages end
self.setIgnoreDeathMessages = function(____, ignoreDeathMessages)
local ____ignoreDeathMessages_51 = ignoreDeathMessages
self.ignoreDeathMessages = ____ignoreDeathMessages_51
return ____ignoreDeathMessages_51
end
self.setPanCameraOnRevive = function(____, panCameraOnRevive)
self.panCameraOnRevive = panCameraOnRevive
end
self.updateTextTagPos = function()
if not self.hero or not self.textTag then
return
end
SetTextTagPos(
self.textTag,
GetUnitX(self.hero) - 64,
GetUnitY(self.hero) + 192,
0
)
end
self.getTextTag = function() return self.textTag end
self.getDisplayName = function() return self.displayName end
self.setShowNames = function(____, showNames)
self.showNames = showNames
self:updateShowNames(true)
end
self.isStaticSliding = function() return self.staticSliding end
self.setStaticSliding = function(____, staticSliding)
self.staticSliding = staticSliding
end
self.updateShowNames = function(____, localOnly)
for _, player in pairs(getUdgEscapers():getAll()) do
if not localOnly or player:getPlayer() == GetLocalPlayer() then
for _, escaper in pairs(getUdgEscapers():getAll()) do
local textTag = escaper:getTextTag()
if textTag and GetLocalPlayer() ~= escaper:getPlayer() then
SetTextTagVisibility(textTag, player.showNames)
end
end
end
end
end
self.updateUnitVertexColor = function()
if self.hero then
local ____getUdgEscapers_result_get_result_othersTransparencyState_table_escaperId_52 = getUdgEscapers():get(GetPlayerId(GetLocalPlayer()))
if ____getUdgEscapers_result_get_result_othersTransparencyState_table_escaperId_52 ~= nil then
____getUdgEscapers_result_get_result_othersTransparencyState_table_escaperId_52 = ____getUdgEscapers_result_get_result_othersTransparencyState_table_escaperId_52.othersTransparencyState[self.escaperId]
end
local otherTransparency = ____getUdgEscapers_result_get_result_othersTransparencyState_table_escaperId_52 or nil
SetUnitVertexColorBJ(
self.hero,
self.vcRed,
self.vcGreen,
self.vcBlue,
(GetLocalPlayer() == self:getPlayer() or otherTransparency == nil or self:isEscaperSecondary()) and self.vcTransparency or otherTransparency
)
end
end
self.enableClickWhereYouAre = function(____, b)
if self.tClickWhereYouAre then
self.tClickWhereYouAre:destroy()
end
if b and self.hero then
local x = GetUnitX(self.hero)
local y = GetUnitY(self.hero)
self.tClickWhereYouAre = createTimer(
0.1,
true,
function()
local ____ = self.hero and IssuePointOrder(self.hero, "smart", x, y)
end
)
end
end
self.enableInterface = function(____, b, showMinimap)
local mode
if b then
mode = "on"
elseif showMinimap then
mode = "map"
else
mode = "off"
end
if self.uiMode == mode then
return false
end
if GetLocalPlayer() == self.p then
if not b then
DisableInterface(showMinimap)
else
EnableInterface()
end
end
self.uiMode = mode
return true
end
self.getKeyboardShortcutsArray = function()
return self.keyboardShortcutsArray
end
self.createCanClickTrigger = function()
return createEvent({
events = {
function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER) end,
function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER) end
},
actions = {function()
if self:getPlayer() == GetTriggerPlayer() and not self.canClick then
if not IsIssuedOrder("smart") or GetItemTypeId(GetOrderTargetItem()) == METEOR_NORMAL or GetItemTypeId(GetOrderTargetItem()) == METEOR_CHEAT then
return
end
StopUnit(GetTriggerUnit())
end
end}
})
end
self.setCanClick = function(____, canClick)
self.canClick = canClick
if canClick then
DisableTrigger(self.canClickTrigger)
else
EnableTrigger(self.canClickTrigger)
end
end
self.toJson = function() return {} end
self.playerId = escaperId >= NB_PLAYERS_MAX and escaperId - 12 or escaperId
self.escaperId = escaperId
self.p = Player(self.playerId)
self.walkSpeed = HERO_WALK_SPEED
self.slideSpeed = HERO_SLIDE_SPEED
self.rotationSpeed = HERO_ROTATION_SPEED
self.slideMovePerPeriod = HERO_SLIDE_SPEED * SLIDE_PERIOD
self.maxSlideTurnPerPeriod = HERO_ROTATION_SPEED * SLIDE_PERIOD
self.slideCurrentTurnPerPeriod = 0
self.baseColorId = BlzColor2Id(GetPlayerColor(self.p)) or -1
self.checkTerrain = CheckTerrainTrigger.CreateCheckTerrainTrigger(escaperId)
self.cameraField = DEFAULT_CAMERA_FIELD
SetCameraFieldForPlayer(self.p, CAMERA_FIELD_TARGET_DISTANCE, self.cameraField, 0)
self.effects = __TS__New(EscaperEffectArray)
self.vcRed = 100
self.vcGreen = 100
self.vcBlue = 100
self.vcTransparency = escaperId >= NB_PLAYERS_MAX and 50 or 0
self.makeLastActions = __TS__New(MakeLastActions, self)
self.godMode = false
self.godModeKills = false
self.walkSpeedAbsolute = false
self.slideSpeedAbsolute = false
self.rotationSpeedAbsolute = false
self.hasAutoreviveB = false
if __TS__ArrayIncludes(
VIPs,
GetPlayerName(self.p)
) then
self.canCheatB = true
self.isMaximaxouB = true
self.isTrueMaximaxouB = true
else
self.canCheatB = false
self.isMaximaxouB = false
self.isTrueMaximaxouB = false
end
self.controler = self
self.slideLastAngleOrder = -1
self.isHeroSelectedB = false
self.instantTurnAbsolute = false
self.animSpeedSecondaryHero = 0.8
self.coopInvul = false
self.powerCircle = CreateUnit(
self.p,
POWER_CIRCLE,
0,
0,
0
)
SetUnitUserData(self.powerCircle, escaperId)
ShowUnit(self.powerCircle, false)
self.dummyPowerCircle = CreateUnit(
self.p,
DUMMY_POWER_CIRCLE,
0,
0,
0
)
SetUnitUserData(self.dummyPowerCircle, escaperId)
ShowUnit(self.dummyPowerCircle, false)
self.displayName = removeHash(GetPlayerName(self.p))
do
local i = 0
while i < NB_PLAYERS_MAX do
self.alliedState[i] = true
i = i + 1
end
end
self.canClick = true
self.canClickTrigger = self:createCanClickTrigger()
self:setCanClick(true)
end
function Escaper.prototype.createHero(self, x, y, angle)
local heroTypeId = HERO_TYPE_ID
if self.hero then
return false
end
if self.escaperId >= NB_PLAYERS_MAX then
heroTypeId = HERO_SECONDARY_TYPE_ID
end
self.hero = CreateUnit(
self.p,
heroTypeId,
x,
y,
angle
)
if not self.hero then
return
end
if self.escaperId >= NB_PLAYERS_MAX then
SetUnitTimeScale(self.hero, self.animSpeedSecondaryHero)
end
BlzSetUnitBooleanField(self.hero, UNIT_BF_HERO_HIDE_HERO_DEATH_MESSAGE, true)
SetUnitFlyHeight(self.hero, 1, 0)
SetUnitFlyHeight(self.hero, 0, 0)
SetUnitUserData(self.hero, self.escaperId)
ShowUnit(self.hero, false)
ShowUnit(self.hero, true)
UnitRemoveAbility(
self.hero,
FourCC("Aloc")
)
SetUnitMoveSpeed(self.hero, self.walkSpeed)
self:selectHero()
SetUnitColor(
self.hero,
ConvertPlayerColor(self.baseColorId)
)
self:updateUnitVertexColor()
self:SpecialIllidan()
self.invisUnit = CreateUnit(
PLAYER_INVIS_UNIT,
INVIS_UNIT_TYPE_ID,
x,
y,
angle
)
SetUnitUserData(
self.invisUnit,
GetPlayerId(self.p)
)
TriggerRegisterUnitEvent(Trig_InvisUnit_is_getting_damage.gg_trg_InvisUnit_is_getting_damage, self.invisUnit, EVENT_UNIT_DAMAGED)
self.effects:showEffects(self.hero)
__TS__Delete(self, "lastTerrainType")
TimerStart(
AfkMode.afkModeTimers[self.escaperId + 1],
AfkMode.timeMinAfk,
false,
function() return AfkMode.GetAfkModeTimeExpiresCodeFromId(self.escaperId) end
)
EnableTrigger(self.checkTerrain)
self.textTag = CreateTextTag()
SetTextTagTextBJ(
self.textTag,
udg_colorCode[self:getColorId() + 1] .. self:getDisplayName(),
10
)
SetTextTagPermanent(self.textTag, true)
SetTextTagVisibility(self.textTag, false)
self.textTagTimer = createTimer(0.01, true, self.updateTextTagPos)
self:updateShowNames(false)
self:updateUnitVertexColor()
self.startCommandsHandle:loadStartCommands()
local hero = self.hero
createEvent({
events = {function(t) return TriggerRegisterUnitEvent(t, hero, EVENT_UNIT_DEATH) end},
actions = {function()
self:onEscaperDeath()
end}
})
return true
end
function Escaper.prototype.enableSlide(self, doEnable)
if not not self.slide == doEnable then
return false
end
if doEnable then
self.slide = SlideTrigger.CreateSlideTimer(self.escaperId)
if self.hero then
StopUnit(self.hero)
self:setLastZ(BlzGetUnitZ(self.hero) + GetUnitFlyHeight(self.hero))
if self.followMouse then
local tt = getUdgTerrainTypes():getTerrainType(
GetUnitX(self.hero),
GetUnitY(self.hero)
)
if __TS__InstanceOf(tt, TerrainTypeSlide) and tt:getSlideSpeed() >= 0 then
self.followMouse:startFollowingMouse()
end
end
end
else
local ____table_slide_pause_result_destroy_result_54 = self.slide
if ____table_slide_pause_result_destroy_result_54 ~= nil then
____table_slide_pause_result_destroy_result_54 = ____table_slide_pause_result_destroy_result_54:pause():destroy()
end
__TS__Delete(self, "slide")
self.slideLastAngleOrder = -1
self:setRemainingDegreesToTurn(0)
self:setSlideCurrentTurnPerPeriod(0)
end
return true
end
function Escaper.prototype.setSlideLastAngleOrder(self, angle)
self.slideLastAngleOrder = angle
end
function Escaper.prototype.enableCheckTerrain(self, doEnable)
if IsTriggerEnabled(self.checkTerrain) == doEnable then
return false
end
if doEnable then
EnableTrigger(self.checkTerrain)
else
DisableTrigger(self.checkTerrain)
end
return true
end
function Escaper.prototype.moveHero(self, x, y, updateLast)
if updateLast == nil then
updateLast = true
end
if self.hero then
if updateLast then
self:setLastPos()
end
SetUnitX(self.hero, x)
SetUnitY(self.hero, y)
end
end
function Escaper.prototype.moveInvisUnit(self, x, y)
if self.invisUnit then
SetUnitX(self.invisUnit, x)
SetUnitY(self.invisUnit, y)
end
end
function Escaper.prototype.pause(self, doPause)
if self:isPaused() == doPause then
return false
end
local ____ = self.hero and PauseUnit(self.hero, doPause)
return true
end
function Escaper.prototype.revive(self, x, y, ____type)
if ____type == nil then
____type = "other"
end
local isAlive = self:isAlive()
if not self.hero or not self.invisUnit or isAlive then
if isAlive then
if self.hero and (self.panCameraOnRevive == "all" or self.panCameraOnRevive == ____type) then
if GetLocalPlayer() == self.p then
self:moveCameraToHeroIfNecessary()
end
end
end
return false
end
self:setLastPos()
ReviveHero(self.hero, x, y, SHOW_REVIVE_EFFECTS)
SetUnitX(self.invisUnit, x)
SetUnitY(self.invisUnit, y)
ShowUnit(self.invisUnit, true)
self:enableCheckTerrain(true)
self:SpecialIllidan()
self:selectHero()
self:updateUnitVertexColor()
if not self.firstPersonHandle:isFirstPerson() then
self:setCanClick(true)
end
TimerStart(
AfkMode.afkModeTimers[self.escaperId + 1],
AfkMode.timeMinAfk,
false,
function() return AfkMode.GetAfkModeTimeExpiresCodeFromId(self.escaperId) end
)
self.lastZ = 0
self.oldDiffZ = 0
self.speedZ = 0
ShowUnit(self.powerCircle, false)
ShowUnit(self.dummyPowerCircle, false)
if self.hero and (self.panCameraOnRevive == "all" or self.panCameraOnRevive == ____type) then
if GetLocalPlayer() == self.p then
self:moveCameraToHeroIfNecessary()
end
end
if ____type ~= "coop" then
for _, staticSlide in pairs(getUdgLevels():getCurrentLevel(self).staticSlides:getAll()) do
staticSlide:removePlayer(self.escaperId)
end
end
reviveTrigManager.removeEscaper(self.escaperId)
return true
end
function Escaper.prototype.turnInstantly(self, angle)
local ____ = self.hero and BlzSetUnitFacingEx(self.hero, angle)
end
function Escaper.prototype.giveHeroControl(self, escaper)
local ____ = self.hero and SetUnitOwner(
self.hero,
escaper:getPlayer(),
false
)
self.controler = escaper
end
function Escaper.prototype.setIsHeroSelectedForPlayer(self, p, heroSelected)
if GetLocalPlayer() == p then
self.isHeroSelectedB = heroSelected
end
end
function Escaper.prototype.newEffect(self, efStr, bodyPart)
local ____ = self.hero and self.effects:new(efStr, self.hero, bodyPart)
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_newEffect_result_56 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_newEffect_result_56 ~= nil then
____GetMirrorEscaper_result_newEffect_result_56 = ____GetMirrorEscaper_result_newEffect_result_56:newEffect(efStr, bodyPart)
end
end
end
function Escaper.prototype.destroyLastEffects(self, numEfToDestroy)
self.effects:destroyLastEffects(numEfToDestroy)
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_destroyLastEffects_result_58 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_destroyLastEffects_result_58 ~= nil then
____GetMirrorEscaper_result_destroyLastEffects_result_58 = ____GetMirrorEscaper_result_destroyLastEffects_result_58:destroyLastEffects(numEfToDestroy)
end
end
end
function Escaper.prototype.createTerrainKillEffect(self, killEffectStr)
self:destroyTerrainKillEffect()
local ____self_hero_61 = self.hero
if ____self_hero_61 then
local ____EffectUtils_addSpecialEffectTarget_result_60 = EffectUtils.addSpecialEffectTarget(killEffectStr, self.hero, TERRAIN_KILL_EFFECT_BODY_PART)
self.terrainKillEffect = ____EffectUtils_addSpecialEffectTarget_result_60
____self_hero_61 = ____EffectUtils_addSpecialEffectTarget_result_60
end
end
function Escaper.prototype.createPortalEffect(self, effectStr)
self:destroyPortalEffect()
local ____self_hero_63 = self.hero
if ____self_hero_63 then
local ____EffectUtils_addSpecialEffectTarget_result_62 = EffectUtils.addSpecialEffectTarget(effectStr, self.hero, TERRAIN_KILL_EFFECT_BODY_PART)
self.portalEffect = ____EffectUtils_addSpecialEffectTarget_result_62
____self_hero_63 = ____EffectUtils_addSpecialEffectTarget_result_62
end
end
function Escaper.prototype.setLastTerrainType(self, terrainType)
self.lastTerrainType = terrainType
end
function Escaper.prototype.setSlideSpeed(self, ss)
self.slideSpeed = ss
self.slideMovePerPeriod = ss * SLIDE_PERIOD
end
function Escaper.prototype.setRotationSpeed(self, rs)
self.rotationSpeed = rs
self.maxSlideTurnPerPeriod = rs * SLIDE_PERIOD * 360
end
function Escaper.prototype.getRemainingDegreesToTurn(self)
return self.remainingDegreesToTurn
end
function Escaper.prototype.setRemainingDegreesToTurn(self, remainingDegreesToTurn)
if RAbsBJ(remainingDegreesToTurn) < 0.01 then
remainingDegreesToTurn = 0
end
self.remainingDegreesToTurn = remainingDegreesToTurn
end
function Escaper.prototype.setWalkSpeed(self, ws)
self.walkSpeed = ws
local ____ = self.hero and SetUnitMoveSpeed(self.hero, ws)
end
function Escaper.prototype.absoluteSlideSpeed(self, slideSpeed, isCommand)
if isCommand == nil then
isCommand = false
end
self.slideSpeedAbsolute = true
self:setSlideSpeed(slideSpeed)
local ____isCommand_65 = isCommand
if ____isCommand_65 then
local ____slideSpeed_64 = slideSpeed
self.slideSpeedCmd = ____slideSpeed_64
____isCommand_65 = ____slideSpeed_64
end
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_absoluteSlideSpeed_result_66 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_absoluteSlideSpeed_result_66 ~= nil then
____GetMirrorEscaper_result_absoluteSlideSpeed_result_66 = ____GetMirrorEscaper_result_absoluteSlideSpeed_result_66:absoluteSlideSpeed(slideSpeed, isCommand)
end
end
end
function Escaper.prototype.absoluteRotationSpeed(self, rotationSpeed)
self.rotationSpeedAbsolute = true
self:setRotationSpeed(rotationSpeed)
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_absoluteRotationSpeed_result_68 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_absoluteRotationSpeed_result_68 ~= nil then
____GetMirrorEscaper_result_absoluteRotationSpeed_result_68 = ____GetMirrorEscaper_result_absoluteRotationSpeed_result_68:absoluteRotationSpeed(rotationSpeed)
end
end
end
function Escaper.prototype.absoluteWalkSpeed(self, walkSpeed)
self.walkSpeedAbsolute = true
self:setWalkSpeed(walkSpeed)
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_absoluteWalkSpeed_result_70 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_absoluteWalkSpeed_result_70 ~= nil then
____GetMirrorEscaper_result_absoluteWalkSpeed_result_70 = ____GetMirrorEscaper_result_absoluteWalkSpeed_result_70:absoluteWalkSpeed(walkSpeed)
end
end
end
function Escaper.prototype.setAbsoluteInstantTurn(self, flag)
self.instantTurnAbsolute = flag
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_setAbsoluteInstantTurn_result_72 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_setAbsoluteInstantTurn_result_72 ~= nil then
____GetMirrorEscaper_result_setAbsoluteInstantTurn_result_72 = ____GetMirrorEscaper_result_setAbsoluteInstantTurn_result_72:setAbsoluteInstantTurn(flag)
end
end
end
function Escaper.prototype.setGodMode(self, godMode)
self.godMode = godMode
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_setGodMode_result_74 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_setGodMode_result_74 ~= nil then
____GetMirrorEscaper_result_setGodMode_result_74 = ____GetMirrorEscaper_result_setGodMode_result_74:setGodMode(godMode)
end
end
end
function Escaper.prototype.setGodModeKills(self, godModeKills)
self.godModeKills = godModeKills
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_setGodModeKills_result_76 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_setGodModeKills_result_76 ~= nil then
____GetMirrorEscaper_result_setGodModeKills_result_76 = ____GetMirrorEscaper_result_setGodModeKills_result_76:setGodModeKills(godModeKills)
end
end
end
function Escaper.prototype.setBaseColor(self, baseColorId)
if baseColorId < 0 or baseColorId >= NB_PLAYERS_MAX_REFORGED then
return false
end
self.baseColorId = baseColorId
if self.hero then
if baseColorId == 0 then
SetUnitColor(self.hero, PLAYER_COLOR_RED)
else
SetUnitColor(
self.hero,
ConvertPlayerColor(baseColorId)
)
end
end
if not self:isEscaperSecondary() then
ColorInfo(self, self.p)
local ____GetMirrorEscaper_result_setBaseColor_result_78 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_setBaseColor_result_78 ~= nil then
____GetMirrorEscaper_result_setBaseColor_result_78 = ____GetMirrorEscaper_result_setBaseColor_result_78:setBaseColor(baseColorId)
end
end
return true
end
function Escaper.prototype.setBaseColorDisco(self, baseColorId)
if baseColorId < 0 or baseColorId >= NB_PLAYERS_MAX_REFORGED then
return false
end
self.baseColorId = baseColorId
if self.hero then
if baseColorId == 0 then
SetUnitColor(self.hero, PLAYER_COLOR_RED)
else
SetUnitColor(
self.hero,
ConvertPlayerColor(baseColorId)
)
end
end
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_setBaseColorDisco_result_80 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_setBaseColorDisco_result_80 ~= nil then
____GetMirrorEscaper_result_setBaseColorDisco_result_80 = ____GetMirrorEscaper_result_setBaseColorDisco_result_80:setBaseColorDisco(baseColorId)
end
end
return true
end
function Escaper.prototype.setVcRed(self, vcRed)
if vcRed < 0 or vcRed > 100 then
return false
end
self.vcRed = vcRed
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_setVcRed_result_82 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_setVcRed_result_82 ~= nil then
____GetMirrorEscaper_result_setVcRed_result_82 = ____GetMirrorEscaper_result_setVcRed_result_82:setVcRed(vcRed)
end
end
return true
end
function Escaper.prototype.setVcGreen(self, vcGreen)
if vcGreen < 0 or vcGreen > 100 then
return false
end
self.vcGreen = vcGreen
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_setVcGreen_result_84 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_setVcGreen_result_84 ~= nil then
____GetMirrorEscaper_result_setVcGreen_result_84 = ____GetMirrorEscaper_result_setVcGreen_result_84:setVcGreen(vcGreen)
end
end
return true
end
function Escaper.prototype.setVcBlue(self, vcBlue)
if vcBlue < 0 or vcBlue > 100 then
return false
end
if not self:isEscaperSecondary() then
local ____GetMirrorEscaper_result_setVcBlue_result_86 = GetMirrorEscaper(self)
if ____GetMirrorEscaper_result_setVcBlue_result_86 ~= nil then
____GetMirrorEscaper_result_setVcBlue_result_86 = ____GetMirrorEscaper_result_setVcBlue_result_86:setVcBlue(vcBlue)
end
end
self.vcBlue = vcBlue
return true
end
function Escaper.prototype.setVcTransparency(self, vcTransparency)
if vcTransparency < 0 or vcTransparency > 100 then
return false
end
if self:isEscaperSecondary() then
return true
end
self.vcTransparency = vcTransparency
return true
end
function Escaper.prototype.setCanCheat(self, canCheat)
if not canCheat then
self.isMaximaxouB = false
self.isTrueMaximaxouB = false
end
self.canCheatB = canCheat
end
function Escaper.prototype.setIsMaximaxou(self, isMaximaxou)
if isMaximaxou then
self:setCanCheat(true)
else
self.isTrueMaximaxouB = false
end
self.isMaximaxouB = isMaximaxou
end
function Escaper.prototype.setIsTrueMaximaxou(self, isTrueMaximaxou)
if isTrueMaximaxou then
self:setIsMaximaxou(true)
end
self.isTrueMaximaxouB = isTrueMaximaxou
end
function Escaper.prototype.setCameraField(self, cameraField)
self.cameraField = cameraField
SetCameraFieldForPlayer(
self.p,
CAMERA_FIELD_TARGET_DISTANCE,
I2R(cameraField),
0
)
end
function Escaper.prototype.kick(self, kicked)
CustomDefeatBJ(
kicked:getPlayer(),
("You have been kicked by " .. self.displayName) .. " !"
)
Text.A(((((udg_colorCode[kicked:getColorId() + 1] .. kicked.displayName) .. " has been kicked by ") .. udg_colorCode[self:getColorId() + 1]) .. self.displayName) .. " !")
kicked:destroy()
local ____GetMirrorEscaper_result_destroy_result_88 = GetMirrorEscaper(kicked)
if ____GetMirrorEscaper_result_destroy_result_88 ~= nil then
____GetMirrorEscaper_result_destroy_result_88 = ____GetMirrorEscaper_result_destroy_result_88:destroy()
end
end
function Escaper.prototype.setHasAutorevive(self, hasAutorevive)
self.hasAutoreviveB = hasAutorevive
end
function Escaper.prototype.setMakingLevel(self, level)
if self.makingLevel == level then
return false
end
local oldMakingLevel = self.makingLevel
self:destroyMakeIfForSpecificLevel()
__TS__Delete(self, "makingLevel")
if oldMakingLevel and not IsLevelBeingMade(oldMakingLevel) then
oldMakingLevel:activate(false)
if getUdgLevels():getCurrentLevel():getId() < oldMakingLevel:getId() then
oldMakingLevel:activateVisibilities(false)
end
end
if level then
Level.earningLivesActivated = false
local ____ = level and level:activate(true)
Level.earningLivesActivated = true
self.makingLevel = level
end
return true
end
function Escaper.prototype.getMakingLevel(self)
if self.makingLevel then
return self.makingLevel
else
return getUdgLevels():getCurrentLevel()
end
end
function Escaper.prototype.makeCreateNoMoveMonsters(self, mt, facingAngle)
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeMonsterNoMove, self.hero, mt, facingAngle)
end
end
function Escaper.prototype.makeCreateSimplePatrolMonsters(self, mode, mt)
self:destroyMake()
if mode == "normal" or mode == "string" or mode == "auto" then
if self.hero then
self.make = __TS__New(MakeMonsterSimplePatrol, self.hero, mode, mt)
end
end
end
function Escaper.prototype.makeCreateMultiplePatrolsMonsters(self, mode, mt)
self:destroyMake()
if mode == "normal" or mode == "string" then
if self.hero then
self.make = __TS__New(MakeMonsterMultiplePatrols, self.hero, mode, mt)
end
end
end
function Escaper.prototype.makeCreateTeleportMonsters(self, mode, mt, period, angle)
self:destroyMake()
if mode == "normal" or mode == "string" then
if self.hero then
self.make = __TS__New(
MakeMonsterTeleport,
self.hero,
mode,
mt,
period,
angle
)
end
end
end
function Escaper.prototype.makeCreateMonsterSpawn(self, label, mt, sens, frequence)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakeMonsterSpawn,
self.hero,
label,
mt,
sens,
frequence
)
end
end
function Escaper.prototype.makeDeleteMonsters(self, mode)
self:destroyMake()
do
local function ____catch(____error)
if type(____error) == "string" then
Text.erP(self.p, ____error)
end
end
local ____try, ____hasReturned = pcall(function()
if self.hero then
self.make = __TS__New(MakeDeleteMonsters, self.hero, mode)
end
end)
if not ____try then
____catch(____hasReturned)
end
end
end
function Escaper.prototype.makeSetUnitTeleportPeriod(self, mode, period)
self:destroyMake()
do
local function ____catch(____error)
if type(____error) == "string" then
Text.erP(self.p, ____error)
end
end
local ____try, ____hasReturned = pcall(function()
if self.hero then
self.make = __TS__New(MakeSetUnitTeleportPeriod, self.hero, mode, period)
end
end)
if not ____try then
____catch(____hasReturned)
end
end
end
function Escaper.prototype.makeSetUnitMonsterType(self, mode, mt)
self:destroyMake()
do
local function ____catch(____error)
if type(____error) == "string" then
Text.erP(self.p, ____error)
end
end
local ____try, ____hasReturned = pcall(function()
if self.hero then
self.make = __TS__New(MakeSetUnitMonsterType, self.hero, mode, mt)
end
end)
if not ____try then
____catch(____hasReturned)
end
end
end
function Escaper.prototype.makeDeleteMeteors(self, mode)
self:destroyMake()
do
local function ____catch(____error)
if type(____error) == "string" then
Text.erP(self.p, ____error)
end
end
local ____try, ____hasReturned = pcall(function()
if self.hero then
self.make = __TS__New(MakeDeleteMeteors, self.hero, mode)
end
end)
if not ____try then
____catch(____hasReturned)
end
end
end
function Escaper.prototype.makeCreateCaster(self, casterType, angle)
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeCaster, self.hero, casterType, angle)
end
end
function Escaper.prototype.makeDeleteCasters(self, mode)
self:destroyMake()
do
local function ____catch(____error)
if type(____error) == "string" then
Text.erP(self.p, ____error)
end
end
local ____try, ____hasReturned = pcall(function()
if self.hero then
self.make = __TS__New(MakeDeleteCasters, self.hero, mode)
end
end)
if not ____try then
____catch(____hasReturned)
end
end
end
function Escaper.prototype.makeCreateClearMobs(self, disableDuration)
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeClearMob, self.hero, disableDuration)
end
end
function Escaper.prototype.makeCreatePortalMobs(self, freezeDuration, portalEffect, portalEffectDuration)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakePortalMob,
self.hero,
freezeDuration,
portalEffect,
portalEffectDuration
)
end
end
function Escaper.prototype.makeCreateCircleMob(self, speed, direction, facing, radius)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakeCircleMob,
self.hero,
speed,
direction,
facing,
radius
)
end
end
function Escaper.prototype.makeCreateStaticSlide(self, angle, speed)
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeStaticSlide, self.hero, angle, speed)
end
end
function Escaper.prototype.makeSetPortalMobFreezeDuration(self, freezeDuration)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakePropertyChange,
self.hero,
"freezeDuration",
freezeDuration,
function(x, y)
local ____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_90 = self:getMakingLevel().monsters:getMonsterNear(x, y)
if ____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_90 ~= nil then
____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_90 = ____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_90:getPortalMob()
end
return ____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_90
end,
function(monster) return monster:getFreezeDuration() end,
function(monster, freezeDuration) return monster:setFreezeDuration(freezeDuration) end
)
end
end
function Escaper.prototype.makeSetPortalMobPortalEffect(self, portalEffect)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakePropertyChange,
self.hero,
"portalEffect",
portalEffect,
function(x, y)
local ____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_92 = self:getMakingLevel().monsters:getMonsterNear(x, y)
if ____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_92 ~= nil then
____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_92 = ____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_92:getPortalMob()
end
return ____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_92
end,
function(monster) return monster:getPortalEffect() end,
function(monster, portalEffect) return monster:setPortalEffect(portalEffect) end
)
end
end
function Escaper.prototype.makeSetPortalMobPortalEffectDuration(self, portalEffectDuration)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakePropertyChange,
self.hero,
"portalEffectDuration",
portalEffectDuration,
function(x, y)
local ____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_94 = self:getMakingLevel().monsters:getMonsterNear(x, y)
if ____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_94 ~= nil then
____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_94 = ____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_94:getPortalMob()
end
return ____table_getMakingLevel_result_monsters_getMonsterNear_result_getPortalMob_result_94
end,
function(monster) return monster:getPortalEffectDuration() end,
function(monster, portalEffectDuration) return monster:setPortalEffectDuration(portalEffectDuration) end
)
end
end
function Escaper.prototype.makeSetCircleMobSpeed(self, speed)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakePropertyChange,
self.hero,
"speed",
speed,
function(x, y)
local ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_96 = self:getMakingLevel().monsters:getMonsterNear(x, y)
if ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_96 ~= nil then
____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_96 = ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_96:getCircleMob()
end
return ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_96
end,
function(monster) return monster:getSpeed() end,
function(monster, speed) return monster:setSpeed(speed) end
)
end
end
function Escaper.prototype.makeSetCircleMobDirection(self, direction)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakePropertyChange,
self.hero,
"direction",
direction,
function(x, y)
local ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_98 = self:getMakingLevel().monsters:getMonsterNear(x, y)
if ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_98 ~= nil then
____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_98 = ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_98:getCircleMob()
end
return ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_98
end,
function(monster) return monster:getDirection() end,
function(monster, direction) return monster:setDirection(direction) end
)
end
end
function Escaper.prototype.makeSetCircleMobFacing(self, facing)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakePropertyChange,
self.hero,
"facing",
facing,
function(x, y)
local ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_100 = self:getMakingLevel().monsters:getMonsterNear(x, y)
if ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_100 ~= nil then
____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_100 = ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_100:getCircleMob()
end
return ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_100
end,
function(monster) return monster:getFacing() end,
function(monster, facing) return monster:setFacing(facing) end
)
end
end
function Escaper.prototype.makeSetCircleMobRadius(self, radius)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakePropertyChange,
self.hero,
"radius",
radius,
function(x, y)
local ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_102 = self:getMakingLevel().monsters:getMonsterNear(x, y)
if ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_102 ~= nil then
____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_102 = ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_102:getCircleMob()
end
return ____table_getMakingLevel_result_monsters_getMonsterNear_result_getCircleMob_result_102
end,
function(monster) return monster:getRadius() end,
function(monster, radius) return monster:setRadius(radius) end
)
end
end
function Escaper.prototype.makeSetStaticSlideSpeed(self, speed)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakePropertyChange,
self.hero,
"speed",
speed,
function(x, y) return self:getMakingLevel().staticSlides:getStaticSlideFromPoint(x, y) end,
function(staticSlide) return staticSlide:getSpeed() end,
function(staticSlide, speed) return staticSlide:setSpeed(speed) end
)
end
end
function Escaper.prototype.makeSetStaticSlideAngle(self, angle)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakePropertyChange,
self.hero,
"angle",
angle,
function(x, y) return self:getMakingLevel().staticSlides:getStaticSlideFromPoint(x, y) end,
function(staticSlide) return staticSlide:getAngle() end,
function(staticSlide, angle) return staticSlide:setAngle(angle) end
)
end
end
function Escaper.prototype.makeSetMonsterJumpPad(self, jumpPad)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakePropertyChange,
self.hero,
"jumpPad",
jumpPad,
function(x, y) return self:getMakingLevel().monsters:getMonsterNear(x, y) end,
function(monster) return monster:getJumpPad() end,
function(monster, jumpPad) return monster:setJumpPad(jumpPad) end
)
end
end
function Escaper.prototype.makeSetMonsterJumpPadEffect(self, jumpPadEffect)
self:destroyMake()
if self.hero then
self.make = __TS__New(
MakePropertyChange,
self.hero,
"jumpPadEffect",
jumpPadEffect,
function(x, y) return self:getMakingLevel().monsters:getMonsterNear(x, y) end,
function(monster) return monster:getJumpPadEffect() end,
function(monster, jumpPadEffect) return monster:setJumpPadEffect(jumpPadEffect) end
)
end
end
function Escaper.prototype.makeCreateTerrain(self, terrainType)
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeTerrainCreate, self.hero, terrainType)
end
end
function Escaper.prototype.makeCreateTerrainBrush(self, terrainType, brushSize, shape)
if shape == nil then
shape = "square"
end
self:destroyMake()
self.make = __TS__New(
MakeTerrainCreateBrush,
self,
terrainType,
brushSize,
shape
)
end
function Escaper.prototype.makeTerrainHeight(self, radius, height)
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeTerrainHeight, self.hero, radius, height)
end
end
function Escaper.prototype.makeCreateStart(self, forNext, facing)
self:destroyMake()
if self.hero then
self.make = __TS__New(MakeStart, self.hero, forNext, facing)
end
end
function Escaper.prototype.deleteSpecificActionsForLevel(self, level)
self.makeLastActions:deleteSpecificActionsForLevel(level)
end
function Escaper.prototype.newAction(self, action)
return self.makeLastActions:newAction(action)
end
function Escaper.prototype.setLastZ(self, lastZ)
self.lastZ = lastZ
end
function Escaper.prototype.setOldDiffZ(self, oldDiffZ)
self.oldDiffZ = oldDiffZ
end
function Escaper.prototype.setSpeedZ(self, speedZ)
self.speedZ = speedZ
end
function Escaper.prototype.setCoopInvul(self, invul)
self.coopInvul = invul
end
return ____exports
end,
["src.core.04_STRUCTURES.TerrainType.TerrainTypeDeath_KillingTimers"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____mapUtils = require("src.Utils.mapUtils")
local forRange = ____mapUtils.forRange
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgLevels = ____globals.getUdgLevels
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local ____TerrainType = require("src.core.04_STRUCTURES.TerrainType.TerrainType")
local isDeathTerrain = ____TerrainType.isDeathTerrain
____exports.KillingTimers = __TS__Class()
local KillingTimers = ____exports.KillingTimers
KillingTimers.name = "KillingTimers"
function KillingTimers.prototype.____constructor(self)
self.timers = {}
self.destroy = function()
forRange(
NB_ESCAPERS,
function(i) return DestroyTimer(self.timers[i + 1]) end
)
end
self.TerrainKillTimer2Escaper = function(____, theTimer)
local escaperId = 0
for _, terrainType in pairs(getUdgTerrainTypes():getAll()) do
if isDeathTerrain(terrainType) then
escaperId = 0
while not (escaperId >= NB_ESCAPERS) do
if theTimer == terrainType:getTimer(escaperId) then
return getUdgEscapers():get(escaperId)
end
escaperId = escaperId + 1
end
end
end
end
self.start = function(____, timerId, time)
TimerStart(
self.timers[timerId + 1],
time,
false,
function()
local escaper = self:TerrainKillTimer2Escaper(GetExpiredTimer())
if not escaper then
return
end
escaper:pause(false)
escaper:destroyTerrainKillEffect()
if escaper.currentLevelTouchTerrainDeath == getUdgLevels():getCurrentLevel() then
escaper:kill()
else
if escaper:isAlive() then
escaper:enableCheckTerrain(true)
end
end
end
)
local escaper = getUdgEscapers():get(timerId)
if escaper then
escaper.currentLevelTouchTerrainDeath = getUdgLevels():getCurrentLevel()
end
end
self.get = function(____, id) return self.timers[id + 1] end
forRange(
NB_ESCAPERS,
function(i)
local ____CreateTimer_result_0 = CreateTimer()
self.timers[i + 1] = ____CreateTimer_result_0
return ____CreateTimer_result_0
end
)
end
return ____exports
end,
["src.core.04_STRUCTURES.TerrainType.TerrainTypeDeath"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local TERRAIN_DATA_DISPLAY_TIME = ____Constants.TERRAIN_DATA_DISPLAY_TIME
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local COLOR_TERRAIN_DEATH = ____Init_colorCodes.COLOR_TERRAIN_DEATH
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____TerrainType = require("src.core.04_STRUCTURES.TerrainType.TerrainType")
local DISPLAY_SPACE = ____TerrainType.DISPLAY_SPACE
local TerrainType = ____TerrainType.TerrainType
local ____TerrainTypeDeath_KillingTimers = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeDeath_KillingTimers")
local KillingTimers = ____TerrainTypeDeath_KillingTimers.KillingTimers
____exports.DEATH_TERRAIN_MAX_TOLERANCE = 50
____exports.TerrainTypeDeath = __TS__Class()
local TerrainTypeDeath = ____exports.TerrainTypeDeath
TerrainTypeDeath.name = "TerrainTypeDeath"
__TS__ClassExtends(TerrainTypeDeath, TerrainType)
function TerrainTypeDeath.prototype.____constructor(self, label, terrainTypeId, killingEffectStr, timeToKill, toleranceDist)
TerrainType.prototype.____constructor(
self,
label,
terrainTypeId,
nil,
"death",
0,
1
)
self.setKillingEffectStr = function(____, killingEffectStr)
self.killingEffectStr = killingEffectStr
end
self.getKillingEffectStr = function()
return self.killingEffectStr
end
self.setTimeToKill = function(____, newTimeToKill)
if newTimeToKill < 0 then
return false
end
self.timeToKill = newTimeToKill
return true
end
self.getTimeToKill = function()
return self.timeToKill
end
self.killEscaper = function(____, escaper)
escaper:enableCheckTerrain(false)
escaper:enableSlide(false)
escaper:pause(true)
escaper:createTerrainKillEffect(self.killingEffectStr)
self.killingTimers:start(
escaper:getId(),
self.timeToKill
)
end
self.getTimer = function(____, escaperId)
return self.killingTimers:get(escaperId)
end
self.getToleranceDist = function()
return self.toleranceDist
end
self.setToleranceDist = function(____, toleranceDist)
if toleranceDist < 0 or toleranceDist > ____exports.DEATH_TERRAIN_MAX_TOLERANCE then
return false
end
self.toleranceDist = toleranceDist
return true
end
self.getColor = function()
return COLOR_TERRAIN_DEATH
end
self.displayForPlayer = function(____, p)
local display = self:baseTextForDisplay()
display = display .. (((R2S(self:getTimeToKill()) .. DISPLAY_SPACE) .. self:getKillingEffectStr()) .. DISPLAY_SPACE) .. I2S(R2I(self:getToleranceDist()))
display = display .. (DISPLAY_SPACE .. "cliff") .. I2S(self.cliffClassId)
Text.P_timed(p, TERRAIN_DATA_DISPLAY_TIME, display)
end
self.destroy = function()
self.killingTimers:destroy()
end
self.killingEffectStr = killingEffectStr
self.timeToKill = timeToKill
self.killingTimers = __TS__New(KillingTimers)
self.toleranceDist = toleranceDist
end
function TerrainTypeDeath.prototype.toJson(self)
local output = TerrainType.prototype.toJson(self)
output.killingEffet = self:getKillingEffectStr()
output.timeToKill = self:getTimeToKill()
output.toleranceDist = self:getToleranceDist()
return output
end
return ____exports
end,
["src.core.04_STRUCTURES.TerrainType.TerrainType"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_functions")
local CanUseTerrain = ____Terrain_functions.CanUseTerrain
local ____Ascii = require("src.core.01_libraries.Ascii")
local Ascii2String = ____Ascii.Ascii2String
____exports.DISPLAY_SPACE = " "
____exports.isWalkTerrain = function(tt) return tt.kind == "walk" end
____exports.isSlideTerrain = function(tt) return tt.kind == "slide" end
____exports.isDeathTerrain = function(tt) return tt.kind == "death" end
____exports.TerrainType = __TS__Class()
local TerrainType = ____exports.TerrainType
TerrainType.name = "TerrainType"
function TerrainType.prototype.____constructor(self, label, terrainTypeId, theAlias, kind, orderId, cliffClassId)
self.gravity = nil
self.setOrderId = function(____, orderId)
self.orderId = orderId
return self
end
self.getOrderId = function()
return self.orderId
end
self.setCliffClassId = function(____, cliffClassId)
if cliffClassId == 1 or cliffClassId == 2 then
self.cliffClassId = cliffClassId
end
return self
end
self.getCliffClassId = function()
return self.cliffClassId
end
self.setType = function(____, terrainTypeId)
self.terrainTypeId = terrainTypeId
end
self.setLabel = function(____, label)
self.label = label
end
self.setAlias = function(____, theAlias)
self.theAlias = theAlias
return self
end
self.getTerrainTypeId = function()
return self.terrainTypeId
end
self.setTerrainTypeId = function(____, terrainTypeId)
if not CanUseTerrain(terrainTypeId) then
return false
end
self.terrainTypeId = terrainTypeId
return true
end
self.getKind = function()
return self.kind
end
self.getGravity = function() return self.gravity end
self.setGravity = function(____, gravity)
local ____gravity_0 = gravity
self.gravity = ____gravity_0
return ____gravity_0
end
self.baseTextForDisplay = function()
local order
if self.orderId ~= 0 then
order = (" (order " .. I2S(self.orderId)) .. ")"
else
order = ""
end
local display = (((((self:getColor() .. self.label) .. (self.theAlias and self.theAlias ~= "" and " " .. self.theAlias or "")) .. order) .. " : '") .. Ascii2String(self.terrainTypeId)) .. "'"
if self.gravity then
display = display .. " g:" .. tostring(self.gravity)
end
display = display .. ____exports.DISPLAY_SPACE
return display
end
if terrainTypeId == 0 then
error("Wrong terrain type id", 0)
end
if not CanUseTerrain(terrainTypeId) then
error("Terrain tiles number limit reached", 0)
end
self.label = label
self.terrainTypeId = terrainTypeId
self.theAlias = theAlias
self.kind = kind
self.orderId = orderId
self.cliffClassId = cliffClassId
end
function TerrainType.prototype.toJson(self)
local output = MemoryHandler.getEmptyObject()
output.label = self.label
output.alias = self.theAlias
output.orderId = self.orderId
output.kind = self.kind
output.terrainTypeId = Ascii2String(self.terrainTypeId)
output.cliffClassId = self.cliffClassId
output.gravity = self.gravity
return output
end
return ____exports
end,
["src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_functions"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_MAX_OF_TERRAINS = ____Constants.NB_MAX_OF_TERRAINS
local RED = ____Constants.RED
local TERRAIN_DATA_DISPLAY_TIME = ____Constants.TERRAIN_DATA_DISPLAY_TIME
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local COLOR_TERRAIN_DEATH = ____Init_colorCodes.COLOR_TERRAIN_DEATH
local COLOR_TERRAIN_SLIDE = ____Init_colorCodes.COLOR_TERRAIN_SLIDE
local COLOR_TERRAIN_WALK = ____Init_colorCodes.COLOR_TERRAIN_WALK
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local ____globals_variables_and_triggers = require("src.core.09_From_old_Worldedit_triggers.globals_variables_and_triggers")
local Globals = ____globals_variables_and_triggers.Globals
local ____Terrain_type_max = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_max")
local TerrainTypeMax = ____Terrain_type_max.TerrainTypeMax
local ____Terrain_type_names_and_data = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_names_and_data")
local TerrainTypeNamesAndData = ____Terrain_type_names_and_data.TerrainTypeNamesAndData
local ____Terrain_type_functions = require("src.core.04_STRUCTURES.TerrainType.Terrain_type_functions")
local TerrainTypeId2TerrainType = ____Terrain_type_functions.TerrainTypeId2TerrainType
____exports.IsTerrainAlreadyUsed = function(terrainType)
local i = 0
while Globals.udg_used_terrain_types[i + 1] do
if Globals.udg_used_terrain_types[i + 1] == terrainType then
return true
end
i = i + 1
end
return false
end
____exports.IsTerrainsLimitNumberReached = function()
return Globals.udg_nb_used_terrains == NB_MAX_OF_TERRAINS
end
____exports.AddNewTerrain = function(newTerrain)
if ____exports.IsTerrainsLimitNumberReached() or ____exports.IsTerrainAlreadyUsed(newTerrain) then
return false
end
Globals.udg_used_terrain_types[Globals.udg_nb_used_terrains + 1] = newTerrain
Globals.udg_nb_used_terrains = Globals.udg_nb_used_terrains + 1
return true
end
____exports.CanUseTerrain = function(terrainType)
if ____exports.IsTerrainAlreadyUsed(terrainType) then
return true
end
return ____exports.AddNewTerrain(terrainType)
end
____exports.GetRandomTerrain = function()
return TerrainTypeMax.TerrainTypeMaxId2TerrainTypeId(GetRandomInt(1, TerrainTypeNamesAndData.NB_TERRAINS_TOTAL))
end
____exports.GetRandomUsedTerrain = function()
return Globals.udg_used_terrain_types[GetRandomInt(0, Globals.udg_nb_used_terrains - 1) + 1]
end
____exports.GetRandomNotUsedTerrain = function()
local terrainType
while true do
terrainType = ____exports.GetRandomTerrain()
if not ____exports.IsTerrainAlreadyUsed(terrainType) then
break
end
end
return terrainType
end
____exports.GetTerrainName = function(terrain)
if terrain > TerrainTypeNamesAndData.NB_TERRAINS_TOTAL then
return TerrainTypeNamesAndData.TERRAIN_TYPE_NAMES[TerrainTypeMax.TerrainTypeId2TerrainTypeMaxId(terrain) + 1]
end
if terrain <= 0 then
return nil
end
return TerrainTypeNamesAndData.TERRAIN_TYPE_NAMES[terrain + 1]
end
____exports.GetTerrainData = function(terrain)
local str
local maxId
local terrainType
if terrain > TerrainTypeNamesAndData.NB_TERRAINS_TOTAL then
maxId = TerrainTypeMax.TerrainTypeId2TerrainTypeMaxId(terrain)
elseif terrain > 0 then
maxId = terrain
terrain = TerrainTypeMax.TerrainTypeMaxId2TerrainTypeId(maxId)
else
return nil
end
str = udg_colorCode[RED + 1] .. TerrainTypeNamesAndData.TERRAIN_TYPE_DATA[maxId + 1]
terrainType = TerrainTypeId2TerrainType(terrain)
if terrainType then
if terrainType:getKind() == "slide" then
str = str .. COLOR_TERRAIN_SLIDE
else
if terrainType:getKind() == "walk" then
str = str .. COLOR_TERRAIN_WALK
else
str = str .. COLOR_TERRAIN_DEATH
end
end
str = (str .. " ") .. terrainType.label
if terrainType.theAlias ~= nil then
str = (str .. " ") .. terrainType.theAlias
end
end
return str
end
____exports.DisplayTerrainDataToPlayer = function(p, terrain)
DisplayTimedTextToPlayer(
p,
0,
0,
TERRAIN_DATA_DISPLAY_TIME,
____exports.GetTerrainData(terrain)
)
end
return ____exports
end,
["src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____Terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_functions")
local CanUseTerrain = ____Terrain_functions.CanUseTerrain
____exports.GetNbCaseBetween = function(minX, minY, maxX, maxY)
return R2I((maxX - minX) / LARGEUR_CASE) * R2I((maxY - minY) / LARGEUR_CASE)
end
____exports.ChangeTerrainType = function(x, y, terrainTypeId)
SetTerrainType(
x,
y,
terrainTypeId,
-1,
1,
0
)
end
____exports.ChangeTerrainBetween = function(terrainType, x1, y1, x2, y2)
local minX = RMinBJ(x1, x2)
local minY = RMinBJ(y1, y2)
local maxX = RMaxBJ(x1, x2)
local maxY = RMaxBJ(y1, y2)
local r
local x
local y
if not CanUseTerrain(terrainType) then
return false
end
x = minX
y = minY
while true do
if y > maxY then
break
end
while true do
if x > maxX then
break
end
____exports.ChangeTerrainType(x, y, terrainType)
x = x + LARGEUR_CASE
end
x = minX
y = y + LARGEUR_CASE
end
return true
end
return ____exports
end,
["src.Utils.ThemeUtils"] = function(...)
local ____exports = {}
local ____Ascii = require("src.core.01_libraries.Ascii")
local String2Ascii = ____Ascii.String2Ascii
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local ____globals = require("globals")
local getUdgLevels = ____globals.getUdgLevels
local getUdgMonsterTypes = ____globals.getUdgMonsterTypes
local globals = ____globals.globals
local function initThemeUtils()
local availableThemes = {fullskill = {
terrainOrder = {"death", "slide", "walk"},
walkTerrain = "Lgrd",
slideTerrain = "Nice",
deathTerrain = "Ywmb",
monsterIds = {"hfoo"}
}, murloc = {
terrainOrder = {"slide", "death", "walk"},
walkTerrain = "Yblm",
slideTerrain = "Nsnw",
deathTerrain = "Avin",
monsterIds = {
"nmrl",
"nmrr",
"nmfs",
"nmrm",
"nmmu"
}
}}
local function modifyTerrain(fromTerrain, toTerrain)
local y = globals.MAP_MIN_Y
while y <= globals.MAP_MAX_Y do
local x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
local tt = GetTerrainType(x, y)
if tt == fromTerrain then
ChangeTerrainType(x, y, toTerrain)
end
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
end
local currentTheme = nil
local currentAvailableMonsters = {}
local appliedMonsters = {}
local function applyGameTheme()
if not currentTheme then
return
end
local monsterTypes = getUdgMonsterTypes()
local availableMonsters = {}
for ____, i in ipairs(availableThemes[currentTheme].monsterIds) do
local cMonster = monsterTypes:getByLabel((("sgt" .. currentTheme) .. "m") .. i)
if not cMonster then
cMonster = monsterTypes:new(
(("sgt" .. currentTheme) .. "m") .. i,
String2Ascii(i),
1,
40,
380,
false
)
end
arrayPush(availableMonsters, cMonster)
end
currentAvailableMonsters = availableMonsters
for _, level in pairs(getUdgLevels():getAll()) do
if level:isActivated() then
for _, monster in pairs(level.monsters:getAll()) do
local oldMonsterType = monster:getMonsterType()
if oldMonsterType then
monster:setMonsterType(availableMonsters[GetRandomInt(0, #availableMonsters - 1) + 1])
appliedMonsters[monster:getId()] = oldMonsterType
end
end
for _, monsterSpawn in pairs(level.monsterSpawns:getAll()) do
monsterSpawn:refresh()
end
end
end
end
local function getRandomAvailableMonsterType()
local ____currentAvailableMonsters_2 = currentAvailableMonsters
if ____currentAvailableMonsters_2 then
local ____currentAvailableMonsters_length_0 = currentAvailableMonsters
if ____currentAvailableMonsters_length_0 ~= nil then
____currentAvailableMonsters_length_0 = #____currentAvailableMonsters_length_0
end
____currentAvailableMonsters_2 = ____currentAvailableMonsters_length_0 > 0
end
if ____currentAvailableMonsters_2 then
return currentAvailableMonsters[GetRandomInt(0, #currentAvailableMonsters - 1) + 1]
end
end
return {
applyGameTheme = applyGameTheme,
getRandomAvailableMonsterType = getRandomAvailableMonsterType,
getCurrentTheme = function() return currentTheme end,
setCurrentTheme = function(theme)
if not theme then
currentAvailableMonsters = nil
for _, level in pairs(getUdgLevels():getAll()) do
if level:isActivated() then
for _, monster in pairs(level.monsters:getAll()) do
local oldMonsterType = appliedMonsters[monster:getId()]
if oldMonsterType then
monster:setMonsterType(oldMonsterType)
appliedMonsters[monster:getId()] = nil
end
end
for _, monsterSpawn in pairs(level.monsterSpawns:getAll()) do
monsterSpawn:refresh()
end
end
end
end
currentTheme = theme
end,
availableThemes = availableThemes,
modifyTerrain = modifyTerrain
}
end
____exports.ThemeUtils = initThemeUtils()
return ____exports
end,
["src.core.04_STRUCTURES.Meteor.MeteorArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local IsItemBetweenLocs = ____Basic_functions.IsItemBetweenLocs
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____MonsterArray = require("src.core.04_STRUCTURES.Monster.MonsterArray")
local MONSTER_NEAR_DIFF_MAX = ____MonsterArray.MONSTER_NEAR_DIFF_MAX
local ____Meteor = require("src.core.04_STRUCTURES.Meteor.Meteor")
local Meteor = ____Meteor.Meteor
____exports.MeteorArray = __TS__Class()
local MeteorArray = ____exports.MeteorArray
MeteorArray.name = "MeteorArray"
__TS__ClassExtends(MeteorArray, BaseArray)
function MeteorArray.prototype.____constructor(self, level)
BaseArray.prototype.____constructor(self, false)
self.new = function(____, meteor, createMeteor)
self:_new(meteor)
local ____ = createMeteor and meteor:createMeteorItem()
meteor.level = self.level
end
self.newFromJson = function(____, meteorsJson)
for ____, m in ipairs(meteorsJson) do
local meteor = __TS__New(Meteor, m.x, m.y)
self:new(meteor, false)
end
end
self.removeMeteor = function(____, meteorId)
__TS__Delete(self.data, meteorId)
end
self.clearMeteor = function(____, meteorId)
if self.data[meteorId] then
self.data[meteorId]:destroy()
__TS__Delete(self.data, meteorId)
return true
else
return false
end
end
self.createMeteorsItems = function()
for _, meteor in pairs(self.data) do
meteor:createMeteorItem()
end
end
self.removeMeteorsItems = function()
for _, meteor in pairs(self.data) do
meteor:removeMeteorItem()
end
end
self.getMeteorNear = function(____, x, y)
for _, meteor in pairs(self.data) do
local item = meteor:getItem()
if item then
local xMeteor = GetItemX(item)
local yMeteor = GetItemY(item)
if RAbsBJ(x - xMeteor) < MONSTER_NEAR_DIFF_MAX and RAbsBJ(y - yMeteor) < MONSTER_NEAR_DIFF_MAX then
return meteor
end
end
end
return nil
end
self.level = level
end
function MeteorArray.prototype.getMeteorsBetweenLocs(self, x1, y1, x2, y2)
local arr = MemoryHandler.getEmptyArray()
for _, meteor in pairs(self.data) do
local item = meteor:getItem()
if item and IsItemBetweenLocs(
item,
x1,
y1,
x2,
y2
) then
arrayPush(arr, meteor)
end
end
return arr
end
return ____exports
end,
["src.core.04_STRUCTURES.MonsterSpawn.MonsterSpawnArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local convertTextToAngle = ____Basic_functions.convertTextToAngle
local ____globals = require("globals")
local getUdgMonsterTypes = ____globals.getUdgMonsterTypes
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____MonsterSpawn = require("src.core.04_STRUCTURES.MonsterSpawn.MonsterSpawn")
local MonsterSpawn = ____MonsterSpawn.MonsterSpawn
____exports.MonsterSpawnArray = __TS__Class()
local MonsterSpawnArray = ____exports.MonsterSpawnArray
MonsterSpawnArray.name = "MonsterSpawnArray"
__TS__ClassExtends(MonsterSpawnArray, BaseArray)
function MonsterSpawnArray.prototype.____constructor(self, level)
BaseArray.prototype.____constructor(self, false)
self.getByLabel = function(____, label)
for _, ms in pairs(self.data) do
if ms:getLabel() == label then
return ms
end
end
return nil
end
self.newFromJson = function(____, monsterSpawnsJson)
for ____, ms in ipairs(monsterSpawnsJson) do
local mt = getUdgMonsterTypes():getByLabel(ms.monsterTypeLabel)
if not mt then
Text.erA(("Monster type \"" .. tostring(ms.monsterTypeLabel)) .. "\" unknown")
else
local ____MonsterSpawn_2 = MonsterSpawn
local ____ms_label_1 = ms.label
local ____temp_0
if type(ms.sens) == "string" then
____temp_0 = convertTextToAngle(ms.sens)
else
____temp_0 = ms.sens
end
local monsterSpawn = __TS__New(
____MonsterSpawn_2,
____ms_label_1,
mt,
____temp_0,
ms.frequence,
ms.minX,
ms.minY,
ms.maxX,
ms.maxY
)
monsterSpawn:setSpawnAmount(ms.spawnAmount or 1)
monsterSpawn:setSpawnOffset(ms.spawnOffset or 0)
monsterSpawn:setInitialDelay(ms.initialDelay or 0)
monsterSpawn:setFixedSpawnOffset(ms.fixedSpawnOffset)
monsterSpawn:setFixedSpawnOffsetBounce(ms.fixedSpawnOffsetBounce)
monsterSpawn:setFixedSpawnOffsetMirrored(ms.fixedSpawnOffsetMirrored)
self:new(monsterSpawn, false)
end
end
end
self.removeMonsterSpawn = function(____, monsterSpawnId)
__TS__Delete(self.data, monsterSpawnId)
self.level:updateDebugRegions()
end
self.clearMonsterSpawn = function(____, label)
local ms = self:getByLabel(label)
if ms then
__TS__Delete(
self.data,
ms:getId()
)
ms:destroy()
return true
else
return false
end
end
self.activate = function()
for _, ms in pairs(self.data) do
ms:activate()
end
end
self.deactivate = function()
for _, ms in pairs(self.data) do
ms:deactivate()
end
end
self.displayForPlayer = function(____, p)
local nbMs = self:count()
if nbMs == 0 then
Text.erP(p, "no monster spawn for this level")
else
for _, ms in pairs(self.data) do
ms:displayForPlayer(p)
end
end
end
self.changeLabel = function(____, oldLabel, newLabel)
local msWithOldLabel = self:getByLabel(oldLabel)
local msWithNewLabel = self:getByLabel(newLabel)
if not msWithOldLabel or msWithNewLabel then
return false
end
msWithOldLabel:setLabel(newLabel)
return true
end
self.level = level
end
function MonsterSpawnArray.prototype.new(self, monsterSpawn, activate)
self:_new(monsterSpawn)
local ____ = activate and monsterSpawn:activate()
monsterSpawn.level = self.level
self.level:updateDebugRegions()
end
return ____exports
end,
["src.core.04_STRUCTURES.Monster_properties.CircleMobArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____MonsterArray = require("src.core.04_STRUCTURES.Monster.MonsterArray")
local MONSTER_NEAR_DIFF_MAX = ____MonsterArray.MONSTER_NEAR_DIFF_MAX
local ____CircleMob = require("src.core.04_STRUCTURES.Monster_properties.CircleMob")
local CircleMob = ____CircleMob.CircleMob
____exports.CircleMobArray = __TS__Class()
local CircleMobArray = ____exports.CircleMobArray
CircleMobArray.name = "CircleMobArray"
__TS__ClassExtends(CircleMobArray, BaseArray)
function CircleMobArray.prototype.____constructor(self, level)
BaseArray.prototype.____constructor(self, true)
self.new = function(____, triggerMob, rotationSpeed, direction, facing, radius)
if triggerMob:getCircleMob() then
error("Monster is already a circle", 0)
end
local circleMob = __TS__New(
CircleMob,
triggerMob,
rotationSpeed,
direction,
facing,
radius
)
circleMob.level = self.level
local id = self:_new(circleMob)
circleMob.id = id
return circleMob
end
self.newFromJson = function(____, circleMobsJson)
for ____, cm in ipairs(circleMobsJson) do
local mainMob = self.level.monsters:get(cm.mainMobId)
if not mainMob then
Text.erA(("Monster id \"" .. tostring(cm.mainMobId)) .. "\" unknown")
else
local circleMob = self:new(
mainMob,
cm.rotationSpeed,
cm.direction,
cm.facing,
cm.radius
)
for _, blockMobId in pairs(cm.blockMobsIds) do
local mob = self.level.monsters:get(blockMobId)
if not mob then
Text.erA(("Monster id \"" .. tostring(blockMobId)) .. "\" unknown")
else
circleMob:addBlockMob(mob)
end
end
end
end
end
self.removeCircleMob = function(____, circleMobArrayId)
__TS__Delete(self.data, circleMobArrayId)
end
self.circleCircleMob = function(____, circleMobId)
if self.data[circleMobId] then
self.data[circleMobId]:destroy()
__TS__Delete(self.data, circleMobId)
return true
else
return false
end
end
self.initializeCircleMobs = function()
for _, circleMob in pairs(self.data) do
circleMob:initialize()
end
end
self.closeCircleMobs = function()
for _, circleMob in pairs(self.data) do
circleMob:close()
end
end
self.level = level
end
function CircleMobArray.prototype.getCircleMobNear(self, x, y)
local xMob
local yMob
local i = 0
while i <= self.lastInstanceId do
if self.data[i] then
local unit = self.data[i]:getTriggerMob().u
if unit then
xMob = GetUnitX(unit)
yMob = GetUnitY(unit)
if RAbsBJ(x - xMob) < MONSTER_NEAR_DIFF_MAX and RAbsBJ(y - yMob) < MONSTER_NEAR_DIFF_MAX then
return self.data[i]
end
end
end
i = i + 1
end
return nil
end
return ____exports
end,
["src.core.04_STRUCTURES.Monster_properties.ClearMobArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____MonsterArray = require("src.core.04_STRUCTURES.Monster.MonsterArray")
local MONSTER_NEAR_DIFF_MAX = ____MonsterArray.MONSTER_NEAR_DIFF_MAX
local ____ClearMob = require("src.core.04_STRUCTURES.Monster_properties.ClearMob")
local ClearMob = ____ClearMob.ClearMob
____exports.ClearMobArray = __TS__Class()
local ClearMobArray = ____exports.ClearMobArray
ClearMobArray.name = "ClearMobArray"
__TS__ClassExtends(ClearMobArray, BaseArray)
function ClearMobArray.prototype.____constructor(self, level)
BaseArray.prototype.____constructor(self, true)
self.new = function(____, triggerMob, disableDuration, initialize)
local clearMob = __TS__New(ClearMob, triggerMob, disableDuration)
local ____ = initialize and clearMob:initialize()
clearMob.level = self.level
local id = self:_new(clearMob)
clearMob.id = id
return clearMob
end
self.newFromJson = function(____, clearMobsJson)
for ____, cm in ipairs(clearMobsJson) do
local mt = self.level.monsters:get(cm.triggerMobId)
if not mt then
Text.erA(("Monster label \"" .. tostring(cm.triggerMobId)) .. "\" unknown")
else
local clearMob = self:new(mt, cm.disableDuration, false)
for _, blockMobId in pairs(cm.blockMobsIds) do
local mt = self.level.monsters:get(blockMobId)
if not mt then
Text.erA(("Monster label \"" .. tostring(cm.blockMobsIds)) .. "\" unknown")
else
clearMob:addBlockMob(mt)
end
end
end
end
end
self.removeClearMob = function(____, clearMobArrayId)
__TS__Delete(self.data, clearMobArrayId)
end
self.clearClearMob = function(____, clearMobId)
if self.data[clearMobId] then
self.data[clearMobId]:destroy()
__TS__Delete(self.data, clearMobId)
return true
else
return false
end
end
self.initializeClearMobs = function()
for _, clearMob in pairs(self.data) do
clearMob:initialize()
end
end
self.closeClearMobs = function()
for _, clearMob in pairs(self.data) do
clearMob:close()
end
end
self.level = level
end
function ClearMobArray.prototype.getClearMobNear(self, x, y)
local xMob
local yMob
local i = 0
while i <= self.lastInstanceId do
if self.data[i] then
local unit = self.data[i]:getTriggerMob().u
if unit then
xMob = GetUnitX(unit)
yMob = GetUnitY(unit)
if RAbsBJ(x - xMob) < MONSTER_NEAR_DIFF_MAX and RAbsBJ(y - yMob) < MONSTER_NEAR_DIFF_MAX then
return self.data[i]
end
end
end
i = i + 1
end
return nil
end
return ____exports
end,
["src.core.04_STRUCTURES.Monster_properties.PortalMobArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____MonsterArray = require("src.core.04_STRUCTURES.Monster.MonsterArray")
local MONSTER_NEAR_DIFF_MAX = ____MonsterArray.MONSTER_NEAR_DIFF_MAX
local ____PortalMob = require("src.core.04_STRUCTURES.Monster_properties.PortalMob")
local PortalMob = ____PortalMob.PortalMob
____exports.PortalMobArray = __TS__Class()
local PortalMobArray = ____exports.PortalMobArray
PortalMobArray.name = "PortalMobArray"
__TS__ClassExtends(PortalMobArray, BaseArray)
function PortalMobArray.prototype.____constructor(self, level)
BaseArray.prototype.____constructor(self, true)
self.new = function(____, triggerMob, freezeDuration, portalEffect, portalEffectDuration)
local portalMob = __TS__New(
PortalMob,
triggerMob,
freezeDuration,
portalEffect,
portalEffectDuration
)
portalMob:initialize()
portalMob.level = self.level
local id = self:_new(portalMob)
portalMob.id = id
return portalMob
end
self.newFromJson = function(____, portalMobsJson)
for ____, v in ipairs(portalMobsJson) do
local mt = self.level.monsters:get(v.triggerMobId)
if not mt then
Text.erA(("Monster label \"" .. tostring(v.triggerMobId)) .. "\" unknown")
else
local portalMob = self:new(mt, v.freezeDuration, v.portalEffect, v.portalEffectDuration)
portalMob:setTargetMob(self.level.monsters:get(v.targetMobId))
end
end
end
self.removePortalMob = function(____, portalMobArrayId)
__TS__Delete(self.data, portalMobArrayId)
end
self.portalPortalMob = function(____, portalMobId)
if self.data[portalMobId] then
self.data[portalMobId]:destroy()
__TS__Delete(self.data, portalMobId)
return true
else
return false
end
end
self.initializePortalMobs = function()
for _, portalMob in pairs(self.data) do
portalMob:initialize()
end
end
self.closePortalMobs = function()
for _, portalMob in pairs(self.data) do
portalMob:close()
end
end
self.level = level
end
function PortalMobArray.prototype.getPortalMobNear(self, x, y)
local xMob
local yMob
local i = 0
while i <= self.lastInstanceId do
if self.data[i] then
local ____table_data_i_getTriggerMob_result_u_0 = self.data[i]:getTriggerMob()
if ____table_data_i_getTriggerMob_result_u_0 ~= nil then
____table_data_i_getTriggerMob_result_u_0 = ____table_data_i_getTriggerMob_result_u_0.u
end
local unit = ____table_data_i_getTriggerMob_result_u_0
if unit then
xMob = GetUnitX(unit)
yMob = GetUnitY(unit)
if RAbsBJ(x - xMob) < MONSTER_NEAR_DIFF_MAX and RAbsBJ(y - yMob) < MONSTER_NEAR_DIFF_MAX then
return self.data[i]
end
end
end
i = i + 1
end
return nil
end
return ____exports
end,
["src.core.04_STRUCTURES.Level.StaticSlideArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____StaticSlide = require("src.core.04_STRUCTURES.Level.StaticSlide")
local StaticSlide = ____StaticSlide.StaticSlide
____exports.StaticSlideArray = __TS__Class()
local StaticSlideArray = ____exports.StaticSlideArray
StaticSlideArray.name = "StaticSlideArray"
__TS__ClassExtends(StaticSlideArray, BaseArray)
function StaticSlideArray.prototype.____constructor(self, level)
BaseArray.prototype.____constructor(self, true)
self.new = function(____, x1, y1, x2, y2, x3, y3, x4, y4, angle, speed)
local staticSlide = __TS__New(
StaticSlide,
x1,
y1,
x2,
y2,
x3,
y3,
x4,
y4,
angle,
speed
)
staticSlide.id = self:_new(staticSlide)
staticSlide.level = self.level
self.level:updateDebugRegions()
return staticSlide
end
self.newFromJson = function(____, staticSlidesJson)
for ____, s in ipairs(staticSlidesJson) do
self:new(
s.x1,
s.y1,
s.x2,
s.y2,
s.x3,
s.y3,
s.x4,
s.y4,
s.angle,
s.speed
)
end
end
self.removeStaticSlide = function(____, itemId)
__TS__Delete(self.data, itemId)
self.level:updateDebugRegions()
end
self.removeAllStaticSlides = function()
for _, staticSlide in pairs(self.data) do
staticSlide:destroy()
end
self.level:updateDebugRegions()
end
self.activate = function(____, activ)
for _, staticSlide in pairs(self.data) do
staticSlide:activate(activ)
end
end
self.getStaticSlideFromPoint = function(____, x, y)
for _, staticSlide in pairs(self.data) do
if staticSlide:containsPoint(x, y) then
return staticSlide
end
end
return nil
end
self.level = level
end
return ____exports
end,
["src.core.04_STRUCTURES.Level.Triggers"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
____exports.Trigger = __TS__Class()
local Trigger = ____exports.Trigger
Trigger.name = "Trigger"
function Trigger.prototype.____constructor(self)
self.t = CreateTrigger()
self.destroy = function()
DestroyTrigger(self.t)
self.t = nil
end
self.activate = function(____, activ)
if activ then
EnableTrigger(self.t)
else
DisableTrigger(self.t)
end
end
end
____exports.TriggerArray = __TS__Class()
local TriggerArray = ____exports.TriggerArray
TriggerArray.name = "TriggerArray"
function TriggerArray.prototype.____constructor(self)
self.triggers = {}
self.lastInstance = -1
self.destroy = function()
do
local i = 0
while i <= self.lastInstance do
self.triggers[i + 1]:destroy()
__TS__Delete(self.triggers, i + 1)
i = i + 1
end
end
self.lastInstance = -1
end
self.activate = function(____, activ)
do
local i = 0
while i <= self.lastInstance do
if self.triggers[i + 1] ~= nil then
self.triggers[i + 1]:activate(activ)
end
i = i + 1
end
end
end
end
return ____exports
end,
["src.core.04_STRUCTURES.Level.VisibilityModifierArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____VisibilityModifier = require("src.core.04_STRUCTURES.Level.VisibilityModifier")
local VisibilityModifier = ____VisibilityModifier.VisibilityModifier
____exports.VisibilityModifierArray = __TS__Class()
local VisibilityModifierArray = ____exports.VisibilityModifierArray
VisibilityModifierArray.name = "VisibilityModifierArray"
__TS__ClassExtends(VisibilityModifierArray, BaseArray)
function VisibilityModifierArray.prototype.____constructor(self, level)
BaseArray.prototype.____constructor(self, true)
self.new = function(____, x1, y1, x2, y2)
local visibilityModifier = __TS__New(
VisibilityModifier,
x1,
y1,
x2,
y2
)
local id = self:_new(visibilityModifier)
visibilityModifier.level = self.level
visibilityModifier.id = id
return visibilityModifier
end
self.newFromExisting = function(____, vm)
self:_new(vm)
return vm
end
self.newFromJson = function(____, visibilitiesJson)
for ____, v in ipairs(visibilitiesJson) do
self:new(v.x1, v.y1, v.x2, v.y2)
end
end
self.removeVisibility = function(____, arrayId)
__TS__Delete(self.data, arrayId)
end
self.removeAllVisibilityModifiers = function()
for _, vm in pairs(self.data) do
vm:destroy()
end
end
self.activate = function(____, activ)
for _, vm in pairs(self.data) do
vm:activate(activ)
end
end
self.level = level
end
return ____exports
end,
["src.core.04_STRUCTURES.Level.checkpointReviveHeroes_function"] = function(...)
local ____exports = {}
local ____ProgressionUtils = require("src.Utils.ProgressionUtils")
local progressionUtils = ____ProgressionUtils.progressionUtils
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local StopUnit = ____Basic_functions.StopUnit
local ____Change_all_terrains = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Change_all_terrains")
local ChangeAllTerrains = ____Change_all_terrains.ChangeAllTerrains
local ____LevelProgression = require("src.core.04_STRUCTURES.Level.LevelProgression")
local sameLevelProgression = ____LevelProgression.sameLevelProgression
____exports.checkPointReviveHeroes = function(levelForRevining, revivingFinisher)
do
local i = 0
while i < NB_ESCAPERS do
do
local escaper = getUdgEscapers():get(i)
if escaper then
if escaper ~= revivingFinisher then
local unit = escaper:getHero()
if revivingFinisher and not sameLevelProgression(revivingFinisher, escaper) then
goto __continue3
end
if not escaper:reviveAtStart() then
escaper:moveHero(
levelForRevining:getStartRandomX(),
levelForRevining:getStartRandomY()
)
local ____ = unit and StopUnit(unit)
escaper:pause(true)
escaper:setLastZ(0)
escaper:setOldDiffZ(0)
escaper:setSpeedZ(0)
end
local ____ = unit and SetUnitFlyHeight(unit, 0, 0)
escaper:enableSlide(false)
else
progressionUtils.resetPlayerProgressionState(escaper)
end
end
end
::__continue3::
i = i + 1
end
end
TriggerSleepAction(1)
do
local i = 0
while i < NB_ESCAPERS do
local escaper = getUdgEscapers():get(i)
if escaper and escaper ~= revivingFinisher then
escaper:pause(false)
end
i = i + 1
end
end
if ChangeAllTerrains.udg_changeAllTerrainsAtRevive then
TriggerSleepAction(1)
ChangeAllTerrains.ChangeAllTerrains("normal")
end
end
return ____exports
end,
["src.core.04_STRUCTURES.Level.Level"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__New = ____lualib.__TS__New
local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____ThemeUtils = require("src.Utils.ThemeUtils")
local ThemeUtils = ____ThemeUtils.ThemeUtils
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgLevels = ____globals.getUdgLevels
local ____MecHookArray = require("src.core.API.MecHookArray")
local MecHookArray = ____MecHookArray.MecHookArray
local ____MeteorArray = require("src.core.04_STRUCTURES.Meteor.MeteorArray")
local MeteorArray = ____MeteorArray.MeteorArray
local ____MonsterArray = require("src.core.04_STRUCTURES.Monster.MonsterArray")
local MonsterArray = ____MonsterArray.MonsterArray
local ____MonsterSpawnArray = require("src.core.04_STRUCTURES.MonsterSpawn.MonsterSpawnArray")
local MonsterSpawnArray = ____MonsterSpawnArray.MonsterSpawnArray
local ____CircleMobArray = require("src.core.04_STRUCTURES.Monster_properties.CircleMobArray")
local CircleMobArray = ____CircleMobArray.CircleMobArray
local ____ClearMobArray = require("src.core.04_STRUCTURES.Monster_properties.ClearMobArray")
local ClearMobArray = ____ClearMobArray.ClearMobArray
local ____PortalMobArray = require("src.core.04_STRUCTURES.Monster_properties.PortalMobArray")
local PortalMobArray = ____PortalMobArray.PortalMobArray
local ____StartAndEnd = require("src.core.04_STRUCTURES.Level.StartAndEnd")
local End = ____StartAndEnd.End
local Start = ____StartAndEnd.Start
local ____StaticSlideArray = require("src.core.04_STRUCTURES.Level.StaticSlideArray")
local StaticSlideArray = ____StaticSlideArray.StaticSlideArray
local ____Triggers = require("src.core.04_STRUCTURES.Level.Triggers")
local TriggerArray = ____Triggers.TriggerArray
local ____VisibilityModifierArray = require("src.core.04_STRUCTURES.Level.VisibilityModifierArray")
local VisibilityModifierArray = ____VisibilityModifierArray.VisibilityModifierArray
local ____checkpointReviveHeroes_function = require("src.core.04_STRUCTURES.Level.checkpointReviveHeroes_function")
local checkPointReviveHeroes = ____checkpointReviveHeroes_function.checkPointReviveHeroes
____exports.Level = __TS__Class()
local Level = ____exports.Level
Level.name = "Level"
function Level.prototype.____constructor(self)
self.id = -1
self.lights = {}
self.debugRegionsVisible = false
self.hooks_onStart = __TS__New(MecHookArray)
self.hooks_onEnd = __TS__New(MecHookArray)
self.getStart = function()
return self.start
end
self.getStartRandomX = function()
return self.start and self.start:getRandomX() or 0
end
self.getStartRandomY = function()
return self.start and self.start:getRandomY() or 0
end
self.getEnd = function()
return self["end"]
end
self.destroy = function()
local ____ = self.start and self.start:destroy()
local ____ = self["end"] and self["end"]:destroy()
self.visibilities:destroy()
self.triggers:destroy()
self.monsters:destroy()
self.monsterSpawns:destroy()
self:destroyDebugRegions()
end
self.getId = function()
return self.id
end
self.isActivated = function()
return self.isActivatedB
end
self.getNbLives = function()
return self.livesEarnedAtBeginning
end
self.removeVisibilities = function()
self.visibilities:removeAllVisibilityModifiers()
end
self.getStartMessage = function()
return self.startMessage
end
self.updateDebugRegions = function()
self:destroyDebugRegions()
if self.debugRegionsVisible then
local ____ = self.start and self:drawRegion(self.start.minX, self.start.minY, self.start.maxX, self.start.maxY)
local ____ = self["end"] and self:drawRegion(self["end"].minX, self["end"].minY, self["end"].maxX, self["end"].maxY)
for _, staticSlide in pairs(self.staticSlides:getAll()) do
self:drawRegion(
staticSlide:getX1(),
staticSlide:getY1(),
staticSlide:getX2(),
staticSlide:getY2()
)
self:drawRegion(
staticSlide:getX3(),
staticSlide:getY3(),
staticSlide:getX4(),
staticSlide:getY4()
)
end
for _, monsterSpawn in pairs(self.monsterSpawns:getAll()) do
local rotatedPoints = monsterSpawn:getRotatedPoints()
self:drawRectangle(
rotatedPoints[1].x,
rotatedPoints[1].y,
rotatedPoints[2].x,
rotatedPoints[2].y,
rotatedPoints[3].x,
rotatedPoints[3].y,
rotatedPoints[4].x,
rotatedPoints[4].y
)
MemoryHandler.destroyArray(rotatedPoints)
if #monsterSpawn.unspawnregpoints > 0 then
for ____, reg in ipairs(monsterSpawn.unspawnregpoints) do
self:drawRegion(reg[1], reg[2], reg[3], reg[4])
end
end
if monsterSpawn.multiRegionPatrols then
do
local i = 0
while i < #monsterSpawn.x1 do
self:drawRegion(monsterSpawn.x1[i + 1], monsterSpawn.y1[i + 1], monsterSpawn.x2[i + 1], monsterSpawn.y2[i + 1])
i = i + 1
end
end
end
end
end
end
self.setDebugRegionsVisible = function(____, active)
self.debugRegionsVisible = active
self:updateDebugRegions()
end
self.drawRectangle = function(____, x1, y1, x2, y2, x3, y3, x4, y4)
self:drawLine(x1, y1, x2, y2)
self:drawLine(x2, y2, x3, y3)
self:drawLine(x3, y3, x4, y4)
self:drawLine(x4, y4, x1, y1)
end
self.drawRegion = function(____, x1, y1, x2, y2)
self:drawLine(x1, y1, x1, y2)
self:drawLine(x1, y1, x2, y1)
self:drawLine(x2, y2, x1, y2)
self:drawLine(x2, y2, x2, y1)
end
self.drawLine = function(____, x1, y1, x2, y2)
local light = AddLightning(
"DRAM",
false,
x1,
y1,
x2,
y2
)
arrayPush(self.lights, light)
end
self.destroyDebugRegions = function()
for ____, light in ipairs(self.lights) do
DestroyLightning(light)
end
__TS__ArraySetLength(self.lights, 0)
end
self.toJson = function()
local json = MemoryHandler.getEmptyObject()
json.id = self.id
if self:getStartMessage() ~= nil and self:getStartMessage() ~= "" then
json.startMessage = self:getStartMessage()
end
json.nbLives = self:getNbLives()
local ____table_getStart_result_toJson_result_0 = self:getStart()
if ____table_getStart_result_toJson_result_0 ~= nil then
____table_getStart_result_toJson_result_0 = ____table_getStart_result_toJson_result_0:toJson()
end
json.start = ____table_getStart_result_toJson_result_0
local ____table_getEnd_result_toJson_result_2 = self:getEnd()
if ____table_getEnd_result_toJson_result_2 ~= nil then
____table_getEnd_result_toJson_result_2 = ____table_getEnd_result_toJson_result_2:toJson()
end
json["end"] = ____table_getEnd_result_toJson_result_2
json.visibilities = self.visibilities:toJson()
json.monsters = self.monsters:toJson()
json.monsterSpawns = self.monsterSpawns:toJson()
json.meteors = self.meteors:toJson()
json.clearMobs = self.clearMobs:toJson()
json.portalMobs = self.portalMobs:toJson()
json.circleMobs = self.circleMobs:toJson()
json.staticSlides = self.staticSlides:toJson()
return json
end
self.visibilities = __TS__New(VisibilityModifierArray, self)
self.triggers = __TS__New(TriggerArray)
self.monsters = __TS__New(MonsterArray, self)
self.monsterSpawns = __TS__New(MonsterSpawnArray, self)
self.meteors = __TS__New(MeteorArray, self)
self.clearMobs = __TS__New(ClearMobArray, self)
self.portalMobs = __TS__New(PortalMobArray, self)
self.circleMobs = __TS__New(CircleMobArray, self)
self.staticSlides = __TS__New(StaticSlideArray, self)
self.livesEarnedAtBeginning = 1
self.isActivatedB = false
self.startMessage = ""
end
function Level.prototype.activate(self, activ)
if self.isActivatedB == activ then
return
end
local ____ = self["end"] and self["end"]:activate(activ)
self.triggers:activate(activ)
if activ then
if self.startMessage and ____exports.Level.earningLivesActivated then
Text.A(self.startMessage)
end
self.visibilities:activate(true)
self.monsters:createMonstersUnits()
self.monsterSpawns:activate()
self.meteors:createMeteorsItems()
self.clearMobs:initializeClearMobs()
self.portalMobs:initializePortalMobs()
self.circleMobs:initializeCircleMobs()
self.staticSlides:activate(true)
if getUdgLevels():getLevelProgression() == "all" then
if ____exports.Level.earningLivesActivated and self:getId() > 0 then
ServiceManager.getService("Lives").add(self.livesEarnedAtBeginning)
end
end
if self.hooks_onStart then
for ____, hook in ipairs(self.hooks_onStart:getHooks()) do
hook:execute(self)
end
end
else
self.monsters:removeMonstersUnits()
self.monsterSpawns:deactivate()
self.meteors:removeMeteorsItems()
self.staticSlides:activate(false)
getUdgEscapers():deleteSpecificActionsForLevel(self)
if self.hooks_onEnd then
for ____, hook in ipairs(self.hooks_onEnd:getHooks()) do
hook:execute(self)
end
end
end
self.isActivatedB = activ
ThemeUtils.applyGameTheme()
end
function Level.prototype.checkpointReviveHeroes(self, finisher)
checkPointReviveHeroes(self, finisher)
end
function Level.prototype.newStart(self, x1, y1, x2, y2, facing)
local ____ = self.start and self.start:destroy()
self.start = __TS__New(
Start,
x1,
y1,
x2,
y2,
facing
)
self:updateDebugRegions()
end
function Level.prototype.newStartFromJson(self, data)
self:newStart(
data.minX,
data.minY,
data.maxX,
data.maxY,
data.facing
)
end
function Level.prototype.newEnd(self, x1, y1, x2, y2)
local ____ = self["end"] and self["end"]:destroy()
self["end"] = __TS__New(
End,
self.id,
x1,
y1,
x2,
y2
)
if self.isActivatedB then
self["end"]:activate(true)
end
self:updateDebugRegions()
end
function Level.prototype.newEndFromJson(self, data)
self:newEnd(data.minX, data.minY, data.maxX, data.maxY)
end
function Level.prototype.getNbMonsters(self, mode)
return self.monsters:count(mode)
end
function Level.prototype.recreateMonstersUnitsOfType(self, mt)
self.monsters:recreateMonstersUnitsOfType(mt)
end
function Level.prototype.clearMonstersOfType(self, mt)
self.monsters:clearMonstersOfType(mt)
end
function Level.prototype.refreshCastersOfType(self, ct)
self.monsters:refreshCastersOfType(ct)
end
function Level.prototype.removeCastersOfType(self, ct)
self.monsters:removeCastersOfType(ct)
end
function Level.prototype.setIsActivated(self, activated)
self.isActivatedB = activated
end
function Level.prototype.setNbLivesEarned(self, nbLives)
if nbLives < 0 then
return false
end
self.livesEarnedAtBeginning = nbLives
return true
end
function Level.prototype.newVisibilityModifier(self, x1, y1, x2, y2)
return self.visibilities:new(x1, y1, x2, y2)
end
function Level.prototype.newVisibilityModifierFromExisting(self, vm)
return self.visibilities:newFromExisting(vm)
end
function Level.prototype.activateVisibilities(self, activate)
self.visibilities:activate(activate)
end
function Level.prototype.setStartMessage(self, str)
self.startMessage = str
end
Level.earningLivesActivated = true
return ____exports
end,
["src.core.04_STRUCTURES.Monster.Immolation_skills"] = function(...)
local ____exports = {}
____exports.IMMOLATION_SKILLS = {
[5] = FourCC("I005"),
[10] = FourCC("I010"),
[15] = FourCC("I015"),
[20] = FourCC("I020"),
[25] = FourCC("I025"),
[30] = FourCC("I030"),
[35] = FourCC("I035"),
[40] = FourCC("I040"),
[45] = FourCC("I045"),
[50] = FourCC("I050"),
[55] = FourCC("I055"),
[60] = FourCC("I060"),
[65] = FourCC("I065"),
[70] = FourCC("I070"),
[75] = FourCC("I075"),
[80] = FourCC("I080"),
[85] = FourCC("I085"),
[90] = FourCC("I090"),
[95] = FourCC("I095"),
[100] = FourCC("I100"),
[105] = FourCC("I105"),
[110] = FourCC("I110"),
[115] = FourCC("I115"),
[120] = FourCC("I120"),
[125] = FourCC("I125"),
[130] = FourCC("I130"),
[135] = FourCC("I135"),
[140] = FourCC("I140"),
[145] = FourCC("I145"),
[150] = FourCC("I150"),
[155] = FourCC("I155"),
[160] = FourCC("I160"),
[165] = FourCC("I165"),
[170] = FourCC("I170"),
[175] = FourCC("I175"),
[180] = FourCC("I180"),
[185] = FourCC("I185"),
[190] = FourCC("I190"),
[195] = FourCC("I195"),
[200] = FourCC("I200"),
[205] = FourCC("I205"),
[210] = FourCC("I210"),
[215] = FourCC("I215"),
[220] = FourCC("I220"),
[225] = FourCC("I225"),
[230] = FourCC("I230"),
[235] = FourCC("I235"),
[240] = FourCC("I240"),
[245] = FourCC("I245"),
[250] = FourCC("I250"),
[255] = FourCC("I255"),
[260] = FourCC("I260"),
[265] = FourCC("I265"),
[270] = FourCC("I270"),
[275] = FourCC("I275"),
[280] = FourCC("I280"),
[285] = FourCC("I285"),
[290] = FourCC("I290"),
[295] = FourCC("I295"),
[300] = FourCC("I300"),
[305] = FourCC("I305"),
[310] = FourCC("I310"),
[315] = FourCC("I315"),
[320] = FourCC("I320"),
[325] = FourCC("I325"),
[330] = FourCC("I330"),
[335] = FourCC("I335"),
[340] = FourCC("I340"),
[345] = FourCC("I345"),
[350] = FourCC("I350"),
[355] = FourCC("I355"),
[360] = FourCC("I360"),
[365] = FourCC("I365"),
[370] = FourCC("I370"),
[375] = FourCC("I375"),
[380] = FourCC("I380"),
[385] = FourCC("I385"),
[390] = FourCC("I390"),
[395] = FourCC("I395"),
[400] = FourCC("I400")
}
return ____exports
end,
["src.core.04_STRUCTURES.Monster.MonsterType"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgLevels = ____globals.getUdgLevels
local ____Ascii = require("src.core.01_libraries.Ascii")
local Ascii2String = ____Ascii.Ascii2String
local ____Constants = require("src.core.01_libraries.Constants")
local MAX_MOVE_SPEED = ____Constants.MAX_MOVE_SPEED
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local NEUTRAL_PLAYER = ____Constants.NEUTRAL_PLAYER
local RED = ____Constants.RED
local TERRAIN_DATA_DISPLAY_TIME = ____Constants.TERRAIN_DATA_DISPLAY_TIME
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local ____Immolation_skills = require("src.core.04_STRUCTURES.Monster.Immolation_skills")
local IMMOLATION_SKILLS = ____Immolation_skills.IMMOLATION_SKILLS
____exports.MonsterType = __TS__Class()
local MonsterType = ____exports.MonsterType
MonsterType.name = "MonsterType"
function MonsterType.prototype.____constructor(self, label, unitTypeId, scale, immolationRadius, speed, isClickable)
self.setLabel = function(____, label)
self.label = label
end
self.getLabel = function()
return self.label
end
self.setAlias = function(____, theAlias)
self.theAlias = theAlias
return self
end
self.refresh = function()
local levelsMaking = {}
local levelAlreadyChecked
local nbLevelsMaking = 0
local currentLevel = getUdgLevels():getCurrentLevel()
currentLevel:recreateMonstersUnitsOfType(self)
do
local i = 0
while i < NB_ESCAPERS do
local escaper = getUdgEscapers():get(i)
if escaper and escaper:getMakingLevel() ~= currentLevel then
levelAlreadyChecked = false
do
local j = 0
while j < nbLevelsMaking do
if escaper:getMakingLevel() == levelsMaking[j + 1] then
levelAlreadyChecked = true
break
end
j = j + 1
end
end
if not levelAlreadyChecked then
levelsMaking[nbLevelsMaking + 1] = escaper:getMakingLevel()
nbLevelsMaking = nbLevelsMaking + 1
end
end
i = i + 1
end
end
do
local i = 0
while i < nbLevelsMaking do
levelsMaking[i + 1]:recreateMonstersUnitsOfType(self)
i = i + 1
end
end
end
self.destroy = function()
getUdgLevels():clearMonstersOfType(self)
end
self.getUnitTypeId = function()
return self.unitTypeId
end
self.setUnitTypeId = function(____, unitTypeId)
local testMonster = CreateUnit(
NEUTRAL_PLAYER,
unitTypeId,
0,
0,
0
)
if not testMonster then
return false
end
RemoveUnit(testMonster)
self.unitTypeId = unitTypeId
self:refresh()
return true
end
self.getScale = function()
return self.scale
end
self.setScale = function(____, scale)
if scale <= 0 and scale ~= -1 or scale == self.scale then
return false
end
self.scale = scale
self:refresh()
return true
end
self.getImmolationSkill = function()
return self.immolationSkill
end
self.setImmolation = function(____, immolationRadius)
if immolationRadius ~= 0 and not IMMOLATION_SKILLS[immolationRadius] then
return false
end
self.immolationSkill = IMMOLATION_SKILLS[immolationRadius]
self:refresh()
return true
end
self.getUnitMoveSpeed = function()
return self.speed
end
self.setUnitMoveSpeed = function(____, speed)
if speed <= 0 or speed > MAX_MOVE_SPEED then
return false
end
self.speed = speed
self:refresh()
return true
end
self.isClickable = function()
return self.isClickableB
end
self.setIsClickable = function(____, isClickable)
if self.isClickableB == isClickable then
return false
end
self.isClickableB = isClickable
self:refresh()
return true
end
self.getKillingEffectStr = function()
return self.killingEffectStr
end
self.setKillingEffectStr = function(____, effectStr)
self.killingEffectStr = effectStr
return self
end
self.setNbMeteorsToKill = function(____, nbMeteorsToKill)
if nbMeteorsToKill < 1 or nbMeteorsToKill > 9 then
return self
end
self.maxLife = nbMeteorsToKill * 10000
if self.isClickableB then
self:refresh()
end
return self
end
self.getMaxLife = function()
return self.maxLife
end
self.getHeight = function()
return self.height
end
self.setHeight = function(____, height)
if height ~= -1 and height < 0 and height ~= self.height then
return false
end
self.height = height
self:refresh()
return true
end
self.getImmolationRadiusStr = function()
if not self.immolationSkill then
return "0"
end
local immoStr = Ascii2String(self.immolationSkill)
immoStr = SubStringBJ(immoStr, 2, 4)
return I2S(S2I(immoStr))
end
self.displayForPlayer = function(____, p)
local space = " "
local display = ((udg_colorCode[RED + 1] .. self.label) .. (self.theAlias and " " .. self.theAlias or "")) .. " : '"
local scaleDisplay
local heightDisplay
if self.scale == -1 then
scaleDisplay = "default"
else
scaleDisplay = R2S(self.scale)
end
if self.height == -1 then
heightDisplay = "default"
else
heightDisplay = I2S(R2I(self.height))
end
display = (display .. Ascii2String(self.unitTypeId)) .. "'"
display = (((((((((((display .. space) .. "speed_") .. I2S(R2I(self.speed))) .. space) .. "immo_") .. self:getImmolationRadiusStr()) .. space) .. "scale_") .. scaleDisplay) .. space) .. "height_") .. heightDisplay
if self.isClickableB then
display = (((display .. space) .. "clickable") .. space) .. I2S(self.maxLife / 10000)
end
Text.P_timed(p, TERRAIN_DATA_DISPLAY_TIME, display)
end
self.displayTotalForPlayer = function(____, p)
local space = " "
local display = ((udg_colorCode[RED + 1] .. self.label) .. (self.theAlias and " " .. self.theAlias or "")) .. " : '"
local scaleDisplay
local heightDisplay
if self.scale == -1 then
scaleDisplay = "default"
else
scaleDisplay = R2S(self.scale)
end
if self.height == -1 then
heightDisplay = "default"
else
heightDisplay = I2S(R2I(self.height))
end
display = ((display .. Ascii2String(self.unitTypeId)) .. "'") .. space
display = (((((display .. space) .. "speed_") .. I2S(R2I(self.speed))) .. space) .. "immo_") .. self:getImmolationRadiusStr()
local ____ = ((((((space .. "scale_") .. scaleDisplay) .. space) .. "height_") .. heightDisplay) .. space) .. tostring(self.killingEffectStr)
if self.isClickableB then
display = (((display .. space) .. "clickable") .. space) .. I2S(self.maxLife / 10000)
end
Text.P_timed(p, TERRAIN_DATA_DISPLAY_TIME, display)
end
self.toJson = function()
local output = MemoryHandler.getEmptyObject()
output.label = self.label
output.alias = self.theAlias
output.unitTypeId = Ascii2String(self.unitTypeId)
output.scale = self.scale
output.immolationRadius = S2I(self:getImmolationRadiusStr())
output.speed = R2I(self.speed)
output.isClickable = self.isClickableB
output.killingEffect = self.killingEffectStr
output.nbMeteorsToKill = self.maxLife / 10000
output.height = R2I(self.height)
return output
end
if speed <= 0 or speed > MAX_MOVE_SPEED then
error(
((self.constructor.name .. " : wrong speed value \"") .. tostring(speed)) .. "\"",
0
)
end
if scale <= 0 and scale ~= -1 then
error(
((self.constructor.name .. " : wrong scale value \"") .. tostring(scale)) .. "\"",
0
)
end
if immolationRadius ~= 0 and not IMMOLATION_SKILLS[immolationRadius] then
error(
((((((self.constructor.name .. " - '") .. label) .. "' - '") .. tostring(unitTypeId)) .. "' - wrong immolation radius - '") .. tostring(immolationRadius)) .. "'",
0
)
end
local testMonster = CreateUnit(
NEUTRAL_PLAYER,
unitTypeId,
0,
0,
0
)
if not testMonster then
error("Unit type unknown: " .. label, 0)
else
RemoveUnit(testMonster)
end
self.label = label
self.unitTypeId = unitTypeId
self.scale = scale
self.immolationSkill = IMMOLATION_SKILLS[immolationRadius]
self.speed = speed
self.isClickableB = isClickable
self.maxLife = 10000
self.height = -1
end
return ____exports
end,
["src.core.04_STRUCTURES.Caster.CasterTypeArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____CasterType = require("src.core.04_STRUCTURES.Caster.CasterType")
local CasterType = ____CasterType.CasterType
local ____globals = require("globals")
local getUdgMonsterTypes = ____globals.getUdgMonsterTypes
____exports.CasterTypeArray = __TS__Class()
local CasterTypeArray = ____exports.CasterTypeArray
CasterTypeArray.name = "CasterTypeArray"
__TS__ClassExtends(CasterTypeArray, BaseArray)
function CasterTypeArray.prototype.____constructor(self)
BaseArray.prototype.____constructor(self, true)
self.getByLabel = function(____, label)
for _, casterType in pairs(self.data) do
if casterType.label == label or casterType.theAlias == label then
return casterType
end
end
return nil
end
self.isLabelAlreadyUsed = function(____, label)
return self:getByLabel(label) ~= nil
end
self.new = function(____, label, casterMonsterType, projectileMonsterType, range, projectileSpeed, loadTime, animation)
if self:isLabelAlreadyUsed(label) then
return nil
end
local casterType = __TS__New(
CasterType,
label,
casterMonsterType,
projectileMonsterType,
range,
projectileSpeed,
loadTime,
animation
)
self:_new(casterType)
return casterType
end
self.newFromJson = function(____, casterTypesJson)
for ____, ct in ipairs(casterTypesJson) do
local casterMT = getUdgMonsterTypes():getByLabel(ct.casterMonsterTypeLabel)
local projectileMT = getUdgMonsterTypes():getByLabel(ct.projectileMonsterTypeLabel)
if not casterMT or not projectileMT then
Text.erA(("Unknown monster type for caster type \"" .. tostring(ct.label)) .. "\"")
else
local casterType = self:new(
ct.label,
casterMT,
projectileMT,
ct.range,
ct.projectileSpeed,
ct.loadTime,
ct.animation
)
if ct.alias then
local ____casterType_setAlias_result_0 = casterType
if ____casterType_setAlias_result_0 ~= nil then
____casterType_setAlias_result_0 = ____casterType_setAlias_result_0:setAlias(ct.alias)
end
end
end
end
end
self.remove = function(____, label)
for casterTypeId, casterType in pairs(self.data) do
if casterType.label == label or casterType.theAlias == label then
self.data[casterTypeId]:destroy()
__TS__Delete(self.data, casterTypeId)
end
end
return true
end
self.displayForPlayer = function(____, p)
local hadOne = false
for _, casterType in pairs(self.data) do
casterType:displayForPlayer(p)
hadOne = true
end
if not hadOne then
Text.erP(p, "no caster type saved")
end
end
end
return ____exports
end,
["src.core.04_STRUCTURES.Escaper.EscaperArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsEscaperInGame = ____Basic_functions.IsEscaperInGame
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____Escaper = require("src.core.04_STRUCTURES.Escaper.Escaper")
local Escaper = ____Escaper.Escaper
____exports.EscaperArray = __TS__Class()
local EscaperArray = ____exports.EscaperArray
EscaperArray.name = "EscaperArray"
__TS__ClassExtends(EscaperArray, BaseArray)
function EscaperArray.prototype.____constructor(self)
BaseArray.prototype.____constructor(self, false)
self.countMain = function()
local n = 0
for _k, _v in pairs(self.data) do
if not _v:isEscaperSecondary() then
n = n + 1
end
end
return n
end
self.newAt = function(____, id)
if id < 0 or id >= NB_ESCAPERS then
return
end
if self.data[id] then
return
end
self.data[id] = __TS__New(Escaper, id)
end
self.removeEscaper = function(____, id)
__TS__Delete(self.data, id)
end
self.destroyEscaper = function(____, id)
if self.data[id] then
self.data[id]:destroy()
end
__TS__Delete(self.data, id)
end
self.deleteSpecificActionsForLevel = function(____, level)
for _, escaper in pairs(self.data) do
escaper:deleteSpecificActionsForLevel(level)
end
end
self.destroyMakesIfForSpecificLevel_currentLevel = function()
for _, escaper in pairs(self.data) do
local ____ = escaper:isMakingCurrentLevel() and escaper:destroyMakeIfForSpecificLevel()
end
end
do
local escaperId = 0
while escaperId < NB_ESCAPERS do
if IsEscaperInGame(escaperId) then
self.data[escaperId] = __TS__New(Escaper, escaperId)
end
escaperId = escaperId + 1
end
end
end
function EscaperArray.prototype.forMainEscapers(self, callback)
for _, escaper in pairs(self.data) do
if not escaper:isEscaperSecondary() then
callback(escaper)
end
end
end
return ____exports
end,
["src.core.08_GAME.Mode_coop.creation_dialogue"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local createTimer = ____mapUtils.createTimer
local ____globals = require("globals")
local globals = ____globals.globals
local dialChoixModeCoop
local dialBoutonAppuye
local DIAL_TIME_TO_ANSWER = 10
local dialTimerTempLimite
____exports.InitTrig_creation_dialogue = function()
createTimer(
0,
false,
function()
dialChoixModeCoop = DialogCreate()
dialTimerTempLimite = CreateTimer()
DialogSetMessageBJ(dialChoixModeCoop, "Choose a game mode for everybody")
local btnChoixCoop = DialogAddButton(dialChoixModeCoop, "Coop (you can revive allies)", 0)
DialogAddButton(dialChoixModeCoop, "Solo", 0)
createEvent({
events = {function(t) return TriggerRegisterDialogEventBJ(t, dialChoixModeCoop) end},
actions = {function()
globals.coopModeActive = GetClickedButton() == btnChoixCoop
dialBoutonAppuye = true
if globals.coopModeActive then
DisplayTextToForce(
GetPlayersAll(),
"Coop mode chosen by first player"
)
else
DisplayTextToForce(
GetPlayersAll(),
"Solo mode chosen by first player"
)
end
ServiceManager.getService("Multiboard").resetRoundScores()
end}
})
end
)
end
____exports.gg_trg_apparition_dialogue_et_fermeture_automatique = createEvent({
events = {function(t) return TriggerRegisterTimerEventSingle(t, 1) end},
actions = {function()
local i = 0
while true do
if GetPlayerController(Player(i)) == MAP_CONTROL_USER and GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING or i > NB_PLAYERS_MAX - 1 then
break
end
i = i + 1
end
if i > NB_PLAYERS_MAX - 1 then
return
end
local udg_joueurDialogue = Player(i)
DialogDisplay(udg_joueurDialogue, dialChoixModeCoop, true)
dialBoutonAppuye = false
TimerStart(
dialTimerTempLimite,
DIAL_TIME_TO_ANSWER,
false,
function()
if not dialBoutonAppuye then
DialogDisplay(udg_joueurDialogue, dialChoixModeCoop, false)
if globals.coopModeActive then
DisplayTextToForce(
GetPlayersAll(),
"Coop mode automatically chosen"
)
else
DisplayTextToForce(
GetPlayersAll(),
"Solo mode automatically chosen"
)
end
ServiceManager.getService("Multiboard").resetRoundScores()
end
end
)
end}
})
return ____exports
end,
["src.core.04_STRUCTURES.Level.LevelArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__Iterator = ____lualib.__TS__Iterator
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local NB_LIVES_AT_BEGINNING = ____Constants.NB_LIVES_AT_BEGINNING
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____creation_dialogue = require("src.core.08_GAME.Mode_coop.creation_dialogue")
local gg_trg_apparition_dialogue_et_fermeture_automatique = ____creation_dialogue.gg_trg_apparition_dialogue_et_fermeture_automatique
local ____globals = require("globals")
local getUdgCasterTypes = ____globals.getUdgCasterTypes
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgMonsterTypes = ____globals.getUdgMonsterTypes
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____Caster = require("src.core.04_STRUCTURES.Caster.Caster")
local Caster = ____Caster.Caster
local ____MonsterMultiplePatrols = require("src.core.04_STRUCTURES.Monster.MonsterMultiplePatrols")
local MonsterMultiplePatrols = ____MonsterMultiplePatrols.MonsterMultiplePatrols
local ____MonsterNoMove = require("src.core.04_STRUCTURES.Monster.MonsterNoMove")
local MonsterNoMove = ____MonsterNoMove.MonsterNoMove
local ____MonsterSimplePatrol = require("src.core.04_STRUCTURES.Monster.MonsterSimplePatrol")
local createMonsterSmartPatrol = ____MonsterSimplePatrol.createMonsterSmartPatrol
local ____MonsterTeleport = require("src.core.04_STRUCTURES.Monster.MonsterTeleport")
local MonsterTeleport = ____MonsterTeleport.MonsterTeleport
local ____TerrainType = require("src.core.04_STRUCTURES.TerrainType.TerrainType")
local isDeathTerrain = ____TerrainType.isDeathTerrain
local ____Level = require("src.core.04_STRUCTURES.Level.Level")
local Level = ____Level.Level
local ____LevelProgression = require("src.core.04_STRUCTURES.Level.LevelProgression")
local sameLevelProgression = ____LevelProgression.sameLevelProgression
local ____Level_functions = require("src.core.04_STRUCTURES.Level.Level_functions")
local IsLevelBeingMade = ____Level_functions.IsLevelBeingMade
local MIN_TIME_BETWEEN_GOTNL = 0.05
____exports.LevelArray = __TS__Class()
local LevelArray = ____exports.LevelArray
LevelArray.name = "LevelArray"
__TS__ClassExtends(LevelArray, BaseArray)
function LevelArray.prototype.____constructor(self)
BaseArray.prototype.____constructor(self, true)
self.noobEdit = false
self.speedEdit = false
self.modeState = {noobEdit = {active = false, lives = 0, autoreviveDelay = nil, terrains = {}}, speedEdit = {active = false}}
self.levelProgression = "all"
self.levelProgressionState = {}
self.hasPlayersInLevel = function(____, lvlId)
local j = 0
do
local i = 0
while i < NB_PLAYERS_MAX do
local p = Player(i)
if self.levelProgressionState[i] == lvlId and GetPlayerController(p) == MAP_CONTROL_USER and GetPlayerSlotState(p) == PLAYER_SLOT_STATE_PLAYING then
j = j + 1
end
i = i + 1
end
end
return j > 0
end
self.refreshCurrentLevel = function()
self.data[self.currentLevel]:activate(false)
self.data[self.currentLevel]:activate(true)
end
self.deactivateEmptyLevels = function()
for levelId in pairs(self.data) do
if not IsLevelBeingMade(self.data[levelId]) and not self:hasPlayersInLevel(levelId) then
self.data[levelId]:activate(false)
end
end
end
self.goToLevel = function(____, finisher, levelId)
local i
local ____table_getCurrentLevel_result_id_0 = self:getCurrentLevel(finisher)
if ____table_getCurrentLevel_result_id_0 ~= nil then
____table_getCurrentLevel_result_id_0 = ____table_getCurrentLevel_result_id_0.id
end
local previousLevelId = ____table_getCurrentLevel_result_id_0 or -1
if levelId < 0 or levelId > self.lastInstanceId or levelId == self.currentLevel then
return false
end
self.currentLevel = levelId
do
local i = 0
while i < NB_PLAYERS_MAX do
if not finisher or getUdgEscapers():get(i) and sameLevelProgression(
finisher,
getUdgEscapers():get(i)
) then
self.levelProgressionState[i] = levelId
end
i = i + 1
end
end
if previousLevelId > -1 and not IsLevelBeingMade(self.data[previousLevelId]) and not self:hasPlayersInLevel(previousLevelId) then
getUdgEscapers():destroyMakesIfForSpecificLevel_currentLevel()
self.data[previousLevelId]:activate(false)
self:deactivateEmptyLevels()
end
self.data[self.currentLevel]:activate(true)
self.data[self.currentLevel]:checkpointReviveHeroes(finisher)
if levelId > previousLevelId + 1 then
i = previousLevelId + 1
while true do
if i >= levelId then
break
end
self.data[i]:activateVisibilities(true)
i = i + 1
end
else
if levelId < previousLevelId then
i = levelId + 1
while true do
if i > previousLevelId then
break
end
self.data[i]:activateVisibilities(false)
i = i + 1
end
end
end
self:moveCamToStart(self.data[levelId], finisher)
return true
end
self.goToNextLevel = function(____, finisher)
if self:getCurrentLevel(finisher).id >= self.lastInstanceId then
return false
end
if self.tLastGoToNextLevel and TimerGetElapsed(self.tLastGoToNextLevel) < MIN_TIME_BETWEEN_GOTNL then
return false
end
if not self.tLastGoToNextLevel then
self.tLastGoToNextLevel = CreateTimer()
end
TimerStart(self.tLastGoToNextLevel, 10, false, DoNothing)
self.currentLevel = self:getCurrentLevel(finisher).id + 1
do
local i = 0
while i < NB_PLAYERS_MAX do
if not finisher or getUdgEscapers():get(i) and sameLevelProgression(
finisher,
getUdgEscapers():get(i)
) then
self.levelProgressionState[i] = self.currentLevel
end
i = i + 1
end
end
if not IsLevelBeingMade(self.data[self.currentLevel - 1]) and not self:hasPlayersInLevel(self.currentLevel - 1) then
getUdgEscapers():destroyMakesIfForSpecificLevel_currentLevel()
self.data[self.currentLevel - 1]:activate(false)
self:deactivateEmptyLevels()
end
self.data[self.currentLevel]:activate(true)
self.data[self.currentLevel]:checkpointReviveHeroes(finisher)
if self:moveCamToStart(self.data[self.currentLevel], finisher) and finisher then
Text.A(((udg_colorCode[finisher:getColorId() + 1] .. "Good job ") .. finisher:getDisplayName()) .. " !")
end
return true
end
self.restartTheGame = function()
if self.currentLevel == 0 then
self.currentLevel = -1
self.data[0]:activate(false)
end
self:goToLevel(nil, 0)
ServiceManager.getService("Lives").setNb(self.data[0]:getNbLives())
local start = self.data[0]:getStart()
local ____ = start and SetCameraPosition(
start:getCenterX(),
start:getCenterY()
)
for _, escaper in pairs(getUdgEscapers():getAll()) do
if escaper:isLockCamTarget() then
escaper:resetCamera()
end
end
TriggerExecute(gg_trg_apparition_dialogue_et_fermeture_automatique)
end
self.restartCurrentLevel = function()
local currentLevel = self.currentLevel
self.currentLevel = -1
self.data[currentLevel]:activate(false)
self:goToLevel(nil, currentLevel)
ServiceManager.getService("Lives").setNb(self.data[currentLevel]:getNbLives())
local start = self.data[currentLevel]:getStart()
local ____ = start and SetCameraPosition(
start:getCenterX(),
start:getCenterY()
)
for _, escaper in pairs(getUdgEscapers():getAll()) do
if escaper:isLockCamTarget() then
escaper:resetCamera()
end
end
end
self.new = function()
local lvl = __TS__New(Level)
local id = self:_new(lvl)
lvl.id = id
return lvl
end
self.newFromJson = function(____, levelsJson)
if #levelsJson > 0 then
self:destroyLastLevel(true)
end
for ____, levelJson in ipairs(levelsJson) do
local level = self:new()
if levelJson.startMessage then
level:setStartMessage(levelJson.startMessage)
end
if levelJson.nbLives then
level:setNbLivesEarned(levelJson.nbLives)
end
if levelJson.start then
level:newStartFromJson(levelJson.start)
elseif levelJson.id == 0 then
local x1 = GetRectMinX(gg_rct_departLvl_0)
local y1 = GetRectMinY(gg_rct_departLvl_0)
local x2 = GetRectMaxX(gg_rct_departLvl_0)
local y2 = GetRectMaxY(gg_rct_departLvl_0)
level:newStart(x1, y1, x2, y2)
end
if levelJson["end"] then
level:newEndFromJson(levelJson["end"])
end
if levelJson.visibilities then
level.visibilities:newFromJson(levelJson.visibilities)
end
if levelJson.monsters then
for ____, m in __TS__Iterator(levelJson.monsters) do
local monster = nil
if m.monsterClassName == "Caster" then
local ct = getUdgCasterTypes():getByLabel(m.casterTypeLabel)
if not ct then
Text.erA(("Caster type \"" .. tostring(m.casterTypeLabel)) .. "\" unknown")
else
monster = __TS__New(
Caster,
ct,
m.x,
m.y,
m.angle,
m.id
)
end
else
local mt = getUdgMonsterTypes():getByLabel(m.monsterTypeLabel)
if not mt then
Text.erA(("Monster label \"" .. tostring(m.monsterTypeLabel)) .. "\" unknown")
else
if m.monsterClassName == "MonsterNoMove" then
monster = __TS__New(
MonsterNoMove,
mt,
m.x,
m.y,
m.angle,
m.id
)
elseif m.monsterClassName == "MonsterSimplePatrol" then
monster = createMonsterSmartPatrol(
mt,
m.x1,
m.y1,
m.x2,
m.y2,
m.id
)
elseif m.monsterClassName == "MonsterMultiplePatrols" then
for n, x in pairs(m.xArr) do
local y = m.yArr[n]
MonsterMultiplePatrols:storeNewLoc(x, y)
end
monster = __TS__New(MonsterMultiplePatrols, mt, m.mode, m.id)
elseif m.monsterClassName == "MonsterTeleport" then
for n, x in pairs(m.xArr) do
local y = m.yArr[n]
MonsterTeleport:storeNewLoc(x, y)
end
monster = __TS__New(
MonsterTeleport,
mt,
m.period,
m.angle,
m.mode,
m.id
)
end
end
end
if monster then
local ____ = m.jumpPad and monster:setJumpPad(m.jumpPad)
local ____ = m.jumpPadEffect and monster:setJumpPadEffect(m.jumpPadEffect)
level.monsters:new(monster, false)
end
end
end
if levelJson.monsterSpawns then
level.monsterSpawns:newFromJson(levelJson.monsterSpawns)
end
if levelJson.meteors then
level.meteors:newFromJson(levelJson.meteors)
end
if levelJson.clearMobs then
level.clearMobs:newFromJson(levelJson.clearMobs)
end
if levelJson.portalMobs then
level.portalMobs:newFromJson(levelJson.portalMobs)
end
if levelJson.circleMobs then
level.circleMobs:newFromJson(levelJson.circleMobs)
end
if levelJson.staticSlides then
level.staticSlides:newFromJson(levelJson.staticSlides)
end
end
end
self.destroyLastLevel = function(____, forceDelete0)
if forceDelete0 == nil then
forceDelete0 = false
end
local maxLevelIdToDelete = forceDelete0 and 0 or 1
if self.lastInstanceId < maxLevelIdToDelete then
return false
end
self.data[self.lastInstanceId]:destroy()
__TS__Delete(self.data, self.lastInstanceId)
self.lastInstanceId = self.lastInstanceId - 1
return true
end
self.getCurrentLevel = function(____, escaper)
if self.levelProgression == "all" or not escaper then
return self.data[self.currentLevel]
else
return self.data[self.levelProgressionState[escaper:getId()]]
end
end
self.getLevelFromMonsterArray = function(____, ma)
return ma:getLevel()
end
self.getLevelFromMonsterSpawnArray = function(____, msa)
local i = 0
while true do
if i > self.lastInstanceId or self.data[i].monsterSpawns == msa then
break
end
i = i + 1
end
if i > self.lastInstanceId then
return nil
end
return self.data[i]
end
self.getLevelFromMeteorArray = function(____, ma)
local i = 0
while true do
if i > self.lastInstanceId or self.data[i].meteors == ma then
break
end
i = i + 1
end
if i > self.lastInstanceId then
return nil
end
return self.data[i]
end
self.getLevelFromVisibilityModifierArray = function(____, vma)
local i = 0
while true do
if i > self.lastInstanceId or self.data[i].visibilities == vma then
break
end
i = i + 1
end
if i > self.lastInstanceId then
return nil
end
return self.data[i]
end
self.getLevelFromClearMobArray = function(____, clearMobArray)
local i = 0
while true do
if i > self.lastInstanceId or self.data[i].clearMobs == clearMobArray then
break
end
i = i + 1
end
if i > self.lastInstanceId then
return nil
end
return self.data[i]
end
self.clearMonstersOfType = function(____, mt)
local i = 0
while i <= self.lastInstanceId do
self.data[i]:clearMonstersOfType(mt)
i = i + 1
end
end
self.removeCastersOfType = function(____, ct)
do
local i = 0
while i <= self.lastInstanceId do
self.data[i]:removeCastersOfType(ct)
i = i + 1
end
end
end
self.getLastLevelId = function()
return self.lastInstanceId
end
self.getNbMonsters = function(____, mode)
local nb = 0
local i = 0
while true do
if i > self.lastInstanceId then
break
end
nb = nb + self.data[i]:getNbMonsters(mode)
i = i + 1
end
return nb
end
self.isNoobEdit = function() return self.noobEdit end
self.setIsNoobEdit = function(____, isNoobEdit)
if self.modeState.noobEdit.active == isNoobEdit then
return
end
self.modeState.noobEdit.active = isNoobEdit
if isNoobEdit then
self.modeState.noobEdit.lives = ServiceManager.getService("Lives").get()
self.modeState.noobEdit.autoreviveDelay = globals.autoreviveDelay
ServiceManager.getService("Lives").setNb(9999)
globals.autoreviveDelay = 0.3
do
local i = 0
while i < NB_ESCAPERS do
local ____getUdgEscapers_result_get_result_setHasAutorevive_result_2 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_setHasAutorevive_result_2 ~= nil then
____getUdgEscapers_result_get_result_setHasAutorevive_result_2 = ____getUdgEscapers_result_get_result_setHasAutorevive_result_2:setHasAutorevive(true)
end
i = i + 1
end
end
for _, terrain in pairs(getUdgTerrainTypes():getAll()) do
if isDeathTerrain(terrain) then
self.modeState.noobEdit.terrains[terrain.label] = {timeToKill = terrain:getTimeToKill()}
terrain:setTimeToKill(0.3)
end
end
else
ServiceManager.getService("Lives").setNb(self.modeState.noobEdit.lives)
globals.autoreviveDelay = self.modeState.noobEdit.autoreviveDelay
do
local i = 0
while i < NB_ESCAPERS do
local ____getUdgEscapers_result_get_result_setHasAutorevive_result_4 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_setHasAutorevive_result_4 ~= nil then
____getUdgEscapers_result_get_result_setHasAutorevive_result_4 = ____getUdgEscapers_result_get_result_setHasAutorevive_result_4:setHasAutorevive(false)
end
i = i + 1
end
end
for _, terrain in pairs(getUdgTerrainTypes():getAll()) do
if isDeathTerrain(terrain) then
terrain:setTimeToKill(self.modeState.noobEdit.terrains[terrain.label].timeToKill)
end
end
end
if not self.noobEdit then
self.noobEdit = true
ServiceManager.getService("Multiboard").reinitBoards()
end
end
self.isSpeedEdit = function() return self.speedEdit end
self.setIsSpeedEdit = function(____, isSpeedEdit)
if self.modeState.speedEdit.active == isSpeedEdit then
return
end
self.modeState.speedEdit.active = isSpeedEdit
if not self.speedEdit then
self.speedEdit = true
ServiceManager.getService("Multiboard").reinitBoards()
end
end
self.getLevelProgression = function() return self.levelProgression end
self.setLevelProgression = function(____, levelProgression)
local ____levelProgression_6 = levelProgression
self.levelProgression = ____levelProgression_6
return ____levelProgression_6
end
local x1 = GetRectMinX(gg_rct_departLvl_0)
local y1 = GetRectMinY(gg_rct_departLvl_0)
local x2 = GetRectMaxX(gg_rct_departLvl_0)
local y2 = GetRectMaxY(gg_rct_departLvl_0)
self.data[0] = __TS__New(Level)
self.data[0].id = 0
self.data[0]:newStart(x1, y1, x2, y2)
self.data[0]:setNbLivesEarned(NB_LIVES_AT_BEGINNING)
self.lastInstanceId = self.lastInstanceId + 1
ServiceManager.getService("Lives").initLives()
self.currentLevel = 0
do
local i = 0
while i < NB_PLAYERS_MAX do
self.levelProgressionState[i] = 0
i = i + 1
end
end
end
function LevelArray.prototype.moveCamToStart(self, level, finisher)
local start = level:getStart()
if start then
local xCam = start:getCenterX()
local yCam = start:getCenterY()
if finisher then
local x = xCam
local y = yCam
if GetLocalPlayer() == finisher:getPlayer() then
x = GetCameraTargetPositionX()
y = GetCameraTargetPositionY()
end
for _, escaper in pairs(getUdgEscapers():getAll()) do
if not finisher or sameLevelProgression(finisher, escaper) then
SetCameraPositionForPlayer(
escaper:getPlayer(),
x,
y
)
end
end
else
for _, escaper in pairs(getUdgEscapers():getAll()) do
if not finisher or sameLevelProgression(finisher, escaper) then
SetCameraPositionForPlayer(
escaper:getPlayer(),
xCam,
yCam
)
end
end
end
for _, escaper in pairs(getUdgEscapers():getAll()) do
if not finisher or sameLevelProgression(finisher, escaper) then
if escaper:isLockCamTarget() then
escaper:resetCamera()
end
end
end
return true
else
return false
end
end
return ____exports
end,
["src.core.04_STRUCTURES.Monster.MonsterTypeArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__Delete = ____lualib.__TS__Delete
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local udg_monsters = ____globals.udg_monsters
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____MonsterType = require("src.core.04_STRUCTURES.Monster.MonsterType")
local MonsterType = ____MonsterType.MonsterType
____exports.MonsterTypeArray = __TS__Class()
local MonsterTypeArray = ____exports.MonsterTypeArray
MonsterTypeArray.name = "MonsterTypeArray"
__TS__ClassExtends(MonsterTypeArray, BaseArray)
function MonsterTypeArray.prototype.____constructor(self)
BaseArray.prototype.____constructor(self, true)
self.getByLabel = function(____, label)
for _, monsterType in pairs(self.data) do
if monsterType.label == label or monsterType.theAlias == label then
return monsterType
end
end
return nil
end
self.isLabelAlreadyUsed = function(____, label)
return self:getByLabel(label) ~= nil
end
self.newFromJson = function(____, monsterTypesJson)
for ____, mt in ipairs(monsterTypesJson) do
local unitTypeId = FourCC(mt.unitTypeId)
local monsterType = self:new(
mt.label,
unitTypeId,
mt.scale,
mt.immolationRadius,
mt.speed,
mt.isClickable
)
monsterType:setHeight(mt.height)
monsterType:setNbMeteorsToKill(mt.nbMeteorsToKill)
if mt.alias then
monsterType:setAlias(mt.alias)
end
if mt.killingEffect then
monsterType:setKillingEffectStr(mt.killingEffect)
end
end
end
self.remove = function(____, label)
for i, _monsterType in pairs(self.data) do
if self.data[i].label == label or self.data[i].theAlias == label then
self.data[i]:destroy()
__TS__Delete(self.data, i)
return true
end
end
return false
end
self.displayForPlayer = function(____, p)
local hasOne = false
for _, monsterType in pairs(self.data) do
hasOne = true
monsterType:displayForPlayer(p)
end
if not hasOne then
Text.erP(p, "no monster type saved")
end
end
end
function MonsterTypeArray.prototype.new(self, label, unitTypeId, scale, immolationRadius, speed, isClickable)
if self:isLabelAlreadyUsed(label) then
error("Label already used", 0)
end
local monsterType = __TS__New(
MonsterType,
label,
unitTypeId,
scale,
immolationRadius,
speed,
isClickable
)
self:_new(monsterType)
return monsterType
end
function MonsterTypeArray.prototype.monsterUnit2KillEffectStr(self, monsterUnit)
local monster = udg_monsters[GetUnitUserData(monsterUnit)]
local mt = monster:getMonsterType()
local ____mt_getKillingEffectStr_result_0 = mt
if ____mt_getKillingEffectStr_result_0 ~= nil then
____mt_getKillingEffectStr_result_0 = ____mt_getKillingEffectStr_result_0:getKillingEffectStr()
end
return ____mt_getKillingEffectStr_result_0
end
return ____exports
end,
["src.Utils.vToto"] = function(...)
local ____exports = {}
local function getMazeUtils()
local function DEB(str)
end
local function getHVTileAt(x, y)
local relX = ModuloReal(x - 64, 128)
local relY = ModuloReal(y - 64, 128)
local terrainType = GetTerrainType(x, y)
local terrainTypeLeft = GetTerrainType(x - 128, y)
local terrainTypeRight = GetTerrainType(x + 128, y)
local terrainTypeTop = GetTerrainType(x, y + 128)
local terrainTypeBot = GetTerrainType(x, y - 128)
if relY > relX + 64 then
if terrainTypeLeft == terrainType or terrainTypeTop == terrainType then
return terrainType
end
DEB(((("TOP LEFT: (" .. R2S(relX)) .. ",") .. R2S(relY)) .. ")")
elseif relY > 192 - relX then
if terrainTypeRight == terrainType or terrainTypeTop == terrainType then
return terrainType
end
DEB(((("TOP RIGHT: (" .. R2S(relX)) .. ",") .. R2S(relY)) .. ")")
elseif relY < 64 - relX then
if terrainTypeLeft == terrainType or terrainTypeBot == terrainType then
return terrainType
end
DEB(((("BOTTOM LEFT: (" .. R2S(relX)) .. ",") .. R2S(relY)) .. ")")
elseif relY < relX - 64 then
if terrainTypeRight == terrainType or terrainTypeBot == terrainType then
return terrainType
end
DEB(((("BOTTOM RIGHT: (" .. R2S(relX)) .. ",") .. R2S(relY)) .. ")")
else
return terrainType
end
return nil
end
local function floor(n)
if n < 0 then
return I2R(R2I(n - 1))
else
return I2R(R2I(n))
end
end
local function getDiagonalTileAt(x, y, upward)
local tile1
local tile2
local relX = ModuloReal(x - 64, 128)
local relY = ModuloReal(y - 64, 128)
local middleTileX = floor((x + 64) / 128) * 128
local middleTileY = floor((y + 64) / 128) * 128
local bUpward = middleTileY - middleTileX
local bDownward = middleTileY + middleTileX
local offset = 0
local tile1X = 0
local tile1Y = 0
local tile2X = 0
local tile2Y = 0
DEB(((("position: (" .. R2S(x)) .. ",") .. R2S(y)) .. ")")
DEB(((("middle of current: (" .. R2S(middleTileX)) .. ",") .. R2S(middleTileY)) .. ")")
if upward then
if relY > relX then
bUpward = bUpward + 128
end
DEB("bUpward: " .. R2S(bUpward))
local i = 0
while not (i > 1) do
offset = (x - y + bUpward + 128 * i) / 2
tile1X = x - offset
tile1Y = y + offset
offset = 128 - offset
tile2X = x + offset
tile2Y = y - offset
DEB(((((("tile1 (i=" .. I2S(i)) .. "): (") .. R2S(tile1X)) .. ",") .. R2S(tile1Y)) .. ")")
DEB(((((("tile2 (i=" .. I2S(i)) .. "): (") .. R2S(tile2X)) .. ",") .. R2S(tile2Y)) .. ")")
tile1 = getHVTileAt(tile1X, tile1Y)
tile2 = getHVTileAt(tile2X, tile2Y)
if tile1 ~= nil and tile1 == tile2 then
DEB("U - found tile " .. I2S(tile1))
return tile1
end
i = i + 1
end
else
if relY > 128 - relX then
bDownward = bDownward + 128
end
DEB("bDownward: " .. R2S(bDownward))
local i = 0
while not (i > 1) do
offset = (-x - y + bDownward + 128 * i) / 2
tile1X = x + offset
tile1Y = y + offset
offset = 128 - offset
tile2X = x - offset
tile2Y = y - offset
DEB(((((("tile1 (i=" .. I2S(i)) .. "): (") .. R2S(tile1X)) .. ",") .. R2S(tile1Y)) .. ")")
DEB(((((("tile2 (i=" .. I2S(i)) .. "): (") .. R2S(tile2X)) .. ",") .. R2S(tile2Y)) .. ")")
tile1 = getHVTileAt(tile1X, tile1Y)
tile2 = getHVTileAt(tile2X, tile2Y)
if tile1 ~= nil and tile1 == tile2 then
DEB("D - found tile " .. I2S(tile1))
return tile1
end
i = i + 1
end
end
return nil
end
local function getTileAt(x, y)
local tile = getHVTileAt(x, y)
if tile == nil then
local upward = getDiagonalTileAt(x, y, true)
local downward = getDiagonalTileAt(x, y, false)
if upward == downward then
tile = upward
end
end
return tile
end
local function isTileAt(x, y, terrainType, all)
local tile = getHVTileAt(x, y)
if tile == terrainType then
return true
elseif tile == nil then
local upward = getDiagonalTileAt(x, y, true)
local downward = getDiagonalTileAt(x, y, false)
if all then
return upward == terrainType and downward == terrainType
else
return upward == terrainType or downward == terrainType
end
end
return false
end
local function isTileAtWithGranularity(x, y, terrainType, all, absGranularity)
local onTerrain = false
local angle = 45
local angleIncrement = 45
if absGranularity == 0 then
angle = 360
end
while not (angle > 360) do
local adjX = x + absGranularity * Cos(angle * bj_DEGTORAD)
local adjY = y + absGranularity * Sin(angle * bj_DEGTORAD)
onTerrain = isTileAt(adjX, adjY, terrainType, true)
if all and not onTerrain then
return false
elseif not all and onTerrain then
return true
end
angle = angle + angleIncrement
end
return all
end
return {getDiagonalTileAt = getDiagonalTileAt, getHVTileAt = getHVTileAt}
end
____exports.MazeUtils = getMazeUtils()
return ____exports
end,
["src.core.04_STRUCTURES.TerrainType.TerrainTypeArray"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local __TS__New = ____lualib.__TS__New
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____vToto = require("src.Utils.vToto")
local MazeUtils = ____vToto.MazeUtils
local ____Ascii = require("src.core.01_libraries.Ascii")
local Ascii2String = ____Ascii.Ascii2String
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local tileset2tilesetChar = ____Basic_functions.tileset2tilesetChar
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local globals = ____globals.globals
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local CmdParam = ____Command_functions.CmdParam
local NbParam = ____Command_functions.NbParam
local ____Terrain_type_max = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_max")
local TerrainTypeMax = ____Terrain_type_max.TerrainTypeMax
local ____BaseArray = require("src.core.04_STRUCTURES.BaseArray")
local BaseArray = ____BaseArray.BaseArray
local ____TerrainType = require("src.core.04_STRUCTURES.TerrainType.TerrainType")
local isDeathTerrain = ____TerrainType.isDeathTerrain
local ____TerrainTypeDeath = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeDeath")
local TerrainTypeDeath = ____TerrainTypeDeath.TerrainTypeDeath
local ____TerrainTypeSlide = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeSlide")
local TerrainTypeSlide = ____TerrainTypeSlide.TerrainTypeSlide
local ____TerrainTypeWalk = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeWalk")
local TerrainTypeWalk = ____TerrainTypeWalk.TerrainTypeWalk
____exports.TerrainTypeArray = __TS__Class()
local TerrainTypeArray = ____exports.TerrainTypeArray
TerrainTypeArray.name = "TerrainTypeArray"
__TS__ClassExtends(TerrainTypeArray, BaseArray)
function TerrainTypeArray.prototype.____constructor(self)
BaseArray.prototype.____constructor(self, true)
self.mainTileset = "auto"
self.getByLabel = function(____, label)
for _, terrainType in pairs(self.data) do
if terrainType.label == label or terrainType.theAlias == label then
return terrainType
end
end
return nil
end
self.getByCode = function(____, code)
for _, terrainType in pairs(self.data) do
if Ascii2String(terrainType.terrainTypeId) == code then
return terrainType
end
end
return nil
end
self.getTerrainType = function(____, x, y)
local ____globals_USE_VTOTO_SLIDE_LOGIC_0
if globals.USE_VTOTO_SLIDE_LOGIC then
____globals_USE_VTOTO_SLIDE_LOGIC_0 = MazeUtils.getHVTileAt(x, y)
else
____globals_USE_VTOTO_SLIDE_LOGIC_0 = GetTerrainType(x, y)
end
local terrainTypeId = ____globals_USE_VTOTO_SLIDE_LOGIC_0
if globals.USE_VTOTO_SLIDE_LOGIC and not terrainTypeId then
local upward = MazeUtils.getDiagonalTileAt(x, y, true)
local downward = MazeUtils.getDiagonalTileAt(x, y, false)
local ____downward_1
if downward then
____downward_1 = self:get(downward)
else
____downward_1 = nil
end
local d = ____downward_1
local ____upward_2
if upward then
____upward_2 = self:get(upward)
else
____upward_2 = nil
end
local u = ____upward_2
if upward == downward then
terrainTypeId = upward
elseif upward == nil then
terrainTypeId = downward
elseif downward == nil then
terrainTypeId = upward
elseif d and isDeathTerrain(d) then
terrainTypeId = upward
elseif u and isDeathTerrain(u) then
terrainTypeId = downward
end
end
if not terrainTypeId then
terrainTypeId = GetTerrainType(x, y)
end
for _, terrainType in pairs(self.data) do
if terrainType:getTerrainTypeId() == terrainTypeId then
return terrainType
end
end
return nil
end
self.isTerrainTypeIdAlreadyUsed = function(____, terrainTypeId)
for _, terrainType in pairs(self.data) do
if terrainType:getTerrainTypeId() == terrainTypeId then
return true
end
end
return false
end
self.isLabelAlreadyUsed = function(____, label)
return self:getByLabel(label) ~= nil
end
self.newWalk = function(____, label, terrainTypeId, walkspeed)
if self:isLabelAlreadyUsed(label) then
error("Label already used", 0)
end
if self:isTerrainTypeIdAlreadyUsed(terrainTypeId) then
error("Terrain type already used", 0)
end
if terrainTypeId == 0 then
error("Wrong terrain type", 0)
end
local tt = __TS__New(TerrainTypeWalk, label, terrainTypeId, walkspeed)
self:_new(tt)
ServiceManager.getService("React").forceUpdate()
return tt
end
self.newDeath = function(____, label, terrainTypeId, killingEffectStr, timeToKill, toleranceDist)
if self:isLabelAlreadyUsed(label) then
error("Label already used", 0)
end
if self:isTerrainTypeIdAlreadyUsed(terrainTypeId) then
error("Terrain type already used", 0)
end
if terrainTypeId == 0 then
error("Wrong terrain type", 0)
end
local tt = __TS__New(
TerrainTypeDeath,
label,
terrainTypeId,
killingEffectStr,
timeToKill,
toleranceDist
)
self:_new(tt)
ServiceManager.getService("React").forceUpdate()
return tt
end
self.newSlide = function(____, label, terrainTypeId, slideSpeed, canTurn, rotationSpeed)
if rotationSpeed == nil then
rotationSpeed = nil
end
if self:isLabelAlreadyUsed(label) then
error("Label already used", 0)
end
if self:isTerrainTypeIdAlreadyUsed(terrainTypeId) then
error("Terrain type already used", 0)
end
if terrainTypeId == 0 then
error("Wrong terrain type", 0)
end
local tt = __TS__New(
TerrainTypeSlide,
label,
terrainTypeId,
slideSpeed,
canTurn,
rotationSpeed
)
self:_new(tt)
ServiceManager.getService("React").forceUpdate()
return tt
end
self.remove = function(____, label)
for terrainTypeId, terrainType in pairs(self.data) do
if terrainType.label == label or terrainType.theAlias == label then
self.data[terrainTypeId]:destroy()
__TS__Delete(self.data, terrainTypeId)
ServiceManager.getService("React").forceUpdate()
end
end
return true
end
self.displayForPlayer = function(____, p)
local hadOne = false
for _, terrainType in pairs(self.data) do
terrainType:displayForPlayer(p)
hadOne = true
end
if not hadOne then
Text.erP(p, "no terrain saved")
end
end
self.setOrder = function(____, cmd)
local terrainType
local terrainTypesOrdered = {}
local nbTerrainsDone
local i
if self:count() ~= NbParam(cmd) then
return false
end
nbTerrainsDone = 0
while true do
if nbTerrainsDone == self:count() then
break
end
terrainType = self:getByLabel(CmdParam(cmd, nbTerrainsDone + 1))
if terrainType == nil then
return false
end
i = 0
while true do
if i == nbTerrainsDone then
break
end
if terrainTypesOrdered[i + 1] == terrainType then
return false
end
i = i + 1
end
terrainTypesOrdered[nbTerrainsDone + 1] = terrainType
nbTerrainsDone = nbTerrainsDone + 1
end
i = 0
while true do
if i == nbTerrainsDone then
break
end
terrainTypesOrdered[i + 1]:setOrderId(i + 1)
i = i + 1
end
return true
end
self.setMainTileset = function(____, tileset)
local tilesetChar = tileset2tilesetChar(tileset)
if tilesetChar ~= "" then
self.mainTileset = tilesetChar
return true
end
return false
end
self.getMainTileset = function()
return self.mainTileset
end
self.toJson = function()
local arr = MemoryHandler.getEmptyArray()
for _, terrainType in pairs(self.data) do
arrayPush(
arr,
terrainType:toJson()
)
end
return arr
end
self.newFromJson = function(____, terrainTypesJson)
for ____, terrainTypeJson in ipairs(terrainTypesJson) do
local terrainTypeId = TerrainTypeMax.TerrainTypeAsciiString2TerrainTypeId(terrainTypeJson.terrainTypeId)
local tt = nil
repeat
local ____switch58 = terrainTypeJson.kind
local ____cond58 = ____switch58 == "walk"
if ____cond58 then
tt = self:newWalk(terrainTypeJson.label, terrainTypeId, terrainTypeJson.walkSpeed)
break
end
____cond58 = ____cond58 or ____switch58 == "slide"
if ____cond58 then
tt = self:newSlide(
terrainTypeJson.label,
terrainTypeId,
terrainTypeJson.slideSpeed,
terrainTypeJson.canTurn,
terrainTypeJson.rotationSpeed
)
break
end
____cond58 = ____cond58 or ____switch58 == "death"
if ____cond58 then
tt = self:newDeath(
terrainTypeJson.label,
terrainTypeId,
terrainTypeJson.killingEffet,
terrainTypeJson.timeToKill,
terrainTypeJson.toleranceDist
)
break
end
until true
if tt then
if terrainTypeJson.alias then
tt:setAlias(terrainTypeJson.alias)
end
if terrainTypeJson.gravity then
tt:setGravity(terrainTypeJson.gravity)
end
end
end
end
end
return ____exports
end,
["globals"] = function(...)
local ____exports = {}
____exports.globals = {
logStrings = {},
MAP_MIN_X = 0,
MAP_MAX_X = 0,
MAP_MIN_Y = 0,
MAP_MAX_Y = 0,
coopModeActive = true,
CAN_TURN_IN_AIR = false,
USE_VTOTO_SLIDE_LOGIC = false,
coopCircles = true
}
____exports.setUdgEscapers = function(escaperArray)
____exports.globals.escapers = escaperArray
end
____exports.getUdgEscapers = function()
return ____exports.globals.escapers
end
____exports.setUdgLevels = function(la)
____exports.globals.levels = la
end
____exports.getUdgLevels = function()
return ____exports.globals.levels
end
____exports.setUdgTerrainTypes = function(tta)
____exports.globals.terrainTypes = tta
end
____exports.getUdgTerrainTypes = function()
return ____exports.globals.terrainTypes
end
____exports.setUdgCasterTypes = function(cta)
____exports.globals.casterTypes = cta
end
____exports.getUdgCasterTypes = function()
return ____exports.globals.casterTypes
end
____exports.setUdgMonsterTypes = function(mta)
____exports.globals.monsterTypes = mta
end
____exports.getUdgMonsterTypes = function()
return ____exports.globals.monsterTypes
end
____exports.udg_monsters = {}
return ____exports
end,
["src.core.01_libraries.Basic_functions"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__StringReplace = ____lualib.__TS__StringReplace
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__StringCharAt = ____lualib.__TS__StringCharAt
local __TS__StringAccess = ____lualib.__TS__StringAccess
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local ____exports = {}
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local globals = ____globals.globals
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local udg_currentMonsterPlayerId = 0
____exports.IsUnitBetweenLocs = function(u, x1, y1, x2, y2)
local minX = RMinBJ(x1, x2)
local maxX = RMaxBJ(x1, x2)
local minY = RMinBJ(y1, y2)
local maxY = RMaxBJ(y1, y2)
local x = GetUnitX(u)
local y = GetUnitY(u)
return minX < x and maxX > x and minY < y and maxY > y
end
____exports.IsItemBetweenLocs = function(i, x1, y1, x2, y2)
local minX = RMinBJ(x1, x2)
local maxX = RMaxBJ(x1, x2)
local minY = RMinBJ(y1, y2)
local maxY = RMaxBJ(y1, y2)
local x = GetItemX(i)
local y = GetItemY(i)
return minX < x and maxX > x and minY < y and maxY > y
end
____exports.EscaperIdToPlayer = function(escaperId)
if escaperId > NB_PLAYERS_MAX - 1 then
escaperId = escaperId - NB_PLAYERS_MAX
end
return Player(escaperId)
end
____exports.IsEscaperInGame = function(escaperId)
local p = ____exports.EscaperIdToPlayer(escaperId)
return GetPlayerController(p) == MAP_CONTROL_USER and GetPlayerSlotState(p) == PLAYER_SLOT_STATE_PLAYING
end
____exports.IsIssuedOrder = function(orderString)
return GetIssuedOrderId() == OrderId(orderString)
end
____exports.IsLastOrderPause = function()
return GetIssuedOrderId() == 851973
end
____exports.GetLocDist = function(x1, y1, x2, y2)
local diffX = x2 - x1
local diffY = y2 - y1
return SquareRoot(diffX * diffX + diffY * diffY)
end
____exports.GetCurrentMonsterPlayer = function()
if udg_currentMonsterPlayerId >= NB_PLAYERS_MAX - 1 then
udg_currentMonsterPlayerId = 0
else
udg_currentMonsterPlayerId = udg_currentMonsterPlayerId + 1
end
return Player(udg_currentMonsterPlayerId)
end
____exports.IsUnitInvulnerable = function(u)
local life = GetUnitState(u, UNIT_STATE_LIFE)
local damages
UnitDamageTarget(
u,
u,
0.01,
false,
false,
ATTACK_TYPE_CHAOS,
DAMAGE_TYPE_UNIVERSAL,
WEAPON_TYPE_WHOKNOWS
)
damages = life - GetUnitState(u, UNIT_STATE_LIFE)
SetUnitState(u, UNIT_STATE_LIFE, life)
return damages == 0
end
____exports.StopUnit = function(U)
PauseUnit(U, true)
IssueImmediateOrder(U, "stop")
PauseUnit(U, false)
end
____exports.ClearTextForPlayer = function(p)
if GetLocalPlayer() == p then
ClearTextMessages()
end
end
____exports.StringContainsChar = function(str, char)
local i
local length
if StringLength(char) ~= 1 then
return false
end
length = StringLength(str)
i = 1
while true do
if i > length then
break
end
if SubStringBJ(str, i, i) == char then
return true
end
i = i + 1
end
return false
end
____exports.IsBoolString = function(S)
return S == "true" or S == "false" or S == "on" or S == "off" or S == "1" or S == "0"
end
____exports.S2B = function(S)
return S == "true" or S == "on" or S == "1"
end
____exports.B2S = function(b)
if b then
return "true"
end
return "false"
end
____exports.IsOnGround = function(slider)
return GetUnitFlyHeight(slider) < 1
end
____exports.IsNearBounds = function(x, y)
return y >= globals.MAP_MAX_Y - LARGEUR_CASE * 2 or x >= globals.MAP_MAX_X - LARGEUR_CASE * 2 or x <= globals.MAP_MIN_X + LARGEUR_CASE * 2 or y <= globals.MAP_MIN_Y + LARGEUR_CASE * 2
end
____exports.tileset2tilesetChar = function(tileset)
if tileset == "auto" then
return "auto"
elseif tileset == "A" or tileset == "a" or tileset == "Ashenvale" then
return "A"
elseif tileset == "B" or tileset == "b" or tileset == "Barrens" then
return "B"
elseif tileset == "C" or tileset == "c" or tileset == "Felwood" then
return "C"
elseif tileset == "D" or tileset == "d" or tileset == "Dungeon" then
return "D"
elseif tileset == "F" or tileset == "f" or tileset == "Lordaeron Fall" then
return "F"
elseif tileset == "G" or tileset == "g" or tileset == "Underground" then
return "G"
elseif tileset == "L" or tileset == "l" or tileset == "Lordaeron Summer" then
return "L"
elseif tileset == "N" or tileset == "n" or tileset == "Northrend" then
return "N"
elseif tileset == "Q" or tileset == "q" or tileset == "Village Fall" then
return "Q"
elseif tileset == "V" or tileset == "v" or tileset == "Village" then
return "V"
elseif tileset == "W" or tileset == "w" or tileset == "Lordaeron Winter" then
return "W"
elseif tileset == "X" or tileset == "x" or tileset == "Dalaran" then
return "X"
elseif tileset == "Y" or tileset == "y" or tileset == "Cityscape" then
return "Y"
elseif tileset == "Z" or tileset == "z" or tileset == "Sunken Ruins" then
return "Z"
elseif tileset == "I" or tileset == "i" or tileset == "Icecrown" then
return "I"
elseif tileset == "J" or tileset == "j" or tileset == "Dalaran Ruins" then
return "J"
elseif tileset == "O" or tileset == "o" or tileset == "Outland" then
return "O"
elseif tileset == "K" or tileset == "k" or tileset == "Black Citadel" then
return "K"
end
return ""
end
____exports.tileset2tilesetString = function(tileset)
if tileset == "auto" then
return "auto"
elseif tileset == "A" or tileset == "a" or tileset == "Ashenvale" then
return "Ashenvale"
elseif tileset == "B" or tileset == "b" or tileset == "Barrens" then
return "Barrens"
elseif tileset == "C" or tileset == "c" or tileset == "Felwood" then
return "Felwood"
elseif tileset == "D" or tileset == "d" or tileset == "Dungeon" then
return "Dungeon"
elseif tileset == "F" or tileset == "f" or tileset == "Lordaeron Fall" then
return "Lordaeron Fall"
elseif tileset == "G" or tileset == "g" or tileset == "Underground" then
return "Underground"
elseif tileset == "L" or tileset == "l" or tileset == "Lordaeron Summer" then
return "Lordaeron Summer"
elseif tileset == "N" or tileset == "n" or tileset == "Northrend" then
return "Northrend"
elseif tileset == "Q" or tileset == "q" or tileset == "Village Fall" then
return "Village Fall"
elseif tileset == "V" or tileset == "v" or tileset == "Village" then
return "Village"
elseif tileset == "W" or tileset == "w" or tileset == "Lordaeron Winter" then
return "Lordaeron Winter"
elseif tileset == "X" or tileset == "x" or tileset == "Dalaran" then
return "Dalaran"
elseif tileset == "Y" or tileset == "y" or tileset == "Cityscape" then
return "Cityscape"
elseif tileset == "Z" or tileset == "z" or tileset == "Sunken Ruins" then
return "Sunken Ruins"
elseif tileset == "I" or tileset == "i" or tileset == "Icecrown" then
return "Icecrown"
elseif tileset == "J" or tileset == "j" or tileset == "Dalaran Ruins" then
return "Dalaran Ruins"
elseif tileset == "O" or tileset == "o" or tileset == "Outland" then
return "Outland"
elseif tileset == "K" or tileset == "k" or tileset == "Black Citadel" then
return "Black Citadel"
end
return ""
end
____exports.ApplyAngleSymmetry = function(previousAngle, symmetryAngle)
return -(previousAngle - symmetryAngle) + symmetryAngle
end
____exports.stringReplaceAll = function(toReplace, replacement, str)
local str2 = str
repeat
do
str = str2
str2 = __TS__StringReplace(str, toReplace, replacement)
end
until not (str ~= str2)
return str2
end
function ____exports.ucfirst(____string)
return string.upper(string.sub(____string, 1, 1)) .. string.sub(____string, 2)
end
function ____exports.arrayPush(arr, value)
arr[#arr + 1] = value
end
function ____exports.jsonEncode(v)
return json():encode(v)
end
function ____exports.jsonDecode(v)
return json():decode(v)
end
function ____exports.arrayValuesRound(values)
return __TS__ArrayMap(
values,
function(____, value) return R2I(value) end
)
end
local function sortTwoObjectsById(a, b)
if a.getId ~= nil then
return a:getId() < b:getId()
else
return a.id < b.id
end
end
function ____exports.sortArrayOfObjectsByIds(array)
if #array == 0 or array[1].getId == nil and array[1].id == nil then
return array
end
table.sort(array, sortTwoObjectsById)
return array
end
____exports.roundCoordinateToCenterOfTile = function(coord)
return math.floor(coord / LARGEUR_CASE + 0.5) * LARGEUR_CASE
end
____exports.outOfBounds = function(x, y)
local out = false
if not out then
out = x < globals.MAP_MIN_X or x > globals.MAP_MAX_X
end
if not out then
out = y < globals.MAP_MIN_Y or y > globals.MAP_MAX_Y
end
return out
end
____exports.genstr = function(len)
local result = ""
local characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
local charactersLength = #characters
do
local i = 0
while i < len do
result = result .. __TS__StringCharAt(
characters,
math.floor(math.random() * charactersLength)
)
i = i + 1
end
end
return result
end
____exports.Player2Escaper = function(p)
return getUdgEscapers():get(GetPlayerId(p))
end
function ____exports.ForceAngleBetween0And360(angle)
while angle < 0 do
angle = angle + 360
end
while angle >= 360 do
angle = angle - 360
end
return angle
end
function ____exports.AnglesDiff(endAngle, startAngle)
endAngle = ____exports.ForceAngleBetween0And360(endAngle)
startAngle = ____exports.ForceAngleBetween0And360(startAngle)
local anglesDiff = endAngle - startAngle
if anglesDiff < -180 then
anglesDiff = anglesDiff + 360
end
if anglesDiff > 180 then
anglesDiff = anglesDiff - 360
end
return anglesDiff
end
function ____exports.areNumberSameSens(a, b)
return a < 0 and b < 0 or a >= 0 and b >= 0
end
function ____exports.addObjectContents(myObj, additionalObj)
for key, val in pairs(additionalObj) do
myObj[key] = val
end
end
____exports.convertTextToAngle = function(param)
local p = __TS__StringReplace(
__TS__StringReplace(
__TS__StringReplace(
__TS__StringReplace(
__TS__StringReplace(
__TS__StringReplace(
__TS__StringReplace(
__TS__StringReplace(
string.lower(param),
"leftto",
""
),
"upto",
""
),
"rightto",
""
),
"downto",
""
),
"lt",
""
),
"ut",
""
),
"rt",
""
),
"dt",
""
)
local ups = {"up", "top", "north"}
local rights = {"right", "east"}
local downs = {"down", "bottom", "south"}
local lefts = {"left", "west"}
if S2I(p) > 0 and S2I(p) <= 360 then
return S2I(p)
elseif __TS__ArrayFind(
downs,
function(____, u) return __TS__ArrayFind(
rights,
function(____, r) return u .. r == p or __TS__StringAccess(u, 0) .. __TS__StringAccess(r, 0) == p end
) end
) then
return 315
elseif __TS__ArrayFind(
downs,
function(____, u) return u == p or __TS__StringAccess(u, 0) == p end
) then
return 270
elseif __TS__ArrayFind(
downs,
function(____, u) return __TS__ArrayFind(
lefts,
function(____, l) return u .. l == p or __TS__StringAccess(u, 0) .. __TS__StringAccess(l, 0) == p end
) end
) then
return 225
elseif __TS__ArrayFind(
lefts,
function(____, u) return u == p or __TS__StringAccess(u, 0) == p end
) then
return 180
elseif __TS__ArrayFind(
ups,
function(____, u) return __TS__ArrayFind(
lefts,
function(____, l) return u .. l == p or __TS__StringAccess(u, 0) .. __TS__StringAccess(l, 0) == p end
) end
) then
return 135
elseif __TS__ArrayFind(
ups,
function(____, u) return u == p or __TS__StringAccess(u, 0) == p end
) then
return 90
elseif __TS__ArrayFind(
ups,
function(____, u) return __TS__ArrayFind(
rights,
function(____, r) return u .. r == p or __TS__StringAccess(u, 0) .. __TS__StringAccess(r, 0) == p end
) end
) then
return 45
elseif __TS__ArrayFind(
rights,
function(____, u) return u == p or __TS__StringAccess(u, 0) == p end
) then
return 0
end
return nil
end
local angleToDirectionMap = {
"leftToRight",
"bottomLeftToTopRight",
"bottomToTop",
"bottomRightToTopLeft",
"rightToLeft",
"topRightToBottomLeft",
"topToBottom",
"topLeftToBottomRight"
}
____exports.convertAngleToDirection = function(angle)
local index = math.floor(angle / 45 + 0.5) %% 8
return angleToDirectionMap[index + 1]
end
return ____exports
end,
["src.core.01_libraries.Text"] = function(...)
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local ucfirst = ____Basic_functions.ucfirst
local ____Constants = require("src.core.01_libraries.Constants")
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local function initText()
local NORMAL_TEXT_COLORCODE = "|c00ffffff"
local MAKE_TEXT_COLORCODE = "|c00ffff00"
local ERROR_TEXT_COLORCODE = "|c00960000"
local enabled = true
local posX = 0
local posY = 0.4
local function ForPlayer_timed_withColorCode(p, duration, colorcode, message)
if not enabled then
return false
end
message = ucfirst(message)
if duration >= 0 then
DisplayTimedTextToPlayer(
p,
posX,
posY,
duration,
colorcode .. message
)
else
DisplayTextToPlayer(p, posX, posY, colorcode .. message)
end
return true
end
local function ForAll_timed_withColorCode(duration, colorcode, message)
local i
if not enabled then
return false
end
message = ucfirst(message)
i = 0
while true do
if i > NB_PLAYERS_MAX - 1 then
break
end
ForPlayer_timed_withColorCode(
Player(i),
duration,
colorcode,
message
)
i = i + 1
end
return true
end
local function P_timed(p, duration, message)
return ForPlayer_timed_withColorCode(p, duration, NORMAL_TEXT_COLORCODE, message)
end
local function P(p, message)
return ForPlayer_timed_withColorCode(p, -1, NORMAL_TEXT_COLORCODE, message)
end
local function erP_timed(p, duration, message)
return ForPlayer_timed_withColorCode(p, duration, ERROR_TEXT_COLORCODE, message)
end
local function erP(p, message)
return ForPlayer_timed_withColorCode(p, -1, ERROR_TEXT_COLORCODE, message)
end
local function mkP_timed(p, duration, message)
return ForPlayer_timed_withColorCode(p, duration, MAKE_TEXT_COLORCODE, message)
end
local function mkP(p, message)
return ForPlayer_timed_withColorCode(p, -1, MAKE_TEXT_COLORCODE, message)
end
local function A_timed(duration, message)
return ForAll_timed_withColorCode(duration, NORMAL_TEXT_COLORCODE, message)
end
local function A(message)
return ForAll_timed_withColorCode(-1, NORMAL_TEXT_COLORCODE, message)
end
local function erA_timed(duration, message)
return ForAll_timed_withColorCode(duration, ERROR_TEXT_COLORCODE, message)
end
local function erA(message)
return ForAll_timed_withColorCode(-1, ERROR_TEXT_COLORCODE, message)
end
local function mkA_timed(duration, message)
return ForAll_timed_withColorCode(duration, MAKE_TEXT_COLORCODE, message)
end
local function mkA(message)
return ForAll_timed_withColorCode(-1, MAKE_TEXT_COLORCODE, message)
end
local function DisplayLineToPlayer(p)
P(p, " ")
end
return {
NORMAL_TEXT_COLORCODE = NORMAL_TEXT_COLORCODE,
MAKE_TEXT_COLORCODE = MAKE_TEXT_COLORCODE,
ERROR_TEXT_COLORCODE = ERROR_TEXT_COLORCODE,
ForPlayer_timed_withColorCode = ForPlayer_timed_withColorCode,
ForAll_timed_withColorCode = ForAll_timed_withColorCode,
P_timed = P_timed,
P = P,
erP_timed = erP_timed,
erP = erP,
mkP_timed = mkP_timed,
mkP = mkP,
A_timed = A_timed,
A = A,
erA_timed = erA_timed,
erA = erA,
mkA_timed = mkA_timed,
mkA = mkA,
DisplayLineToPlayer = DisplayLineToPlayer
}
end
____exports.Text = initText()
return ____exports
end,
["src.core.04_STRUCTURES.Lives_and_game_time.Lives_and_game_time"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_LIVES_AT_BEGINNING = ____Constants.NB_LIVES_AT_BEGINNING
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local ____globals = require("globals")
local getUdgLevels = ____globals.getUdgLevels
____exports.LIVES_PLAYER = Player(6)
____exports.initLives = function()
local nb = NB_LIVES_AT_BEGINNING
local function initLives()
createTimer(
0,
false,
function()
local ____getUdgLevels_result_get_result_getNbLives_result_0 = getUdgLevels():get(0)
if ____getUdgLevels_result_get_result_getNbLives_result_0 ~= nil then
____getUdgLevels_result_get_result_getNbLives_result_0 = ____getUdgLevels_result_get_result_getNbLives_result_0:getNbLives()
end
nb = ____getUdgLevels_result_get_result_getNbLives_result_0 or NB_LIVES_AT_BEGINNING
ServiceManager.getService("Multiboard").updateLives(nb)
end
)
end
local function get()
return nb
end
local function setNb(nbLives)
local wordLives
if nbLives < 0 then
return false
end
nb = nbLives
ServiceManager.getService("Multiboard").updateLives(nb)
if nbLives > 1 then
wordLives = " lives."
else
wordLives = " life."
end
Text.A(((udg_colorCode[GetPlayerId(____exports.LIVES_PLAYER) + 1] .. "You have now ") .. I2S(nbLives)) .. wordLives)
return true
end
local function add(n)
local wordLives
if n > 1 then
wordLives = " lives !"
else
wordLives = " life."
end
nb = nb + n
Text.A(((udg_colorCode[2] .. "You have earned ") .. I2S(n)) .. wordLives)
ServiceManager.getService("Multiboard").updateLives(nb)
end
local function loseALife()
nb = nb - 1
ServiceManager.getService("Multiboard").updateLives(nb)
end
return {
get = get,
setNb = setNb,
add = add,
loseALife = loseALife,
initLives = initLives
}
end
return ____exports
end,
["src.Utils.ArrayUtils"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ArraySplice = ____lualib.__TS__ArraySplice
local __TS__ArrayFindIndex = ____lualib.__TS__ArrayFindIndex
local ____exports = {}
____exports.safeArraySplice = function(items, cb)
local index
while true do
index = __TS__ArrayFindIndex(
items,
function(____, item) return cb(item) end
)
if not (index >= 0) then
break
end
__TS__ArraySplice(items, index, 1)
end
end
____exports.literalArray = function(t) return t end
return ____exports
end,
["src.core.04_STRUCTURES.Lives_and_game_time.Time_of_game_trigger"] = function(...)
local ____exports = {}
local function initGameTime()
local hours = 0
local minuts = 0
local seconds = 0
local function updateGameTime()
if seconds >= 59 then
seconds = 0
if minuts >= 59 then
minuts = 0
hours = hours + 1
else
minuts = minuts + 1
end
else
seconds = seconds + 1
end
end
local function getGameTime()
local minStr
local secStr
local hourStr = I2S(hours)
if minuts < 10 then
minStr = "0" .. I2S(minuts)
else
minStr = I2S(minuts)
end
if seconds < 10 then
secStr = "0" .. I2S(seconds)
else
secStr = I2S(seconds)
end
return ((((hourStr .. " h ") .. minStr) .. " min ") .. secStr) .. " s"
end
return {
updateGameTime = updateGameTime,
getGameTime = getGameTime,
resetGameTime = function()
hours = 0
minuts = 0
seconds = 0
end
}
end
____exports.GameTime = {
global = initGameTime(),
current = initGameTime()
}
return ____exports
end,
["src.core.04_STRUCTURES.Lives_and_game_time.Multiboard"] = function(...)
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____ArrayUtils = require("src.Utils.ArrayUtils")
local literalArray = ____ArrayUtils.literalArray
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____ProgressionUtils = require("src.Utils.ProgressionUtils")
local progressionUtils = ____ProgressionUtils.progressionUtils
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local forRange = ____mapUtils.forRange
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ucfirst = ____Basic_functions.ucfirst
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local PURPLE = ____Constants.PURPLE
local RED = ____Constants.RED
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local ____Afk_mode = require("src.core.08_GAME.Afk_mode.Afk_mode")
local AfkMode = ____Afk_mode.AfkMode
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgLevels = ____globals.getUdgLevels
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local playerId2colorId = ____Command_functions.playerId2colorId
local rawPlayerNames = ____Command_functions.rawPlayerNames
local ____Lives_and_game_time = require("src.core.04_STRUCTURES.Lives_and_game_time.Lives_and_game_time")
local LIVES_PLAYER = ____Lives_and_game_time.LIVES_PLAYER
local ____Time_of_game_trigger = require("src.core.04_STRUCTURES.Lives_and_game_time.Time_of_game_trigger")
local GameTime = ____Time_of_game_trigger.GameTime
local function getLongestNameWidth()
local nameWidth = 5
for ____, playerName in ipairs(rawPlayerNames) do
if #playerName > nameWidth then
nameWidth = #playerName
end
end
return nameWidth / 2 + 3
end
local statsModes = literalArray({"global", "current"})
____exports.initMultiboard = function()
local reinitBoards, updateBoards, updateVisibility, handleDitchLogic
local mb
local lb
local playerScores = {}
local playerLastRowIndex = {}
local amountOfEscapers = 0
local pointsEnabled = false
local progressionEnabled = false
forRange(
NB_ESCAPERS,
function(i)
playerScores[i] = {stats = {global = {score = 0, saves = 0, deaths = 0, points = 0}, current = {score = 0, saves = 0, deaths = 0, points = 0}}, mode = "multiboard", statsMode = "global", visible = true}
end
)
local function resetRoundScores()
forRange(
NB_ESCAPERS,
function(i)
playerScores[i].stats.current.score = 0
playerScores[i].stats.current.saves = 0
playerScores[i].stats.current.deaths = 0
playerScores[i].stats.current.points = 0
end
)
GameTime.current.resetGameTime()
reinitBoards()
amountOfEscapers = getUdgEscapers():countMain()
end
local function initMultiboard()
local cols = 4 + (pointsEnabled and 1 or 0) + (progressionEnabled and 1 or 0)
local rows = 3 + getUdgEscapers():countMain()
local nameWidth = getLongestNameWidth()
mb = CreateMultiboardBJ(cols, rows, "Scoreboard - Global")
do
local col = 1
while col <= cols do
do
local row = 1
while row <= rows do
MultiboardSetItemStyleBJ(
mb,
col,
row,
true,
false
)
if col == 1 then
if row <= 2 then
MultiboardSetItemWidthBJ(mb, col, row, 15)
else
MultiboardSetItemWidthBJ(mb, col, row, nameWidth)
end
else
MultiboardSetItemWidthBJ(mb, col, row, 4)
end
row = row + 1
end
end
col = col + 1
end
end
MultiboardSetItemValueBJ(mb, 1, 3, "Player Name")
MultiboardSetItemValueBJ(mb, 2, 3, "Score")
MultiboardSetItemValueBJ(mb, 3, 3, "Saves")
MultiboardSetItemValueBJ(mb, 4, 3, "Deaths")
local ____ = pointsEnabled and MultiboardSetItemValueBJ(mb, 5, 3, "Points")
local ____ = progressionEnabled and MultiboardSetItemValueBJ(mb, pointsEnabled and 6 or 5, 3, "Prog")
end
local function initLeaderboard()
end
local function getOrCreateLeaderboard()
if lb then
return lb
end
initLeaderboard()
return lb
end
local function destroyBoards()
if mb then
DestroyMultiboard(mb)
mb = nil
end
if lb then
DestroyLeaderboard(lb)
lb = nil
end
end
reinitBoards = function()
getUdgEscapers():forMainEscapers(function(escaper) return updateVisibility(escaper, false) end)
destroyBoards()
initMultiboard()
initLeaderboard()
getUdgEscapers():forMainEscapers(function(escaper) return updateVisibility(escaper, true) end)
getUdgEscapers():forMainEscapers(function(escaper)
updateVisibility(
escaper,
playerScores[GetPlayerId(escaper:getPlayer())].visible
)
end)
updateBoards()
end
local function updateLives(lives)
local ____ = mb and MultiboardSetItemValueBJ(
mb,
1,
1,
(udg_colorCode[7] .. "Lives: ") .. tostring(lives)
)
local ____ = lb and LeaderboardSetPlayerItemValueBJ(LIVES_PLAYER, lb, lives)
end
local function updateGametime(reinitCheck)
if reinitCheck then
local currentCount = getUdgEscapers():countMain()
if currentCount ~= amountOfEscapers then
reinitBoards()
amountOfEscapers = currentCount
end
end
local globalGameTimeStr = GameTime.global.getGameTime()
local currentGameTimeStr = GameTime.current.getGameTime()
do
local i = 0
while i < NB_ESCAPERS do
do
if GetLocalPlayer() == Player(i) then
local statsMode = playerScores[i].statsMode
if statsMode == "current" then
local ____ = mb and MultiboardSetItemValueBJ(mb, 1, 2, "|Cfffed312Game time: " .. currentGameTimeStr)
local ____ = lb and LeaderboardSetPlayerItemLabelBJ(
Player(0),
lb,
"|Cfffed312Game time: " .. currentGameTimeStr
)
elseif statsMode == "global" then
local ____ = mb and MultiboardSetItemValueBJ(mb, 1, 2, "|Cfffed312Game time: " .. globalGameTimeStr)
local ____ = lb and LeaderboardSetPlayerItemLabelBJ(
Player(0),
lb,
"|Cfffed312Game time: " .. globalGameTimeStr
)
end
end
if progressionEnabled then
local escaper = getUdgEscapers():get(i)
if not escaper then
goto __continue31
end
local rowIndex = playerLastRowIndex[escaper:getId()]
if not rowIndex then
goto __continue31
end
local playerId = escaper:getEscaperId()
local colorCode = udg_colorCode[playerId2colorId(playerId) + 1]
local ____ = mb and MultiboardSetItemValueBJ(
mb,
pointsEnabled and 6 or 5,
4 + rowIndex,
(colorCode .. tostring(progressionUtils.getPlayerProgression(escaper))) .. "%%"
)
end
end
::__continue31::
i = i + 1
end
end
end
local function playerSortGlobal(a, b)
local scoreA = playerScores[GetPlayerId(a:getPlayer())].stats.global.score
local scoreB = playerScores[GetPlayerId(b:getPlayer())].stats.global.score
if scoreA == scoreB then
return GetPlayerId(a:getPlayer()) < GetPlayerId(b:getPlayer())
else
return scoreA > scoreB
end
end
local function playerSortCurrent(a, b)
local scoreA = playerScores[GetPlayerId(a:getPlayer())].stats.current.score
local scoreB = playerScores[GetPlayerId(b:getPlayer())].stats.current.score
if scoreA == scoreB then
return GetPlayerId(a:getPlayer()) < GetPlayerId(b:getPlayer())
else
return scoreA > scoreB
end
end
local function updatePlayers()
if not mb then
return
end
local rowIndex = 0
local sortedArray = MemoryHandler.getEmptyArray()
for _, escaper in pairs(getUdgEscapers():getAll()) do
sortedArray[#sortedArray + 1] = escaper
end
do
local i = 0
while i < NB_ESCAPERS do
if GetLocalPlayer() == Player(i) then
local statsMode = playerScores[i].statsMode
if statsMode == "current" then
table.sort(sortedArray, playerSortCurrent)
elseif statsMode == "global" then
table.sort(sortedArray, playerSortGlobal)
end
for ____, escaper in ipairs(sortedArray) do
do
if escaper:isEscaperSecondary() then
goto __continue51
end
local playerId = escaper:getEscaperId()
local playerName = escaper:getDisplayName()
local colorCode = udg_colorCode[playerId2colorId(playerId) + 1]
local playerScore = playerScores[playerId].stats[statsMode]
MultiboardSetItemValueBJ(mb, 1, 4 + rowIndex, colorCode .. playerName)
MultiboardSetItemValueBJ(
mb,
2,
4 + rowIndex,
colorCode .. tostring(playerScore.score)
)
MultiboardSetItemValueBJ(
mb,
3,
4 + rowIndex,
colorCode .. tostring(playerScore.saves)
)
MultiboardSetItemValueBJ(
mb,
4,
4 + rowIndex,
colorCode .. tostring(playerScore.deaths)
)
local ____ = pointsEnabled and MultiboardSetItemValueBJ(
mb,
5,
4 + rowIndex,
colorCode .. tostring(playerScore.points)
)
local ____ = progressionEnabled and MultiboardSetItemValueBJ(
mb,
pointsEnabled and 6 or 5,
4 + rowIndex,
(colorCode .. tostring(progressionUtils.getPlayerProgression(escaper))) .. "%%"
)
playerLastRowIndex[escaper:getId()] = rowIndex
rowIndex = rowIndex + 1
end
::__continue51::
end
end
i = i + 1
end
end
MemoryHandler.destroyArray(sortedArray)
end
updateBoards = function()
updateGametime(false)
updateLives(ServiceManager.getService("Lives").get())
updatePlayers()
end
local function setVisibility(escaper, visible)
playerScores[GetPlayerId(escaper:getPlayer())].visible = visible
updateVisibility(escaper, visible)
end
updateVisibility = function(escaper, visible)
local playerMode = playerScores[GetPlayerId(escaper:getPlayer())]
if GetLocalPlayer() == escaper:getPlayer() then
local ____ = mb and MultiboardSetTitleText(
mb,
(("Scoreboard - " .. ucfirst(playerMode.statsMode)) .. (getUdgLevels():isNoobEdit() and ((" - " .. udg_colorCode[RED + 1]) .. "Noobedit") .. "|r" or "")) .. (getUdgLevels():isSpeedEdit() and ((" - " .. udg_colorCode[PURPLE + 1]) .. "SPEED") .. "|r" or "")
)
local ____ = mb and MultiboardDisplay(mb, not escaper.hideLeaderboard and playerMode.mode == "multiboard" and visible)
local ____ = lb and LeaderboardDisplay(lb, not escaper.hideLeaderboard and playerMode.mode == "leaderboard" and visible)
end
end
local function setMode(escaper, mode)
playerScores[GetPlayerId(escaper:getPlayer())].mode = mode
setVisibility(escaper, true)
end
local function setStatsMode(escaper, statsMode)
playerScores[GetPlayerId(escaper:getPlayer())].statsMode = statsMode
updatePlayers()
setVisibility(escaper, true)
end
local function increasePlayerScore(playerId, score)
for ____, statsMode in ipairs(statsModes) do
local ____playerScores_playerId_stats_statsMode_0, ____score_1 = playerScores[playerId].stats[statsMode], score
____playerScores_playerId_stats_statsMode_0[____score_1] = ____playerScores_playerId_stats_statsMode_0[____score_1] + 1
playerScores[playerId].stats[statsMode].score = playerScores[playerId].stats[statsMode].saves - playerScores[playerId].stats[statsMode].deaths
end
updatePlayers()
end
local function setPointsEnabled(enabled)
if pointsEnabled ~= enabled then
pointsEnabled = enabled
reinitBoards()
end
end
local function setProgressionEnabled(enabled)
if progressionEnabled ~= enabled then
progressionEnabled = enabled
reinitBoards()
end
end
local function adjustPlayerPoints(playerId, points)
for ____, statsMode in ipairs(statsModes) do
local ____playerScores_playerId_stats_statsMode_2, ____points_3 = playerScores[playerId].stats[statsMode], "points"
____playerScores_playerId_stats_statsMode_2[____points_3] = ____playerScores_playerId_stats_statsMode_2[____points_3] + points
end
updatePlayers()
end
local function setPlayerPoints(playerId, points)
for ____, statsMode in ipairs(statsModes) do
playerScores[playerId].stats[statsMode].points = points
end
updatePlayers()
end
createTimer(
1,
true,
function()
GameTime.global.updateGameTime()
GameTime.current.updateGameTime()
updateGametime(true)
handleDitchLogic()
end
)
local function progressionCompare(a, b)
return b.progression > a.progression
end
local lastDitchEffect = nil
local lastDitchEffectEscaper = nil
handleDitchLogic = function()
if getUdgLevels():getLevelProgression() ~= "all" then
return
end
local sortedTargets = MemoryHandler.getEmptyArray()
for _, escaper in pairs(getUdgEscapers():getAll()) do
do
if not AfkMode.isActive[escaper:getId() + 1] or escaper:hasAutorevive() then
goto __continue77
end
local target = MemoryHandler.getEmptyObject()
target.escaper = escaper
target.progression = progressionUtils.getPlayerProgression(escaper)
arrayPush(sortedTargets, target)
end
::__continue77::
end
if #sortedTargets > 1 then
table.sort(sortedTargets, progressionCompare)
local deadPlayer = false
local currentDitchEffectEscaper = nil
for ____, target in ipairs(sortedTargets) do
do
local hero = target.escaper:getHero()
if not hero then
goto __continue80
end
if not target.escaper:isAlive() then
deadPlayer = true
goto __continue80
end
if not deadPlayer and target.escaper:isAlive() then
break
end
if deadPlayer then
currentDitchEffectEscaper = target.escaper
break
end
end
::__continue80::
end
if currentDitchEffectEscaper then
local ____lastDitchEffectEscaper_getId_result_4 = lastDitchEffectEscaper
if ____lastDitchEffectEscaper_getId_result_4 ~= nil then
____lastDitchEffectEscaper_getId_result_4 = ____lastDitchEffectEscaper_getId_result_4:getId()
end
if ____lastDitchEffectEscaper_getId_result_4 ~= currentDitchEffectEscaper:getId() then
local ____ = lastDitchEffect and DestroyEffect(lastDitchEffect)
lastDitchEffect = AddSpecialEffectTargetUnitBJ(
"overhead",
currentDitchEffectEscaper:getHero(),
"AbilitiesSpellsOtherTalkToMeTalkToMe.mdl"
)
lastDitchEffectEscaper = currentDitchEffectEscaper
end
else
local ____ = lastDitchEffect and DestroyEffect(lastDitchEffect)
lastDitchEffect = nil
lastDitchEffectEscaper = nil
end
end
sortedTargets:__destroy(true)
end
return {
setVisibility = setVisibility,
setMode = setMode,
setStatsMode = setStatsMode,
increasePlayerScore = increasePlayerScore,
updateLives = updateLives,
resetRoundScores = resetRoundScores,
getOrCreateLeaderboard = getOrCreateLeaderboard,
reinitBoards = reinitBoards,
setPointsEnabled = setPointsEnabled,
setProgressionEnabled = setProgressionEnabled,
adjustPlayerPoints = adjustPlayerPoints,
setPlayerPoints = setPlayerPoints
}
end
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.adapter"] = function(...)
local ____exports = {}
local function baseCreateFrame()
error("Adapter has not implemented createFrame", 0)
end
local function baseCleanupFrame()
error("Adapter has not implemented cleanupFrame", 0)
end
local function baseUpdateFrameProperties()
error("Adapter has not implemented updateFrameProperties", 0)
end
local function baseGetParent()
error("Adapter has not implemented getParent", 0)
end
local function baseScheduleUpdate()
error("Adapter has not implemented scheduleUdate", 0)
end
local internalAdapter = {
createFrame = baseCreateFrame,
cleanupFrame = baseCleanupFrame,
updateFrameProperties = baseUpdateFrameProperties,
getParent = baseGetParent,
scheduleUpdate = baseScheduleUpdate
}
____exports.adapter = internalAdapter
____exports.setAdapter = function(adapter)
internalAdapter.createFrame = adapter.createFrame or baseCreateFrame
internalAdapter.cleanupFrame = adapter.cleanupFrame or baseCleanupFrame
internalAdapter.getParent = adapter.getParent or baseGetParent
internalAdapter.updateFrameProperties = adapter.updateFrameProperties or baseUpdateFrameProperties
internalAdapter.scheduleUpdate = adapter.scheduleUpdate or baseScheduleUpdate
end
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.common"] = function(...)
local ____exports = {}
---
-- @noSelfInFile *
____exports.TEXT_ELEMENT = "TEXT ELEMENT"
____exports.isLua = _G._VERSION ~= nil
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.utils.arrays"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ParseInt = ____lualib.__TS__ParseInt
local __TS__ObjectKeys = ____lualib.__TS__ObjectKeys
local __TS__ArrayReduce = ____lualib.__TS__ArrayReduce
local ____exports = {}
local ____common = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.common")
local isLua = ____common.isLua
____exports.getLength = function(arr) return isLua and __TS__ArrayReduce(
__TS__ObjectKeys(arr),
function(____, max, key)
local keyAsNumber = __TS__ParseInt(key)
if type(keyAsNumber) == "number" then
return max > keyAsNumber and max or keyAsNumber
end
return max
end,
0
) or #arr end
--- Removes nils from the array
____exports.compact = function(arr)
local length = ____exports.getLength(arr)
local newArr = {}
do
local i = 0
while i < length do
local val = arr[i + 1]
if val ~= nil then
newArr[#newArr + 1] = val
end
i = i + 1
end
end
return newArr
end
____exports.forEach = function(arr, fn)
local length = ____exports.getLength(arr)
do
local i = 0
while i < length do
fn(arr[i + 1], i)
i = i + 1
end
end
end
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.reconciler"] = function(...)
local ____lualib = require("lualib_bundle")
local WeakMap = ____lualib.WeakMap
local __TS__New = ____lualib.__TS__New
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__Class = ____lualib.__TS__Class
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
local Set = ____lualib.Set
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
local __TS__Iterator = ____lualib.__TS__Iterator
local ____exports = {}
local cleanupFrames, reconcileChildren, instantiate, createPublicInstance, functionalComponentClasses, isClass
local ____adapter = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.adapter")
local adapter = ____adapter.adapter
local ____element = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.element")
local isChild = ____element.isChild
local processChildren = ____element.processChildren
local ____common = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.common")
local isLua = ____common.isLua
local TEXT_ELEMENT = ____common.TEXT_ELEMENT
local ____arrays = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.utils.arrays")
local compact = ____arrays.compact
function ____exports.reconcile(parentFrame, instance, vnode)
do
local function ____catch(err)
print(err)
return true, nil
end
local ____try, ____hasReturned, ____returnValue = pcall(function()
if not instance then
if not vnode then
return true, nil
end
return true, instantiate(vnode, parentFrame)
elseif not vnode then
cleanupFrames(instance)
return true, nil
elseif instance.vnode.type ~= vnode.type then
local newInstance = instantiate(vnode, parentFrame)
cleanupFrames(instance)
return true, newInstance
else
local instanceOfSameType = instance
if type(vnode.type) == "string" then
adapter:updateFrameProperties(instance.hostFrame, instance.vnode.props, vnode.props)
instanceOfSameType.childInstances = reconcileChildren(instanceOfSameType, vnode)
elseif instanceOfSameType.component then
instanceOfSameType.component.props = vnode.props
do
local function ____catch(err)
print(err)
cleanupFrames(instance)
error(err, 0)
end
local ____try, ____hasReturned = pcall(function()
____exports.hooks.beforeRender(instanceOfSameType.component)
end)
if not ____try then
____catch(____hasReturned)
end
end
local rendered = instanceOfSameType.component:render(vnode.props)
local children = isChild(rendered) and (rendered and ({rendered}) or ({})) or rendered
instanceOfSameType.childInstances = reconcileChildren(instanceOfSameType, vnode, children)
end
instanceOfSameType.vnode = vnode
return true, instanceOfSameType
end
end)
if not ____try then
____hasReturned, ____returnValue = ____catch(____hasReturned)
end
if ____hasReturned then
return ____returnValue
end
end
end
function cleanupFrames(instance)
if instance.component then
____exports.hooks.beforeUnmount(instance.component)
end
if instance.childInstances then
for ____, child in ipairs(instance.childInstances) do
if child ~= nil then
cleanupFrames(child)
end
end
end
if instance.hostFrame then
adapter:cleanupFrame(instance.hostFrame)
end
end
function reconcileChildren(instance, vnode, children)
if children == nil then
children = vnode.props.children
end
local hostFrame = instance.hostFrame
local childInstances = instance.childInstances
local nextChildElements = processChildren(children or ({}))
local newChildInstances = {}
local count = math.max(#childInstances, #nextChildElements)
do
local i = 0
while i < count do
local childInstance = childInstances[i + 1]
local childElement = nextChildElements[i + 1]
local newChildInstance = ____exports.reconcile(hostFrame, childInstance, childElement)
if newChildInstance ~= nil then
newChildInstances[#newChildInstances + 1] = newChildInstance
end
i = i + 1
end
end
return newChildInstances
end
function instantiate(vnode, parentFrame)
local ____vnode_0 = vnode
local ____type = ____vnode_0.type
local props = ____vnode_0.props
if type(____type) == "string" then
if ____type == TEXT_ELEMENT then
error("Cannot create inline text, yet", 0)
end
local frame = adapter:createFrame(____type, parentFrame, props)
local childElements = processChildren(props.children or ({}))
local childInstances = __TS__ArrayMap(
childElements,
function(____, child) return instantiate(child, frame) end
)
local instance = {hostFrame = frame, vnode = vnode, childInstances = childInstances}
adapter:updateFrameProperties(frame, {}, props)
return instance
else
local instance = {vnode = vnode}
instance.component = createPublicInstance(vnode, instance)
do
local function ____catch(err)
print(err)
end
local ____try, ____hasReturned = pcall(function()
____exports.hooks.beforeRender(instance.component)
end)
if not ____try then
____catch(____hasReturned)
end
end
local ____temp_1 = instance.component:render(props)
if ____temp_1 == nil then
____temp_1 = {}
end
local rendered = ____temp_1
local childElements = isChild(rendered) and ({rendered}) or rendered
instance.childInstances = __TS__ArrayMap(
__TS__ArrayFilter(
compact(childElements),
function(____, child) return type(child) == "table" end
),
function(____, child) return instantiate(child, parentFrame) end
)
return instance
end
end
function createPublicInstance(vnode, internalInstance)
local ____vnode_2 = vnode
local ComponentType = ____vnode_2.type
local props = ____vnode_2.props
local constructor
if type(ComponentType) == "string" then
error("Tried createPublicInstance() with string", 0)
elseif isClass(ComponentType) then
constructor = ComponentType
else
local renderFunc = ComponentType
local existingClass = functionalComponentClasses:get(renderFunc)
if existingClass then
constructor = existingClass
else
local ____class_3 = __TS__Class()
____class_3.name = ____class_3.name
__TS__ClassExtends(____class_3, ____exports.ClassComponent)
function ____class_3.prototype.render(self, props)
return renderFunc(props)
end
constructor = ____class_3
functionalComponentClasses:set(renderFunc, constructor)
end
end
local publicInstance = __TS__New(constructor, props)
publicInstance.instance = internalInstance
return publicInstance
end
____exports.hooks = {
beforeRender = function(instance)
end,
beforeUnmount = function(instance)
end
}
local containerMap = __TS__New(WeakMap)
function ____exports.render(vnode, container)
local prevInstance = containerMap:get(container) or nil
local nextInstance = ____exports.reconcile(container, prevInstance, vnode)
containerMap:set(containerMap, nextInstance)
end
functionalComponentClasses = __TS__New(WeakMap)
isClass = function(constructor)
if isLua then
return type(constructor) ~= "function"
else
return constructor.prototype ~= nil
end
end
local instanceMap = __TS__New(WeakMap)
local scheduledUpdates = __TS__New(Set)
local function scheduleUpdate(instance)
scheduledUpdates:add(instance)
adapter:scheduleUpdate()
end
____exports.ClassComponent = __TS__Class()
local ClassComponent = ____exports.ClassComponent
ClassComponent.name = "ClassComponent"
function ClassComponent.prototype.____constructor(self, props)
self.props = props
self.state = {}
end
__TS__SetDescriptor(
ClassComponent.prototype,
"instance",
{set = function(self, instance)
instanceMap:set(self, instance)
end},
true
)
function ClassComponent.prototype.setState(self, partialState)
self.state = __TS__ObjectAssign({}, self.state, partialState)
local instance = instanceMap:get(self)
if instance then
scheduleUpdate(instance)
end
end
local function updateInstance(internalInstance)
local vnode = internalInstance.vnode
____exports.reconcile(nil, internalInstance, vnode)
end
____exports.flushUpdates = function()
for ____, instance in __TS__Iterator(scheduledUpdates:values()) do
updateInstance(instance)
end
scheduledUpdates:clear()
end
____exports.test = {functionalComponentClasses = functionalComponentClasses}
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.Component"] = function(...)
local ____exports = {}
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.element"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ArrayFlat = ____lualib.__TS__ArrayFlat
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
local __TS__ObjectRest = ____lualib.__TS__ObjectRest
local __TS__Delete = ____lualib.__TS__Delete
local ____exports = {}
local createTextElement
local ____common = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.common")
local TEXT_ELEMENT = ____common.TEXT_ELEMENT
local ____arrays = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.utils.arrays")
local compact = ____arrays.compact
local getLength = ____arrays.getLength
function ____exports.createElement(____type, config, ...)
local children = {...}
local ____TS__ObjectAssign_result_0 = __TS__ObjectAssign({}, config)
local key = ____TS__ObjectAssign_result_0.key
if key == nil then
key = nil
end
local props = __TS__ObjectRest(____TS__ObjectAssign_result_0, {key = true})
local flattenedChildren = ____exports.processChildren(children and getLength(children) > 0 and children or ({}))
if #flattenedChildren > 0 then
props.children = flattenedChildren
else
__TS__Delete(props, "children")
end
local vnode = {type = ____type, props = props}
if key ~= nil then
vnode.key = key
end
return vnode
end
function createTextElement(value)
return ____exports.createElement(TEXT_ELEMENT, {nodeValue = value})
end
____exports.isChild = function(obj) return type(obj) == "table" and obj ~= nil and obj.type ~= nil and obj.props ~= nil or type(obj) == "boolean" or type(obj) == "string" end
____exports.processChildren = function(children) return __TS__ArrayMap(
__TS__ArrayFilter(
compact(__TS__ArrayFlat(compact(children))),
function(____, c) return type(c) ~= "boolean" and (type(c) == "string" or not not c.type) end
),
function(____, c) return type(c) == "string" and createTextElement(c) or c end
) end
local EMPTY_OBJECT = {}
____exports.Fragment = function(____bindingPattern0)
local children
children = ____bindingPattern0.children
return children or nil
end
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.types"] = function(...)
local ____exports = {}
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.context"] = function(...)
local ____lualib = require("lualib_bundle")
local WeakMap = ____lualib.WeakMap
local __TS__New = ____lualib.__TS__New
local ____exports = {}
____exports.hookContext = {}
____exports.hookMap = __TS__New(WeakMap)
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.reconcilerHooks"] = function(...)
local ____lualib = require("lualib_bundle")
local WeakMap = ____lualib.WeakMap
local __TS__ArrayForEach = ____lualib.__TS__ArrayForEach
local ____exports = {}
local ____reconciler = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.reconciler")
local hooks = ____reconciler.hooks
local ____context = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.context")
local hookContext = ____context.hookContext
local hookMap = ____context.hookMap
local oldBeforeRender = hooks.beforeRender
local oldBeforeUnmount = hooks.beforeUnmount
hooks.beforeRender = function(instance)
oldBeforeRender(instance)
hookContext.currentInstance = instance
hookContext.currentIndex = 0
if not hookMap:has(instance) then
hookMap:set(instance, {})
end
end
hooks.beforeUnmount = function(instance)
oldBeforeUnmount(instance)
local hooks = hookMap:get(instance)
if hooks then
__TS__ArrayForEach(
hooks,
function(____, hook) return hook.type == "effect" and hook.cleanup and hook.cleanup() end
)
end
end
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.useReducer"] = function(...)
local ____lualib = require("lualib_bundle")
local WeakMap = ____lualib.WeakMap
local ____exports = {}
local ____context = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.context")
local hookContext = ____context.hookContext
local hookMap = ____context.hookMap
require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.reconcilerHooks")
____exports.useReducer = function(reducer, initialState)
local ____hookContext_0, ____currentIndex_1 = hookContext, "currentIndex"
local ____hookContext_currentIndex_2 = ____hookContext_0[____currentIndex_1]
____hookContext_0[____currentIndex_1] = ____hookContext_currentIndex_2 + 1
local index = ____hookContext_currentIndex_2
local hooks = hookMap:get(hookContext.currentInstance)
local ____hooks_index_4 = hooks[index + 1]
if ____hooks_index_4 == nil then
local ____temp_3 = {type = "reducer"}
hooks[index + 1] = ____temp_3
____hooks_index_4 = ____temp_3
end
local state = ____hooks_index_4
if state.type ~= "reducer" then
error(
(("Expected a reducer hook at index " .. tostring(index)) .. ", got ") .. state.type,
0
)
end
state.reducer = reducer
if not state.instance then
state.value = {
initialState,
function(action)
local nextValue = state.reducer(state.value[1], action)
if state.value[1] ~= nextValue then
state.value = {nextValue, state.value[2]}
state.instance:setState({})
end
end
}
state.instance = hookContext.currentInstance
end
return state.value
end
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.useState"] = function(...)
local ____exports = {}
local ____useReducer = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.useReducer")
local useReducer = ____useReducer.useReducer
____exports.useState = function(initialState) return useReducer(
function(oldState, v)
if type(v) ~= "function" then
return v
end
return v(oldState)
end,
initialState
) end
____exports.useForceUpdate = function()
local ____, setTick = table.unpack(____exports.useState(0))
local function update()
setTick(function(tick) return tick + 1 end)
end
return update
end
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.helpers"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ArraySome = ____lualib.__TS__ArraySome
local ____exports = {}
____exports.argsChanged = function(oldArgs, newArgs) return #oldArgs ~= #newArgs or __TS__ArraySome(
newArgs,
function(____, arg, index) return arg ~= oldArgs[index + 1] end
) end
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.useEffect"] = function(...)
local ____lualib = require("lualib_bundle")
local WeakMap = ____lualib.WeakMap
local ____exports = {}
local ____context = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.context")
local hookContext = ____context.hookContext
local hookMap = ____context.hookMap
local ____helpers = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.helpers")
local argsChanged = ____helpers.argsChanged
require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.reconcilerHooks")
____exports.useEffect = function(callback, inputs)
local ____hookContext_0, ____currentIndex_1 = hookContext, "currentIndex"
local ____hookContext_currentIndex_2 = ____hookContext_0[____currentIndex_1]
____hookContext_0[____currentIndex_1] = ____hookContext_currentIndex_2 + 1
local index = ____hookContext_currentIndex_2
local hooks = hookMap:get(hookContext.currentInstance)
local oldState = hooks[index + 1]
local ____oldState_4 = oldState
if ____oldState_4 == nil then
local ____temp_3 = {type = "effect"}
hooks[index + 1] = ____temp_3
____oldState_4 = ____temp_3
end
local state = ____oldState_4
if state.type ~= "effect" then
error(
(("Expected an effect hook at index " .. tostring(index)) .. ", got ") .. state.type,
0
)
end
if not oldState or state.lastInputs and inputs and argsChanged(state.lastInputs, inputs) then
if state.cleanup then
state.cleanup()
end
state.lastInputs = inputs
state.cleanup = callback()
end
end
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.useRef"] = function(...)
local ____lualib = require("lualib_bundle")
local WeakMap = ____lualib.WeakMap
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
local ____exports = {}
local ____context = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.context")
local hookContext = ____context.hookContext
local hookMap = ____context.hookMap
require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.reconcilerHooks")
local function initializeRef(initial)
local state = {type = "ref", current = initial}
__TS__ObjectDefineProperty(state, "type", {enumerable = false, value = "ref"})
return state
end
____exports.useRef = function(initial)
local ____hookContext_0, ____currentIndex_1 = hookContext, "currentIndex"
local ____hookContext_currentIndex_2 = ____hookContext_0[____currentIndex_1]
____hookContext_0[____currentIndex_1] = ____hookContext_currentIndex_2 + 1
local index = ____hookContext_currentIndex_2
local hooks = hookMap:get(hookContext.currentInstance)
local ____hooks_index_4 = hooks[index + 1]
if ____hooks_index_4 == nil then
local ____initializeRef_result_3 = initializeRef(initial)
hooks[index + 1] = ____initializeRef_result_3
____hooks_index_4 = ____initializeRef_result_3
end
local state = ____hooks_index_4
if state.type ~= "ref" then
error(
(("Expected a ref hook at index " .. tostring(index)) .. ", got ") .. state.type,
0
)
end
return state
end
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.index"] = function(...)
local ____exports = {}
do
local ____adapter = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.adapter")
local setAdapter = ____adapter.setAdapter
____exports.setAdapter = setAdapter
end
do
local ____element = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.element")
local createElement = ____element.createElement
local Fragment = ____element.Fragment
____exports.createElement = createElement
____exports.Fragment = Fragment
end
do
local ____reconciler = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.reconciler")
local render = ____reconciler.render
local flushUpdates = ____reconciler.flushUpdates
____exports.render = render
____exports.flushUpdates = flushUpdates
end
do
local ____useReducer = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.useReducer")
local useReducer = ____useReducer.useReducer
____exports.useReducer = useReducer
end
do
local ____useState = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.useState")
local useState = ____useState.useState
local useForceUpdate = ____useState.useForceUpdate
____exports.useState = useState
____exports.useForceUpdate = useForceUpdate
end
do
local ____useEffect = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.useEffect")
local useEffect = ____useEffect.useEffect
____exports.useEffect = useEffect
end
do
local ____useRef = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.hooks.useRef")
local useRef = ____useRef.useRef
____exports.useRef = useRef
end
return ____exports
end,
["lua_modules.w3ts-jsx.dist.src.adapter"] = function(...)
local ____lualib = require("lualib_bundle")
local WeakMap = ____lualib.WeakMap
local __TS__New = ____lualib.__TS__New
local __TS__ArrayIncludes = ____lualib.__TS__ArrayIncludes
local __TS__StringReplace = ____lualib.__TS__StringReplace
local ____exports = {}
local ____index = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.index")
local flushUpdates = ____index.flushUpdates
local render = ____index.render
local function noop()
end
local frameDefaults = {
name = "AnonymousFrame",
priority = 0,
isSimple = true,
typeName = nil,
inherits = "",
context = 0,
key = nil,
alpha = 255,
enabled = true,
font = {fileName = "", height = 16, flags = 0},
level = 0,
maxLength = 9999,
minMaxValue = {min = -999999999, max = 999999999},
model = {modelFile = "", cameraIndex = 0},
scale = 1,
spriteAnimate = {primaryProp = 0, flags = 0},
stepSize = 0,
text = "",
textAlignment = {vert = TEXT_JUSTIFY_TOP, horz = TEXT_JUSTIFY_LEFT},
textColor = 16777215,
texture = {texFile = "", flag = 0, blend = true},
tooltip = nil,
value = 0,
vertexColor = 16777215,
visible = true,
position = nil,
absPosition = nil,
size = {width = 0, height = 0},
children = nil,
ref = nil,
parentFrame = nil,
onLoad = noop,
onClick = nil,
onMouseEnter = nil,
onMouseLeave = nil,
onMouseUp = nil,
onMouseDown = nil,
onMouseWheel = nil,
onCheckboxChecked = nil,
onCheckboxUnchecked = nil,
onEditboxTextChanged = nil,
onPopupmenuItemChanged = nil,
onDoubleClick = nil,
onSpriteAnimUpdate = nil,
onSliderChanged = nil,
onDialogCancel = nil,
onDialogAccept = nil,
onEditboxEnter = nil
}
local ____ = frameDefaults
local function absurd(value)
error(
("Got " .. tostring(value)) .. " when expected nothing",
0
)
end
local triggerMap = __TS__New(WeakMap)
local function setEventProp(frame, event, val, oldValue)
local t = triggerMap:get(oldValue)
if val == nil then
if t then
DestroyTrigger(t)
triggerMap:delete(oldValue)
end
return
end
if t == nil then
t = CreateTrigger()
BlzTriggerRegisterFrameEvent(t, frame, event)
else
TriggerClearConditions(t)
end
TriggerAddCondition(
t,
Condition(function()
if event == FRAMEEVENT_CONTROL_CLICK then
BlzFrameSetEnable(frame, false)
BlzFrameSetEnable(frame, true)
end
val()
return false
end)
)
triggerMap:set(val, t)
end
local firstChildRelativePoints = {FRAMEPOINT_TOPLEFT, FRAMEPOINT_TOP, FRAMEPOINT_LEFT}
local lastChildRelativePoints = {FRAMEPOINT_RIGHT, FRAMEPOINT_BOTTOM, FRAMEPOINT_BOTTOMRIGHT}
local function resolveRelative(frame, relative, relativePoint)
if type(relative) ~= "string" then
return relative
end
repeat
local ____switch13 = relative
local ____cond13 = ____switch13 == "parent"
if ____cond13 then
return BlzFrameGetParent(frame)
end
____cond13 = ____cond13 or ____switch13 == "previous"
if ____cond13 then
do
local parent = BlzFrameGetParent(frame)
local children = BlzFrameGetChildrenCount(parent)
local index = -1
do
local i = 0
while i < children do
if BlzFrameGetChild(parent, i) == frame then
index = i
break
end
i = i + 1
end
end
if index > 0 then
return BlzFrameGetChild(parent, index - 1)
end
return nil
end
end
____cond13 = ____cond13 or ____switch13 == "children"
if ____cond13 then
if __TS__ArrayIncludes(firstChildRelativePoints, relativePoint) then
return BlzFrameGetChild(frame, 0)
end
if __TS__ArrayIncludes(lastChildRelativePoints, relativePoint) then
return BlzFrameGetChild(
frame,
BlzFrameGetChildrenCount(frame) - 1
)
end
error(
(("When using relative=children, expected relativePoint to be in " .. tostring(firstChildRelativePoints)) .. " or ") .. tostring(lastChildRelativePoints),
0
)
end
____cond13 = ____cond13 or ____switch13 == "children-reverse"
if ____cond13 then
if __TS__ArrayIncludes(lastChildRelativePoints, relativePoint) then
return BlzFrameGetChild(frame, 0)
end
if __TS__ArrayIncludes(firstChildRelativePoints, relativePoint) then
return BlzFrameGetChild(
frame,
BlzFrameGetChildrenCount(frame) - 1
)
end
error(
(("When using relative=children, expected relativePoint to be in " .. tostring(firstChildRelativePoints)) .. " or ") .. tostring(lastChildRelativePoints),
0
)
end
do
absurd(relative)
end
until true
end
local function previousToParentPoint(relative)
repeat
local ____switch23 = relative
local ____cond23 = ____switch23 == FRAMEPOINT_RIGHT
if ____cond23 then
return FRAMEPOINT_LEFT
end
____cond23 = ____cond23 or ____switch23 == FRAMEPOINT_BOTTOM
if ____cond23 then
return FRAMEPOINT_TOP
end
____cond23 = ____cond23 or ____switch23 == FRAMEPOINT_BOTTOMLEFT
if ____cond23 then
return FRAMEPOINT_TOPLEFT
end
____cond23 = ____cond23 or ____switch23 == FRAMEPOINT_BOTTOMRIGHT
if ____cond23 then
return FRAMEPOINT_TOPRIGHT
end
until true
end
local tooltipMap = __TS__New(WeakMap)
local scale = 1600 * 1.25
--- Sets the UI scale for pixel measurements. Defaults to 1600.
____exports.setPixelScale = function(newScale)
scale = newScale * 1.25
end
--- Allows usage of Blizzard sizes (where 0.8 fills the 5:4 box width, 0.6 the
-- 5:4 box height) and pixels (where 1600 is the full width and 1200 is the
-- full height)
local function smartSize(size)
return size < 1 and size > -1 and size or size / scale
end
local function setProp(frame, prop, value, oldValue)
local ____value_0 = value
if ____value_0 == nil then
____value_0 = frameDefaults[prop]
end
local val = ____value_0
local _oldValue = oldValue
repeat
local ____switch27 = prop
local ____cond27 = ____switch27 == "text"
if ____cond27 then
do
BlzFrameSetText(frame, val)
break
end
end
____cond27 = ____cond27 or ____switch27 == "maxLength"
if ____cond27 then
do
BlzFrameSetTextSizeLimit(frame, val)
break
end
end
____cond27 = ____cond27 or ____switch27 == "textColor"
if ____cond27 then
do
BlzFrameSetTextColor(frame, val)
break
end
end
____cond27 = ____cond27 or ____switch27 == "texture"
if ____cond27 then
do
local val2 = type(val) == "string" and ({texFile = val}) or val
local ____BlzFrameSetTexture_5 = BlzFrameSetTexture
local ____frame_4 = frame
local ____val2_texFile_1 = val2.texFile
if ____val2_texFile_1 == nil then
____val2_texFile_1 = frameDefaults.texture.texFile
end
local ____val2_flag_2 = val2.flag
if ____val2_flag_2 == nil then
____val2_flag_2 = frameDefaults.texture.flag
end
local ____val2_blend_3 = val2.blend
if ____val2_blend_3 == nil then
____val2_blend_3 = frameDefaults.texture.blend
end
____BlzFrameSetTexture_5(____frame_4, ____val2_texFile_1, ____val2_flag_2, ____val2_blend_3)
break
end
end
____cond27 = ____cond27 or ____switch27 == "model"
if ____cond27 then
do
local ____BlzFrameSetModel_9 = BlzFrameSetModel
local ____frame_8 = frame
local ____val_modelFile_6 = val.modelFile
if ____val_modelFile_6 == nil then
____val_modelFile_6 = frameDefaults.model.modelFile
end
local ____val_cameraIndex_7 = val.cameraIndex
if ____val_cameraIndex_7 == nil then
____val_cameraIndex_7 = frameDefaults.model.cameraIndex
end
____BlzFrameSetModel_9(____frame_8, ____val_modelFile_6, ____val_cameraIndex_7)
break
end
end
____cond27 = ____cond27 or ____switch27 == "alpha"
if ____cond27 then
do
BlzFrameSetAlpha(frame, val)
break
end
end
____cond27 = ____cond27 or ____switch27 == "level"
if ____cond27 then
do
BlzFrameSetLevel(frame, val)
break
end
end
____cond27 = ____cond27 or ____switch27 == "visible"
if ____cond27 then
do
BlzFrameSetVisible(frame, val)
break
end
end
____cond27 = ____cond27 or ____switch27 == "enabled"
if ____cond27 then
do
BlzFrameSetEnable(frame, val)
break
end
end
____cond27 = ____cond27 or ____switch27 == "vertexColor"
if ____cond27 then
do
BlzFrameSetVertexColor(frame, val)
break
end
end
____cond27 = ____cond27 or ____switch27 == "value"
if ____cond27 then
do
BlzFrameSetValue(frame, val)
break
end
end
____cond27 = ____cond27 or ____switch27 == "size"
if ____cond27 then
do
local ____BlzFrameSetSize_14 = BlzFrameSetSize
local ____frame_12 = frame
local ____val_width_10 = val.width
if ____val_width_10 == nil then
____val_width_10 = frameDefaults.size.width
end
local ____smartSize_result_13 = smartSize(____val_width_10)
local ____val_height_11 = val.height
if ____val_height_11 == nil then
____val_height_11 = frameDefaults.size.height
end
____BlzFrameSetSize_14(
____frame_12,
____smartSize_result_13,
smartSize(____val_height_11)
)
break
end
end
____cond27 = ____cond27 or ____switch27 == "stepSize"
if ____cond27 then
do
BlzFrameSetStepSize(frame, val)
break
end
end
____cond27 = ____cond27 or ____switch27 == "tooltip"
if ____cond27 then
do
local existingTooltip = tooltipMap:get(frame)
local tooltip
if existingTooltip then
tooltip = existingTooltip
else
tooltip = ____exports.adapter:createFrame(
"container",
BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0),
{name = "Tooltip"}
)
tooltipMap:set(frame, tooltip)
BlzFrameSetTooltip(frame, tooltip)
end
render(val, tooltip)
break
end
end
____cond27 = ____cond27 or ____switch27 == "font"
if ____cond27 then
do
local ____BlzFrameSetFont_19 = BlzFrameSetFont
local ____frame_18 = frame
local ____val_fileName_15 = val.fileName
if ____val_fileName_15 == nil then
____val_fileName_15 = frameDefaults.font.fileName
end
local ____val_height_16 = val.height
if ____val_height_16 == nil then
____val_height_16 = frameDefaults.font.height
end
local ____val_flags_17 = val.flags
if ____val_flags_17 == nil then
____val_flags_17 = frameDefaults.font.flags
end
____BlzFrameSetFont_19(____frame_18, ____val_fileName_15, ____val_height_16, ____val_flags_17)
break
end
end
____cond27 = ____cond27 or ____switch27 == "minMaxValue"
if ____cond27 then
do
local ____BlzFrameSetMinMaxValue_23 = BlzFrameSetMinMaxValue
local ____frame_22 = frame
local ____val_min_20 = val.min
if ____val_min_20 == nil then
____val_min_20 = frameDefaults.minMaxValue.min
end
local ____val_max_21 = val.max
if ____val_max_21 == nil then
____val_max_21 = frameDefaults.minMaxValue.max
end
____BlzFrameSetMinMaxValue_23(____frame_22, ____val_min_20, ____val_max_21)
break
end
end
____cond27 = ____cond27 or ____switch27 == "scale"
if ____cond27 then
do
BlzFrameSetScale(frame, val)
break
end
end
____cond27 = ____cond27 or ____switch27 == "spriteAnimate"
if ____cond27 then
do
local ____BlzFrameSetSpriteAnimate_27 = BlzFrameSetSpriteAnimate
local ____frame_26 = frame
local ____val_primaryProp_24 = val.primaryProp
if ____val_primaryProp_24 == nil then
____val_primaryProp_24 = frameDefaults.spriteAnimate.primaryProp
end
local ____val_flags_25 = val.flags
if ____val_flags_25 == nil then
____val_flags_25 = frameDefaults.spriteAnimate.flags
end
____BlzFrameSetSpriteAnimate_27(____frame_26, ____val_primaryProp_24, ____val_flags_25)
break
end
end
____cond27 = ____cond27 or ____switch27 == "textAlignment"
if ____cond27 then
do
local ____BlzFrameSetTextAlignment_31 = BlzFrameSetTextAlignment
local ____frame_30 = frame
local ____val_vert_28 = val.vert
if ____val_vert_28 == nil then
____val_vert_28 = frameDefaults.textAlignment.vert
end
local ____val_horz_29 = val.horz
if ____val_horz_29 == nil then
____val_horz_29 = frameDefaults.textAlignment.horz
end
____BlzFrameSetTextAlignment_31(____frame_30, ____val_vert_28, ____val_horz_29)
break
end
end
____cond27 = ____cond27 or ____switch27 == "position"
if ____cond27 then
do
if val ~= nil then
local positions = (val == "parent" or val == "clear" or val.point ~= nil) and ({val}) or val
for ____, position in ipairs(positions) do
if position == "clear" then
BlzFrameClearAllPoints(frame)
elseif position == "parent" then
BlzFrameSetAllPoints(
frame,
BlzFrameGetParent(frame)
)
else
local relative = resolveRelative(frame, position.relative, position.relativePoint)
if relative then
BlzFrameSetPoint(
frame,
position.point,
relative,
position.relativePoint,
smartSize(position.x or 0),
smartSize(position.y or 0)
)
else
local parentRelative = previousToParentPoint(position.relativePoint)
if parentRelative then
BlzFrameSetPoint(
frame,
position.point,
BlzFrameGetParent(frame),
parentRelative,
smartSize(position.x or 0),
smartSize(position.y or 0)
)
end
end
end
end
end
break
end
end
____cond27 = ____cond27 or ____switch27 == "absPosition"
if ____cond27 then
do
if val ~= nil then
local positions = (val == "clear" or val.point ~= nil) and ({val}) or val
for ____, absPosition in ipairs(positions) do
if absPosition == "clear" then
BlzFrameClearAllPoints(frame)
else
BlzFrameSetAbsPoint(
frame,
absPosition.point,
smartSize(absPosition.x or 0),
smartSize(absPosition.y or 0)
)
end
end
end
break
end
end
____cond27 = ____cond27 or ____switch27 == "onClick"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_CONTROL_CLICK, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onMouseEnter"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_MOUSE_ENTER, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onMouseLeave"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_MOUSE_LEAVE, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onMouseUp"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_MOUSE_UP, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onMouseDown"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_MOUSE_DOWN, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onMouseWheel"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_MOUSE_WHEEL, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onCheckboxChecked"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_CHECKBOX_CHECKED, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onCheckboxUnchecked"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_CHECKBOX_UNCHECKED, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onEditboxTextChanged"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_EDITBOX_TEXT_CHANGED, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onPopupmenuItemChanged"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_POPUPMENU_ITEM_CHANGED, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onDoubleClick"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_MOUSE_DOUBLECLICK, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onSpriteAnimUpdate"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_SPRITE_ANIM_UPDATE, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onSliderChanged"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_SLIDER_VALUE_CHANGED, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onDialogCancel"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_DIALOG_CANCEL, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onDialogAccept"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_DIALOG_ACCEPT, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "onEditboxEnter"
if ____cond27 then
do
setEventProp(frame, FRAMEEVENT_EDITBOX_ENTER, val, _oldValue)
break
end
end
____cond27 = ____cond27 or ____switch27 == "ref"
if ____cond27 then
do
if val then
val.current = frame
end
break
end
end
____cond27 = ____cond27 or (____switch27 == "name" or ____switch27 == "priority" or ____switch27 == "isSimple" or ____switch27 == "typeName" or ____switch27 == "inherits" or ____switch27 == "children" or ____switch27 == "context" or ____switch27 == "key" or ____switch27 == "parentFrame" or ____switch27 == "onLoad")
if ____cond27 then
break
end
do
absurd(prop)
end
until true
end
local typeNames = {
"backdrop",
"button",
"chatdisplay",
"checkbox",
"control",
"dialog",
"editbox",
"gluebutton",
"gluecheckbox",
"glueeditbox",
"gluepopupmenu",
"gluetextbutton",
"highlight",
"listbox",
"menu",
"model",
"popupmenu",
"scrollbar",
"slashchatbox",
"slider",
"sprite",
"text",
"textarea",
"textbutton",
"timertext"
}
local simpleTypeNames = {"simple-button", "simple-checkbox", "simple-statusbar"}
local updateScheduled = false
local schedulingTimer = CreateTimer()
____exports.adapter = {
createFrame = function(____, jsxType, _parentFrame, props)
local parentFrame = props.parentFrame or _parentFrame
if not parentFrame then
error("expected parent frame for " .. jsxType, 0)
end
local ____props_32 = props
local name = ____props_32.name
if name == nil then
name = frameDefaults.name
end
local priority = ____props_32.priority
if priority == nil then
priority = frameDefaults.priority
end
local inherits = ____props_32.inherits
local isSimple = ____props_32.isSimple
local context = ____props_32.context
if context == nil then
context = frameDefaults.context
end
local ref = ____props_32.ref
local typeName = props.typeName
if typeName == nil and __TS__ArrayIncludes(typeNames, jsxType) then
typeName = string.upper(jsxType)
end
if typeName == nil and __TS__ArrayIncludes(simpleTypeNames, jsxType) then
typeName = string.upper(__TS__StringReplace(jsxType, "-", ""))
end
if typeName == nil and jsxType == "container" then
typeName = "FRAME"
end
if typeName == nil and jsxType == "simple-container" then
typeName = "SIMPLEFRAME"
end
local frame
local ____isSimple_33 = isSimple
if ____isSimple_33 == nil then
____isSimple_33 = jsxType == "simple-frame"
end
if ____isSimple_33 then
frame = BlzCreateSimpleFrame(name, parentFrame, context)
elseif typeName then
frame = BlzCreateFrameByType(
typeName,
name,
parentFrame,
inherits or "",
context
)
else
frame = BlzCreateFrame(name, parentFrame, priority, context)
end
if ref then
ref.current = frame
end
local ____ = props.onLoad and props:onLoad(frame)
return frame
end,
cleanupFrame = function(____, frame)
BlzDestroyFrame(frame)
local existingTooltip = tooltipMap:get(frame)
if existingTooltip then
____exports.adapter:cleanupFrame(existingTooltip)
end
end,
updateFrameProperties = function(____, frame, prevProps, nextProps)
local prop
for ____value in pairs(prevProps) do
prop = ____value
if not (nextProps[prop] ~= nil) then
do
local function ____catch(err)
print(err)
end
local ____try, ____hasReturned = pcall(function()
setProp(frame, prop)
end)
if not ____try then
____catch(____hasReturned)
end
end
end
end
for ____value in pairs(nextProps) do
prop = ____value
if nextProps[prop] ~= prevProps[prop] then
do
local function ____catch(err)
print(err)
end
local ____try, ____hasReturned = pcall(function()
setProp(frame, prop, nextProps[prop], prevProps[prop])
end)
if not ____try then
____catch(____hasReturned)
end
end
end
end
end,
getParent = function(____, frame) return BlzFrameGetParent(frame) end,
scheduleUpdate = function()
if updateScheduled then
return
end
updateScheduled = true
TimerStart(
schedulingTimer,
0,
false,
function()
updateScheduled = false
flushUpdates()
end
)
end
}
return ____exports
end,
["lua_modules.w3ts-jsx.dist.src.index"] = function(...)
local ____exports = {}
local ____adapter = require("lua_modules.w3ts-jsx.dist.src.adapter")
local adapter = ____adapter.adapter
local ____index = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.index")
local setAdapter = ____index.setAdapter
setAdapter(adapter)
do
local ____adapter = require("lua_modules.w3ts-jsx.dist.src.adapter")
local setPixelScale = ____adapter.setPixelScale
____exports.setPixelScale = setPixelScale
end
do
local ____index = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.index")
local createElement = ____index.createElement
local Fragment = ____index.Fragment
local render = ____index.render
local useEffect = ____index.useEffect
local useForceUpdate = ____index.useForceUpdate
local useRef = ____index.useRef
local useState = ____index.useState
____exports.createElement = createElement
____exports.Fragment = Fragment
____exports.render = render
____exports.useEffect = useEffect
____exports.useForceUpdate = useForceUpdate
____exports.useRef = useRef
____exports.useState = useState
end
return ____exports
end,
["src.App.Utils"] = function(...)
local ____exports = {}
return ____exports
end,
["src.App.Components.Item"] = function(...)
local ____exports = {}
local React = require("lua_modules.w3ts-jsx.dist.src.index")
____exports.Item = function(____bindingPattern0)
local onClick
local visible
local size
local absPosition
local v
v = ____bindingPattern0.v
absPosition = ____bindingPattern0.absPosition
size = ____bindingPattern0.size
visible = ____bindingPattern0.visible
onClick = ____bindingPattern0.onClick
return React.createElement(
"container",
{visible = visible},
React.createElement(
"backdrop",
{
name = "TerrainPreview_" .. tostring(v.scale),
isSimple = true,
absPosition = absPosition,
size = size,
visible = visible,
onLoad = function() return v.texFile and BlzFrameSetTexture(
BlzGetFrameByName(
"TerrainPreviewValue_" .. tostring(v.scale),
0
),
v.texFile,
0,
false
) end
}
),
React.createElement(
"text",
{
text = v.title,
absPosition = absPosition,
onClick = onClick,
size = size,
parentFrame = BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0),
visible = visible
}
)
)
end
return ____exports
end,
["src.App.Hooks.usePlayerVisible"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
local ____exports = {}
local React = require("lua_modules.w3ts-jsx.dist.src.index")
____exports.usePlayerVariable = function()
local state, setState = table.unpack(React.useState({}))
return {
get = function(playerId) return state[playerId] end,
set = function(playerId, value) return setState(function(s) return __TS__ObjectAssign({}, s, {[playerId] = value}) end) end
}
end
return ____exports
end,
["src.App.Media.Terrains"] = function(...)
local ____exports = {}
____exports.terrainItems = {
{texFile = "terrainart\\lordaeronsummer\\lords_dirt", title = "Ldrt", scale = "2:1"},
{texFile = "terrainart\\lordaeronsummer\\lords_dirtrough", title = "Ldro", scale = "2:1"},
{texFile = "terrainart\\lordaeronsummer\\lords_dirtgrass", title = "Ldrg", scale = "2:1"},
{texFile = "terrainart\\lordaeronsummer\\lords_rock", title = "Lrok", scale = "2:1"},
{texFile = "terrainart\\lordaeronsummer\\lords_grass", title = "Lgrs", scale = "2:1"},
{texFile = "terrainart\\lordaeronsummer\\lords_grassdark", title = "Lgrd", scale = "2:1"},
{texFile = "terrainart\\lordaeronfall\\lordf_dirt", title = "Fdrt", scale = "2:1"},
{texFile = "terrainart\\lordaeronfall\\lordf_dirtrough", title = "Fdro", scale = "2:1"},
{texFile = "terrainart\\lordaeronfall\\lordf_dirtgrass", title = "Fdrg", scale = "2:1"},
{texFile = "terrainart\\lordaeronfall\\lordf_rock", title = "Frok", scale = "2:1"},
{texFile = "terrainart\\lordaeronfall\\lordf_grass", title = "Fgrs", scale = "2:1"},
{texFile = "terrainart\\lordaeronfall\\lordf_grassdark", title = "Fgrd", scale = "2:1"},
{texFile = "terrainart\\lordaeronwinter\\lordw_dirt", title = "Wdrt", scale = "2:1"},
{texFile = "terrainart\\lordaeronwinter\\lordw_dirtrough", title = "Wdro", scale = "2:1"},
{texFile = "terrainart\\lordaeronwinter\\lordw_snowgrass", title = "Wsng", scale = "2:1"},
{texFile = "terrainart\\lordaeronwinter\\lordw_rock", title = "Wrok", scale = "2:1"},
{texFile = "terrainart\\lordaeronwinter\\lordw_grass", title = "Wgrs", scale = "2:1"},
{texFile = "terrainart\\lordaeronwinter\\lordw_snow", title = "Wsnw", scale = "2:1"},
{texFile = "terrainart\\barrens\\barrens_dirt", title = "Bdrt", scale = "2:1"},
{texFile = "terrainart\\barrens\\barrens_dirtrough", title = "Bdrh", scale = "1:1"},
{texFile = "terrainart\\barrens\\barrens_pebbles", title = "Bdrr", scale = "1:1"},
{texFile = "terrainart\\barrens\\barrens_dirtgrass", title = "Bdrg", scale = "1:1"},
{texFile = "terrainart\\barrens\\barrens_desert", title = "Bdsr", scale = "2:1"},
{texFile = "terrainart\\barrens\\barrens_desertdark", title = "Bdsd", scale = "2:1"},
{texFile = "terrainart\\barrens\\barrens_rock", title = "Bflr", scale = "1:1"},
{texFile = "terrainart\\barrens\\barrens_grass", title = "Bgrr", scale = "2:1"},
{texFile = "terrainart\\ashenvale\\ashen_dirt", title = "Adrt", scale = "2:1"},
{texFile = "terrainart\\ashenvale\\ashen_dirtrough", title = "Adrd", scale = "1:1"},
{texFile = "terrainart\\ashenvale\\ashen_grass", title = "Agrs", scale = "2:1"},
{texFile = "terrainart\\ashenvale\\ashen_rock", title = "Arck", scale = "2:1"},
{texFile = "terrainart\\ashenvale\\ashen_grasslumpy", title = "Agrd", scale = "2:1"},
{texFile = "terrainart\\ashenvale\\ashen_vines", title = "Avin", scale = "1:1"},
{texFile = "terrainart\\ashenvale\\ashen_dirtgrass", title = "Adrg", scale = "1:1"},
{texFile = "terrainart\\ashenvale\\ashen_leaves", title = "Alvd", scale = "1:1"},
{texFile = "terrainart\\felwood\\felwood_dirt", title = "Cdrt", scale = "2:1"},
{texFile = "terrainart\\felwood\\felwood_dirtrough", title = "Cdrd", scale = "2:1"},
{texFile = "terrainart\\felwood\\felwood_poison", title = "Cpos", scale = "2:1"},
{texFile = "terrainart\\felwood\\felwood_rock", title = "Crck", scale = "2:1"},
{texFile = "terrainart\\felwood\\felwood_vines", title = "Cvin", scale = "1:1"},
{texFile = "terrainart\\felwood\\felwood_grass", title = "Cgrs", scale = "2:1"},
{texFile = "terrainart\\felwood\\felwood_leaves", title = "Clvg", scale = "1:1"},
{texFile = "terrainart\\northrend\\north_dirt", title = "Ndrt", scale = "2:1"},
{texFile = "terrainart\\northrend\\north_dirtdark", title = "Ndrd", scale = "1:1"},
{texFile = "terrainart\\northrend\\north_rock", title = "Nrck", scale = "2:1"},
{texFile = "terrainart\\northrend\\north_grass", title = "Ngrs", scale = "2:1"},
{texFile = "terrainart\\northrend\\north_ice", title = "Nice", scale = "2:1"},
{texFile = "terrainart\\northrend\\north_snow", title = "Nsnw", scale = "2:1"},
{texFile = "terrainart\\northrend\\north_snowrock", title = "Nsnr", scale = "1:1"},
{texFile = "terrainart\\cityscape\\city_dirt", title = "Ydrt", scale = "2:1"},
{texFile = "terrainart\\cityscape\\city_dirtrough", title = "Ydtr", scale = "2:1"},
{texFile = "terrainart\\cityscape\\city_blackmarble", title = "Yblm", scale = "1:1"},
{texFile = "terrainart\\cityscape\\city_bricktiles", title = "Ybtl", scale = "1:1"},
{texFile = "terrainart\\cityscape\\city_squaretiles", title = "Ysqd", scale = "1:1"},
{texFile = "terrainart\\cityscape\\city_roundtiles", title = "Yrtl", scale = "1:1"},
{texFile = "terrainart\\cityscape\\city_grass", title = "Ygsb", scale = "2:1"},
{texFile = "terrainart\\cityscape\\city_grasstrim", title = "Yhdg", scale = "1:1"},
{texFile = "terrainart\\cityscape\\city_whitemarble", title = "Ywmb", scale = "1:1"},
{texFile = "terrainart\\village\\village_dirt", title = "Vdrt", scale = "2:1"},
{texFile = "terrainart\\village\\village_dirtrough", title = "Vdrr", scale = "2:1"},
{texFile = "terrainart\\village\\village_crops", title = "Vcrp", scale = "1:1"},
{texFile = "terrainart\\village\\village_cobblepath", title = "Vcbp", scale = "1:1"},
{texFile = "terrainart\\village\\village_stonepath", title = "Vstp", scale = "1:1"},
{texFile = "terrainart\\village\\village_grassshort", title = "Vgrs", scale = "1:1"},
{texFile = "terrainart\\village\\village_rocks", title = "Vrck", scale = "2:1"},
{texFile = "terrainart\\village\\village_grassthick", title = "Vgrt", scale = "2:1"},
{texFile = "terrainart\\villagefall\\villagefall_dirt", title = "Qdrt", scale = "2:1"},
{texFile = "terrainart\\villagefall\\villagefall_dirtrough", title = "Qdrr", scale = "2:1"},
{texFile = "terrainart\\villagefall\\villagefall_crops", title = "Qcrp", scale = "1:1"},
{texFile = "terrainart\\villagefall\\villagefall_cobblepath", title = "Qcbp", scale = "1:1"},
{texFile = "terrainart\\villagefall\\villagefall_stonepath", title = "Qstp", scale = "1:1"},
{texFile = "terrainart\\villagefall\\villagefall_grassshort", title = "Qgrs", scale = "1:1"},
{texFile = "terrainart\\villagefall\\villagefall_rocks", title = "Qrck", scale = "2:1"},
{texFile = "terrainart\\villagefall\\villagefall_grassthick", title = "Qgrt", scale = "2:1"},
{texFile = "terrainart\\dalaran\\dalaran_dirt", title = "Xdrt", scale = "2:1"},
{texFile = "terrainart\\dalaran\\dalaran_dirtrough", title = "Xdtr", scale = "2:1"},
{texFile = "terrainart\\dalaran\\dalaran_blackmarble", title = "Xblm", scale = "1:1"},
{texFile = "terrainart\\dalaran\\dalaran_bricktiles", title = "Xbtl", scale = "1:1"},
{texFile = "terrainart\\dalaran\\dalaran_squaretiles", title = "Xsqd", scale = "1:1"},
{texFile = "terrainart\\dalaran\\dalaran_roundtiles", title = "Xrtl", scale = "1:1"},
{texFile = "terrainart\\dalaran\\dalaran_grass", title = "Xgsb", scale = "2:1"},
{texFile = "terrainart\\dalaran\\dalaran_grasstrim", title = "Xhdg", scale = "1:1"},
{texFile = "terrainart\\dalaran\\dalaran_whitemarble", title = "Xwmb", scale = "1:1"},
{texFile = "terrainart\\dungeon\\cave_dirt", title = "Ddrt", scale = "2:1"},
{texFile = "terrainart\\dungeon\\cave_brick", title = "Dbrk", scale = "2:1"},
{texFile = "terrainart\\dungeon\\cave_redstones", title = "Drds", scale = "1:1"},
{texFile = "terrainart\\dungeon\\cave_lavacracks", title = "Dlvc", scale = "2:1"},
{texFile = "terrainart\\dungeon\\cave_lava", title = "Dlav", scale = "1:1"},
{texFile = "terrainart\\dungeon\\cave_darkrocks", title = "Ddkr", scale = "1:1"},
{texFile = "terrainart\\dungeon\\cave_greystones", title = "Dgrs", scale = "2:1"},
{texFile = "terrainart\\dungeon\\cave_squaretiles", title = "Dsqd", scale = "1:1"},
{texFile = "terrainart\\dungeon2\\gdirt", title = "Gdrt", scale = "2:1"},
{texFile = "terrainart\\dungeon2\\gbrick", title = "Gbrk", scale = "2:1"},
{texFile = "terrainart\\dungeon2\\gredstones", title = "Grds", scale = "1:1"},
{texFile = "terrainart\\dungeon2\\glavacracks", title = "Glvc", scale = "2:1"},
{texFile = "terrainart\\dungeon2\\glava", title = "Glav", scale = "1:1"},
{texFile = "terrainart\\dungeon2\\gdarkrocks", title = "Gdkr", scale = "1:1"},
{texFile = "terrainart\\dungeon2\\ggreystones", title = "Ggrs", scale = "2:1"},
{texFile = "terrainart\\dungeon2\\gsquaretiles", title = "Gsqd", scale = "1:1"},
{texFile = "terrainart\\ruins\\ruins_dirt", title = "Zdrt", scale = "2:1"},
{texFile = "terrainart\\ruins\\ruins_dirtrough", title = "Zdtr", scale = "1:1"},
{texFile = "terrainart\\ruins\\ruins_dirtgrass", title = "Zdrg", scale = "1:1"},
{texFile = "terrainart\\ruins\\ruins_smallbricks", title = "Zbks", scale = "1:1"},
{texFile = "terrainart\\ruins\\ruins_sand", title = "Zsan", scale = "1:1"},
{texFile = "terrainart\\ruins\\ruins_largebricks", title = "Zbkl", scale = "2:1"},
{texFile = "terrainart\\ruins\\ruins_roundtiles", title = "Ztil", scale = "1:1"},
{texFile = "terrainart\\ruins\\ruins_grass", title = "Zgrs", scale = "2:1"},
{texFile = "terrainart\\ruins\\ruins_grassdark", title = "Zvin", scale = "1:1"},
{texFile = "terrainart\\icecrown\\ice_dirt", title = "Idrt", scale = "1:1"},
{texFile = "terrainart\\icecrown\\ice_dirtrough", title = "Idtr", scale = "1:1"},
{texFile = "terrainart\\icecrown\\ice_darkice", title = "Idki", scale = "1:1"},
{texFile = "terrainart\\icecrown\\ice_blackbricks", title = "Ibkb", scale = "1:1"},
{texFile = "terrainart\\icecrown\\ice_runebricks", title = "Irbk", scale = "2:1"},
{texFile = "terrainart\\icecrown\\ice_tiledbricks", title = "Itbk", scale = "1:1"},
{texFile = "terrainart\\icecrown\\ice_ice", title = "Iice", scale = "2:1"},
{texFile = "terrainart\\icecrown\\ice_blacksquares", title = "Ibsq", scale = "1:1"},
{texFile = "terrainart\\icecrown\\ice_snow", title = "Isnw", scale = "2:1"},
{texFile = "terrainart\\outland\\outland_dirt", title = "Odrt", scale = "1:1"},
{texFile = "terrainart\\outland\\outland_dirtlight", title = "Odtr", scale = "2:1"},
{texFile = "terrainart\\outland\\outland_roughdirt", title = "Osmb", scale = "2:1"},
{texFile = "terrainart\\outland\\outland_dirtcracked", title = "Ofst", scale = "2:1"},
{texFile = "terrainart\\outland\\outland_flatstones", title = "Olgb", scale = "1:1"},
{texFile = "terrainart\\outland\\outland_rock", title = "Orok", scale = "1:1"},
{texFile = "terrainart\\outland\\outland_flatstoneslight", title = "Ofsl", scale = "2:1"},
{texFile = "terrainart\\outland\\outland_abyss", title = "Oaby", scale = "1:1"},
{texFile = "terrainart\\blackcitadel\\citadel_dirt", title = "Kdrt", scale = "1:1"},
{texFile = "terrainart\\blackcitadel\\citadel_dirtlight", title = "Kfsl", scale = "2:1"},
{texFile = "terrainart\\blackcitadel\\citadel_roughdirt", title = "Kdts", scale = "1:1"},
{texFile = "terrainart\\blackcitadel\\citadel_flatstones", title = "Kfst", scale = "1:1"},
{texFile = "terrainart\\blackcitadel\\citadel_smallbricks", title = "Ksmb", scale = "2:1"},
{texFile = "terrainart\\blackcitadel\\citadel_largebricks", title = "Klgb", scale = "2:1"},
{texFile = "terrainart\\blackcitadel\\citadel_squaretiles", title = "Ksqt", scale = "1:1"},
{texFile = "terrainart\\blackcitadel\\citadel_darktiles", title = "Kdkt", scale = "1:1"},
{texFile = "terrainart\\dalaranruins\\druins_dirt", title = "Jdrt", scale = "2:1"},
{texFile = "terrainart\\dalaranruins\\druins_dirtrough", title = "Jdtr", scale = "2:1"},
{texFile = "terrainart\\dalaranruins\\druins_blackmarble", title = "Jblm", scale = "1:1"},
{texFile = "terrainart\\dalaranruins\\druins_bricktiles", title = "Jbtl", scale = "1:1"},
{texFile = "terrainart\\dalaranruins\\druins_squaretiles", title = "Jsqd", scale = "1:1"},
{texFile = "terrainart\\dalaranruins\\druins_roundtiles", title = "Jrtl", scale = "1:1"},
{texFile = "terrainart\\dalaranruins\\druins_grass", title = "Jgsb", scale = "2:1"},
{texFile = "terrainart\\dalaranruins\\druins_grasstrim", title = "Jhdg", scale = "1:1"},
{texFile = "terrainart\\dalaranruins\\druins_whitemarble", title = "Jwmb", scale = "1:1"},
{texFile = "", title = "cAc2", scale = "1:1"},
{texFile = "", title = "cAc1", scale = "1:1"},
{texFile = "", title = "cBc2", scale = "1:1"},
{texFile = "", title = "cBc1", scale = "1:1"},
{texFile = "", title = "cKc1", scale = "1:1"},
{texFile = "", title = "cKc2", scale = "1:1"},
{texFile = "", title = "cYc2", scale = "1:1"},
{texFile = "", title = "cYc1", scale = "1:1"},
{texFile = "", title = "cXc2", scale = "1:1"},
{texFile = "", title = "cXc1", scale = "1:1"},
{texFile = "", title = "cJc2", scale = "1:1"},
{texFile = "", title = "cJc1", scale = "1:1"},
{texFile = "", title = "cDc2", scale = "1:1"},
{texFile = "", title = "cDc1", scale = "1:1"},
{texFile = "", title = "cCc2", scale = "1:1"},
{texFile = "", title = "cCc1", scale = "1:1"},
{texFile = "", title = "cIc2", scale = "1:1"},
{texFile = "", title = "cIc1", scale = "1:1"},
{texFile = "", title = "cFc2", scale = "1:1"},
{texFile = "", title = "cFc1", scale = "1:1"},
{texFile = "", title = "cLc2", scale = "1:1"},
{texFile = "", title = "cLc1", scale = "1:1"},
{texFile = "", title = "cWc2", scale = "1:1"},
{texFile = "", title = "cWc1", scale = "1:1"},
{texFile = "", title = "cNc2", scale = "1:1"},
{texFile = "", title = "cNc1", scale = "1:1"},
{texFile = "", title = "cOc1", scale = "1:1"},
{texFile = "", title = "cOc2", scale = "1:1"},
{texFile = "", title = "cZc2", scale = "1:1"},
{texFile = "", title = "cZc1", scale = "1:1"},
{texFile = "", title = "cGc2", scale = "1:1"},
{texFile = "", title = "cGc1", scale = "1:1"},
{texFile = "", title = "cVc2", scale = "1:1"},
{texFile = "", title = "cVc1", scale = "1:1"},
{texFile = "", title = "cQc2", scale = "1:1"},
{texFile = "", title = "cQc1", scale = "1:1"}
}
return ____exports
end,
["src.App.Interface"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local __TS__ArrayJoin = ____lualib.__TS__ArrayJoin
local __TS__ArrayFindIndex = ____lualib.__TS__ArrayFindIndex
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local ____exports = {}
local ____Ascii = require("src.core.01_libraries.Ascii")
local Ascii2String = ____Ascii.Ascii2String
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local React = require("lua_modules.w3ts-jsx.dist.src.index")
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local ____Item = require("src.App.Components.Item")
local Item = ____Item.Item
local ____usePlayerVisible = require("src.App.Hooks.usePlayerVisible")
local usePlayerVariable = ____usePlayerVisible.usePlayerVariable
local ____Terrains = require("src.App.Media.Terrains")
local terrainItems = ____Terrains.terrainItems
local function convertToReal(s)
return math.floor(S2R(s) * 1000 + 0.5) / 1000
end
____exports.Interface = function(____bindingPattern0)
local cb
cb = ____bindingPattern0.cb
local ____usePlayerVariable_result_0 = usePlayerVariable()
local getVisible = ____usePlayerVariable_result_0.get
local setVisible = ____usePlayerVariable_result_0.set
local ____usePlayerVariable_result_1 = usePlayerVariable()
local getPos = ____usePlayerVariable_result_1.get
local setPos = ____usePlayerVariable_result_1.set
local defaultPos = {x = 0.007, y = 0.471}
local mainPos = getPos(GetPlayerId(GetLocalPlayer())) or defaultPos
local forceUpdate = React.useForceUpdate()
React.useEffect(
function()
ServiceManager.getService("React").setForceUpdate(forceUpdate)
return function() return ServiceManager.getService("React").setForceUpdate(nil) end
end,
{}
)
React.useEffect(
function()
cb(
nil,
{
setVisible = function(____, ____bindingPattern0)
local visible
local playerId
playerId = ____bindingPattern0.playerId
visible = ____bindingPattern0.visible
setVisible(playerId, visible)
end,
resetUI = function(____, playerId)
setPos(playerId, defaultPos)
end
}
)
end,
{}
)
local terrainState, setTerrainState = table.unpack(React.useState({oldState = ""}))
local usedTerrains = {}
local udgTerrainTypes = getUdgTerrainTypes():getAll()
do
local i = 0
while i < getUdgTerrainTypes():getLastInstanceId() do
local terrain = udgTerrainTypes[i]
if terrain then
arrayPush(
usedTerrains,
__TS__ArrayFind(
terrainItems,
function(____, i) return i.title == Ascii2String(terrain.terrainTypeId) end
) or ({title = Ascii2String(terrain.terrainTypeId)})
)
end
i = i + 1
end
end
React.useEffect(function()
if terrainState.oldState ~= __TS__ArrayJoin(usedTerrains, "_") then
setTerrainState({oldState = __TS__ArrayJoin(usedTerrains, "_")})
usedTerrains = {}
end
end)
local function useItemGroup(____bindingPattern0)
local items
local maxNbCols
maxNbCols = ____bindingPattern0.maxNbCols
items = ____bindingPattern0.items
local margin = 0.0075
local containerMargin = margin * 4
local itemSize = 0.03
local nbRows = math.ceil(#items / maxNbCols)
local nbCols = math.min(maxNbCols, #items)
local container = {x = mainPos.x - containerMargin, y = mainPos.y + containerMargin, width = margin + nbCols * itemSize + nbCols * margin + containerMargin * 2, height = margin + nbRows * itemSize + nbRows * margin + containerMargin * 2}
local function getItemPosition(____bindingPattern0)
local item
item = ____bindingPattern0.item
local i = __TS__ArrayFindIndex(
items,
function(____, d) return d == item end
)
local row = math.floor(i / nbCols)
local col = i %% nbCols
return {visible = true, absPos = {point = FRAMEPOINT_TOPLEFT, x = mainPos.x + margin + col * itemSize + col * margin, y = mainPos.y - margin - row * itemSize - row * margin}}
end
return {container = container, getItemPosition = getItemPosition}
end
local terrainGroup = useItemGroup({maxNbCols = 16, items = usedTerrains})
return React.createElement(
"container",
nil,
React.createElement(
"container",
{visible = getVisible(GetPlayerId(GetLocalPlayer())) or false},
React.createElement(
"container",
nil,
React.createElement("backdrop", {inherits = "EscMenuBackdrop", absPosition = {point = FRAMEPOINT_TOPLEFT, x = terrainGroup.container.x, y = terrainGroup.container.y}, size = {width = terrainGroup.container.width, height = terrainGroup.container.height}}),
__TS__ArrayMap(
usedTerrains,
function(____, item)
local ____terrainGroup_getItemPosition_result_2 = terrainGroup.getItemPosition({item = item})
local visible = ____terrainGroup_getItemPosition_result_2.visible
local absPos = ____terrainGroup_getItemPosition_result_2.absPos
return React.createElement(
Item,
{
v = item,
absPosition = absPos,
size = {width = 0.03, height = 0.03},
visible = (getVisible(GetPlayerId(GetLocalPlayer())) or false) and visible,
onClick = function()
local escaper = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
local terrainType = getUdgTerrainTypes():getByCode(item.title)
if escaper and terrainType then
escaper:makeCreateTerrainBrush(terrainType, 1, "square")
Text.mkP(
escaper:getPlayer(),
"creating terrain on"
)
end
end
}
)
end
)
)
)
)
end
return ____exports
end,
["src.App.renderInterface"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ObjectAssign = ____lualib.__TS__ObjectAssign
local ____exports = {}
local React = require("lua_modules.w3ts-jsx.dist.src.index")
local ____Interface = require("src.App.Interface")
local Interface = ____Interface.Interface
____exports.renderInterface = function(props)
local forceUpdate = nil
return {
init = function()
BlzLoadTOCFile("war3mapImported\\TerrainPreview_1x1.toc")
BlzLoadTOCFile("war3mapImported\\TerrainPreview_2x1.toc")
React.render(
React.createElement(
Interface,
__TS__ObjectAssign({}, props)
),
BlzGetFrameByName("ConsoleUIBackdrop", 0)
)
end,
setForceUpdate = function(cb)
forceUpdate = cb
return forceUpdate
end,
forceUpdate = function()
local ____forceUpdate_result_0 = forceUpdate
if ____forceUpdate_result_0 ~= nil then
____forceUpdate_result_0 = ____forceUpdate_result_0()
end
return ____forceUpdate_result_0
end
}
end
return ____exports
end,
["src.core.07_TRIGGERS.Triggers_to_modify_terrains.Reinit_terrains"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local function initReinitTerrains()
local terrainTypes = {}
local terrainTypeIds = {}
local terrainTypeIdsToReplace = {}
local function init_ReinitAtStart()
createTimer(
0,
false,
function()
local n = 0
for _, terrainType in pairs(getUdgTerrainTypes():getAll()) do
terrainTypes[n + 1] = terrainType
terrainTypeIds[n + 1] = terrainType:getTerrainTypeId()
n = n + 1
end
end
)
end
local function ModifyTerrain()
local y = globals.MAP_MIN_Y
local x
local terrainTypeId
local done
local j
while y <= globals.MAP_MAX_Y do
x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
terrainTypeId = GetTerrainType(x, y)
done = false
j = 0
while not (terrainTypes[j + 1] == nil or done) do
if terrainTypeId == terrainTypeIdsToReplace[j + 1] then
ChangeTerrainType(x, y, terrainTypeIds[j + 1])
done = true
end
j = j + 1
end
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
Text.mkA("Terrains reinitialized")
end
local function ReinitTerrains()
do
local i = 0
while i < #terrainTypes do
terrainTypeIdsToReplace[i + 1] = terrainTypes[i + 1]:getTerrainTypeId()
terrainTypes[i + 1]:setTerrainTypeId(terrainTypeIds[i + 1])
i = i + 1
end
end
ModifyTerrain()
end
return {ReinitTerrains = ReinitTerrains, init_ReinitAtStart = init_ReinitAtStart}
end
____exports.ReinitTerrains = initReinitTerrains()
return ____exports
end,
["src.core.07_TRIGGERS.Triggers_to_modify_terrains.Reinit_terrains_position_Change_variations_and_ut_at_beginning"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Terrain_type_functions = require("src.core.04_STRUCTURES.TerrainType.Terrain_type_functions")
local TerrainTypeId2TerrainType = ____Terrain_type_functions.TerrainTypeId2TerrainType
local ____globals = require("globals")
local globals = ____globals.globals
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local ____Terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_functions")
local AddNewTerrain = ____Terrain_functions.AddNewTerrain
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local function initReinitTerrainsPositions()
local TERRAIN_SAVE = {}
local terrainSave_id
local function init_reinitTerrainsPositions()
createTimer(
0,
false,
function()
terrainSave_id = 0
local y = globals.MAP_MIN_Y
local terrainType
while y <= globals.MAP_MAX_Y do
local x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
terrainType = GetTerrainType(x, y)
AddNewTerrain(terrainType)
ChangeTerrainType(x, y, terrainType)
TERRAIN_SAVE[terrainSave_id + 1] = TerrainTypeId2TerrainType(terrainType)
terrainSave_id = terrainSave_id + 1
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
end
)
end
local function ModifyTerrain()
terrainSave_id = 0
local y = globals.MAP_MIN_Y
while y <= globals.MAP_MAX_Y do
local x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
local terrainType = TERRAIN_SAVE[terrainSave_id + 1]
if terrainType ~= nil and terrainType:getTerrainTypeId() ~= 0 then
ChangeTerrainType(
x,
y,
terrainType:getTerrainTypeId()
)
end
terrainSave_id = terrainSave_id + 1
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
if y > globals.MAP_MAX_Y then
Text.mkA("Terrains position reinitialized !")
end
end
local function ReinitTerrainsPosition()
ModifyTerrain()
end
return {ReinitTerrainsPosition = ReinitTerrainsPosition, init_reinitTerrainsPositions = init_reinitTerrainsPositions}
end
____exports.ReinitTerrainsPositions = initReinitTerrainsPositions()
return ____exports
end,
["src.core.01_libraries.Functions_on_numbers"] = function(...)
local ____exports = {}
____exports.EstChiffre = function(str)
if str == "0" or str == "1" or str == "2" or str == "3" or str == "4" then
return true
end
if str == "5" or str == "6" or str == "7" or str == "8" or str == "9" then
return true
end
return false
end
____exports.IsInteger = function(str)
local length = StringLength(str)
local i
if SubString(str, 0, 1) == "-" then
i = 1
else
i = 0
end
while true do
if i >= length then
break
end
if not ____exports.EstChiffre(SubString(str, i, i + 1)) then
return false
end
i = i + 1
end
return true
end
____exports.IsPositiveInteger = function(str)
return SubString(str, 0, 1) ~= "-" and ____exports.IsInteger(str)
end
____exports.IsPercentage = function(str)
local n = S2I(str)
return ____exports.IsPositiveInteger(str) and n >= 0 and n <= 100
end
____exports.PercentageStringOrX2Integer = function(str)
if not ____exports.IsPercentage(str) then
if str == "x" then
return GetRandomInt(0, 100)
end
return -1
end
return S2I(str)
end
____exports.I2HexaString = function(n)
if n < 10 then
return I2S(n)
end
if n == 10 then
return "A"
end
if n == 11 then
return "B"
end
if n == 12 then
return "C"
end
if n == 13 then
return "D"
end
if n == 14 then
return "E"
end
if n == 15 then
return "F"
end
return "0"
end
return ____exports
end,
["src.env"] = function(...)
local ____exports = {}
____exports.PROD = true
____exports.SCRIPT_VAR = ""
return ____exports
end,
["src.core.02_bibliotheques_externes.ZLibrary"] = function(...)
local ____exports = {}
local function initZLibrary()
local WATER_TYPE_NONE = 0
local WATER_TYPE_SHALLOW = 1
local WATER_TYPE_DEEP = 2
local PLATFORM = FourCC("B000")
local PLATFORM_HEIGHT = 2745.46265
local p = Location(0, 0)
local function GetSurfaceZ(x, y)
MoveLocation(p, x, y)
return GetLocationZ(p)
end
local function GetTerrainZ(x, y)
local z
local d = CreateDestructable(
PLATFORM,
x,
y,
0,
10,
0
)
MoveLocation(p, x, y)
z = GetLocationZ(p) - PLATFORM_HEIGHT
RemoveDestructable(d)
d = nil
return z
end
local function GetUnitZ(u)
if IsUnitType(u, UNIT_TYPE_FLYING) then
return GetSurfaceZ(
GetUnitX(u),
GetUnitY(u)
) + GetUnitFlyHeight(u)
end
return GetTerrainZ(
GetUnitX(u),
GetUnitY(u)
) + GetUnitFlyHeight(u)
end
local function SetUnitZ(u, z)
if IsUnitType(u, UNIT_TYPE_FLYING) then
SetUnitFlyHeight(
u,
z - GetSurfaceZ(
GetUnitX(u),
GetUnitY(u)
),
0
)
else
SetUnitFlyHeight(
u,
z - GetTerrainZ(
GetUnitX(u),
GetUnitY(u)
),
0
)
end
end
local function CreateUnitZ(p, unitid, x, y, z, face)
local u = CreateUnit(
p,
unitid,
x,
y,
face
)
SetUnitZ(u, z)
return u
end
local function GetWaterDepth(x, y)
local z
local d
MoveLocation(p, x, y)
z = GetLocationZ(p)
d = CreateDestructable(
PLATFORM,
x,
y,
0,
10,
0
)
z = z + PLATFORM_HEIGHT - GetLocationZ(p)
RemoveDestructable(d)
d = nil
if z >= 0 then
return z
end
return 0
end
local function GetWaterType(x, y)
local d = GetWaterDepth(x, y)
if d == 0 then
return WATER_TYPE_NONE
elseif d < 52 then
return WATER_TYPE_SHALLOW
end
return WATER_TYPE_DEEP
end
return {
GetWaterType = GetWaterType,
GetWaterDepth = GetWaterDepth,
GetTerrainZ = GetTerrainZ,
GetSurfaceZ = GetSurfaceZ,
GetUnitZ = GetUnitZ,
SetUnitZ = SetUnitZ,
CreateUnitZ = CreateUnitZ
}
end
____exports.ZLibrary = initZLibrary()
return ____exports
end,
["src.core.07_TRIGGERS.Save_map_in_gamecache.Save_terrain_heights_and_cliffs"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ArrayJoin = ____lualib.__TS__ArrayJoin
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local IsNearBounds = ____Basic_functions.IsNearBounds
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____ZLibrary = require("src.core.02_bibliotheques_externes.ZLibrary")
local ZLibrary = ____ZLibrary.ZLibrary
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____globals = require("globals")
local globals = ____globals.globals
local ____Functions_on_numbers = require("src.core.01_libraries.Functions_on_numbers")
local I2HexaString = ____Functions_on_numbers.I2HexaString
local function initSaveTerrainHeights()
local cachedTerrainCliffs = ""
local function SaveTerrainCliffs(json)
if cachedTerrainCliffs ~= "" then
json.terrainCliffs = cachedTerrainCliffs
return
end
local terrainCliffsArr = MemoryHandler.getEmptyArray()
local x
local cliffLevel
local y = globals.MAP_MIN_Y
while y <= globals.MAP_MAX_Y do
x = globals.MAP_MIN_X
while true do
if x > globals.MAP_MAX_X then
break
end
if IsNearBounds(x, y) then
cliffLevel = 2
else
cliffLevel = GetTerrainCliffLevel(x, y)
end
arrayPush(
terrainCliffsArr,
I2HexaString(cliffLevel)
)
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
local ____json_0 = json
cachedTerrainCliffs = __TS__ArrayJoin(terrainCliffsArr, "")
____json_0.terrainCliffs = cachedTerrainCliffs
MemoryHandler.destroyArray(terrainCliffsArr)
Text.A("terrain cliffs saved")
end
local function SaveTerrainHeights(json)
json.terrainHeights = MemoryHandler.getEmptyArray()
local height
local isWater
local y = globals.MAP_MIN_Y
while y <= globals.MAP_MAX_Y do
local x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
height = ZLibrary.GetSurfaceZ(x, y)
arrayPush(
json.terrainHeights,
R2I(height)
)
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
Text.A("terrain heights saved")
end
return {SaveTerrainHeights = SaveTerrainHeights, SaveTerrainCliffs = SaveTerrainCliffs}
end
____exports.SaveTerrainHeights = initSaveTerrainHeights()
return ____exports
end,
["src.core.07_TRIGGERS.Save_map_in_gamecache.Save_terrain_ramps"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ArrayJoin = ____lualib.__TS__ArrayJoin
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local IsNearBounds = ____Basic_functions.IsNearBounds
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____globals = require("globals")
local globals = ____globals.globals
local function initSaveTerrainRamps()
local DECAL_TEST_PATH = 10
local loc1 = Location(0, 0)
local loc2 = Location(0, 0)
local function isRampMiddleRaised(x, y, isRampDirectionX)
local middleRampcliffLevel = GetTerrainCliffLevel(x, y)
local diffCliffLevel
local sens = -1
local diff
local x2
local y2
local isRampMiddleRaisedB = true
while true do
if sens > 1 then
break
end
diff = -1
while true do
if diff > 1 then
break
end
if isRampDirectionX then
x2 = x + diff * LARGEUR_CASE
y2 = y + sens * LARGEUR_CASE
else
x2 = x + sens * LARGEUR_CASE
y2 = y + diff * LARGEUR_CASE
end
diffCliffLevel = GetTerrainCliffLevel(x2, y2) - middleRampcliffLevel
if diffCliffLevel < 0 or diffCliffLevel > 1 then
isRampMiddleRaisedB = false
end
diff = diff + 1
end
sens = sens + 2
end
return isRampMiddleRaisedB
end
local cachedTerrainRamps = ""
local function SaveTerrainRamps(json)
if cachedTerrainRamps ~= "" then
json.terrainRamps = cachedTerrainRamps
return
end
local terrainRampsArr = MemoryHandler.getEmptyArray()
local x
local currentCliffLevel
local otherCliffLevel
local otherCliffLevel2
local otherX
local otherY
local ramp
local isRampMiddleRaisedB = false
local rampStr
local walkable
local walkable2
local signX
local signY
local y = globals.MAP_MIN_Y
while y <= globals.MAP_MAX_Y do
x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
ramp = false
if not IsNearBounds(x, y) then
currentCliffLevel = GetTerrainCliffLevel(x, y)
isRampMiddleRaisedB = false
if not isRampMiddleRaisedB then
otherX = x + LARGEUR_CASE
otherY = y
if otherX <= globals.MAP_MAX_X then
otherCliffLevel = GetTerrainCliffLevel(otherX, otherY)
otherX = x + LARGEUR_CASE / 2
walkable = not IsTerrainPathable(otherX, otherY + DECAL_TEST_PATH, PATHING_TYPE_WALKABILITY) or not IsTerrainPathable(otherX, otherY - DECAL_TEST_PATH, PATHING_TYPE_WALKABILITY)
if currentCliffLevel ~= otherCliffLevel then
if walkable then
ramp = true
elseif IAbsBJ(currentCliffLevel - otherCliffLevel) == 1 then
if currentCliffLevel > otherCliffLevel then
otherX = x + 3 * LARGEUR_CASE / 2
else
otherX = x - LARGEUR_CASE / 2
end
walkable2 = not IsTerrainPathable(otherX, otherY + DECAL_TEST_PATH, PATHING_TYPE_WALKABILITY) or not IsTerrainPathable(otherX, otherY - DECAL_TEST_PATH, PATHING_TYPE_WALKABILITY)
if not walkable2 then
if currentCliffLevel < otherCliffLevel then
MoveLocation(loc1, x, y)
MoveLocation(loc2, x - LARGEUR_CASE, y)
else
MoveLocation(loc1, otherX, y)
MoveLocation(loc2, otherX + LARGEUR_CASE, y)
end
if GetLocationZ(loc1) ~= GetLocationZ(loc2) and GetTerrainCliffLevelBJ(loc1) == GetTerrainCliffLevelBJ(loc2) then
ramp = true
end
end
end
if ramp then
if currentCliffLevel < otherCliffLevel then
isRampMiddleRaisedB = isRampMiddleRaised(x, y, true)
end
end
else
if not walkable then
otherX = x + LARGEUR_CASE * 2
otherCliffLevel2 = GetTerrainCliffLevel(otherX, otherY)
if otherCliffLevel2 - currentCliffLevel == 1 then
MoveLocation(loc1, x, y)
MoveLocation(loc2, x + LARGEUR_CASE, y)
if GetLocationZ(loc1) ~= GetLocationZ(loc2) then
ramp = true
end
end
else
otherX = x + LARGEUR_CASE * 2
if otherX <= globals.MAP_MAX_X then
otherCliffLevel2 = GetTerrainCliffLevel(otherX, otherY)
if currentCliffLevel < otherCliffLevel2 then
otherX = otherX - LARGEUR_CASE / 2
walkable2 = not IsTerrainPathable(otherX, otherY + DECAL_TEST_PATH, PATHING_TYPE_WALKABILITY) or not IsTerrainPathable(otherX, otherY - DECAL_TEST_PATH, PATHING_TYPE_WALKABILITY)
if walkable2 then
ramp = true
end
end
end
end
end
end
end
if not isRampMiddleRaisedB then
otherX = x - LARGEUR_CASE
otherY = y
if otherX >= globals.MAP_MIN_X then
otherCliffLevel = GetTerrainCliffLevel(otherX, otherY)
otherX = x - LARGEUR_CASE / 2
walkable = not IsTerrainPathable(otherX, otherY + DECAL_TEST_PATH, PATHING_TYPE_WALKABILITY) or not IsTerrainPathable(otherX, otherY - DECAL_TEST_PATH, PATHING_TYPE_WALKABILITY)
if currentCliffLevel ~= otherCliffLevel then
if walkable then
ramp = true
elseif IAbsBJ(currentCliffLevel - otherCliffLevel) == 1 then
if currentCliffLevel > otherCliffLevel then
otherX = x - 3 * LARGEUR_CASE / 2
else
otherX = x + LARGEUR_CASE / 2
end
walkable2 = not IsTerrainPathable(otherX, otherY + DECAL_TEST_PATH, PATHING_TYPE_WALKABILITY) or not IsTerrainPathable(otherX, otherY - DECAL_TEST_PATH, PATHING_TYPE_WALKABILITY)
if not walkable2 then
if currentCliffLevel < otherCliffLevel then
MoveLocation(loc1, x, y)
MoveLocation(loc2, x + LARGEUR_CASE, y)
else
MoveLocation(loc1, otherX, y)
MoveLocation(loc2, otherX - LARGEUR_CASE, y)
end
if GetLocationZ(loc1) ~= GetLocationZ(loc2) and GetTerrainCliffLevelBJ(loc1) == GetTerrainCliffLevelBJ(loc2) then
ramp = true
end
end
end
if ramp then
if currentCliffLevel < otherCliffLevel then
isRampMiddleRaisedB = isRampMiddleRaised(x, y, true)
end
end
else
if not walkable then
otherX = x - LARGEUR_CASE * 2
otherCliffLevel2 = GetTerrainCliffLevel(otherX, otherY)
if otherCliffLevel2 - currentCliffLevel == 1 then
MoveLocation(loc1, x, y)
MoveLocation(loc2, x - LARGEUR_CASE, y)
if GetLocationZ(loc1) ~= GetLocationZ(loc2) then
ramp = true
end
end
else
otherX = x - LARGEUR_CASE * 2
if otherX >= globals.MAP_MIN_X then
otherCliffLevel2 = GetTerrainCliffLevel(otherX, otherY)
if currentCliffLevel < otherCliffLevel2 then
otherX = otherX + LARGEUR_CASE / 2
walkable2 = not IsTerrainPathable(otherX, otherY + DECAL_TEST_PATH, PATHING_TYPE_WALKABILITY) or not IsTerrainPathable(otherX, otherY - DECAL_TEST_PATH, PATHING_TYPE_WALKABILITY)
if walkable2 then
ramp = true
end
end
end
end
end
end
end
if not isRampMiddleRaisedB then
otherX = x
otherY = y + LARGEUR_CASE
if otherY <= globals.MAP_MAX_Y then
otherCliffLevel = GetTerrainCliffLevel(otherX, otherY)
otherY = y + LARGEUR_CASE / 2
walkable = not IsTerrainPathable(otherX + DECAL_TEST_PATH, otherY, PATHING_TYPE_WALKABILITY) or not IsTerrainPathable(otherX - DECAL_TEST_PATH, otherY, PATHING_TYPE_WALKABILITY)
if currentCliffLevel ~= otherCliffLevel then
if walkable then
ramp = true
elseif IAbsBJ(currentCliffLevel - otherCliffLevel) == 1 then
if currentCliffLevel > otherCliffLevel then
otherY = y + 3 * LARGEUR_CASE / 2
else
otherY = y - LARGEUR_CASE / 2
end
walkable2 = not IsTerrainPathable(otherX + DECAL_TEST_PATH, otherY, PATHING_TYPE_WALKABILITY) or not IsTerrainPathable(otherX - DECAL_TEST_PATH, otherY, PATHING_TYPE_WALKABILITY)
if not walkable2 then
if currentCliffLevel < otherCliffLevel then
MoveLocation(loc1, x, y)
MoveLocation(loc2, x, y - LARGEUR_CASE)
else
MoveLocation(loc1, x, otherY)
MoveLocation(loc2, x, otherY + LARGEUR_CASE)
end
if GetLocationZ(loc1) ~= GetLocationZ(loc2) and GetTerrainCliffLevelBJ(loc1) == GetTerrainCliffLevelBJ(loc2) then
ramp = true
end
end
end
if ramp then
if currentCliffLevel < otherCliffLevel then
isRampMiddleRaisedB = isRampMiddleRaised(x, y, false)
end
end
else
if not walkable then
otherY = y + LARGEUR_CASE * 2
otherCliffLevel2 = GetTerrainCliffLevel(otherX, otherY)
if otherCliffLevel2 - currentCliffLevel == 1 then
MoveLocation(loc1, x, y)
MoveLocation(loc2, x, y + LARGEUR_CASE)
if GetLocationZ(loc1) ~= GetLocationZ(loc2) then
ramp = true
end
end
else
otherY = y + LARGEUR_CASE * 2
if otherY <= globals.MAP_MAX_Y then
otherCliffLevel2 = GetTerrainCliffLevel(otherX, otherY)
if currentCliffLevel < otherCliffLevel2 then
otherY = otherY - LARGEUR_CASE / 2
walkable2 = not IsTerrainPathable(otherX + DECAL_TEST_PATH, otherY, PATHING_TYPE_WALKABILITY) or not IsTerrainPathable(otherX - DECAL_TEST_PATH, otherY, PATHING_TYPE_WALKABILITY)
if walkable2 then
ramp = true
end
end
end
end
end
end
end
if not isRampMiddleRaisedB then
otherX = x
otherY = y - LARGEUR_CASE
if otherY >= globals.MAP_MIN_Y then
otherCliffLevel = GetTerrainCliffLevel(otherX, otherY)
otherY = y - LARGEUR_CASE / 2
walkable = not IsTerrainPathable(otherX + DECAL_TEST_PATH, otherY, PATHING_TYPE_WALKABILITY) or not IsTerrainPathable(otherX - DECAL_TEST_PATH, otherY, PATHING_TYPE_WALKABILITY)
if currentCliffLevel ~= otherCliffLevel then
if walkable then
ramp = true
elseif IAbsBJ(currentCliffLevel - otherCliffLevel) == 1 then
if currentCliffLevel > otherCliffLevel then
otherY = y - 3 * LARGEUR_CASE / 2
else
otherY = y + LARGEUR_CASE / 2
end
walkable2 = not IsTerrainPathable(otherX + DECAL_TEST_PATH, otherY, PATHING_TYPE_WALKABILITY) or not IsTerrainPathable(otherX - DECAL_TEST_PATH, otherY, PATHING_TYPE_WALKABILITY)
if not walkable2 then
if currentCliffLevel < otherCliffLevel then
MoveLocation(loc1, x, y)
MoveLocation(loc2, x, y + LARGEUR_CASE)
else
MoveLocation(loc1, x, otherY)
MoveLocation(loc2, x, otherY - LARGEUR_CASE)
end
if GetLocationZ(loc1) ~= GetLocationZ(loc2) and GetTerrainCliffLevelBJ(loc1) == GetTerrainCliffLevelBJ(loc2) then
ramp = true
end
end
end
if ramp then
if currentCliffLevel < otherCliffLevel then
isRampMiddleRaisedB = isRampMiddleRaised(x, y, false)
end
end
else
if not walkable then
otherY = y - LARGEUR_CASE * 2
otherCliffLevel2 = GetTerrainCliffLevel(otherX, otherY)
if otherCliffLevel2 - currentCliffLevel == 1 then
MoveLocation(loc1, x, y)
MoveLocation(loc2, x, y - LARGEUR_CASE)
if GetLocationZ(loc1) ~= GetLocationZ(loc2) then
ramp = true
end
end
else
otherY = y - LARGEUR_CASE * 2
if otherY >= globals.MAP_MIN_Y then
otherCliffLevel2 = GetTerrainCliffLevel(otherX, otherY)
if currentCliffLevel < otherCliffLevel2 then
otherY = otherY + LARGEUR_CASE / 2
walkable2 = not IsTerrainPathable(otherX + DECAL_TEST_PATH, otherY, PATHING_TYPE_WALKABILITY) or not IsTerrainPathable(otherX - DECAL_TEST_PATH, otherY, PATHING_TYPE_WALKABILITY)
if walkable2 then
ramp = true
end
end
end
end
end
end
end
if not ramp then
signY = -1
while true do
if ramp or signY > 1 then
break
end
signX = -1
while true do
if ramp or signX > 1 then
break
end
otherX = x + LARGEUR_CASE * signX
otherY = y + LARGEUR_CASE * signY
otherCliffLevel = GetTerrainCliffLevel(otherX, otherY)
if currentCliffLevel < otherCliffLevel then
otherX = x + LARGEUR_CASE * signX / 2
otherY = y + LARGEUR_CASE * signY / 2
walkable = not IsTerrainPathable(otherX, otherY, PATHING_TYPE_WALKABILITY)
if walkable then
ramp = true
else
end
end
signX = signX + 2
end
signY = signY + 2
end
end
end
if ramp then
if isRampMiddleRaisedB then
rampStr = "2"
else
rampStr = "1"
end
else
rampStr = "0"
end
arrayPush(terrainRampsArr, rampStr)
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
local ____json_0 = json
cachedTerrainRamps = __TS__ArrayJoin(terrainRampsArr, "")
____json_0.terrainRamps = cachedTerrainRamps
MemoryHandler.destroyArray(terrainRampsArr)
Text.A("terrain ramps saved")
end
return {SaveTerrainRamps = SaveTerrainRamps}
end
____exports.SaveTerrainRamps = initSaveTerrainRamps()
return ____exports
end,
["src.core.07_TRIGGERS.Save_map_in_gamecache.Save_terrain"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ArrayJoin = ____lualib.__TS__ArrayJoin
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Ascii = require("src.core.01_libraries.Ascii")
local Ascii2String = ____Ascii.Ascii2String
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____Functions_on_numbers = require("src.core.01_libraries.Functions_on_numbers")
local I2HexaString = ____Functions_on_numbers.I2HexaString
local ____Save_terrain_heights_and_cliffs = require("src.core.07_TRIGGERS.Save_map_in_gamecache.Save_terrain_heights_and_cliffs")
local SaveTerrainHeights = ____Save_terrain_heights_and_cliffs.SaveTerrainHeights
local ____Save_terrain_ramps = require("src.core.07_TRIGGERS.Save_map_in_gamecache.Save_terrain_ramps")
local SaveTerrainRamps = ____Save_terrain_ramps.SaveTerrainRamps
local terrainTypeIds = {}
local nbTerrainTypesUsed
local function SaveTerrainsUsed(json)
json.terrainsUsed = MemoryHandler.getEmptyArray()
do
local i = 0
while i < nbTerrainTypesUsed do
arrayPush(
json.terrainsUsed,
Ascii2String(terrainTypeIds[i + 1])
)
i = i + 1
end
end
Text.A("terrains used saved")
end
local function SaveMapDimensionsAndCenterOffset(json)
local largeurMap = R2I((globals.MAP_MAX_X - globals.MAP_MIN_X) / LARGEUR_CASE)
local hauteurMap = R2I((globals.MAP_MAX_Y - globals.MAP_MIN_Y) / LARGEUR_CASE)
local offsetX = R2I(globals.MAP_MIN_X)
local offsetY = R2I(globals.MAP_MIN_Y)
json.terrain = MemoryHandler.getEmptyObject()
json.terrain.largeur = largeurMap
json.terrain.hauteur = hauteurMap
json.terrain.centerOffsetX = offsetX
json.terrain.centerOffsetY = offsetY
end
local function GetTerrainId(x, y)
local terrainTypeId = GetTerrainType(x, y)
do
local i = 0
while i < nbTerrainTypesUsed do
if terrainTypeId == terrainTypeIds[i + 1] then
return I2HexaString(i)
end
i = i + 1
end
end
if nbTerrainTypesUsed < 16 then
terrainTypeIds[nbTerrainTypesUsed + 1] = terrainTypeId
nbTerrainTypesUsed = nbTerrainTypesUsed + 1
end
return I2HexaString(nbTerrainTypesUsed - 1)
end
local function GererOrdreTerrains()
local nbOrderedTerrains = 0
local ordreMinTerrainId = -1
local ordreMin
local terrainTypes = getUdgTerrainTypes():getAll()
for i in pairs(terrainTypes) do
if terrainTypes[i]:getOrderId() ~= 0 then
nbOrderedTerrains = nbOrderedTerrains + 1
end
end
do
local numTerrain = 0
while numTerrain < nbOrderedTerrains - 1 do
ordreMin = 100
do
local i = numTerrain
while i < nbOrderedTerrains do
if terrainTypes[i]:getOrderId() < ordreMin then
ordreMinTerrainId = i
ordreMin = terrainTypes[i]:getOrderId()
end
i = i + 1
end
end
if ordreMinTerrainId ~= numTerrain then
local terrainType = terrainTypes[numTerrain]
terrainTypes[numTerrain] = terrainTypes[ordreMinTerrainId]
terrainTypes[ordreMinTerrainId] = terrainType
end
numTerrain = numTerrain + 1
end
end
nbTerrainTypesUsed = nbOrderedTerrains
do
local i = 0
while i < nbOrderedTerrains do
terrainTypeIds[i + 1] = terrainTypes[i]:getTerrainTypeId()
i = i + 1
end
end
end
local function SaveTerrain(json)
local terrainTypesArr = MemoryHandler.getEmptyArray()
local y = globals.MAP_MIN_Y
while y <= globals.MAP_MAX_Y do
local x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
arrayPush(
terrainTypesArr,
GetTerrainId(x, y)
)
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
json.terrainTypes = __TS__ArrayJoin(terrainTypesArr, "")
MemoryHandler.destroyArray(terrainTypesArr)
Text.A("terrain saved")
end
____exports.PushTerrainDataIntoJson = function(json)
json.mainTileset = getUdgTerrainTypes():getMainTileset()
GererOrdreTerrains()
SaveTerrain(json)
SaveTerrainsUsed(json)
SaveMapDimensionsAndCenterOffset(json)
SaveTerrainHeights.SaveTerrainHeights(json)
SaveTerrainHeights.SaveTerrainCliffs(json)
SaveTerrainRamps.SaveTerrainRamps(json)
end
function ____exports.saveTerrainType2Dims()
local terrainsTypes = MemoryHandler.getEmptyArray()
local yInd = 0
local y = globals.MAP_MIN_Y
while y <= globals.MAP_MAX_Y do
local xInd = 0
local x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
local ____temp_1 = not terrainsTypes[xInd + 1]
if ____temp_1 then
local ____MemoryHandler_getEmptyArray_result_0 = MemoryHandler.getEmptyArray()
terrainsTypes[xInd + 1] = ____MemoryHandler_getEmptyArray_result_0
____temp_1 = ____MemoryHandler_getEmptyArray_result_0
end
terrainsTypes[xInd + 1][yInd + 1] = getUdgTerrainTypes():getTerrainType(x, y)
xInd = xInd + 1
x = x + LARGEUR_CASE
end
yInd = yInd + 1
y = y + LARGEUR_CASE
end
return terrainsTypes
end
return ____exports
end,
["src.core.07_TRIGGERS.Save_map_in_gamecache.SaveMapInCache"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local __TS__StringReplace = ____lualib.__TS__StringReplace
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Escaper_StartCommands = require("src.core.04_STRUCTURES.Escaper.Escaper_StartCommands")
local SaveLoad = ____Escaper_StartCommands.SaveLoad
local ____globals = require("globals")
local getUdgCasterTypes = ____globals.getUdgCasterTypes
local getUdgLevels = ____globals.getUdgLevels
local getUdgMonsterTypes = ____globals.getUdgMonsterTypes
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____env = require("src.env")
local PROD = ____env.PROD
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local jsonEncode = ____Basic_functions.jsonEncode
local ____Constants = require("src.core.01_libraries.Constants")
local MEC_SMIC_DATA_FILE_DATE_TPL = ____Constants.MEC_SMIC_DATA_FILE_DATE_TPL
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Gravity = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.Gravity")
local Gravity = ____Gravity.Gravity
local ____Save_terrain = require("src.core.07_TRIGGERS.Save_map_in_gamecache.Save_terrain")
local PushTerrainDataIntoJson = ____Save_terrain.PushTerrainDataIntoJson
____exports.SaveMapInCache = __TS__Class()
local SaveMapInCache = ____exports.SaveMapInCache
SaveMapInCache.name = "SaveMapInCache"
function SaveMapInCache.prototype.____constructor(self)
end
SaveMapInCache.lastSaveFile = ""
SaveMapInCache.gameAsJsonString = function()
local jsonTerrain = MemoryHandler.getEmptyObject()
local jsonGameData = MemoryHandler.getEmptyObject()
PushTerrainDataIntoJson(jsonTerrain)
Text.A("map terrain saved")
jsonGameData.gameData = MemoryHandler.getEmptyObject()
jsonGameData.gameData.USE_VTOTO_SLIDE_LOGIC = globals.USE_VTOTO_SLIDE_LOGIC
jsonGameData.gameData.coopCircles = globals.coopCircles
jsonGameData.gameData.CAN_TURN_IN_AIR = globals.CAN_TURN_IN_AIR
jsonGameData.gameData.gravity = Gravity.GetRealGravity()
jsonGameData.terrainTypesMec = getUdgTerrainTypes():toJson()
Text.A("MEC terrain configuration saved")
jsonGameData.monsterTypes = getUdgMonsterTypes():toJson()
Text.A("monster types saved")
jsonGameData.casterTypes = getUdgCasterTypes():toJson()
Text.A("caster types saved")
jsonGameData.levels = getUdgLevels():toJson()
Text.A("levels saved")
local objData = MemoryHandler.getEmptyObject()
objData.terrain = jsonTerrain
objData.gameData = jsonGameData
local output = jsonEncode(objData)
MemoryHandler.destroyObject(objData)
return output
end
SaveMapInCache.smicStringObj = {str = ""}
SaveMapInCache.smic = function(____, p, fileName)
if p == nil then
p = nil
end
if p == nil or GetLocalPlayer() == p then
local startTime = os.clock()
local filename = fileName or __TS__StringReplace(
MEC_SMIC_DATA_FILE_DATE_TPL,
"[date]",
os.date("%%Y-%%m-%%d_%%H-%%M-%%S")
)
____exports.SaveMapInCache.smicStringObj.str = ____exports.SaveMapInCache:gameAsJsonString()
____exports.SaveMapInCache.lastSaveFile = filename
if PROD then
SaveLoad.saveFileWithoutPossibleLoading(filename, p, ____exports.SaveMapInCache.smicStringObj.str, false)
else
SaveLoad.saveFile(filename, p, ____exports.SaveMapInCache.smicStringObj.str, true)
end
Text.A(("saving game data to file \"" .. filename) .. "\" done")
local time = os.clock() - startTime
Text.mkA(("SMIC done in " .. tostring(time)) .. " s")
end
end
return ____exports
end,
["src.core.07_TRIGGERS.Triggers_to_modify_terrains.Save_load_terrain"] = function(...)
local ____lualib = require("lualib_bundle")
local Map = ____lualib.Map
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local function initSaveLoadTerrain()
local terrainSaves = __TS__New(Map)
local function SaveTerrain(saveName)
local terrainSave = {}
local y = globals.MAP_MIN_Y
while y <= globals.MAP_MAX_Y do
local x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
if not terrainSave[x + 1] then
terrainSave[x + 1] = {}
end
terrainSave[x + 1][y + 1] = getUdgTerrainTypes():getTerrainType(x, y)
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
terrainSaves:set(saveName, terrainSave)
Text.mkA("Terrain saved")
end
local function DeleteTerrainSave(saveName)
terrainSaves:delete(saveName)
return true
end
local function LoadTerrain(saveName)
local terrainSave = terrainSaves:get(saveName)
if not terrainSave then
return false
end
local terrainType
local y = globals.MAP_MIN_Y
while y <= globals.MAP_MAX_Y do
local x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
terrainType = terrainSave[x + 1][y + 1]
if terrainType ~= nil then
ChangeTerrainType(
x,
y,
terrainType:getTerrainTypeId()
)
end
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
Text.mkA("Terrain loaded")
return true
end
return {SaveTerrain = SaveTerrain, DeleteTerrainSave = DeleteTerrainSave, LoadTerrain = LoadTerrain}
end
____exports.SaveLoadTerrain = initSaveLoadTerrain()
return ____exports
end,
["src.core.06_COMMANDS.Rights.manage_rights"] = function(...)
local ____exports = {}
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
____exports.makingRightsToAll = function()
local firstPlayerFound = false
getUdgEscapers():forMainEscapers(function(escaper)
if firstPlayerFound then
escaper:setCanCheat(true)
else
escaper:setIsTrueMaximaxou(true)
firstPlayerFound = true
end
end)
end
return ____exports
end,
["src.core.07_TRIGGERS.Load_map_from_gamecache.LoadMapFromCache"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
local ____env = require("src.env")
local PROD = ____env.PROD
local ____mapUtils = require("src.Utils.mapUtils")
local errorHandler = ____mapUtils.errorHandler
local ____globals = require("globals")
local getUdgCasterTypes = ____globals.getUdgCasterTypes
local getUdgLevels = ____globals.getUdgLevels
local getUdgMonsterTypes = ____globals.getUdgMonsterTypes
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local jsonDecode = ____Basic_functions.jsonDecode
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Gravity = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.Gravity")
local Gravity = ____Gravity.Gravity
____exports.LoadMapFromCache = __TS__Class()
local LoadMapFromCache = ____exports.LoadMapFromCache
LoadMapFromCache.name = "LoadMapFromCache"
function LoadMapFromCache.prototype.____constructor(self)
end
LoadMapFromCache.gameDataJsonString = nil
LoadMapFromCache.initializeGameData = function()
if ____exports.LoadMapFromCache.gameDataJsonString then
local gameData = jsonDecode(____exports.LoadMapFromCache.gameDataJsonString)
if not gameData or type(gameData) ~= "table" then
Text.erA("invalid game data string")
else
if gameData.gameData then
if gameData.gameData.USE_VTOTO_SLIDE_LOGIC then
globals.USE_VTOTO_SLIDE_LOGIC = gameData.gameData.USE_VTOTO_SLIDE_LOGIC
end
if gameData.gameData.coopCircles then
globals.coopCircles = gameData.gameData.coopCircles
end
if gameData.gameData.CAN_TURN_IN_AIR then
globals.CAN_TURN_IN_AIR = gameData.gameData.CAN_TURN_IN_AIR
end
if gameData.gameData.gravity then
Gravity.SetGravity(gameData.gameData.gravity)
end
end
if gameData.terrainTypesMec then
if PROD then
getUdgTerrainTypes():newFromJson(gameData.terrainTypesMec)
else
errorHandler(function() return getUdgTerrainTypes():newFromJson(gameData.terrainTypesMec) end)
end
end
if gameData.monsterTypes then
if PROD then
getUdgMonsterTypes():newFromJson(gameData.monsterTypes)
else
errorHandler(function() return getUdgMonsterTypes():newFromJson(gameData.monsterTypes) end)
end
end
if gameData.casterTypes then
if gameData.monsterTypes then
if PROD then
getUdgCasterTypes():newFromJson(gameData.casterTypes)
else
errorHandler(function() return getUdgCasterTypes():newFromJson(gameData.casterTypes) end)
end
end
end
if gameData.levels then
getUdgLevels():newFromJson(gameData.levels)
end
end
end
end
return ____exports
end,
["src.core.API.MEC_core_API"] = function(...)
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____ProgressionUtils = require("src.Utils.ProgressionUtils")
local progressionUtils = ____ProgressionUtils.progressionUtils
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgLevels = ____globals.getUdgLevels
local getUdgMonsterTypes = ____globals.getUdgMonsterTypes
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____mapUtils = require("src.Utils.mapUtils")
local errorHandler = ____mapUtils.errorHandler
local ____Escaper = require("src.core.04_STRUCTURES.Escaper.Escaper")
local SetMeteorEffect = ____Escaper.SetMeteorEffect
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local IsHero = ____Escaper_functions.IsHero
local ____MonsterSimplePatrol = require("src.core.04_STRUCTURES.Monster.MonsterSimplePatrol")
local createMonsterSmartPatrol = ____MonsterSimplePatrol.createMonsterSmartPatrol
local ____manage_rights = require("src.core.06_COMMANDS.Rights.manage_rights")
local makingRightsToAll = ____manage_rights.makingRightsToAll
local ____LoadMapFromCache = require("src.core.07_TRIGGERS.Load_map_from_gamecache.LoadMapFromCache")
local LoadMapFromCache = ____LoadMapFromCache.LoadMapFromCache
local ____Gravity = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.Gravity")
local Gravity = ____Gravity.Gravity
local ____Reinit_terrains = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Reinit_terrains")
local ReinitTerrains = ____Reinit_terrains.ReinitTerrains
local ____Reinit_terrains_position_Change_variations_and_ut_at_beginning = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Reinit_terrains_position_Change_variations_and_ut_at_beginning")
local ReinitTerrainsPositions = ____Reinit_terrains_position_Change_variations_and_ut_at_beginning.ReinitTerrainsPositions
local ____Heroes = require("src.core.08_GAME.Init_game.Heroes")
local heroes = ____Heroes.heroes
local ____GeneralHooks = require("src.core.API.GeneralHooks")
local hooks = ____GeneralHooks.hooks
local ____MecHook = require("src.core.API.MecHook")
local MecHook = ____MecHook.MecHook
____exports.MEC_core_API = {
setGameData = function(jsonString)
errorHandler(function()
LoadMapFromCache.gameDataJsonString = jsonString
LoadMapFromCache:initializeGameData()
progressionUtils.init()
end)()
end,
makingRightsToAll = function()
makingRightsToAll()
end,
getEscapers = getUdgEscapers,
getTerrainTypes = getUdgTerrainTypes,
getLevels = getUdgLevels,
getMonsterTypes = getUdgMonsterTypes,
newMonsterSimplePatrol = function(...)
return createMonsterSmartPatrol(...)
end,
destroyHook = function(hookId)
return MecHook:destroy(hookId)
end,
onBeforeCreateMonsterUnit = function(cb)
return hooks.hooks_onBeforeCreateMonsterUnit:new(cb)
end,
onAfterCreateMonsterUnit = function(cb)
return hooks.hooks_onAfterCreateMonsterUnit:new(cb)
end,
onStartLevel = function(levelNum, cb)
local level = getUdgLevels():get(levelNum)
if level then
return level.hooks_onStart:new(cb)
end
return nil
end,
onEndLevel = function(levelNum, cb)
local level = getUdgLevels():get(levelNum)
if level then
return level.hooks_onEnd:new(cb)
end
return nil
end,
terrain = {reinitTypes = ReinitTerrains.ReinitTerrains, reinitPositions = ReinitTerrainsPositions.ReinitTerrainsPosition},
setEffectForMissingHeroes = heroes.setEffectForMissingHeroes,
setMeteorEffect = SetMeteorEffect,
setGravity = Gravity.SetGravity,
setCanTurnInTheAir = function(b)
globals.CAN_TURN_IN_AIR = b
end,
setStaticSpawnPositions = heroes.setStaticSpawnPositions,
isHero = IsHero,
hero2Escaper = Hero2Escaper,
setPointsEnabled = function(enabled)
ServiceManager.getService("Multiboard").setPointsEnabled(enabled)
end,
adjustPlayerPoints = function(playerId, points)
ServiceManager.getService("Multiboard").adjustPlayerPoints(playerId, points)
end,
setPlayerPoints = function(playerId, points)
ServiceManager.getService("Multiboard").setPlayerPoints(playerId, points)
end,
removeMonsterType = function(label) return getUdgMonsterTypes():remove(label) end,
removeMonsterSpawn = function(level, ms)
local ____getUdgLevels_result_get_result_monsterSpawns_clearMonsterSpawn_result_0 = getUdgLevels():get(level)
if ____getUdgLevels_result_get_result_monsterSpawns_clearMonsterSpawn_result_0 ~= nil then
____getUdgLevels_result_get_result_monsterSpawns_clearMonsterSpawn_result_0 = ____getUdgLevels_result_get_result_monsterSpawns_clearMonsterSpawn_result_0.monsterSpawns:clearMonsterSpawn(ms)
end
return ____getUdgLevels_result_get_result_monsterSpawns_clearMonsterSpawn_result_0
end
}
return ____exports
end,
["src.core.Log.log"] = function(...)
local ____exports = {}
local ____globals = require("globals")
local globals = ____globals.globals
local ____SyncSaveLoad = require("src.Utils.SaveLoad.TreeLib.SyncSaveLoad")
local SyncSaveLoad = ____SyncSaveLoad.SyncSaveLoad
____exports.log = function(str)
print(str)
local ____globals_logStrings_0 = globals.logStrings
____globals_logStrings_0[#____globals_logStrings_0 + 1] = str
end
____exports.flushLogs = function()
local logFile = "MEC/MEC_log.txt"
local syncSaveLoad = SyncSaveLoad()
syncSaveLoad.writeFileWithoutPossibleLoading(
logFile,
table.concat(globals.logStrings, "\n"),
false
)
print("Logs written in file " .. logFile)
end
return ____exports
end,
["src.core.06_COMMANDS.COMMANDS_vJass.Teleport"] = function(...)
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsIssuedOrder = ____Basic_functions.IsIssuedOrder
local StopUnit = ____Basic_functions.StopUnit
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____mapUtils = require("src.Utils.mapUtils")
local errorHandler = ____mapUtils.errorHandler
local teleTriggers = {}
local onceOnly = {}
____exports.ActivateTeleport = function(hero, onceOnlyB)
local escaperId = GetUnitUserData(hero)
DestroyTrigger(teleTriggers[escaperId + 1])
teleTriggers[escaperId + 1] = CreateTrigger()
TriggerAddAction(
teleTriggers[escaperId + 1],
errorHandler(function()
local escaper = getUdgEscapers():get(escaperId)
if not escaper then
return
end
local hero = GetTriggerUnit()
if not IsIssuedOrder("smart") then
return
end
StopUnit(hero)
escaper:moveHero(
GetOrderPointX(),
GetOrderPointY()
)
if onceOnly[GetUnitUserData(hero) + 1] then
DestroyTrigger(GetTriggeringTrigger())
end
hero = nil
end)
)
TriggerRegisterUnitEvent(teleTriggers[escaperId + 1], hero, EVENT_UNIT_ISSUED_POINT_ORDER)
onceOnly[escaperId + 1] = onceOnlyB
end
____exports.DisableTeleport = function(hero)
local escaperId = GetUnitUserData(hero)
DestroyTrigger(teleTriggers[escaperId + 1])
end
return ____exports
end,
["src.core.06_COMMANDS.COMMANDS_vJass.Command_admin"] = function(...)
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsBoolString = ____Basic_functions.IsBoolString
local IsEscaperInGame = ____Basic_functions.IsEscaperInGame
local jsonDecode = ____Basic_functions.jsonDecode
local jsonEncode = ____Basic_functions.jsonEncode
local S2B = ____Basic_functions.S2B
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local GetMirrorEscaper = ____Escaper_functions.GetMirrorEscaper
local ____Escaper_StartCommands = require("src.core.04_STRUCTURES.Escaper.Escaper_StartCommands")
local SaveLoad = ____Escaper_StartCommands.SaveLoad
local ____Reinit_terrains = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Reinit_terrains")
local ReinitTerrains = ____Reinit_terrains.ReinitTerrains
local ____Reinit_terrains_position_Change_variations_and_ut_at_beginning = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Reinit_terrains_position_Change_variations_and_ut_at_beginning")
local ReinitTerrainsPositions = ____Reinit_terrains_position_Change_variations_and_ut_at_beginning.ReinitTerrainsPositions
local ____Afk_mode = require("src.core.08_GAME.Afk_mode.Afk_mode")
local AfkMode = ____Afk_mode.AfkMode
local ____globals_variables_and_triggers = require("src.core.09_From_old_Worldedit_triggers.globals_variables_and_triggers")
local Globals = ____globals_variables_and_triggers.Globals
local ____double_heroes_config = require("src.core.Double_heroes.double_heroes_config")
local udg_doubleHeroesEnabled = ____double_heroes_config.udg_doubleHeroesEnabled
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____ProgressionUtils = require("src.Utils.ProgressionUtils")
local progressionUtils = ____ProgressionUtils.progressionUtils
local ____globals = require("globals")
local getUdgCasterTypes = ____globals.getUdgCasterTypes
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgLevels = ____globals.getUdgLevels
local getUdgMonsterTypes = ____globals.getUdgMonsterTypes
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____Functions_on_numbers = require("src.core.01_libraries.Functions_on_numbers")
local IsPositiveInteger = ____Functions_on_numbers.IsPositiveInteger
local ____SaveMapInCache = require("src.core.07_TRIGGERS.Save_map_in_gamecache.SaveMapInCache")
local SaveMapInCache = ____SaveMapInCache.SaveMapInCache
local ____Save_load_terrain = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Save_load_terrain")
local SaveLoadTerrain = ____Save_load_terrain.SaveLoadTerrain
local ____MEC_core_API = require("src.core.API.MEC_core_API")
local MEC_core_API = ____MEC_core_API.MEC_core_API
local ____log = require("src.core.Log.log")
local flushLogs = ____log.flushLogs
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local CmdParam = ____Command_functions.CmdParam
local isPlayerId = ____Command_functions.isPlayerId
local resolvePlayerId = ____Command_functions.resolvePlayerId
local ____Teleport = require("src.core.06_COMMANDS.COMMANDS_vJass.Teleport")
local ActivateTeleport = ____Teleport.ActivateTeleport
local DisableTeleport = ____Teleport.DisableTeleport
____exports.initExecuteCommandMax = function()
local ____ServiceManager_getService_result_0 = ServiceManager.getService("Cmd")
local registerCommand = ____ServiceManager_getService_result_0.registerCommand
registerCommand({
name = "reinitTerrains",
alias = {"rit"},
group = "max",
argDescription = "",
description = "reinitTerrains(<nb>): reinit terrains with <nb> terrains",
cb = function(____, ____bindingPattern0)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
ReinitTerrains.ReinitTerrains()
end
return true
end
})
registerCommand({
name = "reinitTerrainsPosition",
alias = {"ritp"},
group = "max",
argDescription = "",
description = "rethe terrain on the map",
cb = function(____, ____bindingPattern0)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
ReinitTerrainsPositions.ReinitTerrainsPosition()
end
return true
end
})
registerCommand({
name = "saveTerrain",
alias = {"st"},
group = "max",
argDescription = "<slotName>",
description = "save terrain in <slotName>",
cb = function(____, ____bindingPattern0)
local noParam
local cmd
cmd = ____bindingPattern0.cmd
noParam = ____bindingPattern0.noParam
if noParam then
SaveLoadTerrain.SaveTerrain("")
else
SaveLoadTerrain.SaveTerrain(CmdParam(cmd, 0))
end
return true
end
})
registerCommand({
name = "loadTerrain",
alias = {"lt"},
group = "max",
argDescription = "<slotName>",
description = "load terrain in <slotName>",
cb = function(____, ____bindingPattern0, escaper)
local noParam
local cmd
cmd = ____bindingPattern0.cmd
noParam = ____bindingPattern0.noParam
if noParam then
SaveLoadTerrain.LoadTerrain("")
else
if not SaveLoadTerrain.LoadTerrain(CmdParam(cmd, 0)) then
Text.erP(
escaper:getPlayer(),
"this terrain save doesn't exist"
)
end
end
return true
end
})
registerCommand({
name = "deleteTerrainSave",
alias = {"delts"},
group = "max",
argDescription = "<slotName>",
description = "delete terrain save in <slotName>",
cb = function(____, ____bindingPattern0, escaper)
local noParam
local cmd
cmd = ____bindingPattern0.cmd
noParam = ____bindingPattern0.noParam
if noParam then
return true
end
if SaveLoadTerrain.DeleteTerrainSave(CmdParam(cmd, 0)) then
Text.mkP(
escaper:getPlayer(),
"terrain save deleted"
)
else
Text.erP(
escaper:getPlayer(),
"this terrain save doesn't exist"
)
end
return true
end
})
registerCommand({
name = "control",
alias = {"cl"},
group = "max",
argDescription = "<Pcolor1>|all(a) [<Pcolor2>]",
description = "gives the control of a hero to player <Pcolor2>",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 1 or nbParam == 2) then
return true
end
local escaper2
if nbParam == 2 then
if not isPlayerId(param2) then
Text.erP(
escaper:getPlayer(),
"param2 should be a player color"
)
return true
end
escaper2 = getUdgEscapers():get(resolvePlayerId(param2))
if escaper2 == nil then
Text.erP(
escaper:getPlayer(),
("escaper " .. param2) .. " doesn't exist"
)
return true
end
else
escaper2 = escaper
end
if param1 == "all" or param1 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) ~= nil then
local ____getUdgEscapers_result_get_result_giveHeroControl_result_1 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_giveHeroControl_result_1 ~= nil then
____getUdgEscapers_result_get_result_giveHeroControl_result_1 = ____getUdgEscapers_result_get_result_giveHeroControl_result_1:giveHeroControl(escaper2)
end
end
i = i + 1
end
if escaper == escaper2 then
Text.P(
escaper:getPlayer(),
"all heroes are now yours"
)
else
Text.P(
escaper:getPlayer(),
"all heroes are now to player " .. param2
)
end
return true
end
if isPlayerId(param1) then
local n = resolvePlayerId(param1)
if getUdgEscapers():get(n) ~= nil then
local ____getUdgEscapers_result_get_result_giveHeroControl_result_3 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_giveHeroControl_result_3 ~= nil then
____getUdgEscapers_result_get_result_giveHeroControl_result_3 = ____getUdgEscapers_result_get_result_giveHeroControl_result_3:giveHeroControl(escaper2)
end
local ____GetMirrorEscaper_result_giveHeroControl_result_5 = GetMirrorEscaper(getUdgEscapers():get(n))
if ____GetMirrorEscaper_result_giveHeroControl_result_5 ~= nil then
____GetMirrorEscaper_result_giveHeroControl_result_5 = ____GetMirrorEscaper_result_giveHeroControl_result_5:giveHeroControl(escaper2)
end
else
Text.erP(
escaper:getPlayer(),
("escaper " .. param1) .. " doesn't exist"
)
return true
end
if escaper == escaper2 then
Text.P(
escaper:getPlayer(),
("hero of player " .. param1) .. " is now yours"
)
else
Text.P(
escaper:getPlayer(),
(("hero of player " .. param1) .. " is now to player ") .. param2
)
end
end
return true
end
})
registerCommand({
name = "resetOwners",
alias = {"ro"},
group = "max",
argDescription = "",
description = "gives back the control of heroes to their owner",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) ~= nil then
local ____getUdgEscapers_result_get_result_resetOwner_result_7 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_resetOwner_result_7 ~= nil then
____getUdgEscapers_result_get_result_resetOwner_result_7 = ____getUdgEscapers_result_get_result_resetOwner_result_7:resetOwner()
end
end
i = i + 1
end
Text.P(
escaper:getPlayer(),
"all heroes are now to their owners"
)
end
return true
end
})
registerCommand({
name = "setlives",
alias = {"setl"},
group = "max",
argDescription = "<nbLives>",
description = "set the number of lives",
cb = function(____, ____bindingPattern0)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1 and IsPositiveInteger(param1)) then
return true
end
ServiceManager.getService("Lives").setNb(S2I(param1))
return true
end
})
registerCommand({
name = "teleport",
alias = {"t"},
group = "max",
argDescription = "<boolean status>",
description = "enable or disable teleport trigger",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
if not IsBoolString(param1) then
Text.erP(
escaper:getPlayer(),
"param1 should be a boolean or a real"
)
return true
end
local hero = escaper:getHero()
if hero then
if S2B(param1) then
ActivateTeleport(hero, false)
Text.P(
escaper:getPlayer(),
"teleport on"
)
else
DisableTeleport(hero)
Text.P(
escaper:getPlayer(),
"teleport off"
)
end
end
return true
end
})
registerCommand({
name = "redRights",
alias = {"redr"},
group = "max",
argDescription = "<boolean status>",
description = "enable or disable red rights",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1 and IsBoolString(param1)) then
return true
end
Globals.udg_areRedRightsOn = S2B(param1)
if S2B(param1) then
Text.P(
escaper:getPlayer(),
"red rights on"
)
else
Text.P(
escaper:getPlayer(),
"red rights off"
)
end
return true
end
})
registerCommand({
name = "autorevive",
alias = {"ar"},
group = "max",
argDescription = "<boolean status> [<Pcolor>|all(a)]",
description = "enable or disable autorevive",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if noParam then
escaper:setHasAutorevive(true)
Text.P(
escaper:getPlayer(),
"you have now autorevive to on"
)
return true
end
if not IsBoolString(param1) then
Text.erP(
escaper:getPlayer(),
"param1 should be a boolean"
)
return true
end
local b = S2B(param1)
if nbParam == 1 then
escaper:setHasAutorevive(b)
if b then
Text.P(
escaper:getPlayer(),
"you have now autorevive to on"
)
else
Text.P(
escaper:getPlayer(),
"you have now autorevive to off"
)
end
return true
end
if not (nbParam == 2) then
Text.erP(
escaper:getPlayer(),
"no more than 2 params allowed for this command"
)
return true
end
if param2 == "all" or param2 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) ~= nil then
local ____getUdgEscapers_result_get_result_setHasAutorevive_result_9 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_setHasAutorevive_result_9 ~= nil then
____getUdgEscapers_result_get_result_setHasAutorevive_result_9 = ____getUdgEscapers_result_get_result_setHasAutorevive_result_9:setHasAutorevive(b)
end
end
i = i + 1
end
if b then
Text.P(
escaper:getPlayer(),
"autorevive to on for all"
)
else
Text.P(
escaper:getPlayer(),
"autorevive to off for all"
)
end
return true
end
if isPlayerId(param2) then
local n = resolvePlayerId(param2)
if getUdgEscapers():get(n) ~= nil then
local ____getUdgEscapers_result_get_result_setHasAutorevive_result_11 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_setHasAutorevive_result_11 ~= nil then
____getUdgEscapers_result_get_result_setHasAutorevive_result_11 = ____getUdgEscapers_result_get_result_setHasAutorevive_result_11:setHasAutorevive(b)
end
if b then
Text.P(
escaper:getPlayer(),
"autorevive to on for player " .. param2
)
else
Text.P(
escaper:getPlayer(),
"autorevive to off for player " .. param2
)
end
else
Text.erP(
escaper:getPlayer(),
("escaper " .. param2) .. " doesn't exist"
)
end
else
Text.erP(
escaper:getPlayer(),
"param2 should be a player color or \"all\""
)
end
return true
end
})
registerCommand({
name = "createHero",
alias = {"crh"},
group = "max",
argDescription = "<Pcolor>|all(a)",
description = "create a hero for the player",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if noParam then
if not escaper:createHeroAtStart() then
Text.erP(
escaper:getPlayer(),
"You already have a hero !"
)
end
return true
end
if not (nbParam == 1) then
Text.erP(
escaper:getPlayer(),
"no more than one param allowed for this command"
)
return true
end
if param1 == "all" or param1 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) == nil then
getUdgEscapers():newAt(i)
if udg_doubleHeroesEnabled then
getUdgEscapers():newAt(i + NB_PLAYERS_MAX)
end
end
local ____getUdgEscapers_result_get_result_createHeroAtStart_result_13 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_createHeroAtStart_result_13 ~= nil then
____getUdgEscapers_result_get_result_createHeroAtStart_result_13 = ____getUdgEscapers_result_get_result_createHeroAtStart_result_13:createHeroAtStart()
end
if udg_doubleHeroesEnabled then
local ____getUdgEscapers_result_get_result_createHeroAtStart_result_15 = getUdgEscapers():get(i + NB_PLAYERS_MAX)
if ____getUdgEscapers_result_get_result_createHeroAtStart_result_15 ~= nil then
____getUdgEscapers_result_get_result_createHeroAtStart_result_15 = ____getUdgEscapers_result_get_result_createHeroAtStart_result_15:createHeroAtStart()
end
end
i = i + 1
end
return true
end
if isPlayerId(param1) then
local n = resolvePlayerId(param1)
if getUdgEscapers():get(n) == nil then
getUdgEscapers():newAt(n)
if udg_doubleHeroesEnabled then
getUdgEscapers():newAt(n + NB_PLAYERS_MAX)
end
end
local ____getUdgEscapers_result_get_result_createHeroAtStart_result_17 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_createHeroAtStart_result_17 ~= nil then
____getUdgEscapers_result_get_result_createHeroAtStart_result_17 = ____getUdgEscapers_result_get_result_createHeroAtStart_result_17:createHeroAtStart()
end
if not ____getUdgEscapers_result_get_result_createHeroAtStart_result_17 then
Text.erP(
escaper:getPlayer(),
"this player already has a hero"
)
end
if udg_doubleHeroesEnabled then
local ____getUdgEscapers_result_get_result_createHeroAtStart_result_19 = getUdgEscapers():get(n + NB_PLAYERS_MAX)
if ____getUdgEscapers_result_get_result_createHeroAtStart_result_19 ~= nil then
____getUdgEscapers_result_get_result_createHeroAtStart_result_19 = ____getUdgEscapers_result_get_result_createHeroAtStart_result_19:createHeroAtStart()
end
end
end
return true
end
})
registerCommand({
name = "deleteHero",
alias = {"delh"},
group = "max",
argDescription = "<Pcolor>|all(a)",
description = "delete a hero for the player",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if noParam then
escaper:removeHero()
return true
end
if not (nbParam == 1) then
Text.erP(
escaper:getPlayer(),
"no more than one param allowed for this command"
)
return true
end
if param1 == "all" or param1 == "a" then
local i = 0
while i < NB_ESCAPERS do
local ____temp_23 = getUdgEscapers():get(i) ~= nil and getUdgEscapers():get(i) ~= escaper
if ____temp_23 then
local ____getUdgEscapers_result_get_result_isEscaperSecondary_result_21 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_isEscaperSecondary_result_21 ~= nil then
____getUdgEscapers_result_get_result_isEscaperSecondary_result_21 = ____getUdgEscapers_result_get_result_isEscaperSecondary_result_21:isEscaperSecondary()
end
____temp_23 = not ____getUdgEscapers_result_get_result_isEscaperSecondary_result_21
end
if ____temp_23 then
if IsEscaperInGame(i) then
local ____getUdgEscapers_result_get_result_removeHero_result_24 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_removeHero_result_24 ~= nil then
____getUdgEscapers_result_get_result_removeHero_result_24 = ____getUdgEscapers_result_get_result_removeHero_result_24:removeHero()
end
else
getUdgEscapers():destroyEscaper(i)
end
end
i = i + 1
end
return true
end
if isPlayerId(param1) then
local n = resolvePlayerId(param1)
if getUdgEscapers():get(n) ~= nil then
if IsEscaperInGame(n) then
local ____getUdgEscapers_result_get_result_removeHero_result_26 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_removeHero_result_26 ~= nil then
____getUdgEscapers_result_get_result_removeHero_result_26 = ____getUdgEscapers_result_get_result_removeHero_result_26:removeHero()
end
else
getUdgEscapers():destroyEscaper(n)
end
else
Text.erP(
escaper:getPlayer(),
("escaper " .. param1) .. " doesn't exist"
)
end
else
Text.erP(
escaper:getPlayer(),
"param1 should be a player color or \"all\""
)
end
return true
end
})
registerCommand({
name = "canCheat",
alias = {"cc"},
group = "max",
argDescription = "<Pcolor>|all(a) [<boolean status>]",
description = "set the canCheat status for the player",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 1 or nbParam == 2) then
Text.erP(
escaper:getPlayer(),
"one or two params for this command"
)
return true
end
local b = false
if nbParam == 2 then
if IsBoolString(param2) then
b = S2B(param2)
else
Text.erP(
escaper:getPlayer(),
"param2 must be a boolean"
)
return true
end
else
b = true
end
if param1 == "all" or param1 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) ~= nil and getUdgEscapers():get(i) ~= escaper then
local ____getUdgEscapers_result_get_result_isMaximaxou_result_28 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_isMaximaxou_result_28 ~= nil then
____getUdgEscapers_result_get_result_isMaximaxou_result_28 = ____getUdgEscapers_result_get_result_isMaximaxou_result_28:isMaximaxou()
end
if not ____getUdgEscapers_result_get_result_isMaximaxou_result_28 then
local ____getUdgEscapers_result_get_result_setCanCheat_result_30 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_setCanCheat_result_30 ~= nil then
____getUdgEscapers_result_get_result_setCanCheat_result_30 = ____getUdgEscapers_result_get_result_setCanCheat_result_30:setCanCheat(b)
end
end
end
i = i + 1
end
if b then
Text.P(
escaper:getPlayer(),
"all players can now cheat and make"
)
else
Text.P(
escaper:getPlayer(),
"all players who haven't Maximaxou rights can't cheat or make anymore"
)
end
return true
end
if isPlayerId(param1) then
local n = resolvePlayerId(param1)
if getUdgEscapers():get(n) ~= nil then
if getUdgEscapers():get(n) ~= escaper then
local ____getUdgEscapers_result_get_result_isMaximaxou_result_32 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_isMaximaxou_result_32 ~= nil then
____getUdgEscapers_result_get_result_isMaximaxou_result_32 = ____getUdgEscapers_result_get_result_isMaximaxou_result_32:isMaximaxou()
end
if not ____getUdgEscapers_result_get_result_isMaximaxou_result_32 then
local ____getUdgEscapers_result_get_result_setCanCheat_result_34 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_setCanCheat_result_34 ~= nil then
____getUdgEscapers_result_get_result_setCanCheat_result_34 = ____getUdgEscapers_result_get_result_setCanCheat_result_34:setCanCheat(b)
end
if b then
Text.P(
escaper:getPlayer(),
("player " .. param1) .. " can now cheat and make"
)
else
Text.P(
escaper:getPlayer(),
("player " .. param1) .. " no longer can cheat and make"
)
end
else
Text.erP(
escaper:getPlayer(),
("you can't change rights of player " .. param1) .. ", he has Maximaxou rights like you"
)
end
else
Text.erP(
escaper:getPlayer(),
"you can't change your own rights"
)
end
else
Text.erP(
escaper:getPlayer(),
("escaper " .. param1) .. " doesn't exist"
)
end
else
Text.erP(
escaper:getPlayer(),
"param1 must be a player color or \"all\""
)
end
return true
end
})
registerCommand({
name = "setAfkTime",
alias = {"setafkt"},
group = "max",
argDescription = "<time>",
description = "set the afk time for a player",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 or S2I(param1) <= 0 then
Text.erP(
escaper:getPlayer(),
"there must be one param which is an integer higher than 0"
)
return true
end
AfkMode.timeMinAfk = S2R(param1)
Text.P(
escaper:getPlayer(),
"afk time to " .. param1
)
return true
end
})
registerCommand({
name = "setAutoreviveDelay",
alias = {"setard"},
group = "max",
argDescription = "<time>",
description = "set the autorevive delay, maximum 15 seconds",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1 and (S2R(param1) > 0 or param1 == "0") and S2R(param1) <= 15) then
Text.erP(
escaper:getPlayer(),
"there must be one param positive real (maximum 15)"
)
return true
end
local x = S2R(param1)
globals.autoreviveDelay = x
if x > 1 then
Text.P(
escaper:getPlayer(),
("autorevive delay to " .. R2S(x)) .. " seconds"
)
else
Text.P(
escaper:getPlayer(),
("autorevive delay to " .. R2S(x)) .. " second"
)
end
return true
end
})
registerCommand({
name = "saveMapInCache",
alias = {"smic"},
group = "max",
argDescription = "",
description = "save the map in cache",
cb = function(____, ____bindingPattern0, escaper)
local param1
local noParam
noParam = ____bindingPattern0.noParam
param1 = ____bindingPattern0.param1
if noParam then
SaveMapInCache:smic(escaper:getPlayer())
elseif param1 then
SaveMapInCache:smic(
escaper:getPlayer(),
("MEC/mec-smic-data-custom_" .. param1) .. ".txt"
)
end
return true
end
})
registerCommand({
name = "loadMapFromCache",
alias = {"lmfc"},
group = "max",
argDescription = "",
description = "load the map from cache",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
if not param1 and SaveMapInCache.lastSaveFile == "" then
Text.mkP(
escaper:getPlayer(),
"Failed to load, use -smic first"
)
return true
end
Text.A("Loading")
SaveLoad.readFile(
param1 and ("MEC/mec-smic-data-custom_" .. param1) .. ".txt" or SaveMapInCache.lastSaveFile,
GetTriggerPlayer(),
function(data)
Text.A("Loaded")
local gameData = jsonDecode(data).gameData
MEC_core_API.setGameData(jsonEncode(gameData))
Text.A("Done")
end
)
return true
end
})
registerCommand({
name = "removeTerrain",
alias = {"remt"},
group = "max",
argDescription = "<terrainLabel>",
description = "remove a terrain from the map",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
if getUdgTerrainTypes():remove(param1) then
Text.mkP(
escaper:getPlayer(),
"Terrain removed"
)
else
Text.erP(
escaper:getPlayer(),
"Unknown terrain"
)
end
return true
end
})
registerCommand({
name = "removeMonster",
alias = {"remm"},
group = "max",
argDescription = "<monsterLabel>",
description = "remove a monster from the map",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
if getUdgMonsterTypes():remove(param1) then
Text.mkP(
escaper:getPlayer(),
"monster type removed"
)
else
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
end
return true
end
})
registerCommand({
name = "removeLastLevel",
alias = {"remll"},
group = "max",
argDescription = "",
description = "remove the last level from the map",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
if getUdgLevels():destroyLastLevel() then
Text.mkP(
escaper:getPlayer(),
("level number " .. I2S(getUdgLevels():getLastLevelId() + 1)) .. " destroyed"
)
else
Text.erP(
escaper:getPlayer(),
"impossible to destroy the first level"
)
end
end
return true
end
})
registerCommand({
name = "removeCaster",
alias = {"remc"},
group = "max",
argDescription = "<casterLabel>",
description = "remove a caster from the map",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
if not getUdgCasterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
("unknown caster type \"" .. param1) .. "\""
)
return true
end
getUdgCasterTypes():remove(param1)
Text.mkP(
escaper:getPlayer(),
"caster type removed"
)
return true
end
})
registerCommand({
name = "setTerrainsOrder",
alias = {"setto"},
group = "max",
argDescription = "<terrainLabels>",
description = "set the order of the terrains",
cb = function(____, ____bindingPattern0, escaper)
local cmd
cmd = ____bindingPattern0.cmd
if getUdgTerrainTypes():setOrder(cmd) then
Text.mkP(
escaper:getPlayer(),
"terrains order set"
)
else
Text.erP(
escaper:getPlayer(),
"couldn't terrains order. Usage : put all the terrain types as parameters, once each"
)
end
return true
end
})
registerCommand({
name = "setTerrainCliffClass",
alias = {"settcc"},
group = "max",
argDescription = "<terrainLabel> <cliffClass>",
description = "set the cliff class of a terrain",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if nbParam ~= 2 then
return true
end
local b = getUdgTerrainTypes():getByLabel(param1) ~= nil
if not b then
return true
end
if param2 ~= "1" and param2 ~= "2" then
Text.erP(
escaper:getPlayer(),
"cliff class must be 1 or 2"
)
end
local ____getUdgTerrainTypes_result_getByLabel_result_setCliffClassId_result_36 = getUdgTerrainTypes():getByLabel(param1)
if ____getUdgTerrainTypes_result_getByLabel_result_setCliffClassId_result_36 ~= nil then
____getUdgTerrainTypes_result_getByLabel_result_setCliffClassId_result_36 = ____getUdgTerrainTypes_result_getByLabel_result_setCliffClassId_result_36:setCliffClassId(S2I(param2))
end
Text.mkP(
escaper:getPlayer(),
"cliff class changed to " .. param2
)
return true
end
})
registerCommand({
name = "setMainTileset",
alias = {},
group = "max",
argDescription = "<tileset>",
description = "set the main tileset",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam > 1 then
return true
end
if getUdgTerrainTypes():setMainTileset(param1) then
Text.mkP(
escaper:getPlayer(),
"main tilechanged"
)
else
Text.P(
escaper:getPlayer(),
((((((((((((((((((((((((((((((((((((("available tilesets : " .. Text.MAKE_TEXT_COLORCODE) .. "auto|r ; ") .. Text.MAKE_TEXT_COLORCODE) .. "A|r = Ashenvale ; ") .. Text.MAKE_TEXT_COLORCODE) .. "B|r = Barrens ; ") .. Text.MAKE_TEXT_COLORCODE) .. "C|r = Felwood ; ") .. Text.MAKE_TEXT_COLORCODE) .. "D|r = Dungeon ; ") .. Text.MAKE_TEXT_COLORCODE) .. "F|r = Lordaeron Fall ; ") .. Text.MAKE_TEXT_COLORCODE) .. "G|r = Underground ; ") .. Text.MAKE_TEXT_COLORCODE) .. "L|r = Lordaeron Summer ; ") .. Text.MAKE_TEXT_COLORCODE) .. "N|r = Northrend ; ") .. Text.MAKE_TEXT_COLORCODE) .. "Q|r = Village Fall ; ") .. Text.MAKE_TEXT_COLORCODE) .. "V|r = Village ; ") .. Text.MAKE_TEXT_COLORCODE) .. "W|r = Lordaeron Winter ; ") .. Text.MAKE_TEXT_COLORCODE) .. "X|r = Dalaran ; ") .. Text.MAKE_TEXT_COLORCODE) .. "Y|r = Cityscape ; ") .. Text.MAKE_TEXT_COLORCODE) .. "Z|r = Sunken Ruins ; ") .. Text.MAKE_TEXT_COLORCODE) .. "I|r = Icecrown ; ") .. Text.MAKE_TEXT_COLORCODE) .. "J|r = Dalaran Ruins ; ") .. Text.MAKE_TEXT_COLORCODE) .. "O|r = Outland ; ") .. Text.MAKE_TEXT_COLORCODE) .. "K|r = Black Citadel"
)
end
return true
end
})
registerCommand({
name = "logs",
alias = {},
group = "max",
argDescription = "",
description = "",
cb = function(____, ____bindingPattern0)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
flushLogs()
end
return true
end
})
registerCommand({
name = "clickWhereYouAre",
alias = {"cwya"},
group = "max",
argDescription = "",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 1 or nbParam == 2) then
Text.erP(
escaper:getPlayer(),
"one or two params for this command"
)
return true
end
local b = false
if nbParam == 2 then
if IsBoolString(param2) then
b = S2B(param2)
else
Text.erP(
escaper:getPlayer(),
"param2 must be a boolean"
)
return true
end
else
b = true
end
if param1 == "all" or param1 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
local ____getUdgEscapers_result_get_result_enableClickWhereYouAre_result_38 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_enableClickWhereYouAre_result_38 ~= nil then
____getUdgEscapers_result_get_result_enableClickWhereYouAre_result_38 = ____getUdgEscapers_result_get_result_enableClickWhereYouAre_result_38:enableClickWhereYouAre(b)
end
i = i + 1
end
if b then
Text.P(
escaper:getPlayer(),
"all players now turn"
)
else
Text.P(
escaper:getPlayer(),
"all players stop turn"
)
end
return true
end
if isPlayerId(param1) then
local n = resolvePlayerId(param1)
if getUdgEscapers():get(n) ~= nil then
local ____getUdgEscapers_result_get_result_enableClickWhereYouAre_result_40 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_enableClickWhereYouAre_result_40 ~= nil then
____getUdgEscapers_result_get_result_enableClickWhereYouAre_result_40 = ____getUdgEscapers_result_get_result_enableClickWhereYouAre_result_40:enableClickWhereYouAre(b)
end
if b then
Text.P(
escaper:getPlayer(),
("player " .. param1) .. " now turn"
)
else
Text.P(
escaper:getPlayer(),
("player " .. param1) .. " no longer turn"
)
end
else
Text.erP(
escaper:getPlayer(),
("escaper " .. param1) .. " doesn't exist"
)
end
else
Text.erP(
escaper:getPlayer(),
"param1 must be a player color or \"all\""
)
end
return true
end
})
registerCommand({
name = "reinitProgressionMap",
alias = {},
group = "max",
argDescription = "",
description = "",
cb = function(____, _, escaper)
Text.P(
escaper:getPlayer(),
"Reinitializing progression map"
)
progressionUtils.init()
Text.P(
escaper:getPlayer(),
"Done"
)
return true
end
})
end
return ____exports
end,
["src.core.04_STRUCTURES.Escaper.EscaperEffect_functions"] = function(...)
local ____exports = {}
local function initEscaperEffectFunctions()
local function String2BodyPartStr(s)
if s == "leftHand" or s == "lh" then
return "hand left"
end
if s == "rightHand" or s == "rh" then
return "hand right"
end
if s == "leftFoot" or s == "lf" then
return "foot left"
end
if s == "rightFoot" or s == "rf" then
return "foot right"
end
if s == "overhead" or s == "oh" then
return "overhead"
end
if s == "head" or s == "h" then
return "head"
end
if s == "origin" or s == "o" then
return "origin"
end
if s == "chest" or s == "c" then
return "chest"
end
return nil
end
local function IsBodyPartStr(s)
return String2BodyPartStr(s) ~= nil
end
local function String2EffectStr(s)
if s == "light" or s == "l" then
return "Abilities\\Weapons\\FarseerMissile\\FarseerMissile.mdl"
end
if s == "fire" or s == "f" then
return "Abilities\\Spells\\Items\\AIfb\\AIfbTarget.mdl"
end
if s == "ice" or s == "i" then
return "Abilities\\Spells\\Items\\AIob\\AIobTarget.mdl"
end
if s == "corruption" or s == "c" then
return "Abilities\\Spells\\Items\\OrbCorruption\\OrbCorruption.mdl"
end
if s == "poison" or s == "p" then
return "Abilities\\Spells\\Items\\OrbVenom\\OrbVenom.mdl"
end
if s == "slow" or s == "s" then
return "Abilities\\Spells\\Items\\OrbSlow\\OrbSlow.mdl"
end
return nil
end
local function IsEffectStr(s)
return String2EffectStr(s) ~= nil
end
return {String2BodyPartStr = String2BodyPartStr, IsBodyPartStr = IsBodyPartStr, String2EffectStr = String2EffectStr, IsEffectStr = IsEffectStr}
end
____exports.EscaperEffectFunctions = initEscaperEffectFunctions()
return ____exports
end,
["src.core.04_STRUCTURES.Escaper.EscaperSavedCommands"] = function(...)
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local savedCommands = {}
____exports.newCmd = function(escaper, commandName, command)
local ____temp_1 = not savedCommands[escaper:getEscaperId()]
if ____temp_1 then
local ____temp_0 = {}
savedCommands[escaper:getEscaperId()] = ____temp_0
____temp_1 = ____temp_0
end
savedCommands[escaper:getEscaperId()][commandName] = command
end
____exports.execute = function(escaper, commandName, directCommand)
if directCommand == nil then
directCommand = false
end
local cmd
if directCommand then
cmd = commandName
else
local ____savedCommands_escaper_getEscaperId_result_commandName_2 = savedCommands[escaper:getEscaperId()]
if ____savedCommands_escaper_getEscaperId_result_commandName_2 ~= nil then
____savedCommands_escaper_getEscaperId_result_commandName_2 = ____savedCommands_escaper_getEscaperId_result_commandName_2[commandName]
end
cmd = ____savedCommands_escaper_getEscaperId_result_commandName_2
end
if not cmd then
return false
else
ServiceManager.getService("Cmd").ExecuteCommand(escaper, cmd)
end
return true
end
return ____exports
end,
["src.core.04_STRUCTURES.Escaper.Escaper_disco"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local function initDisco()
local function ApplyRandomColor(n)
local esc = getUdgEscapers():get(n)
if not esc then
return
end
esc:setBaseColorDisco(GetRandomInt(0, NB_PLAYERS_MAX))
esc:setVcRed(GetRandomPercentageBJ())
esc:setVcGreen(GetRandomPercentageBJ())
esc:setVcBlue(GetRandomPercentageBJ())
esc:setVcTransparency(GetRandomReal(0, 25))
local ____ = esc:getHero() and esc:updateUnitVertexColor()
end
local function Disco_Actions(n)
ApplyRandomColor(n)
end
return {Disco_Actions = Disco_Actions}
end
____exports.Disco = initDisco()
return ____exports
end,
["src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_from_string"] = function(...)
local ____exports = {}
local ____Terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_functions")
local GetRandomNotUsedTerrain = ____Terrain_functions.GetRandomNotUsedTerrain
local GetRandomTerrain = ____Terrain_functions.GetRandomTerrain
local GetRandomUsedTerrain = ____Terrain_functions.GetRandomUsedTerrain
local ____Terrain_type_grass = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_grass")
local TerrainTypeGrass = ____Terrain_type_grass.TerrainTypeGrass
local ____Terrain_type_max = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_max")
local TerrainTypeMax = ____Terrain_type_max.TerrainTypeMax
local ____Functions_on_numbers = require("src.core.01_libraries.Functions_on_numbers")
local IsPositiveInteger = ____Functions_on_numbers.IsPositiveInteger
local function initTerrainTypeFromString()
local function TerrainTypeString2TerrainTypeId(str)
if IsPositiveInteger(str) then
return TerrainTypeMax.TerrainTypeMaxId2TerrainTypeId(S2I(str))
end
if SubStringBJ(str, 1, 1) == "g" and IsPositiveInteger(SubStringBJ(
str,
2,
StringLength(str)
)) then
return TerrainTypeGrass.TerrainTypeGrassId2TerrainTypeId(S2I(SubStringBJ(
str,
2,
StringLength(str)
)))
end
if StringLength(str) == 6 and SubStringBJ(str, 1, 1) == "'" and SubStringBJ(str, 6, 6) == "'" then
return TerrainTypeMax.TerrainTypeAsciiString2TerrainTypeId(str)
end
if str == "x" then
return GetRandomTerrain()
end
if str == "xnk" then
return GetRandomNotUsedTerrain()
end
if str == "xak" then
return GetRandomUsedTerrain()
end
return 0
end
return {TerrainTypeString2TerrainTypeId = TerrainTypeString2TerrainTypeId}
end
____exports.TerrainTypeFromString = initTerrainTypeFromString()
return ____exports
end,
["src.core.06_COMMANDS.COMMANDS_vJass.Command_all"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local __TS__StringSubstring = ____lualib.__TS__StringSubstring
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____EffectUtils = require("src.Utils.EffectUtils")
local EffectUtils = ____EffectUtils.EffectUtils
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local ClearTextForPlayer = ____Basic_functions.ClearTextForPlayer
local IsBoolString = ____Basic_functions.IsBoolString
local S2B = ____Basic_functions.S2B
local ____Constants = require("src.core.01_libraries.Constants")
local BLUE = ____Constants.BLUE
local DEFAULT_CAMERA_FIELD = ____Constants.DEFAULT_CAMERA_FIELD
local GREEN = ____Constants.GREEN
local GREY = ____Constants.GREY
local LIMIT_NB_HERO_EFFECTS = ____Constants.LIMIT_NB_HERO_EFFECTS
local NB_MAX_TERRAIN_DATA_DISPLAY = ____Constants.NB_MAX_TERRAIN_DATA_DISPLAY
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local RED = ____Constants.RED
local TEAL = ____Constants.TEAL
local TERRAIN_DATA_DISPLAY_TIME = ____Constants.TERRAIN_DATA_DISPLAY_TIME
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local ColorString2Id = ____Init_colorCodes.ColorString2Id
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local udg_colorStrings = ____Init_colorCodes.udg_colorStrings
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local ColorInfo = ____Escaper_functions.ColorInfo
local GetMirrorEscaper = ____Escaper_functions.GetMirrorEscaper
local ____TerrainTypeWalk = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeWalk")
local TerrainTypeWalk = ____TerrainTypeWalk.TerrainTypeWalk
local ____Terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_functions")
local DisplayTerrainDataToPlayer = ____Terrain_functions.DisplayTerrainDataToPlayer
local GetTerrainData = ____Terrain_functions.GetTerrainData
local ____Apm = require("src.core.08_GAME.Apm_clics_par_minute.Apm")
local Apm = ____Apm.Apm
local ____Cpm = require("src.core.08_GAME.Apm_clics_par_minute.Cpm")
local Cpm = ____Cpm.Cpm
local ____globals_variables_and_triggers = require("src.core.09_From_old_Worldedit_triggers.globals_variables_and_triggers")
local Globals = ____globals_variables_and_triggers.Globals
local ____Follow_mouse = require("src.core.Follow_mouse.Follow_mouse")
local PRESS_TIME_TO_ENABLE_FOLLOW_MOUSE = ____Follow_mouse.PRESS_TIME_TO_ENABLE_FOLLOW_MOUSE
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgLevels = ____globals.getUdgLevels
local ____Functions_on_numbers = require("src.core.01_libraries.Functions_on_numbers")
local IsInteger = ____Functions_on_numbers.IsInteger
local PercentageStringOrX2Integer = ____Functions_on_numbers.PercentageStringOrX2Integer
local ____EscaperEffect_functions = require("src.core.04_STRUCTURES.Escaper.EscaperEffect_functions")
local EscaperEffectFunctions = ____EscaperEffect_functions.EscaperEffectFunctions
local ____EscaperSavedCommands = require("src.core.04_STRUCTURES.Escaper.EscaperSavedCommands")
local execute = ____EscaperSavedCommands.execute
local newCmd = ____EscaperSavedCommands.newCmd
local ____Escaper_disco = require("src.core.04_STRUCTURES.Escaper.Escaper_disco")
local Disco = ____Escaper_disco.Disco
local ____Terrain_type_from_string = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_from_string")
local TerrainTypeFromString = ____Terrain_type_from_string.TerrainTypeFromString
local ____Terrain_type_names_and_data = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_names_and_data")
local TerrainTypeNamesAndData = ____Terrain_type_names_and_data.TerrainTypeNamesAndData
local ____Auto_continue_after_sliding = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.Auto_continue_after_sliding")
local AutoContinueAfterSliding = ____Auto_continue_after_sliding.AutoContinueAfterSliding
local ____To_turn_on_slide = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.To_turn_on_slide")
local TurnOnSlide = ____To_turn_on_slide.TurnOnSlide
local ____KeyboardShortcut = require("src.core.Keyboard_shortcuts.KeyboardShortcut")
local GetStringAssignedFromCommand = ____KeyboardShortcut.GetStringAssignedFromCommand
local KeyboardShortcut = ____KeyboardShortcut.KeyboardShortcut
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local CmdParam = ____Command_functions.CmdParam
local isPlayerId = ____Command_functions.isPlayerId
local resolvePlayerId = ____Command_functions.resolvePlayerId
local resolvePlayerIds = ____Command_functions.resolvePlayerIds
local cameraFieldMap = {
TARGET_DISTANCE = CAMERA_FIELD_TARGET_DISTANCE,
FARZ = CAMERA_FIELD_FARZ,
ANGLE_OF_ATTACK = CAMERA_FIELD_ANGLE_OF_ATTACK,
FIELD_OF_VIEW = CAMERA_FIELD_FIELD_OF_VIEW,
ROLL = CAMERA_FIELD_ROLL,
ROTATION = CAMERA_FIELD_ROTATION,
ZOFFSET = CAMERA_FIELD_ZOFFSET,
NEARZ = CAMERA_FIELD_NEARZ,
LOCAL_PITCH = CAMERA_FIELD_LOCAL_PITCH,
LOCAL_YAW = CAMERA_FIELD_LOCAL_YAW,
LOCAL_ROLL = CAMERA_FIELD_LOCAL_ROLL
}
____exports.initCommandAll = function()
local ____ServiceManager_getService_result_0 = ServiceManager.getService("Cmd")
local registerCommand = ____ServiceManager_getService_result_0.registerCommand
for ____, ____value in ipairs(udg_colorStrings) do
local name = ____value.name
local alias = ____value.alias
registerCommand({
name = name,
alias = alias,
group = "all",
argDescription = "",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if noParam then
escaper:setBaseColor(ColorString2Id(name))
return true
end
if nbParam == 1 and escaper:isTrueMaximaxou() and isPlayerId(param1) then
local ____getUdgEscapers_result_get_result_setBaseColor_result_1 = getUdgEscapers():get(resolvePlayerId(param1))
if ____getUdgEscapers_result_get_result_setBaseColor_result_1 ~= nil then
____getUdgEscapers_result_get_result_setBaseColor_result_1 = ____getUdgEscapers_result_get_result_setBaseColor_result_1:setBaseColor(ColorString2Id(name))
end
end
return true
end
})
end
registerCommand({
name = "vertexColor",
alias = {"vc", "wild"},
group = "all",
argDescription = "[ <red> <green> <blue> [<transparency>] ]",
description = "without parameter takes a random vertex color without changing transparency",
cb = function(____, ____bindingPattern0, escaper)
local param4
local param3
local param2
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
param3 = ____bindingPattern0.param3
param4 = ____bindingPattern0.param4
if noParam or nbParam == 1 then
if nbParam == 1 then
if not (isPlayerId(param1) and escaper:isTrueMaximaxou()) then
return true
end
local targetEscaper = getUdgEscapers():get(resolvePlayerId(param1))
if not targetEscaper then
return true
end
escaper = targetEscaper
end
escaper:setVcRed(GetRandomPercentageBJ())
escaper:setVcGreen(GetRandomPercentageBJ())
escaper:setVcBlue(GetRandomPercentageBJ())
else
if not (nbParam == 3 or nbParam == 4) then
return true
end
if not escaper:setVcRed(I2R(PercentageStringOrX2Integer(param1))) then
Text.P(
escaper:getPlayer(),
((udg_colorCode[RED + 1] .. "Red : not a correct percentage (") .. param1) .. ")"
)
end
if not escaper:setVcGreen(I2R(PercentageStringOrX2Integer(param2))) then
Text.P(
escaper:getPlayer(),
((udg_colorCode[GREEN + 1] .. "Green : not a correct percentage (") .. param2) .. ")"
)
end
if not escaper:setVcBlue(I2R(PercentageStringOrX2Integer(param3))) then
Text.P(
escaper:getPlayer(),
((udg_colorCode[BLUE + 1] .. "Blue : not a correct percentage (") .. param3) .. ")"
)
end
if nbParam == 4 then
if not escaper:setVcTransparency(I2R(PercentageStringOrX2Integer(param4))) then
Text.P(
escaper:getPlayer(),
((udg_colorCode[GREY + 1] .. "Transparency : not a correct percentage (") .. param4) .. ")"
)
end
end
end
escaper:refreshVertexColor()
return true
end
})
registerCommand({
name = "vertexColorRed",
alias = {"vcr"},
group = "all",
argDescription = "[<red>]",
description = "changes the red part of the vertex color only",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if noParam then
escaper:setVcRed(GetRandomPercentageBJ())
escaper:refreshVertexColor()
return true
end
if not (nbParam == 1) then
return true
end
if not escaper:setVcRed(I2R(PercentageStringOrX2Integer(param1))) then
Text.P(
escaper:getPlayer(),
((udg_colorCode[RED + 1] .. "Red : not a correct percentage (") .. param1) .. ")"
)
return true
end
escaper:refreshVertexColor()
return true
end
})
registerCommand({
name = "vertexColorGreen",
alias = {"vcg"},
group = "all",
argDescription = "[<Green>]",
description = "changes the green part of the vertex color only",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if noParam then
escaper:setVcGreen(GetRandomPercentageBJ())
escaper:refreshVertexColor()
return true
end
if not (nbParam == 1) then
return true
end
if not escaper:setVcGreen(I2R(PercentageStringOrX2Integer(param1))) then
Text.P(
escaper:getPlayer(),
((udg_colorCode[GREEN + 1] .. "Green : not a correct percentage (") .. param1) .. ")"
)
return true
end
escaper:refreshVertexColor()
return true
end
})
registerCommand({
name = "vertexColorBlue",
alias = {"vcb"},
group = "all",
argDescription = "[<Blue>]",
description = "changes the blue part of the vertex color only",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if noParam then
escaper:setVcBlue(GetRandomPercentageBJ())
escaper:refreshVertexColor()
return true
end
if not (nbParam == 1) then
return true
end
if not escaper:setVcBlue(I2R(PercentageStringOrX2Integer(param1))) then
Text.P(
escaper:getPlayer(),
((udg_colorCode[BLUE + 1] .. "Blue : not a correct percentage (") .. param1) .. ")"
)
return true
end
escaper:refreshVertexColor()
return true
end
})
registerCommand({
name = "vertexColorTransparency",
alias = {"vct"},
group = "all",
argDescription = "[<transparency>]",
description = "changes the transparency of the hero",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if noParam then
escaper:setVcTransparency(GetRandomPercentageBJ())
escaper:refreshVertexColor()
return true
end
if not (nbParam == 1) then
return true
end
if not escaper:setVcTransparency(I2R(PercentageStringOrX2Integer(param1))) then
Text.P(
escaper:getPlayer(),
((udg_colorCode[GREY + 1] .. "Transparency : not a correct percentage (") .. param1) .. ")"
)
return true
end
escaper:refreshVertexColor()
return true
end
})
registerCommand({
name = "noVertex",
alias = {"nv"},
group = "all",
argDescription = "",
description = "put normal vertex color : RGB(100, 100, 100) with 0 transparency",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (noParam or nbParam == 1) then
return true
end
if nbParam == 1 then
if not (escaper:isTrueMaximaxou() and isPlayerId(param1)) then
return true
end
local targetEscaper = getUdgEscapers():get(resolvePlayerId(param1))
if not targetEscaper then
return true
end
escaper = targetEscaper
end
escaper:setVcRed(100)
escaper:setVcGreen(100)
escaper:setVcBlue(100)
escaper:setVcTransparency(0)
escaper:refreshVertexColor()
return true
end
})
registerCommand({
name = "colorInfo",
alias = {"ci"},
group = "all",
argDescription = "[<Pcolor>]",
description = "displays base color and vertex color of a hero",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if noParam then
ColorInfo(
escaper,
escaper:getPlayer()
)
return true
end
if nbParam == 1 and isPlayerId(param1) then
local targetEscaper = getUdgEscapers():get(resolvePlayerId(param1))
local ____ = targetEscaper and ColorInfo(
targetEscaper,
escaper:getPlayer()
)
return true
end
return true
end
})
registerCommand({
name = "effect",
alias = {"ef"},
group = "all",
argDescription = "<effect>",
description = "adds an effect on each hand of the hero",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not EscaperEffectFunctions.IsEffectStr(param1) then
return true
end
if nbParam == 2 and escaper:isTrueMaximaxou() and isPlayerId(param2) then
local targetEscaper = getUdgEscapers():get(resolvePlayerId(param2))
if not targetEscaper then
return true
end
escaper = targetEscaper
else
if nbParam ~= 1 then
return true
end
end
local str = EscaperEffectFunctions.String2EffectStr(param1)
if str then
escaper:newEffect(str, "hand right")
escaper:newEffect(str, "hand left")
end
return true
end
})
registerCommand({
name = "customEffect",
alias = {"ce"},
group = "all",
argDescription = "<effect> <body_part>",
description = "adds an effect on a body part of the hero",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if nbParam ~= 2 then
return true
end
if not (EscaperEffectFunctions.IsEffectStr(param1) and EscaperEffectFunctions.IsBodyPartStr(param2)) then
return true
end
local str = EscaperEffectFunctions.String2EffectStr(param1)
if str then
local str3 = EscaperEffectFunctions.String2BodyPartStr(param2)
if str3 then
escaper:newEffect(str, str3)
end
end
return true
end
})
registerCommand({
name = "effectsEverywhere",
alias = {"efe"},
group = "all",
argDescription = "<effect>",
description = "adds the same effect to each body part of the hero",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not EscaperEffectFunctions.IsEffectStr(param1) then
return true
end
if nbParam == 2 and escaper:isTrueMaximaxou() and isPlayerId(param2) then
local targetEscaper = getUdgEscapers():get(resolvePlayerId(param2))
if not targetEscaper then
return true
end
escaper = targetEscaper
else
if nbParam ~= 1 then
return true
end
end
local str = EscaperEffectFunctions.String2EffectStr(param1)
if str then
escaper:newEffect(str, "hand right")
escaper:newEffect(str, "hand left")
escaper:newEffect(str, "foot left")
escaper:newEffect(str, "foot right")
escaper:newEffect(str, "head")
escaper:newEffect(str, "chest")
end
return true
end
})
registerCommand({
name = "deleteEffects",
alias = {"de"},
group = "all",
argDescription = "[<numberOfEffectsToRemove>]",
description = "delete a specified effect of the hero or all effects if not specified",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (noParam or nbParam == 1) then
return true
end
local n = 0
if nbParam == 1 then
if S2I(param1) ~= 0 then
n = S2I(param1)
if n < 1 or n > LIMIT_NB_HERO_EFFECTS then
return true
end
elseif isPlayerId(param1) then
if not escaper:isTrueMaximaxou() then
return true
end
local targetEscaper = getUdgEscapers():get(resolvePlayerId(param1))
if not targetEscaper then
return true
end
escaper = targetEscaper
n = LIMIT_NB_HERO_EFFECTS
else
n = 0
end
else
n = LIMIT_NB_HERO_EFFECTS
end
escaper:destroyLastEffects(n)
return true
end
})
registerCommand({
name = "cameraField",
alias = {"cf"},
group = "all",
argDescription = "x",
description = "changes the camera field (height), default is 2500",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not ((nbParam == 1 or nbParam == 2) and IsInteger(param1)) then
return true
end
if nbParam == 2 then
if cameraFieldMap[string.upper(param2)] ~= nil then
SetCameraFieldForPlayer(
escaper:getPlayer(),
cameraFieldMap[string.upper(param2)],
S2I(param1),
0
)
Text.P(
escaper:getPlayer(),
(("Set: " .. string.upper(param2)) .. " to ") .. tostring(S2I(param1))
)
end
return true
end
if nbParam == 1 then
escaper:setCameraField(S2I(param1))
end
return true
end
})
registerCommand({
name = "debugCameraField",
alias = {"dcf"},
group = "all",
argDescription = "",
description = "",
cb = function(____, _, escaper)
Text.P(
escaper:getPlayer(),
((((((((((((((((((((("\n TARGET_DISTANCE: " .. tostring(GetCameraField(CAMERA_FIELD_TARGET_DISTANCE))) .. "\n FARZ: ") .. tostring(GetCameraField(CAMERA_FIELD_FARZ))) .. "\n ANGLE_OF_ATTACK: ") .. tostring(Rad2Deg(GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK)))) .. "\n FIELD_OF_VIEW: ") .. tostring(Rad2Deg(GetCameraField(CAMERA_FIELD_FIELD_OF_VIEW)))) .. "\n ROLL: ") .. tostring(Rad2Deg(GetCameraField(CAMERA_FIELD_ROLL)))) .. "\n ROTATION: ") .. tostring(Rad2Deg(GetCameraField(CAMERA_FIELD_ROTATION)))) .. "\n ZOFFSET: ") .. tostring(GetCameraField(CAMERA_FIELD_ZOFFSET))) .. "\n NEARZ: ") .. tostring(GetCameraField(CAMERA_FIELD_NEARZ))) .. "\n LOCAL_PITCH: ") .. tostring(Rad2Deg(GetCameraField(CAMERA_FIELD_LOCAL_PITCH)))) .. "\n LOCAL_YAW: ") .. tostring(Rad2Deg(GetCameraField(CAMERA_FIELD_LOCAL_YAW)))) .. "\n LOCAL_ROLL: ") .. tostring(Rad2Deg(GetCameraField(CAMERA_FIELD_LOCAL_ROLL)))) .. "\n "
)
return true
end
})
registerCommand({
name = "resetCamera",
alias = {"rc"},
group = "all",
argDescription = "",
description = "put the camera back like chosen field",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
escaper:resetCamera()
return true
end
})
registerCommand({
name = "resetCameraInit",
alias = {"rci"},
group = "all",
argDescription = "",
description = "changes the camera field back to its default value (2500)",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
escaper:setCameraField(DEFAULT_CAMERA_FIELD)
return true
end
})
registerCommand({
name = "animation",
alias = {"an"},
group = "all",
argDescription = "<string>",
description = "makes your hero doing an animation",
cb = function(____, ____bindingPattern0, escaper)
local noParam
local cmd
cmd = ____bindingPattern0.cmd
noParam = ____bindingPattern0.noParam
if noParam or not escaper:isAlive() then
return true
end
local hero = escaper:getHero()
if hero then
SetUnitAnimation(
hero,
CmdParam(cmd, 0)
)
if not escaper:isEscaperSecondary() then
local ____GetMirrorEscaper_result_getHero_result_3 = GetMirrorEscaper(escaper)
if ____GetMirrorEscaper_result_getHero_result_3 ~= nil then
____GetMirrorEscaper_result_getHero_result_3 = ____GetMirrorEscaper_result_getHero_result_3:getHero()
end
local hero2 = ____GetMirrorEscaper_result_getHero_result_3
if hero2 then
SetUnitAnimation(
hero2,
CmdParam(cmd, 0)
)
end
end
end
return true
end
})
registerCommand({
name = "mapNbMonsters",
alias = {"mnbm"},
group = "all",
argDescription = "[moving(m)|all(a)|notMoving(nm)]",
description = "\"moving\" is the default value",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (noParam or nbParam == 1) then
return true
end
local n = 0
if noParam or param1 == "all" or param1 == "a" then
n = getUdgLevels():getNbMonsters("all")
Text.P(
escaper:getPlayer(),
("There are " .. I2S(n)) .. " monsters in the map."
)
return true
end
if param1 == "moving" or param1 == "m" then
n = getUdgLevels():getNbMonsters("moving")
Text.P(
escaper:getPlayer(),
("There are " .. I2S(n)) .. " moving monsters in the map."
)
return true
end
if param1 == "notMoving" or param1 == "nm" then
n = getUdgLevels():getNbMonsters("not moving")
Text.P(
escaper:getPlayer(),
("There are " .. I2S(n)) .. " non moving monsters in the map."
)
return true
end
return true
end
})
registerCommand({
name = "levelNbMonsters",
alias = {"lnbm"},
group = "all",
argDescription = "[moving(m)|all(a)|notMoving(nm)]",
description = "\"moving\" is the default value",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (noParam or nbParam == 1) then
return true
end
local n = 0
if noParam or param1 == "all" or param1 == "a" then
n = getUdgLevels():getCurrentLevel(escaper):getNbMonsters("all")
Text.P(
escaper:getPlayer(),
("There are " .. I2S(n)) .. " monsters in this level."
)
local p = 0
for _, ms in pairs(getUdgLevels():getCurrentLevel(escaper).monsterSpawns:getAll()) do
if ms.monsters then
p = p + BlzGroupGetSize(ms.monsters)
end
end
if p > 0 then
Text.P(
escaper:getPlayer(),
("There are " .. I2S(p)) .. " spawned monsters in this level."
)
end
return true
end
if param1 == "moving" or param1 == "m" then
n = getUdgLevels():getCurrentLevel(escaper):getNbMonsters("moving")
Text.P(
escaper:getPlayer(),
("There are " .. I2S(n)) .. " moving monsters in this level."
)
return true
end
if param1 == "notMoving" or param1 == "nm" then
n = getUdgLevels():getCurrentLevel(escaper):getNbMonsters("not moving")
Text.P(
escaper:getPlayer(),
("There are " .. I2S(n)) .. " non moving monsters in this level."
)
return true
end
return true
end
})
registerCommand({
name = "kill",
alias = {"kl"},
group = "all",
argDescription = "",
description = "kills your hero",
enabled = function(____, ____bindingPattern0)
local noParam
noParam = ____bindingPattern0.noParam
return noParam
end,
cb = function(____, ____bindingPattern0, escaper)
if not escaper:kill() then
Text.erP(
escaper:getPlayer(),
"You are already dead."
)
end
return true
end
})
registerCommand({
name = "kick",
alias = {"kc"},
group = "all",
argDescription = "",
description = "kicks yourself",
enabled = function(____, ____bindingPattern0)
local noParam
noParam = ____bindingPattern0.noParam
return noParam
end,
cb = function(____, ____bindingPattern0, escaper)
CustomDefeatBJ(
escaper:getPlayer(),
"You have kicked... yourself."
)
Text.A((udg_colorCode[escaper:getColorId() + 1] .. escaper:getDisplayName()) .. " has kicked himself !")
escaper:destroy()
local ____GetMirrorEscaper_result_destroy_result_5 = GetMirrorEscaper(escaper)
if ____GetMirrorEscaper_result_destroy_result_5 ~= nil then
____GetMirrorEscaper_result_destroy_result_5 = ____GetMirrorEscaper_result_destroy_result_5:destroy()
end
return true
end
})
registerCommand({
name = "getTerrainInfo",
alias = {"gti"},
group = "all",
argDescription = "[ <terrain> | <lowInteger> <upInteger> ]",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if noParam then
escaper:makeGetTerrainType()
Text.mkP(
escaper:getPlayer(),
"Get terrain info mode enabled"
)
return true
end
local i = 0
local n = 0
if nbParam == 1 then
n = TerrainTypeFromString.TerrainTypeString2TerrainTypeId(param1)
if n ~= 0 then
DisplayTerrainDataToPlayer(
escaper:getPlayer(),
n
)
end
return true
end
if nbParam == 2 then
if IsInteger(param1) and IsInteger(param2) then
i = S2I(param1)
n = S2I(param2)
if i >= 1 and i < n and n <= TerrainTypeNamesAndData.NB_TERRAINS_TOTAL and n - i < NB_MAX_TERRAIN_DATA_DISPLAY then
Text.DisplayLineToPlayer(escaper:getPlayer())
while true do
if i > n then
break
end
DisplayTerrainDataToPlayer(
escaper:getPlayer(),
i
)
i = i + 1
end
end
end
return true
end
return true
end
})
registerCommand({
name = "stop",
alias = {"s"},
group = "all",
argDescription = "",
description = "stop creating monsters or terrain or stop getTerrainInfoMode",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
if escaper:destroyMake() then
Text.mkP(
escaper:getPlayer(),
"stop"
)
else
Text.erP(
escaper:getPlayer(),
"nothing to stop"
)
end
return true
end
})
registerCommand({
name = "disco",
alias = {"d"},
group = "all",
argDescription = "[off|1~30]",
description = "choose the number of color changes in ten seconds, or stop color changing (without parameter once a second)",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
local n = 0
if noParam then
n = 10
else
if nbParam == 1 then
if IsInteger(param1) then
n = S2I(param1)
if n < 1 or n > 30 then
return true
end
else
if param1 == "off" and escaper.discoTrigger ~= nil then
escaper.discoTrigger:destroy()
local ____GetMirrorEscaper_result_discoTrigger_9 = GetMirrorEscaper(escaper)
if ____GetMirrorEscaper_result_discoTrigger_9 ~= nil then
____GetMirrorEscaper_result_discoTrigger_9 = ____GetMirrorEscaper_result_discoTrigger_9.discoTrigger
end
local ____GetMirrorEscaper_result_discoTrigger_destroy_result_7 = ____GetMirrorEscaper_result_discoTrigger_9
if ____GetMirrorEscaper_result_discoTrigger_destroy_result_7 ~= nil then
____GetMirrorEscaper_result_discoTrigger_destroy_result_7 = ____GetMirrorEscaper_result_discoTrigger_destroy_result_7:destroy()
end
Text.P(
escaper:getPlayer(),
"disco off"
)
end
return true
end
else
return true
end
end
local ____escaper_discoTrigger_destroy_result_11 = escaper.discoTrigger
if ____escaper_discoTrigger_destroy_result_11 ~= nil then
____escaper_discoTrigger_destroy_result_11 = ____escaper_discoTrigger_destroy_result_11:destroy()
end
escaper.discoTrigger = createTimer(
10 / I2R(n),
true,
function() return Disco.Disco_Actions(escaper:getEscaperId()) end
)
local mirrorEscaper = GetMirrorEscaper(escaper)
if mirrorEscaper then
local ____mirrorEscaper_discoTrigger_destroy_result_13 = mirrorEscaper.discoTrigger
if ____mirrorEscaper_discoTrigger_destroy_result_13 ~= nil then
____mirrorEscaper_discoTrigger_destroy_result_13 = ____mirrorEscaper_discoTrigger_destroy_result_13:destroy()
end
mirrorEscaper.discoTrigger = createTimer(
10 / I2R(n),
true,
function() return Disco.Disco_Actions(escaper:getEscaperId()) end
)
end
Text.P(
escaper:getPlayer(),
("disco : " .. I2S(n)) .. " changes in 10 seconds"
)
return true
end
})
registerCommand({
name = "clearText",
alias = {"clr"},
group = "all",
argDescription = "",
description = "remove the text on the screen",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
ClearTextForPlayer(escaper:getPlayer())
end
return true
end
})
registerCommand({
name = "usedTerrains",
alias = {"ut"},
group = "all",
argDescription = "",
description = "display the terrains already used (onto the map) during this game (16 is the maximum possible !)",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
Text.DisplayLineToPlayer(escaper:getPlayer())
Text.P_timed(
escaper:getPlayer(),
TERRAIN_DATA_DISPLAY_TIME,
udg_colorCode[TEAL + 1] .. " Used terrains :"
)
local i = 0
local str = ""
while true do
if i >= Globals.udg_nb_used_terrains then
break
end
str = (udg_colorCode[TEAL + 1] .. I2S(i + 1)) .. " : "
str = str .. tostring(GetTerrainData(Globals.udg_used_terrain_types[i + 1]))
Text.P_timed(
escaper:getPlayer(),
TERRAIN_DATA_DISPLAY_TIME,
str
)
i = i + 1
end
end
return true
end
})
registerCommand({
name = "drunk",
alias = {},
group = "all",
argDescription = "<real drunkValue>",
description = "value between 5 and 60",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
local k = GetPlayerId(escaper:getPlayer())
local x = 0
local n = 0
if noParam then
if not TurnOnSlide.udg_isDrunk[k + 1] then
TurnOnSlide.udg_isDrunk[k + 1] = true
x = TurnOnSlide.udg_drunk[k + 1]
Text.P(
escaper:getPlayer(),
"drunk mode to " .. R2S(x)
)
else
return true
end
else
x = S2R(param1)
if nbParam == 1 and x >= 5 and x <= 60 then
TurnOnSlide.udg_isDrunk[k + 1] = true
TurnOnSlide.udg_drunk[k + 1] = x
else
return true
end
end
if x < 10 then
n = 1
Text.P(
escaper:getPlayer(),
"You begin to feel bad."
)
else
if x < 15 then
n = 2
Text.P(
escaper:getPlayer(),
"Burp !"
)
else
n = 3
if x < 30 then
Text.P(
escaper:getPlayer(),
"You understand now why driving drunk is dangerous ??!!"
)
else
Text.P(
escaper:getPlayer(),
"Dunno how you can stand..."
)
end
end
end
if n ~= TurnOnSlide.udg_drunkLevel[k + 1] then
EffectUtils.destroyEffect(TurnOnSlide.udg_drunkEffect[k + 1])
local hero = escaper:getHero()
if hero then
TurnOnSlide.udg_drunkEffect[k + 1] = EffectUtils.addSpecialEffectTarget(TurnOnSlide.DRUNK_EFFECTS[n + 1], hero, "head")
end
TurnOnSlide.udg_drunkLevel[k + 1] = n
end
return true
end
})
registerCommand({
name = "noDrunk",
alias = {},
group = "all",
argDescription = "",
description = "stop drunk mode",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
local k = GetPlayerId(escaper:getPlayer())
if noParam and TurnOnSlide.udg_isDrunk[k + 1] then
TurnOnSlide.udg_isDrunk[k + 1] = false
TurnOnSlide.udg_drunkLevel[k + 1] = 0
EffectUtils.destroyEffect(TurnOnSlide.udg_drunkEffect[k + 1])
Text.P(
escaper:getPlayer(),
"You feel better now."
)
end
return true
end
})
registerCommand({
name = "autoContinueAfterSliding",
alias = {"acas"},
group = "all",
argDescription = "<boolean status>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
local k = GetPlayerId(escaper:getPlayer())
if nbParam == 1 and IsBoolString(param1) then
if AutoContinueAfterSliding.udg_autoContinueAfterSliding[k + 1] ~= S2B(param1) then
AutoContinueAfterSliding.udg_autoContinueAfterSliding[k + 1] = S2B(param1)
if k < NB_PLAYERS_MAX then
AutoContinueAfterSliding.udg_autoContinueAfterSliding[k + NB_PLAYERS_MAX + 1] = S2B(param1)
end
if S2B(param1) then
Text.P(
escaper:getPlayer(),
"auto continue after sliding on"
)
else
Text.P(
escaper:getPlayer(),
"auto continue after sliding off"
)
end
end
end
return true
end
})
registerCommand({
name = "apm",
alias = {},
group = "all",
argDescription = "[all|a]",
description = "displays apm on slide of everybody or just yourself",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
local k = GetPlayerId(escaper:getPlayer())
if noParam then
Apm.DisplayApm(k)
else
if nbParam == 1 and (param1 == "all" or param1 == "a") then
Apm.DisplayApmAll(k)
end
end
return true
end
})
registerCommand({
name = "cpm",
alias = {},
group = "all",
argDescription = "[all|a]",
description = "displays cpm on slide of everybody or just yourself",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
local k = GetPlayerId(escaper:getPlayer())
if noParam then
Cpm.DisplayCpm(k)
else
if nbParam == 1 and (param1 == "all" or param1 == "a") then
Cpm.DisplayCpmAll(k)
end
end
return true
end
})
registerCommand({
name = "assign",
alias = {"as"},
group = "all",
argDescription = "[<modifier>]<key> <command>",
description = "puts a command into any alphanumeric key with of without modifiers ctrl (C) or shift (S) or both (CS)",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local cmd
cmd = ____bindingPattern0.cmd
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam <= 1 then
return true
end
local stringAssignedFromCommand = GetStringAssignedFromCommand(cmd)
if stringAssignedFromCommand then
local keyboardShortcut = __TS__New(KeyboardShortcut, escaper, param1, stringAssignedFromCommand)
escaper:getKeyboardShortcutsArray():new(keyboardShortcut, true)
Text.mkP(
escaper:getPlayer(),
"command assigned"
)
end
return true
end
})
registerCommand({
name = "unassign",
alias = {"uas"},
group = "all",
argDescription = "[<modifier>]<key>",
description = "removes the command put into a key",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
if escaper:getKeyboardShortcutsArray():destroyOneByKey(param1) then
Text.mkP(
escaper:getPlayer(),
"shortcut removed"
)
else
Text.erP(
escaper:getPlayer(),
"you have no such shortcut"
)
end
return true
end
})
registerCommand({
name = "displayShortcuts",
alias = {"ds"},
group = "all",
argDescription = "",
description = "displays the commands associated to your shortcuts",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
escaper:getKeyboardShortcutsArray():displayAll()
end
return true
end
})
registerCommand({
name = "saveCommand",
alias = {"sc"},
group = "all",
argDescription = "<commandLabel> <command>",
description = "save a command into a name of your choice",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local cmd
cmd = ____bindingPattern0.cmd
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam > 1) then
return true
end
newCmd(
escaper,
param1,
"-" .. tostring(GetStringAssignedFromCommand(cmd))
)
Text.P(
escaper:getPlayer(),
("new command \"" .. param1) .. "\" added"
)
return true
end
})
registerCommand({
name = "executeCommand",
alias = {"ec"},
group = "all",
argDescription = "<commandLabel>",
description = "execute a command you saved with \"saveCommand\"",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
if not execute(escaper, param1) then
Text.erP(
escaper:getPlayer(),
"unknown command name"
)
end
return true
end
})
registerCommand({
name = "getCurrentLevel",
alias = {"getcl"},
group = "all",
argDescription = "",
description = "displays the number of the current level (first one is number 0)",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
Text.P(
escaper:getPlayer(),
"the current level is number " .. I2S(getUdgLevels():getCurrentLevel(escaper):getId())
)
return true
end
})
registerCommand({
name = "leaderboard",
alias = {"ldb"},
group = "all",
argDescription = "on | off | mb|multiboard|reset | classic | global | current",
description = "displays the leaderboard",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam == 1 then
if IsBoolString(param1) then
escaper.hideLeaderboard = not S2B(param1)
ServiceManager.getService("Multiboard").setVisibility(
escaper,
S2B(param1)
)
elseif param1 == "classic" then
ServiceManager.getService("Multiboard").setMode(escaper, "leaderboard")
elseif param1 == "reset" or param1 == "multiboard" or param1 == "mb" then
ServiceManager.getService("Multiboard").setMode(escaper, "multiboard")
elseif param1 == "global" then
ServiceManager.getService("Multiboard").setMode(escaper, "multiboard")
ServiceManager.getService("Multiboard").setStatsMode(escaper, "global")
elseif param1 == "current" then
ServiceManager.getService("Multiboard").setMode(escaper, "multiboard")
ServiceManager.getService("Multiboard").setStatsMode(escaper, "current")
end
end
return true
end
})
registerCommand({
name = "firstPersonCam",
alias = {"fpc"},
group = "all",
argDescription = "on | off",
description = "displays the first person camera",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam == 1 and IsBoolString(param1) then
escaper:getFirstPersonHandle():toggleFirstPerson(S2B(param1))
Text.mkP(
escaper:getPlayer(),
"First person cam " .. (S2B(param1) and "enabled" or "disabled")
)
end
return true
end
})
registerCommand({
name = "lockCam",
alias = {"lc"},
group = "all",
argDescription = "[<player> | on | off]",
description = "locks the camera",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
local target = nil
if nbParam > 1 then
error("Wrong command parameters", 0)
end
if IsBoolString(param1) then
if S2B(param1) then
target = escaper
else
target = nil
end
else
local ____noParam_16
if noParam then
____noParam_16 = escaper
else
local ____temp_15
if nbParam == 1 then
____temp_15 = getUdgEscapers():get(resolvePlayerId(param1))
else
____temp_15 = nil
end
____noParam_16 = ____temp_15
end
target = ____noParam_16
end
escaper:setLockCamTarget(target)
escaper:resetCamera()
if target then
Text.mkP(
escaper:getPlayer(),
"Camera locked"
)
else
Text.mkP(
escaper:getPlayer(),
"Camera unlocked"
)
end
return true
end
})
registerCommand({
name = "lockCamRotation",
alias = {"lcr"},
group = "all",
argDescription = "on | off",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam == 1 and IsBoolString(param1) then
escaper:setLockCamTarget(S2B(param1) and escaper or nil)
escaper:resetCamera()
escaper:toggleLockCamRotation(S2B(param1))
Text.mkP(
escaper:getPlayer(),
"Camera rotation " .. (S2B(param1) and "locked" or "unlocked")
)
end
return true
end
})
registerCommand({
name = "lockCamHeight",
alias = {"lch"},
group = "all",
argDescription = "on | off",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam == 1 and IsBoolString(param1) then
escaper:resetCamera()
escaper:toggleLockCamHeight(S2B(param1))
Text.mkP(
escaper:getPlayer(),
"Camera height " .. (S2B(param1) and "locked" or "unlocked")
)
end
return true
end
})
registerCommand({
name = "followMouse",
alias = {"fm"},
group = "all",
argDescription = "<boolean> [neverDisable|nd]",
description = "follows the mouse",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if nbParam ~= 1 and nbParam ~= 2 then
return true
end
local neverDisable = param2 == "neverDisable" or param2 == "nd"
escaper:enableFollowMouseMode(
S2B(param1),
neverDisable
)
if S2B(param1) then
Text.mkP(
escaper:getPlayer(),
("Follow mouse mode enabled : hold right click during " .. tostring(PRESS_TIME_TO_ENABLE_FOLLOW_MOUSE)) .. "s while sliding to activate it. Do a normal click to disable it"
)
else
Text.mkP(
escaper:getPlayer(),
"Follow mouse mode disabled"
)
end
return true
end
})
registerCommand({
name = "mirror",
alias = {"m", "reverse"},
group = "all",
argDescription = "<boolean>",
description = "mirrors the camera",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
if not IsBoolString(param1) then
return true
end
if not __TS__InstanceOf(
escaper:getLastTerrainType(),
TerrainTypeWalk
) then
Text.erP(
escaper:getPlayer(),
"You must be on a walkable terrain to use this command"
)
return true
end
escaper:setSlideMirror(S2B(param1))
if S2B(param1) then
Text.mkP(
escaper:getPlayer(),
"Mirror mode enabled"
)
else
Text.mkP(
escaper:getPlayer(),
"Mirror mode disabled"
)
end
return true
end
})
registerCommand({
name = "ignoreDeathMessages",
alias = {"idm"},
group = "all",
argDescription = "<boolean>",
description = "ignores death messages",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
if not IsBoolString(param1) then
return true
end
escaper:setIgnoreDeathMessages(S2B(param1))
if S2B(param1) then
Text.mkP(
escaper:getPlayer(),
"Ignoring death messages"
)
else
Text.mkP(
escaper:getPlayer(),
"Not ignoring death messages"
)
end
return true
end
})
registerCommand({
name = "panCameraOnRevive",
alias = {"pcor"},
group = "all",
argDescription = "<coop | all | none> [width] [height]",
description = "pan camera on revive, default width = 2048; height = 1536",
cb = function(____, ____bindingPattern0, escaper)
local param3
local param2
local param1
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
param3 = ____bindingPattern0.param3
if param1 ~= "coop" and param1 ~= "all" and param1 ~= "none" then
Text.mkP(
escaper:getPlayer(),
"param1 must be: coop | all | none"
)
return true
end
if S2I(param2) ~= 0 then
escaper.moveCamDistanceWidth = S2I(param2)
end
if S2I(param3) ~= 0 then
escaper.moveCamDistanceHeight = S2I(param3)
elseif S2I(param2) ~= 0 then
escaper.moveCamDistanceHeight = S2I(param2)
end
escaper:setPanCameraOnRevive(param1)
Text.mkP(
escaper:getPlayer(),
((((("Pan camera on revive set to: " .. param1) .. " at ") .. tostring(escaper.moveCamDistanceWidth)) .. "x") .. tostring(escaper.moveCamDistanceHeight)) .. " "
)
return true
end
})
registerCommand({
name = "panCameraOnPortal",
alias = {"pcop"},
group = "all",
argDescription = "<boolean>",
description = "pan camera on portal",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
if not IsBoolString(param1) then
Text.mkP(
escaper:getPlayer(),
"Invalid boolean"
)
return true
end
escaper.panCameraOnPortal = S2B(param1)
Text.mkP(
escaper:getPlayer(),
"Pan camera on portal set to: " .. param1
)
return true
end
})
registerCommand({
name = "showNames",
alias = {"sn"},
group = "all",
argDescription = "<boolean>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
if not IsBoolString(param1) then
return true
end
if S2B(param1) then
Text.mkP(
escaper:getPlayer(),
"Showing player names"
)
else
Text.mkP(
escaper:getPlayer(),
"Hiding player names"
)
end
escaper:setShowNames(S2B(param1))
return true
end
})
registerCommand({
name = "othersTransparency",
alias = {"ot"},
group = "all",
argDescription = "<number | off | reset> [all | unallied | allied | player]",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if nbParam < 1 or nbParam > 2 then
return true
end
if param1 == "off" or param1 == "reset" then
param1 = "0"
end
if param2 == "" then
param2 = "all"
end
if not (S2I(param1) >= 0 and S2I(param1) <= 100) then
return true
end
if param2 == "all" then
for _, esc in pairs(getUdgEscapers():getAll()) do
escaper:setOthersTransparency(
esc,
S2I(param1)
)
end
if param1 == "0" then
Text.mkP(
escaper:getPlayer(),
"Showing other heroes as normal"
)
else
Text.mkP(
escaper:getPlayer(),
"Showing other heroes with transparency: " .. tostring(S2I(param1))
)
end
return true
elseif param2 == "allied" then
for _, esc in pairs(getUdgEscapers():getAll()) do
if escaper.alliedState[esc:getId()] then
escaper:setOthersTransparency(
esc,
S2I(param1)
)
end
end
if param1 == "0" then
Text.mkP(
escaper:getPlayer(),
"Showing allied heroes as normal"
)
else
Text.mkP(
escaper:getPlayer(),
"Showing allied heroes with transparency: " .. tostring(S2I(param1))
)
end
return true
elseif param2 == "unallied" then
for _, esc in pairs(getUdgEscapers():getAll()) do
if not escaper.alliedState[esc:getId()] then
escaper:setOthersTransparency(
esc,
S2I(param1)
)
end
end
if param1 == "0" then
Text.mkP(
escaper:getPlayer(),
"Showing unallied heroes as normal"
)
else
Text.mkP(
escaper:getPlayer(),
"Showing unallied heroes with transparency: " .. tostring(S2I(param1))
)
end
return true
elseif isPlayerId(param2) then
local esc = getUdgEscapers():get(resolvePlayerId(param2))
if esc then
escaper:setOthersTransparency(
esc,
S2I(param1)
)
if param1 == "0" then
Text.mkP(
escaper:getPlayer(),
("Showing " .. esc:getDisplayName()) .. " hero as normal"
)
else
Text.mkP(
escaper:getPlayer(),
(("Showing " .. esc:getDisplayName()) .. " hero with transparency: ") .. tostring(S2I(param1))
)
end
end
return true
end
return true
end
})
registerCommand({
name = "myStartCommands",
alias = {"msc"},
group = "all",
argDescription = "[ list [player] | add <command> | del <commandNumber> | ec <commandNumber> | delall ]",
description = "Run commands on start of the game",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
local cmd
cmd = ____bindingPattern0.cmd
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not escaper:getStartCommandsHandle():isLoaded() then
Text.erP(
escaper:getPlayer(),
"Start commands not yet loaded"
)
return true
end
if nbParam == 2 and param1 == "list" then
local resolvedPlayer = getUdgEscapers():get(resolvePlayerId(param2))
if not resolvedPlayer then
return true
end
Text.P(
escaper:getPlayer(),
resolvedPlayer:getDisplayName() .. "'s start commands: "
)
local i = 0
for ____, startCmd in ipairs(resolvedPlayer:getStartCommandsHandle():getStartCommands()) do
local ____Text_P_18 = Text.P
local ____temp_17 = escaper:getPlayer()
i = i + 1
____Text_P_18(
____temp_17,
(tostring(i) .. ": ") .. startCmd
)
end
elseif nbParam == 0 or nbParam == 1 and param1 == "list" then
Text.P(
escaper:getPlayer(),
"My start commands: "
)
local i = 0
for ____, startCmd in ipairs(escaper:getStartCommandsHandle():getStartCommands()) do
local ____Text_P_20 = Text.P
local ____temp_19 = escaper:getPlayer()
i = i + 1
____Text_P_20(
____temp_19,
(tostring(i) .. ": ") .. startCmd
)
end
elseif param1 == "del" and nbParam == 2 then
if S2I(param2) == 0 then
Text.erP(
escaper:getPlayer(),
"You must specify a command to delete"
)
return true
end
local deletedCmd = escaper:getStartCommandsHandle():removeStartCommand(S2I(param2) - 1)
if deletedCmd then
Text.P(
escaper:getPlayer(),
("Deleted command: '" .. deletedCmd[1]) .. "'"
)
end
elseif param1 == "delall" and nbParam == 1 then
escaper:getStartCommandsHandle():removeStartCommands()
Text.P(
escaper:getPlayer(),
"Deleted all commands"
)
elseif param1 == "add" then
local targetCmd = __TS__StringSubstring(
cmd,
(string.find(cmd, " add ", nil, true) or 0) - 1 + 5
)
escaper:getStartCommandsHandle():addStartCommand(targetCmd)
Text.P(
escaper:getPlayer(),
("Added command: '" .. targetCmd) .. "'"
)
elseif param1 == "ec" and nbParam == 2 then
if S2I(param2) == 0 then
Text.erP(
escaper:getPlayer(),
"You must specify a command to execute"
)
return true
end
local executingCommandNumber = S2I(param2) - 1
if not escaper:getStartCommandsHandle():executeStartCommand(executingCommandNumber) then
Text.erP(
escaper:getPlayer(),
"Wrong command number"
)
end
end
return true
end
})
registerCommand({
name = "userInterface",
alias = {"ui"},
group = "all",
argDescription = "off | on | map",
description = "Disable partly or totally the graphical user interface",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
Text.erP(
escaper:getPlayer(),
"wrong command parameters"
)
return true
end
local enable = false
local showMinimap = false
if param1 == "map" then
showMinimap = true
elseif IsBoolString(param1) then
enable = S2B(param1)
else
Text.erP(
escaper:getPlayer(),
"wrong command parameters"
)
end
if not escaper:enableInterface(enable, showMinimap) then
Text.erP(
escaper:getPlayer(),
"nothing to change"
)
end
return true
end
})
local function setAlliedState(escaper, target, state)
if escaper:getId() == target:getId() then
return
end
escaper.alliedState[target:getId()] = state
Text.P(
escaper:getPlayer(),
((((udg_colorCode[escaper:getId() + 1] .. "You|r ") .. (state and "" or "un")) .. "allied ") .. udg_colorCode[target:getId() + 1]) .. target:getDisplayName()
)
Text.P(
target:getPlayer(),
(((((udg_colorCode[escaper:getId() + 1] .. escaper:getDisplayName()) .. "|r ") .. (state and "" or "un")) .. "allied ") .. udg_colorCode[target:getId() + 1]) .. "you"
)
end
registerCommand({
name = "ally",
alias = {},
group = "all",
argDescription = "player",
description = "Ally people, lets you revive them",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
resolvePlayerIds(
param1,
function(target) return setAlliedState(escaper, target, true) end
)
return true
end
})
registerCommand({
name = "unally",
alias = {},
group = "all",
argDescription = "player",
description = "Unally people, prevents you from reviving them",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
resolvePlayerIds(
param1,
function(target) return setAlliedState(escaper, target, false) end
)
return true
end
})
registerCommand({
name = "hideChat",
alias = {"hc", "monk"},
group = "all",
argDescription = "on | off",
description = "hides the chat",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
if #param1 == 0 then
param1 = "true"
end
if IsBoolString(param1) then
local frame = BlzGetOriginFrame(ORIGIN_FRAME_CHAT_MSG, 0)
if GetLocalPlayer() == escaper:getPlayer() then
BlzFrameSetVisible(
frame,
not S2B(param1)
)
end
Text.mkP(
escaper:getPlayer(),
"Chat " .. (not S2B(param1) and "shown" or "hidden")
)
end
return true
end
})
end
return ____exports
end,
["src.core.06_COMMANDS.COMMANDS_vJass.Command_cheat"] = function(...)
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsBoolString = ____Basic_functions.IsBoolString
local S2B = ____Basic_functions.S2B
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____Functions_on_numbers = require("src.core.01_libraries.Functions_on_numbers")
local IsInteger = ____Functions_on_numbers.IsInteger
local IsPositiveInteger = ____Functions_on_numbers.IsPositiveInteger
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local GetMirrorEscaper = ____Escaper_functions.GetMirrorEscaper
local ____Meteor = require("src.core.04_STRUCTURES.Meteor.Meteor")
local METEOR_CHEAT = ____Meteor.METEOR_CHEAT
local ____Gravity = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.Gravity")
local Gravity = ____Gravity.Gravity
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgLevels = ____globals.getUdgLevels
local globals = ____globals.globals
local ____mapUtils = require("src.Utils.mapUtils")
local runInTrigger = ____mapUtils.runInTrigger
local ____View_all_hide_all = require("src.core.03_view_all_hide_all.View_all_hide_all")
local getUdgViewAll = ____View_all_hide_all.getUdgViewAll
local ____Meteor_functions = require("src.core.04_STRUCTURES.Meteor.Meteor_functions")
local MeteorFunctions = ____Meteor_functions.MeteorFunctions
local ____InvisUnit_is_getting_damage = require("src.core.08_GAME.Death.InvisUnit_is_getting_damage")
local Trig_InvisUnit_is_getting_damage = ____InvisUnit_is_getting_damage.Trig_InvisUnit_is_getting_damage
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local isPlayerId = ____Command_functions.isPlayerId
local resolvePlayerId = ____Command_functions.resolvePlayerId
local resolvePlayerIds = ____Command_functions.resolvePlayerIds
local ____Teleport = require("src.core.06_COMMANDS.COMMANDS_vJass.Teleport")
local ActivateTeleport = ____Teleport.ActivateTeleport
____exports.initExecuteCommandCheat = function()
local ____ServiceManager_getService_result_0 = ServiceManager.getService("Cmd")
local registerCommand = ____ServiceManager_getService_result_0.registerCommand
local function reviveCb(escaper)
return escaper:reviveAtStart()
end
local function revivePositionCb(escaper)
local hero = escaper:getHero()
if not hero then
return
end
if not escaper:isAlive() then
runInTrigger(escaper.coopReviveHero)
end
end
registerCommand({
name = "setSlideSpeed",
alias = {"ss"},
group = "cheat",
argDescription = "<speed>",
description = "Changes the slide speed of your hero, ignoring terrains",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not IsInteger(param1) then
return true
end
local speed = S2R(param1)
if nbParam == 1 then
escaper:absoluteSlideSpeed(speed, true)
Text.P(
escaper:getPlayer(),
"your slide speed is set to " .. param1
)
return true
end
if not (nbParam == 2 and escaper:isMaximaxou()) then
return true
end
if param2 == "all" or param2 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) ~= nil then
local ____getUdgEscapers_result_get_result_absoluteSlideSpeed_result_1 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_absoluteSlideSpeed_result_1 ~= nil then
____getUdgEscapers_result_get_result_absoluteSlideSpeed_result_1 = ____getUdgEscapers_result_get_result_absoluteSlideSpeed_result_1:absoluteSlideSpeed(speed, true)
end
end
i = i + 1
end
Text.P(
escaper:getPlayer(),
"slide speed for all is set to " .. param1
)
return true
end
if isPlayerId(param2) then
if getUdgEscapers():get(resolvePlayerId(param2)) ~= nil then
local ____getUdgEscapers_result_get_result_absoluteSlideSpeed_result_3 = getUdgEscapers():get(resolvePlayerId(param2))
if ____getUdgEscapers_result_get_result_absoluteSlideSpeed_result_3 ~= nil then
____getUdgEscapers_result_get_result_absoluteSlideSpeed_result_3 = ____getUdgEscapers_result_get_result_absoluteSlideSpeed_result_3:absoluteSlideSpeed(speed, true)
end
Text.P(
escaper:getPlayer(),
(("slide speed for player " .. param2) .. " is set to ") .. param1
)
end
end
return true
end
})
registerCommand({
name = "normalSlideSpeed",
alias = {"nss"},
group = "cheat",
argDescription = "",
description = "Puts the slide speed back to normal (respecting terrains)",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if noParam then
escaper:stopAbsoluteSlideSpeed(true)
Text.P(
escaper:getPlayer(),
"your slide speed depends now on terrains"
)
return true
end
if not (nbParam == 1 and escaper:isMaximaxou()) then
return true
end
if param1 == "all" or param1 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) ~= nil then
local ____getUdgEscapers_result_get_result_stopAbsoluteSlideSpeed_result_5 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_stopAbsoluteSlideSpeed_result_5 ~= nil then
____getUdgEscapers_result_get_result_stopAbsoluteSlideSpeed_result_5 = ____getUdgEscapers_result_get_result_stopAbsoluteSlideSpeed_result_5:stopAbsoluteSlideSpeed(true)
end
end
i = i + 1
end
Text.P(
escaper:getPlayer(),
"slide speed for all depends now on terrains"
)
return true
end
if isPlayerId(param1) then
if getUdgEscapers():get(resolvePlayerId(param1)) ~= nil then
local ____getUdgEscapers_result_get_result_stopAbsoluteSlideSpeed_result_7 = getUdgEscapers():get(resolvePlayerId(param1))
if ____getUdgEscapers_result_get_result_stopAbsoluteSlideSpeed_result_7 ~= nil then
____getUdgEscapers_result_get_result_stopAbsoluteSlideSpeed_result_7 = ____getUdgEscapers_result_get_result_stopAbsoluteSlideSpeed_result_7:stopAbsoluteSlideSpeed(true)
end
Text.P(
escaper:getPlayer(),
("slide speed for player " .. param1) .. " depends now on terrains"
)
end
end
return true
end
})
registerCommand({
name = "rotationSpeed",
alias = {"rs"},
group = "cheat",
argDescription = "<roundsPerSecond>",
description = "Changes the rotation speed of your hero, ignoring terrains",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if S2R(param1) <= 0 then
Text.erP(
escaper:getPlayer(),
"The rotation speed has to be positive"
)
return true
end
local speed = S2R(param1)
if nbParam == 1 then
escaper:absoluteRotationSpeed(speed)
Text.P(
escaper:getPlayer(),
"your rotation speed is set to " .. param1
)
return true
end
if not (nbParam == 2 and escaper:isMaximaxou()) then
return true
end
if param2 == "all" or param2 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) ~= nil then
local ____getUdgEscapers_result_get_result_absoluteRotationSpeed_result_9 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_absoluteRotationSpeed_result_9 ~= nil then
____getUdgEscapers_result_get_result_absoluteRotationSpeed_result_9 = ____getUdgEscapers_result_get_result_absoluteRotationSpeed_result_9:absoluteRotationSpeed(speed)
end
end
i = i + 1
end
Text.P(
escaper:getPlayer(),
"rotation speed for all is set to " .. param1
)
return true
end
if isPlayerId(param2) then
if getUdgEscapers():get(resolvePlayerId(param2)) ~= nil then
local ____getUdgEscapers_result_get_result_absoluteRotationSpeed_result_11 = getUdgEscapers():get(resolvePlayerId(param2))
if ____getUdgEscapers_result_get_result_absoluteRotationSpeed_result_11 ~= nil then
____getUdgEscapers_result_get_result_absoluteRotationSpeed_result_11 = ____getUdgEscapers_result_get_result_absoluteRotationSpeed_result_11:absoluteRotationSpeed(speed)
end
Text.P(
escaper:getPlayer(),
(("rotation speed for player " .. param2) .. " is set to ") .. param1
)
end
end
return true
end
})
registerCommand({
name = "normalRotationSpeed",
alias = {"nrs"},
group = "cheat",
argDescription = "",
description = "Puts the rotation speed back to normal (respecting terrains)",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if noParam then
escaper:stopAbsoluteRotationSpeed()
Text.P(
escaper:getPlayer(),
"your rotation speed depends now on terrains"
)
return true
end
if not (nbParam == 1 and escaper:isMaximaxou()) then
return true
end
if param1 == "all" or param1 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) ~= nil then
local ____getUdgEscapers_result_get_result_stopAbsoluteRotationSpeed_result_13 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_stopAbsoluteRotationSpeed_result_13 ~= nil then
____getUdgEscapers_result_get_result_stopAbsoluteRotationSpeed_result_13 = ____getUdgEscapers_result_get_result_stopAbsoluteRotationSpeed_result_13:stopAbsoluteRotationSpeed()
end
end
i = i + 1
end
Text.P(
escaper:getPlayer(),
"rotation speed for all depends now on terrains"
)
return true
end
if isPlayerId(param1) then
if getUdgEscapers():get(resolvePlayerId(param1)) ~= nil then
local ____getUdgEscapers_result_get_result_stopAbsoluteRotationSpeed_result_15 = getUdgEscapers():get(resolvePlayerId(param1))
if ____getUdgEscapers_result_get_result_stopAbsoluteRotationSpeed_result_15 ~= nil then
____getUdgEscapers_result_get_result_stopAbsoluteRotationSpeed_result_15 = ____getUdgEscapers_result_get_result_stopAbsoluteRotationSpeed_result_15:stopAbsoluteRotationSpeed()
end
Text.P(
escaper:getPlayer(),
("rotation speed for player " .. param1) .. " depends now on terrains"
)
end
end
return true
end
})
registerCommand({
name = "setWalkSpeed",
alias = {"ws"},
group = "cheat",
argDescription = "<speed>",
description = "Changes the walk speed of your hero, ignoring terrains",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not IsInteger(param1) then
return true
end
local speed = S2R(param1)
if nbParam == 1 then
escaper:absoluteWalkSpeed(speed)
Text.P(
escaper:getPlayer(),
"walk speed to " .. param1
)
return true
end
if not (nbParam == 2 and escaper:isMaximaxou()) then
return true
end
if param2 == "all" or param2 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) ~= nil then
local ____getUdgEscapers_result_get_result_absoluteWalkSpeed_result_17 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_absoluteWalkSpeed_result_17 ~= nil then
____getUdgEscapers_result_get_result_absoluteWalkSpeed_result_17 = ____getUdgEscapers_result_get_result_absoluteWalkSpeed_result_17:absoluteWalkSpeed(speed)
end
end
i = i + 1
end
Text.P(
escaper:getPlayer(),
"walk speed for all to " .. param1
)
return true
end
if isPlayerId(param2) then
if getUdgEscapers():get(resolvePlayerId(param2)) ~= nil then
local ____getUdgEscapers_result_get_result_absoluteWalkSpeed_result_19 = getUdgEscapers():get(resolvePlayerId(param2))
if ____getUdgEscapers_result_get_result_absoluteWalkSpeed_result_19 ~= nil then
____getUdgEscapers_result_get_result_absoluteWalkSpeed_result_19 = ____getUdgEscapers_result_get_result_absoluteWalkSpeed_result_19:absoluteWalkSpeed(speed)
end
Text.P(
escaper:getPlayer(),
(("walk speed for player " .. param2) .. " to ") .. param1
)
end
end
return true
end
})
registerCommand({
name = "normalWalkSpeed",
alias = {"nws"},
group = "cheat",
argDescription = "",
description = "Puts the walk speed back to normal (respecting terrains)",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if noParam then
escaper:stopAbsoluteWalkSpeed()
Text.P(
escaper:getPlayer(),
"walk speed depends now on terrains"
)
return true
end
if not (nbParam == 1 and escaper:isMaximaxou()) then
return true
end
if param1 == "all" or param1 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) ~= nil then
local ____getUdgEscapers_result_get_result_stopAbsoluteWalkSpeed_result_21 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_stopAbsoluteWalkSpeed_result_21 ~= nil then
____getUdgEscapers_result_get_result_stopAbsoluteWalkSpeed_result_21 = ____getUdgEscapers_result_get_result_stopAbsoluteWalkSpeed_result_21:stopAbsoluteWalkSpeed()
end
end
i = i + 1
end
Text.P(
escaper:getPlayer(),
"walk speed for all depends now on terrains"
)
return true
end
if isPlayerId(param1) then
if getUdgEscapers():get(resolvePlayerId(param1)) ~= nil then
local ____getUdgEscapers_result_get_result_stopAbsoluteWalkSpeed_result_23 = getUdgEscapers():get(resolvePlayerId(param1))
if ____getUdgEscapers_result_get_result_stopAbsoluteWalkSpeed_result_23 ~= nil then
____getUdgEscapers_result_get_result_stopAbsoluteWalkSpeed_result_23 = ____getUdgEscapers_result_get_result_stopAbsoluteWalkSpeed_result_23:stopAbsoluteWalkSpeed()
end
Text.P(
escaper:getPlayer(),
("walk speed for player " .. param1) .. " depends now on terrains"
)
end
end
return true
end
})
registerCommand({
name = "teleport",
alias = {"t"},
group = "cheat",
argDescription = "",
description = "Teleports your hero at the next clic",
enabled = function(____, ____bindingPattern0)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
return noParam or nbParam == 1 and (param1 == "0" or S2R(param1) ~= 0)
end,
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
local h1 = escaper:getHero()
local ____GetMirrorEscaper_result_getHero_result_25 = GetMirrorEscaper(escaper)
if ____GetMirrorEscaper_result_getHero_result_25 ~= nil then
____GetMirrorEscaper_result_getHero_result_25 = ____GetMirrorEscaper_result_getHero_result_25:getHero()
end
local h2 = ____GetMirrorEscaper_result_getHero_result_25
if nbParam == 1 then
local ____ = h1 and SetUnitFacing(
h1,
S2R(param1)
)
local ____ = h2 and SetUnitFacing(
h2,
S2R(param1)
)
end
local ____ = h1 and ActivateTeleport(h1, true)
local ____ = h2 and ActivateTeleport(h2, true)
return true
end
})
registerCommand({
name = "revive",
alias = {"r"},
group = "cheat",
argDescription = "",
description = "Revives your hero",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if noParam then
reviveCb(escaper)
return true
end
if not (nbParam == 1 and escaper:isMaximaxou()) then
return true
end
resolvePlayerIds(param1, reviveCb)
return true
end
})
registerCommand({
name = "revivePosition",
alias = {"rpos"},
group = "cheat",
argDescription = "",
description = "Revives your hero",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if noParam then
revivePositionCb(escaper)
return true
end
if not (nbParam == 1 and escaper:isMaximaxou()) then
return true
end
resolvePlayerIds(param1, revivePositionCb)
return true
end
})
registerCommand({
name = "back",
alias = {"b"},
group = "cheat",
argDescription = "",
description = "Teleports you to your previous location",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
if escaper.lastPos then
escaper:moveHero(escaper.lastPos.x, escaper.lastPos.y)
escaper.coopReviveHero()
end
return true
end
return true
end
})
registerCommand({
name = "reviveTo",
alias = {"rto", "rposto"},
group = "cheat",
argDescription = "<Pcolor>",
description = "Revives your hero to an other hero, with the same facing angle",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1 and isPlayerId(param1)) then
return true
end
local n = resolvePlayerId(param1)
if getUdgEscapers():get(n) == nil then
return true
end
local ____getUdgEscapers_result_get_result_getHero_result_27 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_getHero_result_27 ~= nil then
____getUdgEscapers_result_get_result_getHero_result_27 = ____getUdgEscapers_result_get_result_getHero_result_27:getHero()
end
local targetHero = ____getUdgEscapers_result_get_result_getHero_result_27
local hero = escaper:getHero()
if not targetHero or not hero then
return true
end
local x = GetUnitX(targetHero)
local y = GetUnitY(targetHero)
escaper:moveHero(x, y)
escaper:turnInstantly(GetUnitFacing(targetHero))
escaper.coopReviveHero()
local escaperSecond = GetMirrorEscaper(escaper)
if escaperSecond then
if escaperSecond:isAlive() then
escaperSecond:moveHero(x, y)
else
escaperSecond:revive(x, y, "coop")
end
end
return true
end
})
registerCommand({
name = "summon",
alias = {"smn"},
group = "cheat",
argDescription = "<Pcolor>",
description = "Revives another hero to yours, with the same facing angle",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1 and isPlayerId(param1)) then
return true
end
local n = resolvePlayerId(param1)
if getUdgEscapers():get(n) == nil then
return true
end
local targetEscaper = getUdgEscapers():get(n)
local ____targetEscaper_getHero_result_29 = targetEscaper
if ____targetEscaper_getHero_result_29 ~= nil then
____targetEscaper_getHero_result_29 = ____targetEscaper_getHero_result_29:getHero()
end
local targetHero = ____targetEscaper_getHero_result_29
local hero = escaper:getHero()
if not targetEscaper or not targetHero or not hero then
return true
end
local x = GetUnitX(hero)
local y = GetUnitY(hero)
targetEscaper:moveHero(x, y)
targetEscaper:turnInstantly(GetUnitFacing(hero))
targetEscaper.coopReviveHero()
local escaperSecond = GetMirrorEscaper(targetEscaper)
if escaperSecond then
if escaperSecond:isAlive() then
escaperSecond:moveHero(x, y)
else
escaperSecond:revive(x, y, "coop")
end
end
return true
end
})
registerCommand({
name = "getInfiniteMeteors",
alias = {"gim"},
group = "cheat",
argDescription = "",
description = "Puts in your inventory a meteor that doesn't disapear after being used",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
local hero = escaper:getHero()
if hero then
if UnitItemInSlot(hero, 0) == nil then
MeteorFunctions.HeroAddCheatMeteor(hero)
Text.P(
escaper:getPlayer(),
"you get infinite meteors"
)
else
Text.erP(
escaper:getPlayer(),
"inventory full"
)
end
end
end
return true
end
})
registerCommand({
name = "deleteInfiniteMeteors",
alias = {"dim"},
group = "cheat",
argDescription = "",
description = "Remove the infinite meteor from your inventory if you have one",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
local hero = escaper:getHero()
if hero then
if GetItemTypeId(UnitItemInSlot(hero, 0)) == METEOR_CHEAT then
RemoveItem(UnitItemInSlot(hero, 0))
Text.P(
escaper:getPlayer(),
"infinite meteors removed"
)
else
Text.erP(
escaper:getPlayer(),
"no infinite meteors to remove"
)
end
end
end
return true
end
})
registerCommand({
name = "endLevel",
alias = {"el"},
group = "cheat",
argDescription = "",
description = "Go to the end of the current level",
cb = function(____, ____bindingPattern0)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
getUdgLevels():goToNextLevel()
end
return true
end
})
registerCommand({
name = "goToLevel",
alias = {"gotl"},
group = "cheat",
argDescription = "<levelId>",
description = "Go to the specified level",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
if not IsPositiveInteger(param1) then
Text.erP(
escaper:getPlayer(),
"level number should be a positive integer"
)
return true
end
local n = S2I(param1)
if getUdgLevels():getCurrentLevel(escaper):getId() == n then
Text.erP(
escaper:getPlayer(),
"you already are in this level"
)
return true
end
if not getUdgLevels():goToLevel(nil, n) then
Text.erP(
escaper:getPlayer(),
("this levels doesn't exist (level max : " .. I2S(getUdgLevels():getLastLevelId())) .. ")"
)
end
return true
end
})
registerCommand({
name = "viewAll",
alias = {"va"},
group = "cheat",
argDescription = "",
description = "Displays the whole map",
cb = function(____, ____bindingPattern0)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
FogModifierStart(getUdgViewAll())
end
return true
end
})
registerCommand({
name = "hideAll",
alias = {"ha"},
group = "cheat",
argDescription = "",
description = "Puts the map view back to normal",
cb = function(____, ____bindingPattern0)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
FogModifierStop(getUdgViewAll())
end
return true
end
})
registerCommand({
name = "setGodMode",
alias = {"setgm"},
group = "cheat",
argDescription = "<boolean status>",
description = "Activate or desactivate god mode for your hero",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 1 or nbParam == 2) then
Text.erP(
escaper:getPlayer(),
"one or two params for this command"
)
return true
end
local b = false
if IsBoolString(param1) then
b = S2B(param1)
else
Text.erP(
escaper:getPlayer(),
"param1 must be a boolean"
)
return true
end
if nbParam == 1 then
escaper:setGodMode(b)
if b then
Text.P(
escaper:getPlayer(),
"you are now invulnerable"
)
else
Text.P(
escaper:getPlayer(),
"you are now vulnerable"
)
end
return true
end
if not escaper:isMaximaxou() then
Text.erP(
escaper:getPlayer(),
"your rights are too weak"
)
return true
end
if param2 == "all" or param2 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) ~= nil then
local ____getUdgEscapers_result_get_result_setGodMode_result_31 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_setGodMode_result_31 ~= nil then
____getUdgEscapers_result_get_result_setGodMode_result_31 = ____getUdgEscapers_result_get_result_setGodMode_result_31:setGodMode(b)
end
end
i = i + 1
end
if b then
Text.P(
escaper:getPlayer(),
"all sliders are now invulnerable"
)
else
Text.P(
escaper:getPlayer(),
"all sliders are now vulnerable"
)
end
return true
end
if isPlayerId(param2) then
local n = resolvePlayerId(param2)
if getUdgEscapers():get(n) ~= nil then
local ____getUdgEscapers_result_get_result_setGodMode_result_33 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_setGodMode_result_33 ~= nil then
____getUdgEscapers_result_get_result_setGodMode_result_33 = ____getUdgEscapers_result_get_result_setGodMode_result_33:setGodMode(b)
end
if b then
Text.P(
escaper:getPlayer(),
("slider " .. param2) .. " is now invulnerable"
)
else
Text.P(
escaper:getPlayer(),
("slider " .. param2) .. " is now vulnerable"
)
end
else
Text.erP(
escaper:getPlayer(),
("escaper " .. param2) .. " doesn't exist"
)
end
else
Text.erP(
escaper:getPlayer(),
"param2 must be a player color or \"all\""
)
end
return true
end
})
registerCommand({
name = "setGodModeKills",
alias = {"setgmk"},
group = "cheat",
argDescription = "<boolean status>",
description = "if activated, monsters will be killed by your hero",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 1 or nbParam == 2) then
Text.erP(
escaper:getPlayer(),
"one or two params for this command"
)
return true
end
local b = false
if IsBoolString(param1) then
b = S2B(param1)
else
Text.erP(
escaper:getPlayer(),
"param1 must be a boolean"
)
return true
end
if nbParam == 1 then
escaper:setGodModeKills(b)
if b then
Text.P(
escaper:getPlayer(),
"your god mode now kills monsters (if activated)"
)
else
Text.P(
escaper:getPlayer(),
"you god mode doesn't kill monsters anymore"
)
end
return true
end
if not escaper:isMaximaxou() then
Text.erP(
escaper:getPlayer(),
"your rights are too weak"
)
return true
end
if param2 == "all" or param2 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) ~= nil then
local ____getUdgEscapers_result_get_result_setGodModeKills_result_35 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_setGodModeKills_result_35 ~= nil then
____getUdgEscapers_result_get_result_setGodModeKills_result_35 = ____getUdgEscapers_result_get_result_setGodModeKills_result_35:setGodModeKills(b)
end
end
i = i + 1
end
if b then
Text.P(
escaper:getPlayer(),
"god mode of all sliders now kills monsters (if activated)"
)
else
Text.P(
escaper:getPlayer(),
"god mode of all sliders doesn't kill monsters anymore"
)
end
return true
end
if isPlayerId(param2) then
local n = resolvePlayerId(param2)
if getUdgEscapers():get(n) ~= nil then
local ____getUdgEscapers_result_get_result_setGodModeKills_result_37 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_setGodModeKills_result_37 ~= nil then
____getUdgEscapers_result_get_result_setGodModeKills_result_37 = ____getUdgEscapers_result_get_result_setGodModeKills_result_37:setGodModeKills(b)
end
if b then
Text.P(
escaper:getPlayer(),
("god mode of slider " .. param2) .. " now kills monsters (if activated)"
)
else
Text.P(
escaper:getPlayer(),
("god mode of slider " .. param2) .. " doesn't kill monsters anymore"
)
end
else
Text.erP(
escaper:getPlayer(),
("escaper " .. param2) .. " doesn't exist"
)
end
else
Text.erP(
escaper:getPlayer(),
"param2 must be a player color or \"all\""
)
end
return true
end
})
registerCommand({
name = "setGravity",
alias = {"setg"},
group = "cheat",
argDescription = "x",
description = "set the gravity of the game",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) or S2R(param1) == 0 and param1 ~= "0" then
return true
end
Gravity.SetGravity(S2R(param1))
Text.P(
escaper:getPlayer(),
"gravity changed"
)
return true
end
})
registerCommand({
name = "getGravity",
alias = {"getg"},
group = "cheat",
argDescription = "",
description = "get the gravity of the game",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
Text.P(
escaper:getPlayer(),
"current gravity is " .. R2S(Gravity.GetRealGravity())
)
end
return true
end
})
registerCommand({
name = "setVTOTODiagonalSlideLogic",
alias = {"setvtoto"},
group = "cheat",
argDescription = "<boolean status>",
description = "Allows you to slide diagonally",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
Text.erP(
escaper:getPlayer(),
"one param for this command"
)
return true
end
if not IsBoolString(param1) then
Text.erP(
escaper:getPlayer(),
"invalid boolean"
)
return true
end
globals.USE_VTOTO_SLIDE_LOGIC = S2B(param1)
Text.A((S2B(param1) and "Enabled" or "Disabled") .. " vToto diagonal slide logic")
return true
end
})
registerCommand({
name = "getVTOTODiagonalSlideLogic",
alias = {"getvtoto"},
group = "cheat",
argDescription = "",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
Text.P(
escaper:getPlayer(),
"vToto is " .. (globals.USE_VTOTO_SLIDE_LOGIC and "enabled" or "disabled")
)
end
return true
end
})
registerCommand({
name = "setCoopCircles",
alias = {},
group = "cheat",
argDescription = "<boolean status>",
description = "Disables coop circles",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
Text.erP(
escaper:getPlayer(),
"one param for this command"
)
return true
end
if not IsBoolString(param1) then
Text.erP(
escaper:getPlayer(),
"invalid boolean"
)
return true
end
globals.coopCircles = S2B(param1)
Text.A((S2B(param1) and "Enabled" or "Disabled") .. " coopCircles")
return true
end
})
registerCommand({
name = "getCoopCircles",
alias = {},
group = "cheat",
argDescription = "",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
Text.P(
escaper:getPlayer(),
"Coop circles are " .. (globals.coopCircles and "enabled" or "disabled")
)
end
return true
end
})
registerCommand({
name = "setCanTurnInAir",
alias = {},
group = "cheat",
argDescription = "<boolean status>",
description = "Allows you to turn in air",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
Text.erP(
escaper:getPlayer(),
"one param for this command"
)
return true
end
if not IsBoolString(param1) then
Text.erP(
escaper:getPlayer(),
"invalid boolean"
)
return true
end
globals.CAN_TURN_IN_AIR = S2B(param1)
Text.A((S2B(param1) and "Enabled" or "Disabled") .. " canTurnInAir")
return true
end
})
registerCommand({
name = "getCanTurnInAir",
alias = {},
group = "cheat",
argDescription = "",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
Text.P(
escaper:getPlayer(),
"Can turn in air is " .. (globals.CAN_TURN_IN_AIR and "enabled" or "disabled")
)
end
return true
end
})
registerCommand({
name = "setHeight",
alias = {"seth"},
group = "cheat",
argDescription = "",
description = "set the height of the game",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 or S2R(param1) <= 0 and param1 ~= "0" then
return true
end
local h1 = escaper:getHero()
local ____GetMirrorEscaper_result_getHero_result_39 = GetMirrorEscaper(escaper)
if ____GetMirrorEscaper_result_getHero_result_39 ~= nil then
____GetMirrorEscaper_result_getHero_result_39 = ____GetMirrorEscaper_result_getHero_result_39:getHero()
end
local h2 = ____GetMirrorEscaper_result_getHero_result_39
local ____ = h1 and SetUnitFlyHeight(
h1,
S2R(param1),
0
)
local ____ = h2 and SetUnitFlyHeight(
h2,
S2R(param1),
0
)
return true
end
})
registerCommand({
name = "setTailleUnit",
alias = {"settu"},
group = "cheat",
argDescription = "",
description = "set the size of the units",
cb = function(____, ____bindingPattern0)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 or S2R(param1) <= 0 and param1 ~= "0" then
return true
end
Trig_InvisUnit_is_getting_damage.setTailleUnite(S2R(param1))
return true
end
})
registerCommand({
name = "instantTurn",
alias = {"it"},
group = "cheat",
argDescription = "",
description = "instant turn",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam == 1 and IsBoolString(param1) then
if escaper:isAbsoluteInstantTurn() ~= S2B(param1) then
escaper:setAbsoluteInstantTurn(S2B(param1))
if S2B(param1) then
Text.P(
escaper:getPlayer(),
"instant turn on"
)
else
Text.P(
escaper:getPlayer(),
"instant turn off"
)
end
end
end
return true
end
})
registerCommand({
name = "slidingMode",
alias = {},
group = "all",
argDescription = "[normal] | [max] | []",
description = "Run commands on start of the game",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local cmd = ____bindingPattern0.cmd
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam == 0 then
Text.mkP(
escaper:getPlayer(),
"your sliding mode is " .. escaper.slidingMode
)
end
if nbParam == 1 then
if param1 == "max" or param1 == "normal" then
escaper.slidingMode = param1
Text.mkP(
escaper:getPlayer(),
"changed sliding mode"
)
else
Text.erP(
escaper:getPlayer(),
"wrong sliding mode"
)
end
end
return true
end
})
end
return ____exports
end,
["src.core.06_COMMANDS.COMMANDS_vJass.Command_first_player"] = function(...)
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____ThemeUtils = require("src.Utils.ThemeUtils")
local ThemeUtils = ____ThemeUtils.ThemeUtils
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsBoolString = ____Basic_functions.IsBoolString
local S2B = ____Basic_functions.S2B
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local NB_MAX_OF_TERRAINS = ____Constants.NB_MAX_OF_TERRAINS
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Terrain_type_from_string = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_from_string")
local TerrainTypeFromString = ____Terrain_type_from_string.TerrainTypeFromString
local ____Reinit_terrains_position_Change_variations_and_ut_at_beginning = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Reinit_terrains_position_Change_variations_and_ut_at_beginning")
local ReinitTerrainsPositions = ____Reinit_terrains_position_Change_variations_and_ut_at_beginning.ReinitTerrainsPositions
local ____globals_variables_and_triggers = require("src.core.09_From_old_Worldedit_triggers.globals_variables_and_triggers")
local Globals = ____globals_variables_and_triggers.Globals
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local getUdgLevels = ____globals.getUdgLevels
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local isPlayerId = ____Command_functions.isPlayerId
local resolvePlayerId = ____Command_functions.resolvePlayerId
local resolvePlayerIds = ____Command_functions.resolvePlayerIds
____exports.initExecuteCommandRed = function()
local ____ServiceManager_getService_result_0 = ServiceManager.getService("Cmd")
local registerCommand = ____ServiceManager_getService_result_0.registerCommand
registerCommand({
name = "kill",
alias = {"kl"},
group = "red",
argDescription = "<Pcolor>",
description = "Kills a hero",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
if escaper:isTrueMaximaxou() then
if isPlayerId(param1) then
if getUdgEscapers():get(resolvePlayerId(param1)) ~= nil then
local ____getUdgEscapers_result_get_result_kill_result_1 = getUdgEscapers():get(resolvePlayerId(param1))
if ____getUdgEscapers_result_get_result_kill_result_1 ~= nil then
____getUdgEscapers_result_get_result_kill_result_1 = ____getUdgEscapers_result_get_result_kill_result_1:kill()
end
end
return true
end
if param1 == "all" or param1 == "a" then
for _, esc in pairs(getUdgEscapers():getAll()) do
if escaper ~= esc and not esc:isEscaperSecondary() then
esc:kill()
end
end
end
return true
end
local ____isPlayerId_result_5 = isPlayerId(param1)
if ____isPlayerId_result_5 then
local ____getUdgEscapers_result_get_result_canCheat_result_3 = getUdgEscapers():get(resolvePlayerId(param1))
if ____getUdgEscapers_result_get_result_canCheat_result_3 ~= nil then
____getUdgEscapers_result_get_result_canCheat_result_3 = ____getUdgEscapers_result_get_result_canCheat_result_3:canCheat()
end
____isPlayerId_result_5 = not ____getUdgEscapers_result_get_result_canCheat_result_3
end
if ____isPlayerId_result_5 then
if getUdgEscapers():get(resolvePlayerId(param1)) ~= nil then
local ____getUdgEscapers_result_get_result_kill_result_6 = getUdgEscapers():get(resolvePlayerId(param1))
if ____getUdgEscapers_result_get_result_kill_result_6 ~= nil then
____getUdgEscapers_result_get_result_kill_result_6 = ____getUdgEscapers_result_get_result_kill_result_6:kill()
end
end
end
return true
end
})
registerCommand({
name = "kick",
alias = {"kc"},
group = "red",
argDescription = "<Pcolor>",
description = "Kicks a player",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
if escaper:isTrueMaximaxou() then
if isPlayerId(param1) then
local target = getUdgEscapers():get(resolvePlayerId(param1))
if target ~= nil then
escaper:kick(target)
end
return true
end
if param1 == "all" or param1 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
local target = getUdgEscapers():get(i)
if target ~= escaper and target ~= nil then
escaper:kick(target)
end
i = i + 1
end
end
return true
end
local target = getUdgEscapers():get(resolvePlayerId(param1))
local ____isPlayerId_result_10 = isPlayerId(param1)
if ____isPlayerId_result_10 then
local ____target_canCheat_result_8 = target
if ____target_canCheat_result_8 ~= nil then
____target_canCheat_result_8 = ____target_canCheat_result_8:canCheat()
end
____isPlayerId_result_10 = not ____target_canCheat_result_8
end
if ____isPlayerId_result_10 then
if target ~= nil then
escaper:kick(target)
end
end
return true
end
})
registerCommand({
name = "restart",
alias = {},
group = "red",
argDescription = "",
description = "Restarts the game",
cb = function(____, ____bindingPattern0)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
getUdgLevels():restartTheGame()
end
return true
end
})
registerCommand({
name = "restartLevel",
alias = {},
group = "red",
argDescription = "",
description = "Restarts the level",
cb = function(____, ____bindingPattern0)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
getUdgLevels():restartCurrentLevel()
end
return true
end
})
registerCommand({
name = "noobedit",
alias = {"ne"},
group = "red",
argDescription = "<active>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if nbParam == 2 and IsBoolString(param1) then
globals.autoreviveDelay = 0.3
resolvePlayerIds(
param2,
function(e)
if S2B(param1) then
Text.P(
escaper:getPlayer(),
"Really? Noobs!"
)
if e:getId() ~= escaper:getId() then
Text.P(
e:getPlayer(),
"Really? Noobs!"
)
end
e.isNoobedit = true
e:setHasAutorevive(true)
else
Text.P(
escaper:getPlayer(),
"That's better, but you're still Noobs!"
)
if e:getId() ~= escaper:getId() then
Text.P(
e:getPlayer(),
"That's better, but you're still Noobs!"
)
end
e.isNoobedit = false
e:setHasAutorevive(false)
end
end
)
end
if nbParam == 1 and IsBoolString(param1) then
if S2B(param1) then
Text.A("Really? Noobs!")
else
if getUdgLevels():isNoobEdit() then
Text.A("That's better, but you're still Noobs!")
end
end
getUdgLevels():setIsNoobEdit(S2B(param1))
end
return true
end
})
registerCommand({
name = "speededit",
alias = {"se"},
group = "red",
argDescription = "<active> [player]",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if #param2 == 0 then
param2 = "all"
end
if (nbParam == 1 or nbParam == 2) and IsBoolString(param1) then
resolvePlayerIds(
param2,
function(e)
if S2B(param1) then
Text.P(
e:getPlayer(),
"Letsgoooooo!"
)
if e:getId() ~= escaper:getId() and nbParam == 2 then
Text.P(
escaper:getPlayer(),
"Letsgoooooo!"
)
end
e.isSpeedEdit = true
e:absoluteSlideSpeed(800, true)
e:absoluteRotationSpeed(1.34)
else
Text.P(
e:getPlayer(),
"Speed disabled"
)
if e:getId() ~= escaper:getId() and nbParam == 2 then
Text.P(
escaper:getPlayer(),
"Speed disabled"
)
end
e.isSpeedEdit = false
e:stopAbsoluteSlideSpeed(true)
e:stopAbsoluteRotationSpeed()
end
end
)
getUdgLevels():setIsSpeedEdit(S2B(param1))
end
return true
end
})
registerCommand({
name = "setLevelProgression",
alias = {"setlp"},
group = "red",
argDescription = "<all|allied|solo> [player]",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
if param1 ~= "all" and param1 ~= "allied" and param1 ~= "solo" then
Text.erP(
escaper:getPlayer(),
"Invalid mode"
)
return true
end
Text.A("Level progression changed to: " .. param1)
getUdgLevels():setLevelProgression(param1)
return true
end
})
registerCommand({
name = "setPointsEnabled",
alias = {"setpe"},
group = "red",
argDescription = "<bool>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
if not IsBoolString(param1) then
return true
end
local enabled = S2B(param1)
ServiceManager.getService("Multiboard").setPointsEnabled(enabled)
Text.P(
escaper:getPlayer(),
"Points have been " .. (enabled and "enabled" or "disabled")
)
return true
end
})
registerCommand({
name = "adjustPlayerPoints",
alias = {"adjustpp"},
group = "red",
argDescription = "<playerId> <points>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
local playerId = resolvePlayerId(param1)
local points = S2I(param2)
ServiceManager.getService("Multiboard").adjustPlayerPoints(playerId, points)
local ____Text_P_14 = Text.P
local ____temp_13 = escaper:getPlayer()
local ____getUdgEscapers_result_get_result_getDisplayName_result_11 = getUdgEscapers():get(playerId)
if ____getUdgEscapers_result_get_result_getDisplayName_result_11 ~= nil then
____getUdgEscapers_result_get_result_getDisplayName_result_11 = ____getUdgEscapers_result_get_result_getDisplayName_result_11:getDisplayName()
end
____Text_P_14(
____temp_13,
(("Player " .. tostring(____getUdgEscapers_result_get_result_getDisplayName_result_11)) .. " points adjusted by ") .. tostring(points)
)
return true
end
})
registerCommand({
name = "setPlayerPoints",
alias = {"setpp"},
group = "red",
argDescription = "<playerId> <points>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
local playerId = resolvePlayerId(param1)
local points = S2I(param2)
ServiceManager.getService("Multiboard").setPlayerPoints(playerId, points)
local ____Text_P_18 = Text.P
local ____temp_17 = escaper:getPlayer()
local ____getUdgEscapers_result_get_result_getDisplayName_result_15 = getUdgEscapers():get(playerId)
if ____getUdgEscapers_result_get_result_getDisplayName_result_15 ~= nil then
____getUdgEscapers_result_get_result_getDisplayName_result_15 = ____getUdgEscapers_result_get_result_getDisplayName_result_15:getDisplayName()
end
____Text_P_18(
____temp_17,
(("Player " .. tostring(____getUdgEscapers_result_get_result_getDisplayName_result_15)) .. " points set to ") .. tostring(points)
)
return true
end
})
registerCommand({
name = "setGameTheme",
alias = {},
group = "red",
argDescription = "<theme>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
if IsBoolString(param1) and not S2B(param1) then
ThemeUtils.setCurrentTheme(nil)
ReinitTerrainsPositions.ReinitTerrainsPosition()
return true
end
if param1 ~= "fullskill" and param1 ~= "murloc" then
Text.P(
escaper:getPlayer(),
"Invalid theme: " .. table.concat({"fullskill", "murloc"}, ", ")
)
return true
end
local availableTerrains = NB_MAX_OF_TERRAINS - Globals.udg_nb_used_terrains
local createTerrains = 0
local tt = getUdgTerrainTypes()
local availableThemes = ThemeUtils.availableThemes
if not tt:getByCode(availableThemes[param1].slideTerrain) then
createTerrains = createTerrains + 1
end
if not tt:getByCode(availableThemes[param1].deathTerrain) then
createTerrains = createTerrains + 1
end
if not tt:getByCode(availableThemes[param1].walkTerrain) then
createTerrains = createTerrains + 1
end
if createTerrains > availableTerrains then
Text.P(
escaper:getPlayer(),
("Failed, limit of " .. tostring(NB_MAX_OF_TERRAINS)) .. " terrain types reached"
)
return true
end
for ____, terrainOrder in ipairs(availableThemes[param1].terrainOrder) do
if terrainOrder == "slide" then
if not tt:getByCode(availableThemes[param1].slideTerrain) then
tt:newSlide(
("sgt" .. param1) .. "s",
TerrainTypeFromString.TerrainTypeString2TerrainTypeId(("'" .. availableThemes[param1].slideTerrain) .. "'"),
550,
true
)
end
elseif terrainOrder == "death" then
if not tt:getByCode(availableThemes[param1].deathTerrain) then
tt:newDeath(
("sgt" .. param1) .. "d",
TerrainTypeFromString.TerrainTypeString2TerrainTypeId(("'" .. availableThemes[param1].deathTerrain) .. "'"),
"Abilities\\Spells\\NightElf\\EntanglingRoots\\EntanglingRootsTarget.mdl",
0.2,
20
)
end
elseif terrainOrder == "walk" then
if not tt:getByCode(availableThemes[param1].walkTerrain) then
tt:newWalk(
("sgt" .. param1) .. "w",
TerrainTypeFromString.TerrainTypeString2TerrainTypeId(("'" .. availableThemes[param1].walkTerrain) .. "'"),
522
)
end
end
end
ThemeUtils.setCurrentTheme(param1)
ThemeUtils.applyGameTheme()
local slideTerrain = tt:getByCode(availableThemes[param1].slideTerrain)
local deathTerrain = tt:getByCode(availableThemes[param1].deathTerrain)
local walkTerrain = tt:getByCode(availableThemes[param1].walkTerrain)
if not slideTerrain or not deathTerrain or not walkTerrain then
return true
end
for _, terrainType in pairs(getUdgTerrainTypes():getAll()) do
for ____, terrainOrder in ipairs(availableThemes[param1].terrainOrder) do
if terrainOrder == "slide" and terrainType.kind == "slide" and terrainType.terrainTypeId ~= slideTerrain.terrainTypeId then
ThemeUtils.modifyTerrain(
terrainType.terrainTypeId,
TerrainTypeFromString.TerrainTypeString2TerrainTypeId(("'" .. availableThemes[param1].slideTerrain) .. "'")
)
elseif terrainOrder == "death" and terrainType.kind == "death" and terrainType.terrainTypeId ~= deathTerrain.terrainTypeId then
ThemeUtils.modifyTerrain(
terrainType.terrainTypeId,
TerrainTypeFromString.TerrainTypeString2TerrainTypeId(("'" .. availableThemes[param1].deathTerrain) .. "'")
)
elseif terrainOrder == "walk" and terrainType.kind == "walk" and terrainType.terrainTypeId ~= walkTerrain.terrainTypeId then
ThemeUtils.modifyTerrain(
terrainType.terrainTypeId,
TerrainTypeFromString.TerrainTypeString2TerrainTypeId(("'" .. availableThemes[param1].walkTerrain) .. "'")
)
end
end
end
Text.A(("Welcome to: " .. param1) .. " 2.0")
return true
end
})
end
return ____exports
end,
["src.core.07_TRIGGERS.Triggers_to_modify_terrains.Randomize_terrains"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local function initRandomizeTerrains()
local oldTerrainTypes = {}
local newTerrainTypes = {}
local lastTerrainArrayId
local function ModifyTerrain()
local y = globals.MAP_MIN_Y
while y <= globals.MAP_MAX_Y do
local x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
local terrainTypeId = GetTerrainType(x, y)
local done = false
local j = 0
while j <= lastTerrainArrayId and not done do
if terrainTypeId == oldTerrainTypes[j + 1] then
ChangeTerrainType(x, y, newTerrainTypes[j + 1])
done = true
end
j = j + 1
end
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
end
local function RandomizeTerrains()
local isTaken = {}
local terrainTypes = {}
local i = 0
local n = 0
for _, terrainType in pairs(getUdgTerrainTypes():getAll()) do
terrainTypes[n + 1] = terrainType
oldTerrainTypes[n + 1] = terrainType:getTerrainTypeId()
n = n + 1
end
lastTerrainArrayId = n - 1
i = 0
while true do
if i > lastTerrainArrayId then
break
end
isTaken[i + 1] = false
i = i + 1
end
i = 0
while true do
if i > lastTerrainArrayId then
break
end
while true do
n = GetRandomInt(0, lastTerrainArrayId)
if not isTaken[n + 1] then
break
end
end
isTaken[n + 1] = true
newTerrainTypes[i + 1] = oldTerrainTypes[n + 1]
i = i + 1
end
ModifyTerrain()
i = 0
while true do
if i > lastTerrainArrayId then
break
end
terrainTypes[i + 1]:setTerrainTypeId(newTerrainTypes[i + 1])
i = i + 1
end
end
return {RandomizeTerrains = RandomizeTerrains}
end
____exports.RandomizeTerrains = initRandomizeTerrains()
return ____exports
end,
["src.core.07_TRIGGERS.Triggers_to_modify_terrains.Change_one_terrain"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____globals = require("globals")
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local globals = ____globals.globals
local ____Modify_terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Modify_terrain_functions")
local ChangeTerrainType = ____Modify_terrain_functions.ChangeTerrainType
local ____Terrain_functions = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_functions")
local GetTerrainData = ____Terrain_functions.GetTerrainData
local ____Terrain_type_from_string = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_from_string")
local TerrainTypeFromString = ____Terrain_type_from_string.TerrainTypeFromString
local function initChangeOneTerrain()
local oldTerrain
local newTerrain
local function ModifyTerrain()
local y = globals.MAP_MIN_Y
while y <= globals.MAP_MAX_Y do
local x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
if GetTerrainType(x, y) == oldTerrain then
ChangeTerrainType(x, y, newTerrain)
end
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
end
local function ChangeOneTerrain(terrainTypeLabel, newTerrainType)
local terrainType = getUdgTerrainTypes():getByLabel(terrainTypeLabel)
if terrainType == nil then
error(("Wrong terrain label \"" .. terrainTypeLabel) .. "\"", 0)
end
oldTerrain = terrainType:getTerrainTypeId()
newTerrain = TerrainTypeFromString.TerrainTypeString2TerrainTypeId(newTerrainType)
if newTerrain == 0 then
error(("New terrain \"" .. newTerrainType) .. "\" unknown", 0)
end
if getUdgTerrainTypes():isTerrainTypeIdAlreadyUsed(newTerrain) then
error(("Terrain \"" .. newTerrainType) .. "\" already in use", 0)
end
if not terrainType:setTerrainTypeId(newTerrain) then
error("Terrain tiles number limit reached", 0)
end
ModifyTerrain()
return GetTerrainData(newTerrain)
end
return {ChangeOneTerrain = ChangeOneTerrain}
end
____exports.ChangeOneTerrain = initChangeOneTerrain()
return ____exports
end,
["src.core.06_COMMANDS.COMMANDS_vJass.Command_make"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
local ____exports = {}
local ____Ascii = require("src.core.01_libraries.Ascii")
local String2Ascii = ____Ascii.String2Ascii
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local convertTextToAngle = ____Basic_functions.convertTextToAngle
local IsBoolString = ____Basic_functions.IsBoolString
local S2B = ____Basic_functions.S2B
local tileset2tilesetString = ____Basic_functions.tileset2tilesetString
local ____Constants = require("src.core.01_libraries.Constants")
local DEFAULT_MONSTER_SPEED = ____Constants.DEFAULT_MONSTER_SPEED
local HERO_SLIDE_SPEED = ____Constants.HERO_SLIDE_SPEED
local HERO_WALK_SPEED = ____Constants.HERO_WALK_SPEED
local MAX_MOVE_SPEED = ____Constants.MAX_MOVE_SPEED
local RED = ____Constants.RED
local TERRAIN_DEATH_TIME_TO_KILL = ____Constants.TERRAIN_DEATH_TIME_TO_KILL
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____Immolation_skills = require("src.core.04_STRUCTURES.Monster.Immolation_skills")
local IMMOLATION_SKILLS = ____Immolation_skills.IMMOLATION_SKILLS
local ____PortalMob = require("src.core.04_STRUCTURES.Monster_properties.PortalMob")
local PORTAL_MOB_MAX_FREEZE_DURATION = ____PortalMob.PORTAL_MOB_MAX_FREEZE_DURATION
local ____TerrainTypeDeath = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeDeath")
local DEATH_TERRAIN_MAX_TOLERANCE = ____TerrainTypeDeath.DEATH_TERRAIN_MAX_TOLERANCE
local TerrainTypeDeath = ____TerrainTypeDeath.TerrainTypeDeath
local ____TerrainTypeSlide = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeSlide")
local TerrainTypeSlide = ____TerrainTypeSlide.TerrainTypeSlide
local ____TerrainTypeWalk = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeWalk")
local TerrainTypeWalk = ____TerrainTypeWalk.TerrainTypeWalk
local ____Exchange_terrains = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Exchange_terrains")
local ExchangeTerrains = ____Exchange_terrains.ExchangeTerrains
local ____Randomize_terrains = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Randomize_terrains")
local RandomizeTerrains = ____Randomize_terrains.RandomizeTerrains
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____globals = require("globals")
local getUdgCasterTypes = ____globals.getUdgCasterTypes
local getUdgLevels = ____globals.getUdgLevels
local getUdgMonsterTypes = ____globals.getUdgMonsterTypes
local getUdgTerrainTypes = ____globals.getUdgTerrainTypes
local ____Functions_on_numbers = require("src.core.01_libraries.Functions_on_numbers")
local IsInteger = ____Functions_on_numbers.IsInteger
local IsPositiveInteger = ____Functions_on_numbers.IsPositiveInteger
local ____CasterType = require("src.core.04_STRUCTURES.Caster.CasterType")
local DEFAULT_CASTER_ANIMATION = ____CasterType.DEFAULT_CASTER_ANIMATION
local DEFAULT_CASTER_LOAD_TIME = ____CasterType.DEFAULT_CASTER_LOAD_TIME
local DEFAULT_CASTER_PROJECTILE_SPEED = ____CasterType.DEFAULT_CASTER_PROJECTILE_SPEED
local DEFAULT_CASTER_RANGE = ____CasterType.DEFAULT_CASTER_RANGE
local MIN_CASTER_LOAD_TIME = ____CasterType.MIN_CASTER_LOAD_TIME
local MIN_CASTER_PROJECTILE_SPEED = ____CasterType.MIN_CASTER_PROJECTILE_SPEED
local ____MonsterTeleport = require("src.core.04_STRUCTURES.Monster.MonsterTeleport")
local MONSTER_TELEPORT_PERIOD_MAX = ____MonsterTeleport.MONSTER_TELEPORT_PERIOD_MAX
local MONSTER_TELEPORT_PERIOD_MIN = ____MonsterTeleport.MONSTER_TELEPORT_PERIOD_MIN
local ____ClearMob = require("src.core.04_STRUCTURES.Monster_properties.ClearMob")
local CLEAR_MOB_MAX_DURATION = ____ClearMob.CLEAR_MOB_MAX_DURATION
local FRONT_MONTANT_DURATION = ____ClearMob.FRONT_MONTANT_DURATION
local ____MakeMonsterSimplePatrol = require("src.core.05_MAKE_STRUCTURES.Make_create_monsters.MakeMonsterSimplePatrol")
local MakeMonsterSimplePatrol = ____MakeMonsterSimplePatrol.MakeMonsterSimplePatrol
local ____Terrain_type_from_string = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_from_string")
local TerrainTypeFromString = ____Terrain_type_from_string.TerrainTypeFromString
local ____SlidingMax = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.SlidingMax")
local HERO_ROTATION_SPEED = ____SlidingMax.HERO_ROTATION_SPEED
local ____Change_all_terrains = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Change_all_terrains")
local ChangeAllTerrains = ____Change_all_terrains.ChangeAllTerrains
local ____Change_one_terrain = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Change_one_terrain")
local ChangeOneTerrain = ____Change_one_terrain.ChangeOneTerrain
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local CmdParam = ____Command_functions.CmdParam
____exports.initExecuteCommandMake = function()
local ____ServiceManager_getService_result_0 = ServiceManager.getService("Cmd")
local registerCommand = ____ServiceManager_getService_result_0.registerCommand
registerCommand({
name = "newWalk",
alias = {"neww"},
group = "make",
argDescription = "<label> <terrainType> [<walkSpeed>]",
description = "add a new kind of walk terrain",
cb = function(____, ____bindingPattern0, escaper)
local param3
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
param3 = ____bindingPattern0.param3
if nbParam < 2 or nbParam > 3 then
return true
end
local speed = 0
if nbParam == 3 then
if not IsPositiveInteger(param3) or S2R(param3) > 522 then
Text.erP(
escaper:getPlayer(),
"wrong speed value, should be a real between 0 and 522"
)
return true
end
speed = S2R(param3)
else
speed = HERO_WALK_SPEED
end
getUdgTerrainTypes():newWalk(
param1,
TerrainTypeFromString.TerrainTypeString2TerrainTypeId(param2),
speed
)
Text.mkP(
escaper:getPlayer(),
("New terrain type \"" .. param1) .. "\" added"
)
return true
end
})
registerCommand({
name = "newDeath",
alias = {"newd"},
group = "make",
argDescription = "<label> <terrainType> [<killingEffect> [<terrainTimeToKill>]]",
description = "add a new kind of death terrain",
cb = function(____, ____bindingPattern0, escaper)
local param4
local param3
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
param3 = ____bindingPattern0.param3
param4 = ____bindingPattern0.param4
if nbParam < 2 or nbParam > 4 then
return true
end
local str = ""
local x = 0
if nbParam >= 3 then
str = param3
else
str = ""
end
if nbParam == 4 then
if param4 ~= "0" and S2R(param4) == 0 then
return true
end
x = S2R(param4)
else
x = TERRAIN_DEATH_TIME_TO_KILL
end
getUdgTerrainTypes():newDeath(
param1,
TerrainTypeFromString.TerrainTypeString2TerrainTypeId(param2),
str,
x,
0
)
Text.mkP(
escaper:getPlayer(),
("New terrain type \"" .. param1) .. "\" added"
)
return true
end
})
registerCommand({
name = "newSlide",
alias = {"news"},
group = "make",
argDescription = "<label> <terrainType> [<slideSpeed> [<canTurn>]]",
description = "add a new kind of slide terrain",
cb = function(____, ____bindingPattern0, escaper)
local param4
local param3
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
param3 = ____bindingPattern0.param3
param4 = ____bindingPattern0.param4
if nbParam < 2 or nbParam > 4 then
return true
end
local speed = 0
local b = false
if nbParam >= 3 then
if not IsInteger(param3) then
Text.erP(
escaper:getPlayer(),
"the slide speed must be an integer"
)
return true
end
speed = S2R(param3)
else
speed = HERO_SLIDE_SPEED
end
if nbParam == 4 then
if not IsBoolString(param4) then
Text.erP(
escaper:getPlayer(),
"the property \"canTurn\" must be a boolean (true or false)"
)
return true
end
b = S2B(param4)
else
b = true
end
getUdgTerrainTypes():newSlide(
param1,
TerrainTypeFromString.TerrainTypeString2TerrainTypeId(param2),
speed,
b
)
Text.mkP(
escaper:getPlayer(),
("New terrain type \"" .. param1) .. "\" added"
)
return true
end
})
registerCommand({
name = "setTerrainLabel",
alias = {"settl"},
group = "make",
argDescription = "<oldTerrainLabel> <newTerrainLabel>",
description = "change the label of a terrain type",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local b = not not getUdgTerrainTypes():getByLabel(param1)
if b then
b = not getUdgTerrainTypes():isLabelAlreadyUsed(param2)
end
if b then
local ____getUdgTerrainTypes_result_getByLabel_result_setLabel_result_1 = getUdgTerrainTypes():getByLabel(param1)
if ____getUdgTerrainTypes_result_getByLabel_result_setLabel_result_1 ~= nil then
____getUdgTerrainTypes_result_getByLabel_result_setLabel_result_1 = ____getUdgTerrainTypes_result_getByLabel_result_setLabel_result_1:setLabel(param2)
end
Text.mkP(
escaper:getPlayer(),
("label changed to \"" .. param2) .. "\""
)
else
Text.erP(
escaper:getPlayer(),
"impossible to change label"
)
end
return true
end
})
registerCommand({
name = "setTerrainAlias",
alias = {"setta"},
group = "make",
argDescription = "<terrainLabel> <alias>",
description = "an alias is a shortcut which can be used like a label",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local b = not not getUdgTerrainTypes():getByLabel(param1)
if b then
b = not getUdgTerrainTypes():isLabelAlreadyUsed(param2)
end
if b then
local ____getUdgTerrainTypes_result_getByLabel_result_setAlias_result_3 = getUdgTerrainTypes():getByLabel(param1)
if ____getUdgTerrainTypes_result_getByLabel_result_setAlias_result_3 ~= nil then
____getUdgTerrainTypes_result_getByLabel_result_setAlias_result_3 = ____getUdgTerrainTypes_result_getByLabel_result_setAlias_result_3:setAlias(param2)
end
Text.mkP(
escaper:getPlayer(),
("Alias changed to \"" .. param2) .. "\""
)
else
Text.erP(
escaper:getPlayer(),
"Impossible to change alias"
)
end
return true
end
})
registerCommand({
name = "setTerrainWalkSpeed",
alias = {"settws"},
group = "make",
argDescription = "<walkTerrainLabel> <walkSpeed>",
description = "max walk speed : 522",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local terrainType = getUdgTerrainTypes():getByLabel(param1)
if not terrainType then
Text.erP(
escaper:getPlayer(),
"Unknown terrain"
)
return true
end
if not __TS__InstanceOf(terrainType, TerrainTypeWalk) then
Text.erP(
escaper:getPlayer(),
"The terrain must be of walk type"
)
return true
end
if not IsPositiveInteger(param2) or S2R(param2) > 522 then
Text.erP(
escaper:getPlayer(),
"Wrong speed value, should be a real between 0 and 522"
)
return true
end
terrainType:setWalkSpeed(S2R(param2))
Text.mkP(
escaper:getPlayer(),
"Terrain walk speed changed"
)
return true
end
})
registerCommand({
name = "setTerrainKillEffect",
alias = {"settke"},
group = "make",
argDescription = "<deathTerrainLabel> <killingEffect>",
description = "special effect appearing when a hero touch the death terrain",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local terrainType = getUdgTerrainTypes():getByLabel(param1)
if not terrainType then
Text.erP(
escaper:getPlayer(),
"Unknown terrain"
)
return true
end
if not __TS__InstanceOf(terrainType, TerrainTypeDeath) then
Text.erP(
escaper:getPlayer(),
"The terrain must be of death type"
)
return true
end
terrainType:setKillingEffectStr(param2)
Text.mkP(
escaper:getPlayer(),
"Terrain kill effect changed"
)
return true
end
})
registerCommand({
name = "setTerrainKillDelay",
alias = {"settkd"},
group = "make",
argDescription = "<deathTerrainLabel> <killingDelay>",
description = "time before which the hero dies when he touch the death terrain",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local terrainType = getUdgTerrainTypes():getByLabel(param1)
if not terrainType then
Text.erP(
escaper:getPlayer(),
"unknown terrain"
)
return true
end
if not __TS__InstanceOf(terrainType, TerrainTypeDeath) then
Text.erP(
escaper:getPlayer(),
"the terrain must be of death type"
)
return true
end
if param2 ~= "0" and S2R(param2) == 0 then
Text.erP(
escaper:getPlayer(),
"wrong delay value"
)
return true
end
terrainType:setTimeToKill(S2R(param2))
Text.mkP(
escaper:getPlayer(),
"terrain kill delay changed"
)
return true
end
})
registerCommand({
name = "setTerrainKillTolerance",
alias = {"settkt"},
group = "make",
argDescription = "<deathTerrainLabel> <tolerance dist>",
description = "max distance to the closest non death terrain, where heroes won't die",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local terrainType = getUdgTerrainTypes():getByLabel(param1)
if not terrainType then
Text.erP(
escaper:getPlayer(),
"unknown terrain"
)
return true
end
if not __TS__InstanceOf(terrainType, TerrainTypeDeath) then
Text.erP(
escaper:getPlayer(),
"the terrain must be of death type"
)
return true
end
if param2 ~= "0" and S2R(param2) == 0 then
Text.erP(
escaper:getPlayer(),
"wrong tolerance value"
)
return true
end
if terrainType:setToleranceDist(S2R(param2)) then
Text.mkP(
escaper:getPlayer(),
"tolerance distance changed"
)
else
Text.erP(
escaper:getPlayer(),
"tolerance must be between 0 and " .. R2S(DEATH_TERRAIN_MAX_TOLERANCE)
)
end
return true
end
})
registerCommand({
name = "setTerrainSlideSpeed",
alias = {"settss"},
group = "make",
argDescription = "<slideTerrainLabel> <slideSpeed>",
description = "max slide speed : 522",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local terrainType = getUdgTerrainTypes():getByLabel(param1)
if not terrainType then
Text.erP(
escaper:getPlayer(),
"unknown terrain"
)
return true
end
if not __TS__InstanceOf(terrainType, TerrainTypeSlide) then
Text.erP(
escaper:getPlayer(),
"the terrain must be of slide type"
)
return true
end
if not IsInteger(param2) then
Text.erP(
escaper:getPlayer(),
"wrong speed value"
)
return true
end
terrainType:setSlideSpeed(S2R(param2))
Text.mkP(
escaper:getPlayer(),
"terrain slide speed changed"
)
return true
end
})
registerCommand({
name = "setTerrainRotationSpeed",
alias = {"settrs"},
group = "make",
argDescription = "<slideTerrainLabel> <rotationSpeed>",
description = "You have to specify rounds per second. Example : 1.3. Normal speed is 1; You can specify \"default\" | \"d\".",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local terrainType = getUdgTerrainTypes():getByLabel(param1)
if not terrainType then
Text.erP(
escaper:getPlayer(),
"unknown terrain"
)
return true
end
if not __TS__InstanceOf(terrainType, TerrainTypeSlide) then
Text.erP(
escaper:getPlayer(),
"the terrain must be of slide type"
)
return true
end
local speed
if param2 == "d" or param2 == "default" then
speed = HERO_ROTATION_SPEED
elseif S2R(param2) <= 0 then
Text.erP(
escaper:getPlayer(),
"the rotation speed must be positive"
)
return true
else
speed = S2R(param2)
end
terrainType:setRotationSpeed(speed)
Text.mkP(
escaper:getPlayer(),
"terrain rotation speed changed"
)
return true
end
})
registerCommand({
name = "setTerrainGravity",
alias = {"settg"},
group = "make",
argDescription = "<terrainLabel> <gravity>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) or S2R(param2) == 0 and param2 ~= "0" then
return true
end
local terrainType = getUdgTerrainTypes():getByLabel(param1)
if not terrainType then
Text.erP(
escaper:getPlayer(),
"unknown terrain"
)
return true
end
terrainType:setGravity(S2R(param2))
Text.mkP(
escaper:getPlayer(),
"terrain gravity changed"
)
return true
end
})
registerCommand({
name = "setTerrainCanTurn",
alias = {"settct"},
group = "make",
argDescription = "<slideTerrainLabel> <canTurn>",
description = "can the hero turn when he slide on the terrain",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local terrainType = getUdgTerrainTypes():getByLabel(param1)
if not terrainType then
Text.erP(
escaper:getPlayer(),
"unknown terrain"
)
return true
end
if not __TS__InstanceOf(terrainType, TerrainTypeSlide) then
Text.erP(
escaper:getPlayer(),
"the terrain must be of slide type"
)
return true
end
if not IsBoolString(param2) then
Text.erP(
escaper:getPlayer(),
"the property \"canTurn\" must be a boolean (true or false)"
)
return true
end
if terrainType:setCanTurn(S2B(param2)) then
if S2B(param2) then
Text.mkP(
escaper:getPlayer(),
"the heroes can now turn on this slide terrain"
)
else
Text.mkP(
escaper:getPlayer(),
"the heroes can't turn on this slide terrain anymore"
)
end
else
if S2B(param2) then
Text.erP(
escaper:getPlayer(),
"the heroes can already turn on this slide terrain"
)
else
Text.erP(
escaper:getPlayer(),
"the heroes already can't turn on this slide terrain"
)
end
end
return true
end
})
registerCommand({
name = "changeTerrain",
alias = {"cht"},
group = "make",
argDescription = "<terrainLabel> <newTerrainType>",
description = "change the terrain type of a terrain, examples of terrain types : 'Nice', 46",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
Text.DisplayLineToPlayer(escaper:getPlayer())
local str = ChangeOneTerrain.ChangeOneTerrain(param1, param2)
if str ~= nil then
Text.mkP(
escaper:getPlayer(),
("changed to " .. udg_colorCode[RED + 1]) .. str
)
else
Text.erP(
escaper:getPlayer(),
"couldn't change terrain"
)
end
return true
end
})
registerCommand({
name = "changeAllTerrains",
alias = {"chat"},
group = "make",
argDescription = "[known(k)|notKnown(nk)]",
description = "change all terrains to a random terrain type, or to a terrain type known to the player",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
local str = ""
if noParam then
str = "normal"
else
if nbParam == 1 then
if param1 == "known" or param1 == "k" then
str = "known"
else
if param1 == "notKnown" or param1 == "nk" then
str = "notKnown"
else
return true
end
end
end
end
if not ChangeAllTerrains.ChangeAllTerrains(str) then
Text.erP(
escaper:getPlayer(),
"couldn't change terrains"
)
end
return true
end
})
registerCommand({
name = "changeAllTerrainsAtRevive",
alias = {"chatar"},
group = "make",
argDescription = "<boolean change>",
description = "change all terrains to a random terrain type",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam == 1 and IsBoolString(param1) and S2B(param1) ~= ChangeAllTerrains.udg_changeAllTerrainsAtRevive then
ChangeAllTerrains.udg_changeAllTerrainsAtRevive = S2B(param1)
Text.mkP(
escaper:getPlayer(),
"change all terrains at revive " .. StringCase(param1, true)
)
end
return true
end
})
registerCommand({
name = "exchangeTerrains",
alias = {"excht"},
group = "make",
argDescription = "[<terrainLabelA> <terrainLabelB>]",
description = "exchange two terrains, without parameter, click on the terrains to exchange them",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if noParam then
escaper:makeExchangeTerrains()
Text.mkP(
escaper:getPlayer(),
"exchange terrains on"
)
return true
end
if not (nbParam == 2) then
return true
end
if ExchangeTerrains(param1, param2) then
Text.mkP(
escaper:getPlayer(),
"terrains exchanged"
)
else
Text.erP(
escaper:getPlayer(),
"couldn't exchange terrains"
)
end
return true
end
})
registerCommand({
name = "randomizeTerrains",
alias = {"rdmt"},
group = "make",
argDescription = "",
description = "randomize terrains",
cb = function(____, ____bindingPattern0)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
RandomizeTerrains.RandomizeTerrains()
end
return true
end
})
registerCommand({
name = "createTerrain",
alias = {"crt"},
group = "make",
argDescription = "<terrainLabel> [<brushSize> [<shape>]",
description = "create the terrain on the map, by clicking",
cb = function(____, ____bindingPattern0, escaper)
local param3
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
param3 = ____bindingPattern0.param3
if nbParam < 1 or nbParam > 3 then
return true
end
local terrainType = getUdgTerrainTypes():getByLabel(param1)
if not terrainType then
Text.erP(
escaper:getPlayer(),
("terrain \"" .. param1) .. "\" doesn't exist"
)
else
if nbParam > 1 then
local brushSize = S2I(param2)
if brushSize < 1 or brushSize > 8 then
Text.erP(
escaper:getPlayer(),
"brush size has to be between 1 and 8"
)
else
local shape = "square"
if param3 == "circle" or param3 == "c" then
shape = "circle"
end
escaper:makeCreateTerrainBrush(terrainType, brushSize, shape)
end
else
escaper:makeCreateTerrain(terrainType)
end
Text.mkP(
escaper:getPlayer(),
"creating terrain on"
)
end
return true
end
})
registerCommand({
name = "setBrushSize",
alias = {"setbs"},
group = "make",
argDescription = "<brushSize>",
description = "sets the brush size",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
local brushSize = S2I(param1)
if brushSize < 1 or brushSize > 8 then
Text.erP(
escaper:getPlayer(),
"brush size has to be between 1 and 8"
)
else
escaper:setBrushSize(brushSize)
Text.mkP(
escaper:getPlayer(),
"brush size set"
)
end
return true
end
})
registerCommand({
name = "setGumTerrain",
alias = {"setgt"},
group = "make",
argDescription = "<terrainLabel>",
description = "sets the gum terrain",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
local terrainType = getUdgTerrainTypes():getByLabel(param1)
if not terrainType then
Text.erP(
escaper:getPlayer(),
("terrain \"" .. param1) .. "\" doesn't exist"
)
else
escaper:setGumTerrain(terrainType)
Text.mkP(
escaper:getPlayer(),
"gum terrain set"
)
end
return true
end
})
registerCommand({
name = "setGumBrushSize",
alias = {"setgbs"},
group = "make",
argDescription = "<brushSize>",
description = "set the gum brush size",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
local brushSize = S2I(param1)
if brushSize < 1 or brushSize > 8 then
Text.erP(
escaper:getPlayer(),
"brush size has to be between 1 and 8"
)
else
escaper:setGumBrushSize(brushSize)
Text.mkP(
escaper:getPlayer(),
"gum brush size set"
)
end
return true
end
})
registerCommand({
name = "copyPasteTerrain",
alias = {"cpt"},
group = "make",
argDescription = "",
description = "copy paste a rectangle of terrain on the map",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
escaper:makeTerrainCopyPaste()
Text.mkP(
escaper:getPlayer(),
"copy/paste terrain on"
)
end
return true
end
})
registerCommand({
name = "verticalSymmetryTerrain",
alias = {"vst"},
group = "make",
argDescription = "",
description = "transform a rectangle of terrain by a vertical symmetry",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
escaper:makeTerrainVerticalSymmetry()
Text.mkP(
escaper:getPlayer(),
"vertical symmetry terrain on"
)
end
return true
end
})
registerCommand({
name = "horizontalSymmetryTerrain",
alias = {"hst"},
group = "make",
argDescription = "",
description = "transform a rectangle of terrain by an horizontal symmetry",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
escaper:makeTerrainHorizontalSymmetry()
Text.mkP(
escaper:getPlayer(),
"horizontal symmetry terrain on"
)
end
return true
end
})
registerCommand({
name = "terrainHeight",
alias = {"th"},
group = "make",
argDescription = " [<terrainRadius> [<height>]]",
description = "apply a terrain height at chosen places ; default radius 100, default height 100",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam <= 2) then
return true
end
local x = 0
local y = 0
if nbParam == 2 then
y = S2R(param2)
if y == 0 and param2 ~= "0" then
Text.erP(
escaper:getPlayer(),
"param2 (height) must be a real"
)
return true
end
if y == 0 then
Text.erP(
escaper:getPlayer(),
"param2 (height) can't be 0"
)
return true
end
else
y = 100
end
if nbParam >= 1 then
x = S2R(param1)
if x == 0 and param1 ~= "0" then
Text.erP(
escaper:getPlayer(),
"param1 (radius) must be a real"
)
return true
end
if x <= 0 then
Text.erP(
escaper:getPlayer(),
"param1 (radius) must be higher than 0"
)
return true
end
else
x = 100
end
escaper:makeTerrainHeight(x, y)
Text.mkP(
escaper:getPlayer(),
"terrain height making"
)
return true
end
})
registerCommand({
name = "displayTerrains",
alias = {"dt"},
group = "make",
argDescription = " [<terrainLabel>]",
description = "displays the characteristics of the terrains added by the maker(s)",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam <= 1) then
return true
end
if nbParam == 1 then
if getUdgTerrainTypes():isLabelAlreadyUsed(param1) then
local ____getUdgTerrainTypes_result_getByLabel_result_displayForPlayer_result_5 = getUdgTerrainTypes():getByLabel(param1)
if ____getUdgTerrainTypes_result_getByLabel_result_displayForPlayer_result_5 ~= nil then
____getUdgTerrainTypes_result_getByLabel_result_displayForPlayer_result_5 = ____getUdgTerrainTypes_result_getByLabel_result_displayForPlayer_result_5:displayForPlayer(escaper:getPlayer())
end
else
Text.erP(
escaper:getPlayer(),
"unknown terrain"
)
end
else
getUdgTerrainTypes():displayForPlayer(escaper:getPlayer())
end
return true
end
})
registerCommand({
name = "newMonster",
alias = {"newm"},
group = "make",
argDescription = "<label> <unitTypeId> [<immolationRadius> [<speed> [<scale> [<isClickable>]]]]",
description = "add a new monster",
cb = function(____, ____bindingPattern0, escaper)
local param3
local param2
local param1
local nbParam
local cmd
cmd = ____bindingPattern0.cmd
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
param3 = ____bindingPattern0.param3
if nbParam < 2 or nbParam > 6 then
return true
end
if getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
("Label \"" .. param1) .. "\" already used"
)
return true
end
if not (StringLength(param2) == 6 and SubStringBJ(param2, 1, 1) == "'" and SubStringBJ(param2, 6, 6) == "'") then
Text.erP(
escaper:getPlayer(),
"Wrong unit type id (exemple : 'hfoo')"
)
return true
end
local str = ""
local immoRadius = 0
local speed = DEFAULT_MONSTER_SPEED
local scale = -1
local clickable = false
if nbParam >= 3 then
immoRadius = S2I(param3)
if immoRadius ~= 0 and not IMMOLATION_SKILLS[immoRadius] then
Text.erP(
escaper:getPlayer(),
"Wrong immolation radius ; should be an integer divisible by 5 and between 0 and 400"
)
return true
end
if nbParam >= 4 then
str = CmdParam(cmd, 4)
if not IsPositiveInteger(str) or S2I(str) > MAX_MOVE_SPEED then
Text.erP(
escaper:getPlayer(),
"Wrong speed value ; should be a positive integer between 0 and 522"
)
return true
end
speed = S2R(str)
if nbParam >= 5 then
str = CmdParam(cmd, 5)
if S2R(str) <= 0 and str ~= "default" and str ~= "d" then
Text.erP(
escaper:getPlayer(),
"Wrong scale value ; should be a real upper than 0 or \"default\" or \"d\""
)
return true
end
if str ~= "default" and str ~= "d" then
scale = S2R(str)
end
if nbParam == 6 then
str = CmdParam(cmd, 6)
if not IsBoolString(str) then
Text.erP(
escaper:getPlayer(),
"Wrong \"is clickable\" value ; should be 'true', 'false', '0' or '1'"
)
return true
end
clickable = S2B(str)
end
end
end
end
getUdgMonsterTypes():new(
param1,
String2Ascii(SubStringBJ(param2, 2, 5)),
scale,
immoRadius,
speed,
clickable
)
Text.mkP(
escaper:getPlayer(),
("Monster type \"" .. param1) .. "\" created"
)
return true
end
})
registerCommand({
name = "setMonsterLabel",
alias = {"setml"},
group = "make",
argDescription = "<oldMonsterLabel> <newMonsterLabel>",
description = "change the label of a monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local b = not not getUdgMonsterTypes():getByLabel(param1)
if b then
b = not getUdgMonsterTypes():isLabelAlreadyUsed(param2)
end
if b then
local ____getUdgMonsterTypes_result_getByLabel_result_setLabel_result_7 = getUdgMonsterTypes():getByLabel(param1)
if ____getUdgMonsterTypes_result_getByLabel_result_setLabel_result_7 ~= nil then
____getUdgMonsterTypes_result_getByLabel_result_setLabel_result_7 = ____getUdgMonsterTypes_result_getByLabel_result_setLabel_result_7:setLabel(param2)
end
Text.mkP(
escaper:getPlayer(),
("label changed to \"" .. param2) .. "\""
)
else
Text.erP(
escaper:getPlayer(),
"impossible to change label"
)
end
return true
end
})
registerCommand({
name = "setMonsterAlias",
alias = {"setma"},
group = "make",
argDescription = "<monsterLabel> <alias>",
description = "change the alias of a monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local b = not not getUdgMonsterTypes():getByLabel(param1)
if b then
b = not getUdgMonsterTypes():isLabelAlreadyUsed(param2)
end
if b then
local ____getUdgMonsterTypes_result_getByLabel_result_setAlias_result_9 = getUdgMonsterTypes():getByLabel(param1)
if ____getUdgMonsterTypes_result_getByLabel_result_setAlias_result_9 ~= nil then
____getUdgMonsterTypes_result_getByLabel_result_setAlias_result_9 = ____getUdgMonsterTypes_result_getByLabel_result_setAlias_result_9:setAlias(param2)
end
Text.mkP(
escaper:getPlayer(),
("alias changed to \"" .. param2) .. "\""
)
else
Text.erP(
escaper:getPlayer(),
"impossible to change alias"
)
end
return true
end
})
registerCommand({
name = "setMonsterUnit",
alias = {"setmu"},
group = "make",
argDescription = "<monsterLabel> <unitType>",
description = "change the unit type of a monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
if not (StringLength(param2) == 6 and SubStringBJ(param2, 1, 1) == "'" and SubStringBJ(param2, 6, 6) == "'") then
Text.erP(
escaper:getPlayer(),
"wrong unit type id (exemple : 'hfoo')"
)
return true
end
local ____getUdgMonsterTypes_result_getByLabel_result_setUnitTypeId_result_11 = getUdgMonsterTypes():getByLabel(param1)
if ____getUdgMonsterTypes_result_getByLabel_result_setUnitTypeId_result_11 ~= nil then
____getUdgMonsterTypes_result_getByLabel_result_setUnitTypeId_result_11 = ____getUdgMonsterTypes_result_getByLabel_result_setUnitTypeId_result_11:setUnitTypeId(String2Ascii(SubStringBJ(param2, 2, 5)))
end
if ____getUdgMonsterTypes_result_getByLabel_result_setUnitTypeId_result_11 then
Text.mkP(
escaper:getPlayer(),
"unit type changed"
)
else
Text.erP(
escaper:getPlayer(),
"this unit type doesn't exist"
)
end
return true
end
})
registerCommand({
name = "setMonsterImmolation",
alias = {"setmi"},
group = "make",
argDescription = "<monsterLabel> <immolationRadius>",
description = "change the immolation radius of a monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
local x = S2I(param2)
if x ~= 0 and not IMMOLATION_SKILLS[x] then
Text.erP(
escaper:getPlayer(),
"wrong immolation radius ; should be an integer divisible by 5 and between 0 and 400"
)
return true
end
local ____getUdgMonsterTypes_result_getByLabel_result_setImmolation_result_13 = getUdgMonsterTypes():getByLabel(param1)
if ____getUdgMonsterTypes_result_getByLabel_result_setImmolation_result_13 ~= nil then
____getUdgMonsterTypes_result_getByLabel_result_setImmolation_result_13 = ____getUdgMonsterTypes_result_getByLabel_result_setImmolation_result_13:setImmolation(x)
end
if ____getUdgMonsterTypes_result_getByLabel_result_setImmolation_result_13 then
Text.mkP(
escaper:getPlayer(),
"immolation changed"
)
else
Text.erP(
escaper:getPlayer(),
"couldn't change immolation"
)
end
return true
end
})
registerCommand({
name = "setMonsterMoveSpeed",
alias = {"setmms"},
group = "make",
argDescription = "<monsterLabel> <speed>",
description = "change the move speed of a monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
if not IsPositiveInteger(param2) or S2I(param2) > MAX_MOVE_SPEED then
Text.erP(
escaper:getPlayer(),
"wrong speed value ; should be a positive integer between 0 and 522"
)
return true
end
local ____getUdgMonsterTypes_result_getByLabel_result_setUnitMoveSpeed_result_15 = getUdgMonsterTypes():getByLabel(param1)
if ____getUdgMonsterTypes_result_getByLabel_result_setUnitMoveSpeed_result_15 ~= nil then
____getUdgMonsterTypes_result_getByLabel_result_setUnitMoveSpeed_result_15 = ____getUdgMonsterTypes_result_getByLabel_result_setUnitMoveSpeed_result_15:setUnitMoveSpeed(S2R(param2))
end
if ____getUdgMonsterTypes_result_getByLabel_result_setUnitMoveSpeed_result_15 then
Text.mkP(
escaper:getPlayer(),
"move speed changed"
)
else
Text.erP(
escaper:getPlayer(),
"couldn't change move speed"
)
end
return true
end
})
registerCommand({
name = "setMonsterScale",
alias = {"setms"},
group = "make",
argDescription = "<monsterLabel> <scale>",
description = "change the scale of a monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
if S2R(param2) <= 0 and param2 ~= "default" and param2 ~= "d" then
Text.erP(
escaper:getPlayer(),
"wrong scale value ; should be a real upper than 0 or \"default\" or \"d\""
)
return true
end
local x = 0
if param2 == "default" or param2 == "d" then
x = -1
else
x = S2R(param2)
end
local ____getUdgMonsterTypes_result_getByLabel_result_setScale_result_17 = getUdgMonsterTypes():getByLabel(param1)
if ____getUdgMonsterTypes_result_getByLabel_result_setScale_result_17 ~= nil then
____getUdgMonsterTypes_result_getByLabel_result_setScale_result_17 = ____getUdgMonsterTypes_result_getByLabel_result_setScale_result_17:setScale(x)
end
if ____getUdgMonsterTypes_result_getByLabel_result_setScale_result_17 then
Text.mkP(
escaper:getPlayer(),
"scale changed"
)
else
Text.erP(
escaper:getPlayer(),
"couldn't change scale, probably because the old value is the same"
)
end
return true
end
})
registerCommand({
name = "setMonsterClickable",
alias = {"setmc"},
group = "make",
argDescription = "<monsterLabel> <boolean clickable>",
description = "sets if locust or not for this kind of monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
if not IsBoolString(param2) then
Text.erP(
escaper:getPlayer(),
"wrong \"is clickable\" value ; should be 'true', 'false', '0' or '1'"
)
return true
end
local ____getUdgMonsterTypes_result_getByLabel_result_setIsClickable_result_19 = getUdgMonsterTypes():getByLabel(param1)
if ____getUdgMonsterTypes_result_getByLabel_result_setIsClickable_result_19 ~= nil then
____getUdgMonsterTypes_result_getByLabel_result_setIsClickable_result_19 = ____getUdgMonsterTypes_result_getByLabel_result_setIsClickable_result_19:setIsClickable(S2B(param2))
end
if ____getUdgMonsterTypes_result_getByLabel_result_setIsClickable_result_19 then
if S2B(param2) then
Text.mkP(
escaper:getPlayer(),
"this monster type is now clickable"
)
else
Text.mkP(
escaper:getPlayer(),
"this monster type is now unclickable"
)
end
else
if S2B(param2) then
Text.erP(
escaper:getPlayer(),
"this monster type is already clickable"
)
else
Text.erP(
escaper:getPlayer(),
"this monster type is already unclickable"
)
end
end
return true
end
})
registerCommand({
name = "setMonsterKillEffect",
alias = {"setmke"},
group = "make",
argDescription = "<monsterLabel> <killingEffect>",
description = "sets the killing effect of a monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
local ____getUdgMonsterTypes_result_getByLabel_result_setKillingEffectStr_result_21 = getUdgMonsterTypes():getByLabel(param1)
if ____getUdgMonsterTypes_result_getByLabel_result_setKillingEffectStr_result_21 ~= nil then
____getUdgMonsterTypes_result_getByLabel_result_setKillingEffectStr_result_21 = ____getUdgMonsterTypes_result_getByLabel_result_setKillingEffectStr_result_21:setKillingEffectStr(param2)
end
Text.mkP(
escaper:getPlayer(),
"kill effect changed for this monster type"
)
return true
end
})
registerCommand({
name = "setMonsterMeteorsToKill",
alias = {"setmmtk"},
group = "make",
argDescription = "<monsterLabel> <meteorNumber>",
description = "sets the number of meteors to kill for this monster type",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
if not (IsPositiveInteger(param2) and S2I(param2) > 0 and S2I(param2) < 10) then
Text.erP(
escaper:getPlayer(),
"param2 must be an integer between 1 and 9"
)
return true
end
local ____getUdgMonsterTypes_result_getByLabel_result_setNbMeteorsToKill_result_23 = getUdgMonsterTypes():getByLabel(param1)
if ____getUdgMonsterTypes_result_getByLabel_result_setNbMeteorsToKill_result_23 ~= nil then
____getUdgMonsterTypes_result_getByLabel_result_setNbMeteorsToKill_result_23 = ____getUdgMonsterTypes_result_getByLabel_result_setNbMeteorsToKill_result_23:setNbMeteorsToKill(S2I(param2))
end
Text.mkP(
escaper:getPlayer(),
"number of meteors to kill changed for this monster type"
)
return true
end
})
registerCommand({
name = "setMonsterHeight",
alias = {"setmh"},
group = "make",
argDescription = "<monsterLabel> <height>|default|d",
description = "sets the height of a monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
local x = 0
if param2 == "default" or param2 == "d" then
x = -1
elseif S2R(param2) > 0 or param2 == "0" then
x = S2R(param2)
else
Text.erP(
escaper:getPlayer(),
"wrong height ; should be a positive real or \"default\" or \"d\""
)
return true
end
local ____getUdgMonsterTypes_result_getByLabel_result_setHeight_result_25 = getUdgMonsterTypes():getByLabel(param1)
if ____getUdgMonsterTypes_result_getByLabel_result_setHeight_result_25 ~= nil then
____getUdgMonsterTypes_result_getByLabel_result_setHeight_result_25 = ____getUdgMonsterTypes_result_getByLabel_result_setHeight_result_25:setHeight(x)
end
if ____getUdgMonsterTypes_result_getByLabel_result_setHeight_result_25 then
Text.mkP(
escaper:getPlayer(),
"height changed for this monster type"
)
else
Text.erP(
escaper:getPlayer(),
"the height is already to this value"
)
end
return true
end
})
registerCommand({
name = "createMonsterImmobile",
alias = {"crmi"},
group = "make",
argDescription = "<monsterLabel> [<facingAngle>]",
description = "creates a monster at the current location, facing the specified angle (or random if not specified)",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if nbParam < 1 or nbParam > 2 then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
local x = 0
if nbParam == 2 then
if S2R(param2) == 0 and param2 ~= "0" then
Text.erP(
escaper:getPlayer(),
"wrong angle value ; should be a real (-1 for random angle)"
)
return true
end
x = S2R(param2)
else
x = -1
end
local monsterType = getUdgMonsterTypes():getByLabel(param1)
local ____ = monsterType and escaper:makeCreateNoMoveMonsters(monsterType, x)
Text.mkP(
escaper:getPlayer(),
"monster making on"
)
return true
end
})
registerCommand({
name = "createMonster",
alias = {"crm"},
group = "make",
argDescription = "<monsterLabel>",
description = "creates a monster at the current location, patrolling between 2 locations",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
local monsterType = getUdgMonsterTypes():getByLabel(param1)
local ____ = monsterType and escaper:makeCreateSimplePatrolMonsters("normal", monsterType)
Text.mkP(
escaper:getPlayer(),
"monster making on"
)
return true
end
})
registerCommand({
name = "createMonsterString",
alias = {"crms"},
group = "make",
argDescription = "<monsterLabel>",
description = "creates a monster at the current location, patrolling between 2 locations, where the second loc of a monster is the first loc of the next one",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
local monsterType = getUdgMonsterTypes():getByLabel(param1)
local ____ = monsterType and escaper:makeCreateSimplePatrolMonsters("string", monsterType)
Text.mkP(
escaper:getPlayer(),
"monster making on"
)
return true
end
})
registerCommand({
name = "createMonsterAuto",
alias = {"crma"},
group = "make",
argDescription = "<monsterLabel>",
description = "creates a monster at the current location, patrolling between 2 locations, created with only one click (click on a slide terrain)",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
local monsterType = getUdgMonsterTypes():getByLabel(param1)
local ____ = monsterType and escaper:makeCreateSimplePatrolMonsters("auto", monsterType)
Text.mkP(
escaper:getPlayer(),
"monster making on"
)
return true
end
})
registerCommand({
name = "setAutoDistOnTerrain",
alias = {"setadot"},
group = "make",
argDescription = "<newDist>",
description = "for patrol monsters created in one click, distance between locations and slide terrain",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1 and (S2R(param1) ~= 0 or param1 == "0" or param1 == "default" or param1 == "d")) then
return true
end
if param1 == "default" or param1 == "d" then
MakeMonsterSimplePatrol:changeDistOnTerrainDefault()
else
if not MakeMonsterSimplePatrol:changeDistOnTerrain(S2R(param1)) then
Text.erP(
escaper:getPlayer(),
"distance specified out of bounds"
)
return true
end
end
Text.mkP(
escaper:getPlayer(),
"distance on terrain changed"
)
return true
end
})
registerCommand({
name = "createMonsterMultiPatrols",
alias = {"crmmp"},
group = "make",
argDescription = "<monsterLabel>",
description = "creates a monster at the current location, patrolling between 2 locations, until 20 locations",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
local monsterType = getUdgMonsterTypes():getByLabel(param1)
local ____ = monsterType and escaper:makeCreateMultiplePatrolsMonsters("normal", monsterType)
Text.mkP(
escaper:getPlayer(),
"monster making on"
)
return true
end
})
registerCommand({
name = "createMonsterMultiPatrolsString",
alias = {"crmmps"},
group = "make",
argDescription = "<monsterLabel>",
description = "creates a monster at the current location, patrolling between 2 locations, until 20 locations, with come back at last location",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
local monsterType = getUdgMonsterTypes():getByLabel(param1)
local ____ = monsterType and escaper:makeCreateMultiplePatrolsMonsters("string", monsterType)
Text.mkP(
escaper:getPlayer(),
"monster making on"
)
return true
end
})
registerCommand({
name = "createMonsterTeleport",
alias = {"crmt"},
group = "make",
argDescription = "<monsterLabel> <period> <angle>",
description = "creates a monster at the current location, patrolling between 2 locations, until 20 locations",
cb = function(____, ____bindingPattern0, escaper)
local param3
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
param3 = ____bindingPattern0.param3
if not (nbParam == 3) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
local x = S2R(param2)
if x < MONSTER_TELEPORT_PERIOD_MIN or x > MONSTER_TELEPORT_PERIOD_MAX then
Text.erP(
escaper:getPlayer(),
(("the period must be between " .. R2S(MONSTER_TELEPORT_PERIOD_MIN)) .. " and ") .. R2S(MONSTER_TELEPORT_PERIOD_MAX)
)
return true
end
if S2R(param3) == 0 and param3 ~= "0" then
Text.erP(
escaper:getPlayer(),
"wrong angle value ; should be a real (-1 for random angle)"
)
return true
end
local monsterType = getUdgMonsterTypes():getByLabel(param1)
local ____ = monsterType and escaper:makeCreateTeleportMonsters(
"normal",
monsterType,
x,
S2R(param3)
)
Text.mkP(
escaper:getPlayer(),
"monster making on"
)
return true
end
})
registerCommand({
name = "createMonsterTeleportStrings",
alias = {"crmts"},
group = "make",
argDescription = "<monsterLabel> <period> <angle>",
description = "creates a monster at the current location, patrolling between 2 locations, until 20 locations",
cb = function(____, ____bindingPattern0, escaper)
local param3
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
param3 = ____bindingPattern0.param3
if not (nbParam == 3) then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
local x = S2R(param2)
if x < MONSTER_TELEPORT_PERIOD_MIN or x > MONSTER_TELEPORT_PERIOD_MAX then
Text.erP(
escaper:getPlayer(),
(("the period must be between " .. R2S(MONSTER_TELEPORT_PERIOD_MIN)) .. " and ") .. R2S(MONSTER_TELEPORT_PERIOD_MAX)
)
return true
end
if S2R(param3) == 0 and param3 ~= "0" then
Text.erP(
escaper:getPlayer(),
"wrong angle value ; should be a real (-1 for random angle)"
)
return true
end
local monsterType = getUdgMonsterTypes():getByLabel(param1)
local ____ = monsterType and escaper:makeCreateTeleportMonsters(
"string",
monsterType,
x,
S2R(param3)
)
Text.mkP(
escaper:getPlayer(),
"monster making on"
)
return true
end
})
registerCommand({
name = "next",
alias = {"n"},
group = "make",
argDescription = "",
description = "finalize the current multi patrols or teleport monster and start the next one",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
if escaper:makeMmpOrMtNext() then
Text.mkP(
escaper:getPlayer(),
"next"
)
else
Text.erP(
escaper:getPlayer(),
"you're not making multipatrol or teleport monsters"
)
end
return true
end
})
registerCommand({
name = "monsterTeleportWait",
alias = {"mtw"},
group = "make",
argDescription = "",
description = "a wait period for the monster teleport being created",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
if escaper:makeMonsterTeleportWait() then
Text.mkP(
escaper:getPlayer(),
"wait period added"
)
else
Text.erP(
escaper:getPlayer(),
"impossible to add a wait period"
)
end
return true
end
})
registerCommand({
name = "monsterTeleportHide",
alias = {"mth"},
group = "make",
argDescription = "",
description = "a hide period for the monster teleport being created",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
if escaper:makeMonsterTeleportHide() then
Text.mkP(
escaper:getPlayer(),
"hide period added"
)
else
Text.erP(
escaper:getPlayer(),
"impossible to add a hide period"
)
end
return true
end
})
registerCommand({
name = "setUnitTeleportPeriod",
alias = {"setutp"},
group = "make",
argDescription = "<period>",
description = "set the period for the unit teleport being created",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
local x = S2R(param1)
if x < MONSTER_TELEPORT_PERIOD_MIN or x > MONSTER_TELEPORT_PERIOD_MAX then
Text.erP(
escaper:getPlayer(),
(("the period must be between " .. R2S(MONSTER_TELEPORT_PERIOD_MIN)) .. " and ") .. R2S(MONSTER_TELEPORT_PERIOD_MAX)
)
return true
end
escaper:makeSetUnitTeleportPeriod("oneByOne", x)
Text.mkP(
escaper:getPlayer(),
"setting unit teleport period on"
)
return true
end
})
registerCommand({
name = "setUnitTeleportPeriodBetweenPoints",
alias = {"setutpbp"},
group = "make",
argDescription = "<period>",
description = "set the period for the unit teleport being created",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
local x = S2R(param1)
if x < MONSTER_TELEPORT_PERIOD_MIN or x > MONSTER_TELEPORT_PERIOD_MAX then
Text.erP(
escaper:getPlayer(),
(("the period must be between " .. R2S(MONSTER_TELEPORT_PERIOD_MIN)) .. " and ") .. R2S(MONSTER_TELEPORT_PERIOD_MAX)
)
return true
end
escaper:makeSetUnitTeleportPeriod("twoClics", x)
Text.mkP(
escaper:getPlayer(),
"setting unit teleport period on"
)
return true
end
})
registerCommand({
name = "getUnitTeleportPeriod",
alias = {"getutp"},
group = "make",
argDescription = "",
description = "displays the period of any teleporting unit you click",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
escaper:makeGetUnitTeleportPeriod()
Text.mkP(
escaper:getPlayer(),
"getting unit teleport period on"
)
return true
end
})
registerCommand({
name = "setUnitMonsterType",
alias = {"setumt"},
group = "make",
argDescription = "<monsterLabel>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
local monsterType = getUdgMonsterTypes():getByLabel(param1)
local ____ = monsterType and escaper:makeSetUnitMonsterType("oneByOne", monsterType)
Text.mkP(
escaper:getPlayer(),
"setting unit monster type on"
)
return true
end
})
registerCommand({
name = "setUnitMonsterTypeBetweenPoints",
alias = {"setumtbp"},
group = "make",
argDescription = "<monsterLabel>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
return true
end
local monsterType = getUdgMonsterTypes():getByLabel(param1)
local ____ = monsterType and escaper:makeSetUnitMonsterType("twoClics", monsterType)
Text.mkP(
escaper:getPlayer(),
"setting unit monster type on"
)
return true
end
})
registerCommand({
name = "displayMonsters",
alias = {"dm"},
group = "make",
argDescription = "[<monsterLabel>]",
description = "displays the characteristics of the kinds of monsters added by the maker(s)",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam <= 1) then
return true
end
if nbParam == 1 then
if getUdgMonsterTypes():isLabelAlreadyUsed(param1) then
local ____getUdgMonsterTypes_result_getByLabel_result_displayTotalForPlayer_result_27 = getUdgMonsterTypes():getByLabel(param1)
if ____getUdgMonsterTypes_result_getByLabel_result_displayTotalForPlayer_result_27 ~= nil then
____getUdgMonsterTypes_result_getByLabel_result_displayTotalForPlayer_result_27 = ____getUdgMonsterTypes_result_getByLabel_result_displayTotalForPlayer_result_27:displayTotalForPlayer(escaper:getPlayer())
end
else
Text.erP(
escaper:getPlayer(),
"unknown monster type"
)
end
else
getUdgMonsterTypes():displayForPlayer(escaper:getPlayer())
end
return true
end
})
registerCommand({
name = "deleteMonstersBetweenPoints",
alias = {"delmbp"},
group = "make",
argDescription = "[<deleteMode>]",
description = "delete monsters in a rectangle formed with two clicks",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam <= 1) then
return true
end
local str = ""
if nbParam == 1 then
if param1 == "all" or param1 == "a" then
str = "all"
else
if param1 == "noMove" or param1 == "nm" then
str = "noMove"
else
if param1 == "move" or param1 == "m" then
str = "move"
else
if param1 == "simplePatrol" or param1 == "sp" then
str = "simplePatrol"
else
if param1 == "multiplePatrols" or param1 == "mp" then
str = "multiplePatrols"
else
return true
end
end
end
end
end
else
str = "all"
end
escaper:makeDeleteMonsters(str)
Text.mkP(
escaper:getPlayer(),
"monsters deleting on"
)
return true
end
})
registerCommand({
name = "deleteMonster",
alias = {"delm"},
group = "make",
argDescription = "",
description = "delete the monsters clicked by the player",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
escaper:makeDeleteMonsters("oneByOne")
Text.mkP(
escaper:getPlayer(),
"monster deleting on"
)
end
return true
end
})
registerCommand({
name = "createMonsterSpawn",
alias = {"crmsp"},
group = "make",
argDescription = "<monsterSpawnLabel> <monsterLabel> <direction> [<frequency>]",
description = "default frequency is 2, minimum is 0.1, maximum is 30",
cb = function(____, ____bindingPattern0, escaper)
local param4
local param3
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
param3 = ____bindingPattern0.param3
param4 = ____bindingPattern0.param4
if not (nbParam >= 3 and nbParam <= 4) then
Text.erP(
escaper:getPlayer(),
"uncorrect number of parameters"
)
return true
end
if escaper:getMakingLevel().monsterSpawns:getByLabel(param1) then
Text.erP(
escaper:getPlayer(),
("a monster spawn with label \"" .. param1) .. "\" already exists for this level"
)
return true
end
local monsterType = getUdgMonsterTypes():getByLabel(param2)
if not monsterType then
Text.erP(
escaper:getPlayer(),
("unknown monster type \"" .. param2) .. "\""
)
return true
end
local str = convertTextToAngle(param3)
if not str then
Text.erP(
escaper:getPlayer(),
"param 3 should be direction : leftToRight, upToDown, rightToLeft or downToUp"
)
return true
end
local x = 0
if nbParam == 4 then
x = S2R(param4)
if x < 0.1 or x > 30 then
Text.erP(
escaper:getPlayer(),
"frequency must be a real between 0.1 and 30"
)
return true
end
else
x = 2
end
escaper:makeCreateMonsterSpawn(param1, monsterType, str, x)
Text.mkP(
escaper:getPlayer(),
"monster spawn making on"
)
return true
end
})
registerCommand({
name = "setMonsterSpawnLabel",
alias = {"setmsl"},
group = "make",
argDescription = "<oldMonsterSpawnLabel> <newMonsterSpawnLabel>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
if escaper:getMakingLevel().monsterSpawns:changeLabel(param1, param2) then
Text.mkP(
escaper:getPlayer(),
"label changed"
)
else
Text.erP(
escaper:getPlayer(),
"couldn't change label"
)
end
return true
end
})
registerCommand({
name = "setMonsterSpawnMonster",
alias = {"setmsm"},
group = "make",
argDescription = "<monsterSpawnLabel> <monsterLabel>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local monsterSpawn = escaper:getMakingLevel().monsterSpawns:getByLabel(param1)
if not monsterSpawn then
Text.erP(
escaper:getPlayer(),
("unknown monster spawn \"" .. param1) .. "\" in this level"
)
return true
end
local monsterType = getUdgMonsterTypes():getByLabel(param2)
if not monsterType then
Text.erP(
escaper:getPlayer(),
("unknown monster type \"" .. param2) .. "\""
)
return true
end
monsterSpawn:setMonsterType(monsterType)
Text.mkP(
escaper:getPlayer(),
"monster type changed"
)
return true
end
})
registerCommand({
name = "setMonsterSpawnDirection",
alias = {"setmsd", "setMonsterSpawnRotation", "setmsr"},
group = "make",
argDescription = "<monsterSpawnLabel> <direction>",
description = "leftToRight(ltr), upToDown(utd), rightToLeft(rtl), downToUp(dtu)",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
local monsterSpawn = escaper:getMakingLevel().monsterSpawns:getByLabel(param1)
if not monsterSpawn then
Text.erP(
escaper:getPlayer(),
("unknown monster spawn \"" .. param1) .. "\" in this level"
)
return true
end
local angle = nil
if param2 ~= "" and param2 ~= "0" then
angle = convertTextToAngle(param2)
if not angle then
Text.erP(
escaper:getPlayer(),
"Invalid angle"
)
return true
end
monsterSpawn:setRotation(angle)
Text.mkP(
escaper:getPlayer(),
"Rotation changed to: " .. tostring(angle)
)
else
Text.mkP(
escaper:getPlayer(),
"Invalid rotation"
)
end
return true
end
})
registerCommand({
name = "setMonsterSpawnFrequency",
alias = {"setmsf"},
group = "make",
argDescription = "<monsterSpawnLabel> <frequency>",
description = "maximum 20 mobs per second",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local monsterSpawn = escaper:getMakingLevel().monsterSpawns:getByLabel(param1)
if not monsterSpawn then
Text.erP(
escaper:getPlayer(),
("unknown monster spawn \"" .. param1) .. "\" in this level"
)
return true
end
local x = S2R(param2)
if x < 0.1 or x > 30 then
Text.erP(
escaper:getPlayer(),
"frequency must be a real between 0.1 and 30"
)
return true
end
monsterSpawn:setFrequence(x)
Text.mkP(
escaper:getPlayer(),
"frequency changed"
)
return true
end
})
registerCommand({
name = "setMonsterSpawnSpawnAmount",
alias = {"setmssa"},
group = "make",
argDescription = "<label> <amount>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
local monsterSpawn = escaper:getMakingLevel().monsterSpawns:getByLabel(param1)
if not monsterSpawn then
Text.erP(
escaper:getPlayer(),
("unknown monster spawn \"" .. param1) .. "\" in this level"
)
return true
end
if not (S2I(param2) > 0 and S2I(param2) <= 10) then
Text.erP(
escaper:getPlayer(),
"Amount must be > 0 and <= 10"
)
return true
end
monsterSpawn:setSpawnAmount(S2I(param2))
Text.mkP(
escaper:getPlayer(),
"spawnAmount changed"
)
return true
end
})
registerCommand({
name = "setMonsterSpawnSpawnOffset",
alias = {"setmsso"},
group = "make",
argDescription = "<label> <offset>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
local monsterSpawn = escaper:getMakingLevel().monsterSpawns:getByLabel(param1)
if not monsterSpawn then
Text.erP(
escaper:getPlayer(),
("unknown monster spawn \"" .. param1) .. "\" in this level"
)
return true
end
if S2I(param2) ~= 0 and not (S2I(param2) > 0 and S2I(param2) <= 16384) then
Text.erP(
escaper:getPlayer(),
"Offset must be > 0 and <= 16384"
)
return true
end
local ____monsterSpawn_setSpawnOffset_30 = monsterSpawn.setSpawnOffset
local ____temp_29
if S2I(param2) == 0 then
____temp_29 = nil
else
____temp_29 = S2I(param2)
end
____monsterSpawn_setSpawnOffset_30(monsterSpawn, ____temp_29)
Text.mkP(
escaper:getPlayer(),
"spawnOffset changed"
)
return true
end
})
registerCommand({
name = "setMonsterSpawnFixedSpawnOffset",
alias = {"setmsfso"},
group = "make",
argDescription = "<label> <offset>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
local monsterSpawn = escaper:getMakingLevel().monsterSpawns:getByLabel(param1)
if not monsterSpawn then
Text.erP(
escaper:getPlayer(),
("unknown monster spawn \"" .. param1) .. "\" in this level"
)
return true
end
if S2I(param2) ~= 0 and not (S2I(param2) > 0 and S2I(param2) <= 16384) then
Text.erP(
escaper:getPlayer(),
"Offset must be > 0 and <= 16384"
)
return true
end
local ____monsterSpawn_setFixedSpawnOffset_32 = monsterSpawn.setFixedSpawnOffset
local ____temp_31
if S2I(param2) == 0 then
____temp_31 = nil
else
____temp_31 = S2I(param2)
end
____monsterSpawn_setFixedSpawnOffset_32(monsterSpawn, ____temp_31)
Text.mkP(
escaper:getPlayer(),
"fixedSpawnOffset changed"
)
return true
end
})
registerCommand({
name = "setMonsterSpawnFixedSpawnOffsetBounce",
alias = {"setmsfsob"},
group = "make",
argDescription = "<label> <bounce>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
local monsterSpawn = escaper:getMakingLevel().monsterSpawns:getByLabel(param1)
if not monsterSpawn then
Text.erP(
escaper:getPlayer(),
("unknown monster spawn \"" .. param1) .. "\" in this level"
)
return true
end
if not IsBoolString(param2) then
Text.erP(
escaper:getPlayer(),
"Bounce must be a boolean"
)
return true
end
monsterSpawn:setFixedSpawnOffsetBounce(S2B(param2))
Text.mkP(
escaper:getPlayer(),
"fixedSpawnOffsetBounce changed"
)
return true
end
})
registerCommand({
name = "setMonsterSpawnFixedSpawnOffsetMirrored",
alias = {"setmsfsom"},
group = "make",
argDescription = "<label> <mirrored>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
local monsterSpawn = escaper:getMakingLevel().monsterSpawns:getByLabel(param1)
if not monsterSpawn then
Text.erP(
escaper:getPlayer(),
("unknown monster spawn \"" .. param1) .. "\" in this level"
)
return true
end
if not IsBoolString(param2) then
Text.erP(
escaper:getPlayer(),
"Bounce must be a boolean"
)
return true
end
monsterSpawn:setFixedSpawnOffsetMirrored(S2B(param2))
Text.mkP(
escaper:getPlayer(),
"fixedSpawnOffsetMirrored changed"
)
return true
end
})
registerCommand({
name = "setMonsterSpawnInitialDelay",
alias = {"setmsid"},
group = "make",
argDescription = "<label> <delay>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
local monsterSpawn = escaper:getMakingLevel().monsterSpawns:getByLabel(param1)
if not monsterSpawn then
Text.erP(
escaper:getPlayer(),
("unknown monster spawn \"" .. param1) .. "\" in this level"
)
return true
end
if not (S2I(param2) > 0 and S2I(param2) <= 10) then
Text.erP(
escaper:getPlayer(),
"Delay must be > 0 and <= 10"
)
return true
end
monsterSpawn:setInitialDelay(S2I(param2))
Text.mkP(
escaper:getPlayer(),
"Delay changed"
)
return true
end
})
registerCommand({
name = "displayMonsterSpawns",
alias = {"dms"},
group = "make",
argDescription = "",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
escaper:getMakingLevel().monsterSpawns:displayForPlayer(escaper:getPlayer())
return true
end
})
registerCommand({
name = "deleteMonsterSpawn",
alias = {"delms"},
group = "make",
argDescription = "<monsterSpawnLabel>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
if escaper:getMakingLevel().monsterSpawns:clearMonsterSpawn(param1) then
Text.mkP(
escaper:getPlayer(),
"monster spawn deleted"
)
else
Text.erP(
escaper:getPlayer(),
"unknown monster spawn for this level"
)
end
return true
end
})
registerCommand({
name = "createKey",
alias = {"crk"},
group = "make",
argDescription = "",
description = "create meteors used to kill clickable monsters",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
escaper:makeCreateMeteor()
Text.mkP(
escaper:getPlayer(),
"meteor making on"
)
end
return true
end
})
registerCommand({
name = "deleteKeysBetweenPoints",
alias = {"delkbp"},
group = "make",
argDescription = "",
description = "delete meteors in a rectangle formed with two clicks",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
escaper:makeDeleteMeteors("twoClics")
Text.mkP(
escaper:getPlayer(),
"meteors deleting on"
)
end
return true
end
})
registerCommand({
name = "deleteKey",
alias = {"delk"},
group = "make",
argDescription = "",
description = "delete the meteors clicked by the player",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
escaper:makeDeleteMeteors("oneByOne")
Text.mkP(
escaper:getPlayer(),
"meteors deleting on"
)
end
return true
end
})
registerCommand({
name = "createStart",
alias = {"crs"},
group = "make",
argDescription = "[current(c)|next(n)] [facing]",
description = "create the start (a rectangle formed with two clicks) of the current level or the next one if specified",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
local forNext = false
local ____param2_33
if param2 then
____param2_33 = convertTextToAngle(param2)
else
____param2_33 = nil
end
local facing = ____param2_33
if nbParam == 1 or nbParam == 2 then
if not (param1 == "next" or param1 == "n" or param1 == "current" or param1 == "c") then
Text.erP(
escaper:getPlayer(),
"param1 should be \"next\" or \"n\" or \"current\" or \"c\""
)
return true
end
if param1 == "next" or param1 == "n" then
forNext = true
end
else
forNext = false
end
escaper:makeCreateStart(forNext, facing)
Text.mkP(
escaper:getPlayer(),
"start making on"
)
return true
end
})
registerCommand({
name = "createEnd",
alias = {"cre"},
group = "make",
argDescription = "",
description = "create the end (a rectangle formed with two clicks) of the current level",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
escaper:makeCreateEnd()
Text.mkP(
escaper:getPlayer(),
"end making on"
)
return true
end
})
registerCommand({
name = "getMakingLevel",
alias = {"getmkl"},
group = "make",
argDescription = "",
description = "displays the id of the level the player is creating (the first one is id 0)",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
local str = ""
if getUdgLevels():getCurrentLevel() == escaper:getMakingLevel() then
str = " (same as current level)"
else
str = ""
end
Text.P(
escaper:getPlayer(),
("the level you are making is number " .. I2S(escaper:getMakingLevel():getId())) .. str
)
return true
end
})
registerCommand({
name = "setMakingLevel",
alias = {"setmkl"},
group = "make",
argDescription = "<levelId> | current(c)",
description = "sets the level the players chose to continue creating",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
if IsPositiveInteger(param1) then
local n = S2I(param1)
if getUdgLevels():getLastLevelId() < n then
if n - getUdgLevels():getLastLevelId() == 1 then
if getUdgLevels():new() then
Text.mkP(
escaper:getPlayer(),
("level number " .. I2S(n)) .. " created"
)
else
Text.erP(
escaper:getPlayer(),
"nombre maximum de niveaux atteint"
)
return true
end
else
Text.erP(
escaper:getPlayer(),
"this level doesn't exist"
)
return true
end
end
local level = getUdgLevels():get(n)
if level and escaper:setMakingLevel(level) then
Text.mkP(
escaper:getPlayer(),
"you are now making level " .. I2S(n)
)
else
Text.erP(
escaper:getPlayer(),
"you are already making this level"
)
end
else
if param1 == "current" or param1 == "c" then
if escaper:setMakingLevel(nil) then
Text.mkP(
escaper:getPlayer(),
("you are now making current level (which is at the moment number " .. I2S(getUdgLevels():getCurrentLevel():getId())) .. ")"
)
else
Text.erP(
escaper:getPlayer(),
"you are already making current level"
)
end
else
Text.erP(
escaper:getPlayer(),
"param1 should be a level id or \"current\""
)
end
end
return true
end
})
registerCommand({
name = "newLevel",
alias = {"newl"},
group = "make",
argDescription = "",
description = "creates a new level after the last one",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
if getUdgLevels():new() then
Text.mkP(
escaper:getPlayer(),
("level number " .. I2S(getUdgLevels():getLastLevelId())) .. " created"
)
else
Text.erP(
escaper:getPlayer(),
"nombre maximum de niveaux atteint"
)
end
end
return true
end
})
registerCommand({
name = "setLivesEarned",
alias = {"setle"},
group = "make",
argDescription = "<livesNumber> [<levelID>]",
description = "the number of lives earned at the specified level",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam >= 1 and nbParam <= 2) then
return true
end
if not IsPositiveInteger(param1) then
Text.erP(
escaper:getPlayer(),
"the number of lives must be a positive integer"
)
return true
end
local level = nil
if nbParam == 2 then
if not IsPositiveInteger(param2) then
Text.erP(
escaper:getPlayer(),
"the level number must be a positive integer"
)
return true
end
level = getUdgLevels():get(S2I(param2))
if not level then
Text.erP(
escaper:getPlayer(),
("level number " .. param2) .. " doesn't exist"
)
return true
end
else
level = escaper:getMakingLevel()
end
level:setNbLivesEarned(S2I(param1))
if level:getId() > 0 then
Text.mkP(
escaper:getPlayer(),
(("the number of lives earned at level " .. I2S(level:getId())) .. " is now ") .. param1
)
else
Text.mkP(
escaper:getPlayer(),
"the number of lives at the beginning of the game is now " .. param1
)
end
return true
end
})
registerCommand({
name = "createVisibility",
alias = {"crv"},
group = "make",
argDescription = "",
description = "create visibility rectangles for the current level",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
escaper:makeCreateVisibilityModifier()
Text.mkP(
escaper:getPlayer(),
"visibility making on"
)
end
return true
end
})
registerCommand({
name = "removeVisibilities",
alias = {"remv"},
group = "make",
argDescription = "[<levelId>]",
description = "remove all visibility rectangles made for the current level",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
local noParam
noParam = ____bindingPattern0.noParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (noParam or nbParam == 1) then
return true
end
local level = nil
if nbParam == 1 then
if not IsPositiveInteger(param1) then
Text.erP(
escaper:getPlayer(),
"the level number must be a positive integer"
)
return true
end
level = getUdgLevels():get(S2I(param2))
if not level then
Text.erP(
escaper:getPlayer(),
("level number " .. param1) .. " doesn't exist"
)
return true
end
else
level = escaper:getMakingLevel()
end
level:removeVisibilities()
Text.mkP(
escaper:getPlayer(),
"visibilities removed for level " .. I2S(level:getId())
)
return true
end
})
registerCommand({
name = "setStartMessage",
alias = {"setsm"},
group = "make",
argDescription = "[<message>]",
description = "sets the start message of the current level (spaces allowed)",
cb = function(____, ____bindingPattern0, escaper)
local cmd
cmd = ____bindingPattern0.cmd
escaper:getMakingLevel():setStartMessage(CmdParam(cmd, 0))
Text.mkP(
escaper:getPlayer(),
("start message for level " .. I2S(escaper:getMakingLevel():getId())) .. " changed"
)
return true
end
})
registerCommand({
name = "getStartMessage",
alias = {"getsm"},
group = "make",
argDescription = "",
description = "displays the start message of the current level",
cb = function(____, ____bindingPattern0, escaper)
local str = escaper:getMakingLevel():getStartMessage()
if str == "" or str == nil then
Text.mkP(
escaper:getPlayer(),
("start message for level " .. I2S(escaper:getMakingLevel():getId())) .. " is not defined"
)
else
Text.mkP(
escaper:getPlayer(),
((("start message for level " .. I2S(escaper:getMakingLevel():getId())) .. " is \"") .. str) .. "\""
)
end
return true
end
})
registerCommand({
name = "cancel",
alias = {"z"},
group = "make",
argDescription = "",
description = "cancel the last action made on the map",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
if not escaper:cancelLastAction() then
Text.erP(
escaper:getPlayer(),
"nothing to cancel"
)
end
end
return true
end
})
registerCommand({
name = "redo",
alias = {"y"},
group = "make",
argDescription = "",
description = "redo the last action cancelled",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
if not escaper:redoLastAction() then
Text.erP(
escaper:getPlayer(),
"nothing to redo"
)
end
end
return true
end
})
registerCommand({
name = "nbLevels",
alias = {"nbl"},
group = "make",
argDescription = "",
description = "display the number of levels that are currently in the map",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
local n = getUdgLevels():count()
if n > 1 then
Text.P(
escaper:getPlayer(),
("there are currently " .. I2S(n)) .. " levels in the map"
)
else
Text.P(
escaper:getPlayer(),
("there is currently " .. I2S(n)) .. " level in the map"
)
end
end
return true
end
})
registerCommand({
name = "newCaster",
alias = {"newc"},
group = "make",
argDescription = "<label> <casterMonsterType> <projectileMonsterType> [<range> [<projectileSpeed> [<loadTime>]]]",
description = "create a new caster monster",
cb = function(____, ____bindingPattern0, escaper)
local param4
local param3
local param2
local param1
local nbParam
local cmd
cmd = ____bindingPattern0.cmd
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
param3 = ____bindingPattern0.param3
param4 = ____bindingPattern0.param4
if nbParam < 3 or nbParam > 6 then
return true
end
if getUdgCasterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
("Label \"" .. param1) .. "\" already used"
)
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param2) then
Text.erP(
escaper:getPlayer(),
("Unknown monster type \"" .. param2) .. "\""
)
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param3) then
Text.erP(
escaper:getPlayer(),
("Unknown monster type \"" .. param3) .. "\""
)
return true
end
local x = 0
local y = 0
local speed = 0
if nbParam >= 4 then
if S2R(param4) <= 0 then
Text.erP(
escaper:getPlayer(),
"The range must be a real higher than 0"
)
return true
end
x = S2R(param4)
if nbParam >= 5 then
if S2R(CmdParam(cmd, 5)) < MIN_CASTER_PROJECTILE_SPEED then
Text.erP(
escaper:getPlayer(),
"The projectile speed must be a real higher or equals to " .. R2S(MIN_CASTER_PROJECTILE_SPEED)
)
return true
end
speed = S2R(CmdParam(cmd, 5))
if nbParam == 6 then
if S2R(CmdParam(cmd, 6)) < MIN_CASTER_LOAD_TIME then
Text.erP(
escaper:getPlayer(),
"The load time must be a real higher or equals to " .. R2S(MIN_CASTER_LOAD_TIME)
)
return true
end
y = S2R(CmdParam(cmd, 6))
else
y = DEFAULT_CASTER_LOAD_TIME
end
else
y = DEFAULT_CASTER_LOAD_TIME
speed = DEFAULT_CASTER_PROJECTILE_SPEED
end
else
y = DEFAULT_CASTER_LOAD_TIME
speed = DEFAULT_CASTER_PROJECTILE_SPEED
x = DEFAULT_CASTER_RANGE
end
local casterMonsterType = getUdgMonsterTypes():getByLabel(param2)
local projectileMonsterType = getUdgMonsterTypes():getByLabel(param3)
local ____ = casterMonsterType and projectileMonsterType and getUdgCasterTypes():new(
param1,
casterMonsterType,
projectileMonsterType,
x,
speed,
y,
DEFAULT_CASTER_ANIMATION
)
Text.mkP(
escaper:getPlayer(),
("new caster type \"" .. param1) .. "\" created"
)
return true
end
})
registerCommand({
name = "setCasterLabel",
alias = {"setcl"},
group = "make",
argDescription = "<oldCasterLabel> <newCasterLabel>",
description = "change the label of a caster monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local b = not not getUdgCasterTypes():getByLabel(param1)
if b then
b = not getUdgCasterTypes():isLabelAlreadyUsed(param2)
end
if b then
local ____getUdgCasterTypes_result_getByLabel_result_setLabel_result_34 = getUdgCasterTypes():getByLabel(param1)
if ____getUdgCasterTypes_result_getByLabel_result_setLabel_result_34 ~= nil then
____getUdgCasterTypes_result_getByLabel_result_setLabel_result_34 = ____getUdgCasterTypes_result_getByLabel_result_setLabel_result_34:setLabel(param2)
end
Text.mkP(
escaper:getPlayer(),
("label changed to \"" .. param2) .. "\""
)
else
Text.erP(
escaper:getPlayer(),
"impossible to change label"
)
end
return true
end
})
registerCommand({
name = "setCasterAlias",
alias = {"setca"},
group = "make",
argDescription = "<casterLabel> <alias>",
description = "change the alias of a caster monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 2) then
return true
end
local b = not not getUdgCasterTypes():getByLabel(param1)
if b then
b = not getUdgCasterTypes():isLabelAlreadyUsed(param2)
end
if b then
local ____getUdgCasterTypes_result_getByLabel_result_setAlias_result_36 = getUdgCasterTypes():getByLabel(param1)
if ____getUdgCasterTypes_result_getByLabel_result_setAlias_result_36 ~= nil then
____getUdgCasterTypes_result_getByLabel_result_setAlias_result_36 = ____getUdgCasterTypes_result_getByLabel_result_setAlias_result_36:setAlias(param2)
end
Text.mkP(
escaper:getPlayer(),
("alias changed to \"" .. param2) .. "\""
)
else
Text.erP(
escaper:getPlayer(),
"impossible to change alias"
)
end
return true
end
})
registerCommand({
name = "setCasterCaster",
alias = {"setcc"},
group = "make",
argDescription = "<casterLabel> <casterMonsterType>",
description = "change the caster monster type of a caster monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if nbParam ~= 2 then
return true
end
if not getUdgCasterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
("unknown caster type \"" .. param1) .. "\""
)
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param2) then
Text.erP(
escaper:getPlayer(),
("unknown monster type \"" .. param2) .. "\""
)
return true
end
local monsterType = getUdgMonsterTypes():getByLabel(param2)
local ____monsterType_40 = monsterType
if ____monsterType_40 then
local ____getUdgCasterTypes_result_getByLabel_result_setCasterMonsterType_result_38 = getUdgCasterTypes():getByLabel(param1)
if ____getUdgCasterTypes_result_getByLabel_result_setCasterMonsterType_result_38 ~= nil then
____getUdgCasterTypes_result_getByLabel_result_setCasterMonsterType_result_38 = ____getUdgCasterTypes_result_getByLabel_result_setCasterMonsterType_result_38:setCasterMonsterType(monsterType)
end
____monsterType_40 = ____getUdgCasterTypes_result_getByLabel_result_setCasterMonsterType_result_38
end
Text.mkP(
escaper:getPlayer(),
"caster monster type changed"
)
return true
end
})
registerCommand({
name = "setCasterProjectile",
alias = {"setcp"},
group = "make",
argDescription = "<casterLabel> <projectileMonsterType>",
description = "change the projectile monster type of a caster monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if nbParam ~= 2 then
return true
end
if not getUdgCasterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
("unknown caster type \"" .. param1) .. "\""
)
return true
end
if not getUdgMonsterTypes():isLabelAlreadyUsed(param2) then
Text.erP(
escaper:getPlayer(),
("unknown monster type \"" .. param2) .. "\""
)
return true
end
local monsterType = getUdgMonsterTypes():getByLabel(param2)
local ____monsterType_43 = monsterType
if ____monsterType_43 then
local ____getUdgCasterTypes_result_getByLabel_result_setProjectileMonsterType_result_41 = getUdgCasterTypes():getByLabel(param1)
if ____getUdgCasterTypes_result_getByLabel_result_setProjectileMonsterType_result_41 ~= nil then
____getUdgCasterTypes_result_getByLabel_result_setProjectileMonsterType_result_41 = ____getUdgCasterTypes_result_getByLabel_result_setProjectileMonsterType_result_41:setProjectileMonsterType(monsterType)
end
____monsterType_43 = ____getUdgCasterTypes_result_getByLabel_result_setProjectileMonsterType_result_41
end
Text.mkP(
escaper:getPlayer(),
"projectile monster type changed"
)
return true
end
})
registerCommand({
name = "setCasterRange",
alias = {"setcr"},
group = "make",
argDescription = "<casterLabel> <range>",
description = "change the range of a caster monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if nbParam ~= 2 then
return true
end
if not getUdgCasterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
("unknown caster type \"" .. param1) .. "\""
)
return true
end
if S2R(param2) <= 0 then
Text.erP(
escaper:getPlayer(),
"the range must be a real higher than 0"
)
return true
end
local ____getUdgCasterTypes_result_getByLabel_result_setRange_result_44 = getUdgCasterTypes():getByLabel(param1)
if ____getUdgCasterTypes_result_getByLabel_result_setRange_result_44 ~= nil then
____getUdgCasterTypes_result_getByLabel_result_setRange_result_44 = ____getUdgCasterTypes_result_getByLabel_result_setRange_result_44:setRange(S2R(param2))
end
Text.mkP(
escaper:getPlayer(),
"range changed"
)
return true
end
})
registerCommand({
name = "setCasterSpeed",
alias = {"setcs"},
group = "make",
argDescription = "<casterLabel> <projectileSpeed>",
description = "change the speed of a caster monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if nbParam ~= 2 then
return true
end
if not getUdgCasterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
("unknown caster type \"" .. param1) .. "\""
)
return true
end
if S2R(param2) < MIN_CASTER_PROJECTILE_SPEED then
Text.erP(
escaper:getPlayer(),
"the projectile speed must be a real higher or equals to " .. R2S(MIN_CASTER_PROJECTILE_SPEED)
)
return true
end
local ____getUdgCasterTypes_result_getByLabel_result_setProjectileSpeed_result_46 = getUdgCasterTypes():getByLabel(param1)
if ____getUdgCasterTypes_result_getByLabel_result_setProjectileSpeed_result_46 ~= nil then
____getUdgCasterTypes_result_getByLabel_result_setProjectileSpeed_result_46 = ____getUdgCasterTypes_result_getByLabel_result_setProjectileSpeed_result_46:setProjectileSpeed(S2R(param2))
end
Text.mkP(
escaper:getPlayer(),
"projectile speed changed"
)
return true
end
})
registerCommand({
name = "setCasterLoadTime",
alias = {"setclt"},
group = "make",
argDescription = "<casterLabel> <loadTime>",
description = "change the load time of a caster monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if nbParam ~= 2 then
return true
end
if not getUdgCasterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
("unknown caster type \"" .. param1) .. "\""
)
return true
end
if S2R(param2) < MIN_CASTER_LOAD_TIME then
Text.erP(
escaper:getPlayer(),
"the load time must be a real higher or equals to " .. R2S(MIN_CASTER_LOAD_TIME)
)
return true
end
local ____getUdgCasterTypes_result_getByLabel_result_setLoadTime_result_48 = getUdgCasterTypes():getByLabel(param1)
if ____getUdgCasterTypes_result_getByLabel_result_setLoadTime_result_48 ~= nil then
____getUdgCasterTypes_result_getByLabel_result_setLoadTime_result_48 = ____getUdgCasterTypes_result_getByLabel_result_setLoadTime_result_48:setLoadTime(S2R(param2))
end
Text.mkP(
escaper:getPlayer(),
"load time changed"
)
return true
end
})
registerCommand({
name = "setCasterAnimation",
alias = {"setcan"},
group = "make",
argDescription = "<casterLabel> <animation>",
description = "change the animation of a caster monster",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
local name
local cmd
cmd = ____bindingPattern0.cmd
name = ____bindingPattern0.name
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam >= 2) then
return true
end
if not getUdgCasterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
("unknown caster type \"" .. param1) .. "\""
)
return true
end
local n = StringLength(name) + StringLength(param1) + 4
local str = SubStringBJ(
cmd,
n,
StringLength(cmd)
)
local ____getUdgCasterTypes_result_getByLabel_result_setAnimation_result_50 = getUdgCasterTypes():getByLabel(param1)
if ____getUdgCasterTypes_result_getByLabel_result_setAnimation_result_50 ~= nil then
____getUdgCasterTypes_result_getByLabel_result_setAnimation_result_50 = ____getUdgCasterTypes_result_getByLabel_result_setAnimation_result_50:setAnimation(str)
end
Text.mkP(
escaper:getPlayer(),
"caster animation changed"
)
return true
end
})
registerCommand({
name = "createCaster",
alias = {"crc"},
group = "make",
argDescription = "<casterLabel> [<facingAngle>]",
description = "create a caster monster",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if nbParam < 1 or nbParam > 2 then
return true
end
if not getUdgCasterTypes():isLabelAlreadyUsed(param1) then
Text.erP(
escaper:getPlayer(),
("unknown caster type \"" .. param1) .. "\""
)
return true
end
local x = 0
if nbParam == 2 then
if S2R(param2) == 0 and param2 ~= "0" then
Text.erP(
escaper:getPlayer(),
"wrong angle value ; should be a real (-1 for random angle)"
)
return true
end
x = S2R(param2)
else
x = -1
end
local casterType = getUdgCasterTypes():getByLabel(param1)
local ____ = casterType and escaper:makeCreateCaster(casterType, x)
Text.mkP(
escaper:getPlayer(),
"casters making on"
)
return true
end
})
registerCommand({
name = "deleteCastersBetweenPoints",
alias = {"delcbp"},
group = "make",
argDescription = "",
description = "delete casters in a rectangle formed with two clicks",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
escaper:makeDeleteCasters("twoClics")
Text.mkP(
escaper:getPlayer(),
"casters deleting on"
)
end
return true
end
})
registerCommand({
name = "deleteCaster",
alias = {"delc"},
group = "make",
argDescription = "",
description = "delete the casters clicked by the player",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if noParam then
escaper:makeDeleteCasters("oneByOne")
Text.mkP(
escaper:getPlayer(),
"casters deleting on"
)
end
return true
end
})
registerCommand({
name = "displayCasters",
alias = {"dc"},
group = "make",
argDescription = "[<casterLabel>]",
description = "display the casters of the map",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam <= 1) then
return true
end
if nbParam == 1 then
if getUdgCasterTypes():isLabelAlreadyUsed(param1) then
local ____getUdgCasterTypes_result_getByLabel_result_displayForPlayer_result_52 = getUdgCasterTypes():getByLabel(param1)
if ____getUdgCasterTypes_result_getByLabel_result_displayForPlayer_result_52 ~= nil then
____getUdgCasterTypes_result_getByLabel_result_displayForPlayer_result_52 = ____getUdgCasterTypes_result_getByLabel_result_displayForPlayer_result_52:displayForPlayer(escaper:getPlayer())
end
else
Text.erP(
escaper:getPlayer(),
"unknown caster type"
)
end
else
getUdgCasterTypes():displayForPlayer(escaper:getPlayer())
end
return true
end
})
registerCommand({
name = "createClearMob",
alias = {"crcm"},
group = "make",
argDescription = "<disableDuration>",
description = "create a clear mob",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
local x = S2R(param1)
if x ~= 0 and (x > CLEAR_MOB_MAX_DURATION or x < FRONT_MONTANT_DURATION) then
Text.erP(
escaper:getPlayer(),
(("the disable duration must be a real between " .. R2S(FRONT_MONTANT_DURATION)) .. " and ") .. R2S(CLEAR_MOB_MAX_DURATION)
)
return true
end
escaper:makeCreateClearMobs(x)
Text.mkP(
escaper:getPlayer(),
"clear mob making on"
)
return true
end
})
registerCommand({
name = "deleteClearMob",
alias = {"delcm"},
group = "make",
argDescription = "",
description = "delete the clear mob",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
escaper:makeDeleteClearMobs()
Text.mkP(
escaper:getPlayer(),
"clear mobs deleting on"
)
return true
end
})
registerCommand({
name = "createCircleMob",
alias = {"crcim"},
group = "make",
argDescription = "[<speed> [<direction> [<facing [<radius>]]]]",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param4
local param3
local param2
local param1
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
param3 = ____bindingPattern0.param3
param4 = ____bindingPattern0.param4
if param1 ~= "" and S2I(param1) == 0 then
Text.erP(
escaper:getPlayer(),
"Speed must be > 0"
)
return true
end
param2 = string.lower(param2)
if param2 ~= "" and param2 ~= "cw" and param2 ~= "ccw" then
Text.erP(
escaper:getPlayer(),
"Direction must be \"cw\" or \"ccw\""
)
return true
end
if param3 ~= "" and param3 ~= "cw" and param3 ~= "ccw" and param3 ~= "in" and param3 ~= "out" then
Text.erP(
escaper:getPlayer(),
"Facing must be \"cw\", \"ccw\", \"in\" or \"out\""
)
return true
end
if param4 ~= "" and S2I(param4) == 0 then
Text.erP(
escaper:getPlayer(),
"Radius must be > 0"
)
return true
end
Text.mkP(
escaper:getPlayer(),
"Circle creation on. First click on the center mob"
)
local ____escaper_58 = escaper
local ____escaper_makeCreateCircleMob_59 = escaper.makeCreateCircleMob
local ____temp_54
if param1 == "" then
____temp_54 = nil
else
____temp_54 = S2I(param1)
end
local ____temp_55
if param2 == "" then
____temp_55 = nil
else
____temp_55 = param2
end
local ____temp_56
if param3 == "" then
____temp_56 = nil
else
____temp_56 = param3
end
local ____temp_57
if param4 == "" then
____temp_57 = nil
else
____temp_57 = S2I(param4)
end
____escaper_makeCreateCircleMob_59(
____escaper_58,
____temp_54,
____temp_55,
____temp_56,
____temp_57
)
return true
end
})
registerCommand({
name = "deleteCircleMob",
alias = {"delcim"},
group = "make",
argDescription = "",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
escaper:makeDeleteCircleMob()
Text.mkP(
escaper:getPlayer(),
"circles deleting on"
)
return true
end
})
registerCommand({
name = "setCircleMobSpeed",
alias = {"setcims"},
group = "make",
argDescription = "<speed>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
if S2R(param1) == 0 then
Text.erP(
escaper:getPlayer(),
"Speed must be > 0"
)
return true
end
escaper:makeSetCircleMobSpeed(S2R(param1))
Text.mkP(
escaper:getPlayer(),
"Click on the circle to apply"
)
return true
end
})
registerCommand({
name = "setCircleMobDirection",
alias = {"setcimd"},
group = "make",
argDescription = "cw | ccw",
description = "Clockwise of counter-clockwise",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
param1 = string.lower(param1)
if param1 ~= "cw" and param1 ~= "ccw" then
Text.erP(
escaper:getPlayer(),
"Direction must be \"cw\" or \"ccw\""
)
return true
end
escaper:makeSetCircleMobDirection(param1)
Text.mkP(
escaper:getPlayer(),
"Click on the circle to apply"
)
return true
end
})
registerCommand({
name = "setCircleMobFacing",
alias = {"setcimf"},
group = "make",
argDescription = "cw | ccw | in | out",
description = "In or out of the circle",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
param1 = string.lower(param1)
if param1 ~= "cw" and param1 ~= "ccw" and param1 ~= "in" and param1 ~= "out" then
Text.erP(
escaper:getPlayer(),
"Facing must be \"cw\", \"ccw\", \"in\" or \"out\""
)
return true
end
escaper:makeSetCircleMobFacing(param1)
Text.mkP(
escaper:getPlayer(),
"Click on the circle to apply"
)
return true
end
})
registerCommand({
name = "setCircleMobRadius",
alias = {"setcimr"},
group = "make",
argDescription = "<radius>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
if S2I(param1) <= 0 then
Text.erP(
escaper:getPlayer(),
"Radius must be > 0"
)
return true
end
escaper:makeSetCircleMobRadius(S2I(param1))
Text.mkP(
escaper:getPlayer(),
"Click on the circle to apply"
)
return true
end
})
registerCommand({
name = "createStaticSlide",
alias = {"crss"},
group = "make",
argDescription = "<angle> <speed>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
local angle = convertTextToAngle(param1)
if not angle then
Text.erP(
escaper:getPlayer(),
"Angle must be > 0 and <= 360"
)
return true
end
if not (S2I(param2) > 0 and S2I(param2) <= 1000) then
Text.erP(
escaper:getPlayer(),
"Speed must be > 0 and <= 1000"
)
return true
end
Text.mkP(
escaper:getPlayer(),
"Static slide creation on. Click for regions"
)
escaper:makeCreateStaticSlide(
angle,
S2I(param2)
)
return true
end
})
registerCommand({
name = "deleteStaticSlide",
alias = {"delss"},
group = "make",
argDescription = "",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
escaper:makeDeleteStaticSlide()
Text.mkP(
escaper:getPlayer(),
"static slide deletion on"
)
return true
end
})
registerCommand({
name = "setStaticSlideSpeed",
alias = {"setsss"},
group = "make",
argDescription = "<speed>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
if not (S2I(param1) > 0 and S2I(param1) <= 1000) then
Text.erP(
escaper:getPlayer(),
"Speed must be > 0 and <= 1000"
)
return true
end
escaper:makeSetStaticSlideSpeed(S2R(param1))
Text.mkP(
escaper:getPlayer(),
"Click on the staticSlide to apply"
)
return true
end
})
registerCommand({
name = "setStaticSlideAngle",
alias = {"setssa"},
group = "make",
argDescription = "<angle>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
local angle = convertTextToAngle(param1)
if not angle then
Text.erP(
escaper:getPlayer(),
"Angle must be > 0 and <= 360"
)
return true
end
escaper:makeSetStaticSlideAngle(angle)
Text.mkP(
escaper:getPlayer(),
"Click on the staticSlide to apply"
)
return true
end
})
registerCommand({
name = "setMonsterJumpPad",
alias = {"setmjp"},
group = "make",
argDescription = "<jumpPadZ>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
if not (S2I(param1) > 0 and S2I(param1) <= 100) then
Text.erP(
escaper:getPlayer(),
"JumpPad must be > 0 and <= 100"
)
return true
end
local ____escaper_61 = escaper
local ____escaper_makeSetMonsterJumpPad_62 = escaper.makeSetMonsterJumpPad
local ____temp_60
if S2I(param1) == 0 then
____temp_60 = nil
else
____temp_60 = S2I(param1)
end
____escaper_makeSetMonsterJumpPad_62(____escaper_61, ____temp_60)
Text.mkP(
escaper:getPlayer(),
"Click on a monster to apply"
)
return true
end
})
registerCommand({
name = "setMonsterJumpPadEffect",
alias = {"setmjpe"},
group = "make",
argDescription = "[jumpPadEffect]",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
escaper:makeSetMonsterJumpPadEffect(param1)
Text.mkP(
escaper:getPlayer(),
"Click on a monster to apply"
)
return true
end
})
registerCommand({
name = "debugRegions",
alias = {"dr"},
group = "make",
argDescription = "<active>",
description = "",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
if not IsBoolString(param1) then
Text.erP(
escaper:getPlayer(),
"the property \"active\" must be a boolean (true or false)"
)
return true
end
escaper:getMakingLevel():setDebugRegionsVisible(S2B(param1))
Text.mkP(
escaper:getPlayer(),
"debugRegions " .. (S2B(param1) and "on" or "off")
)
return true
end
})
registerCommand({
name = "createPortalMob",
alias = {"crpm"},
group = "make",
argDescription = "<freezeDuration> [<portalEffect> [<portalEffectDuration>]]",
description = "create a portal mob",
cb = function(____, ____bindingPattern0, escaper)
local param3
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
param3 = ____bindingPattern0.param3
if not (nbParam == 1 or nbParam == 2 or nbParam == 3) then
return true
end
local x = S2R(param1)
if x ~= 0 and (x > PORTAL_MOB_MAX_FREEZE_DURATION or x < 0) then
Text.erP(
escaper:getPlayer(),
(("the disable duration must be a real between " .. R2S(0)) .. " and ") .. R2S(PORTAL_MOB_MAX_FREEZE_DURATION)
)
return true
end
if param3 ~= "" then
if not (S2R(param3) > 0) then
Text.erP(
escaper:getPlayer(),
"the portal effect duration must be > 0"
)
return true
end
end
local ____escaper_65 = escaper
local ____escaper_makeCreatePortalMobs_66 = escaper.makeCreatePortalMobs
local ____param2_64 = param2
local ____temp_63
if param3 == "" then
____temp_63 = nil
else
____temp_63 = S2R(param3)
end
____escaper_makeCreatePortalMobs_66(____escaper_65, x, ____param2_64, ____temp_63)
Text.mkP(
escaper:getPlayer(),
"portal mob making on"
)
return true
end
})
registerCommand({
name = "deletePortalMob",
alias = {"delpm"},
group = "make",
argDescription = "",
description = "delete the portal mob",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
escaper:makeDeletePortalMobs()
Text.mkP(
escaper:getPlayer(),
"portal mobs deleting on"
)
return true
end
})
registerCommand({
name = "setPortalMobFreezeDuration",
alias = {"setpmfd"},
group = "make",
argDescription = "<freezeDuration>",
description = "set the freeze duration of the portal mob",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
local x = S2R(param1)
if x ~= 0 and (x > PORTAL_MOB_MAX_FREEZE_DURATION or x < 0) then
Text.erP(
escaper:getPlayer(),
(("the disable duration must be a real between " .. R2S(0)) .. " and ") .. R2S(PORTAL_MOB_MAX_FREEZE_DURATION)
)
return true
end
escaper:makeSetPortalMobFreezeDuration(x)
Text.mkP(
escaper:getPlayer(),
"portal mob freeze duration setting on"
)
return true
end
})
registerCommand({
name = "setPortalMobEffect",
alias = {"setpme"},
group = "make",
argDescription = "<portalEffect>",
description = "set the portal effect of the portal mob",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if not (nbParam == 1) then
return true
end
escaper:makeSetPortalMobPortalEffect(param1)
Text.mkP(
escaper:getPlayer(),
"portal mob portal effect setting on"
)
return true
end
})
registerCommand({
name = "setPortalMobEffectDuration",
alias = {"setpmed"},
group = "make",
argDescription = "<portalEffectDuration>",
description = "set the portal effect duration of the portal mob",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
if param1 ~= "" then
if not (S2R(param1) > 0) then
Text.erP(
escaper:getPlayer(),
"the portal effect duration must be > 0"
)
return true
end
end
local ____escaper_68 = escaper
local ____escaper_makeSetPortalMobPortalEffectDuration_69 = escaper.makeSetPortalMobPortalEffectDuration
local ____temp_67
if param1 == "" then
____temp_67 = nil
else
____temp_67 = S2R(param1)
end
____escaper_makeSetPortalMobPortalEffectDuration_69(____escaper_68, ____temp_67)
Text.mkP(
escaper:getPlayer(),
"portal mob portal effect duration setting on"
)
return true
end
})
registerCommand({
name = "getTerrainCliffClass",
alias = {"gettcc"},
group = "make",
argDescription = "<terrainLabel>",
description = "get the cliff class of the terrain",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
return true
end
local terrainType = getUdgTerrainTypes():getByLabel(param1)
if not terrainType then
return true
end
local ____ = terrainType and Text.mkP(
escaper:getPlayer(),
"cliff class for that terrain is " .. I2S(terrainType:getCliffClassId())
)
return true
end
})
registerCommand({
name = "getMainTileset",
alias = {},
group = "make",
argDescription = "",
description = "get the main tileset",
cb = function(____, ____bindingPattern0, escaper)
local noParam
noParam = ____bindingPattern0.noParam
if not noParam then
return true
end
if getUdgTerrainTypes():getMainTileset() == "auto" then
Text.mkP(
escaper:getPlayer(),
"main tile: auto"
)
else
Text.mkP(
escaper:getPlayer(),
(("main tile: " .. getUdgTerrainTypes():getMainTileset()) .. " = ") .. tileset2tilesetString(getUdgTerrainTypes():getMainTileset())
)
end
return true
end
})
registerCommand({
name = "setClickGrid",
alias = {"setcg"},
group = "make",
argDescription = "<value>",
description = "set the click grid",
cb = function(____, ____bindingPattern0, escaper)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam == 1 then
escaper.roundToGrid = S2I(param1) > 1 and S2I(param1) <= 128 and S2I(param1) or nil
if escaper.roundToGrid then
Text.mkP(
escaper:getPlayer(),
("Now rounding clicks to: '" .. tostring(escaper.roundToGrid)) .. "'"
)
else
Text.erP(
escaper:getPlayer(),
"Disabled rounding clicks"
)
end
end
return true
end
})
end
return ____exports
end,
["src.core.06_COMMANDS.COMMANDS_vJass.Command_superadmin"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__StringSubstring = ____lualib.__TS__StringSubstring
local ____exports = {}
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____EffectUtils = require("src.Utils.EffectUtils")
local EffectUtils = ____EffectUtils.EffectUtils
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsBoolString = ____Basic_functions.IsBoolString
local S2B = ____Basic_functions.S2B
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local isPlayerId = ____Command_functions.isPlayerId
local resolvePlayerId = ____Command_functions.resolvePlayerId
____exports.initExecuteCommandTrueMax = function()
local ____ServiceManager_getService_result_0 = ServiceManager.getService("Cmd")
local registerCommand = ____ServiceManager_getService_result_0.registerCommand
local memState = {timer = nil}
registerCommand({
name = "beAdmin",
alias = {},
group = "truemax",
argDescription = "<Pcolor>|all(a) [<boolean status>]",
description = "Makes a player an admin",
cb = function(____, ____bindingPattern0, escaper)
local param2
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
if not (nbParam == 1 or nbParam == 2) then
Text.erP(
escaper:getPlayer(),
"one or two params for this command"
)
return true
end
local b = false
if nbParam == 2 then
if IsBoolString(param2) then
b = S2B(param2)
else
Text.erP(
escaper:getPlayer(),
"param2 must be a boolean"
)
return true
end
else
b = true
end
if param1 == "all" or param1 == "a" then
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
if getUdgEscapers():get(i) ~= nil and getUdgEscapers():get(i) ~= escaper then
local ____getUdgEscapers_result_get_result_setIsMaximaxou_result_1 = getUdgEscapers():get(i)
if ____getUdgEscapers_result_get_result_setIsMaximaxou_result_1 ~= nil then
____getUdgEscapers_result_get_result_setIsMaximaxou_result_1 = ____getUdgEscapers_result_get_result_setIsMaximaxou_result_1:setIsMaximaxou(b)
end
end
i = i + 1
end
if b then
Text.P(
escaper:getPlayer(),
"all players have now admin rights"
)
else
Text.P(
escaper:getPlayer(),
"you are now the only one to have admin rights"
)
end
return true
end
if isPlayerId(param1) then
local n = resolvePlayerId(param1)
if getUdgEscapers():get(n) ~= nil then
if getUdgEscapers():get(n) ~= escaper then
local ____getUdgEscapers_result_get_result_setIsMaximaxou_result_3 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_setIsMaximaxou_result_3 ~= nil then
____getUdgEscapers_result_get_result_setIsMaximaxou_result_3 = ____getUdgEscapers_result_get_result_setIsMaximaxou_result_3:setIsMaximaxou(b)
end
if b then
Text.P(
escaper:getPlayer(),
("player " .. param1) .. " has now admin rights"
)
else
Text.P(
escaper:getPlayer(),
("player " .. param1) .. " no longer has admin rights"
)
end
else
Text.erP(
escaper:getPlayer(),
"you can't change your own rights"
)
end
else
Text.erP(
escaper:getPlayer(),
("escaper " .. param1) .. " doesn't exist"
)
end
else
Text.erP(
escaper:getPlayer(),
"param1 must be a player color or \"all\""
)
end
return true
end
})
registerCommand({
name = "mem",
alias = {},
group = "truemax",
argDescription = "create | timer | all | (track <boolean>)",
description = "Show memory usage",
cb = function(____, ____bindingPattern0)
local param2
local debugObjects
debugObjects = ____bindingPattern0.param1
param2 = ____bindingPattern0.param2
_G.printCreation = false
local ____memState_timer_destroy_result_5 = memState.timer
if ____memState_timer_destroy_result_5 ~= nil then
____memState_timer_destroy_result_5 = ____memState_timer_destroy_result_5:destroy()
end
if debugObjects == "create" or debugObjects == "all" then
_G.printCreation = true
end
if debugObjects == "track" and IsBoolString(param2) then
_G.trackPrintMap = S2B(param2)
print("Mem: trackPrintMap " .. (S2B(param2) and "on" or "off"))
return true
end
if debugObjects == "timer" or debugObjects == "all" then
memState.timer = createTimer(1, true, MemoryHandler.printDebugInfo)
end
if debugObjects == "" then
MemoryHandler.printDebugInfo()
else
print("Mem: " .. debugObjects)
end
return true
end
})
registerCommand({
name = "exec",
alias = {"e"},
group = "truemax",
argDescription = "<string>",
description = "Execute raw lua code",
cb = function(____, ____bindingPattern0, escaper)
local name
name = ____bindingPattern0.name
local args = __TS__StringSubstring(
GetEventPlayerChatString(),
#name + 2
)
local func, err = load(("return function() return " .. args) .. " end")
if func then
local ok, f = pcall(func)
if ok then
Text.P(
escaper:getPlayer(),
("Ran: '" .. args) .. "'"
)
local out = f()
if out then
Text.P(
escaper:getPlayer(),
("Out: '" .. tostring(out)) .. "'"
)
end
else
Text.erP(
escaper:getPlayer(),
"Execution error: " .. f
)
end
else
if type(err) == "string" then
Text.erP(
escaper:getPlayer(),
err
)
else
Text.erP(
escaper:getPlayer(),
"Syntax error"
)
end
end
return true
end
})
registerCommand({
name = "disableEffects",
alias = {},
group = "truemax",
argDescription = "on | off",
description = "disables all effects",
cb = function(____, ____bindingPattern0, escaper)
local param1
param1 = ____bindingPattern0.param1
if #param1 == 0 then
param1 = EffectUtils.getDisplayEffects() and "on" or "off"
end
if IsBoolString(param1) then
EffectUtils.setDisplayEffects(not S2B(param1))
Text.mkP(
escaper:getPlayer(),
"Effects " .. (not S2B(param1) and "shown" or "hidden")
)
end
return true
end
})
end
return ____exports
end,
["src.core.06_COMMANDS.COMMANDS_vJass.Command_execution"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ArrayFind = ____lualib.__TS__ArrayFind
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local forRange = ____mapUtils.forRange
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____globals_variables_and_triggers = require("src.core.09_From_old_Worldedit_triggers.globals_variables_and_triggers")
local Globals = ____globals_variables_and_triggers.Globals
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____Constants = require("src.core.01_libraries.Constants")
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____Command_admin = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_admin")
local initExecuteCommandMax = ____Command_admin.initExecuteCommandMax
local ____Command_all = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_all")
local initCommandAll = ____Command_all.initCommandAll
local ____Command_cheat = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_cheat")
local initExecuteCommandCheat = ____Command_cheat.initExecuteCommandCheat
local ____Command_first_player = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_first_player")
local initExecuteCommandRed = ____Command_first_player.initExecuteCommandRed
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local CmdName = ____Command_functions.CmdName
local CmdParam = ____Command_functions.CmdParam
local IsCmd = ____Command_functions.IsCmd
local NbParam = ____Command_functions.NbParam
local NoParam = ____Command_functions.NoParam
local ____Command_make = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_make")
local initExecuteCommandMake = ____Command_make.initExecuteCommandMake
local ____Command_superadmin = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_superadmin")
local initExecuteCommandTrueMax = ____Command_superadmin.initExecuteCommandTrueMax
local function parseCmdContext(cmd)
local obj = MemoryHandler.getEmptyObject()
obj.cmd = cmd
obj.name = CmdName(cmd)
obj.noParam = NoParam(cmd)
obj.nbParam = NbParam(cmd)
obj.param1 = CmdParam(cmd, 1)
obj.param2 = CmdParam(cmd, 2)
obj.param3 = CmdParam(cmd, 3)
obj.param4 = CmdParam(cmd, 4)
return obj
end
____exports.initCommandExecution = function()
local commands = {}
local function registerCommand(cmd)
commands[#commands + 1] = cmd
end
local function accessCheck(escaper, cmd)
repeat
local ____switch6 = cmd.group
local ____cond6 = ____switch6 == "truemax"
if ____cond6 then
do
if not escaper:isTrueMaximaxou() then
Text.erP(
escaper:getPlayer(),
"unknown command or not enough rights"
)
return false
end
end
end
____cond6 = ____cond6 or ____switch6 == "max"
if ____cond6 then
do
if not escaper:isMaximaxou() then
Text.erP(
escaper:getPlayer(),
"unknown command or not enough rights"
)
return false
end
end
end
____cond6 = ____cond6 or (____switch6 == "make" or ____switch6 == "cheat")
if ____cond6 then
do
if not escaper:canCheat() then
Text.erP(
escaper:getPlayer(),
"unknown command or not enough rights"
)
return false
end
end
end
____cond6 = ____cond6 or ____switch6 == "red"
if ____cond6 then
do
if not (escaper:getPlayer() == Player(0) and Globals.udg_areRedRightsOn or escaper:canCheat()) then
Text.erP(
escaper:getPlayer(),
"unknown command or not enough rights"
)
return false
end
end
end
____cond6 = ____cond6 or ____switch6 == "all"
do
return true
end
until true
end
local function findTargetCommand(commands, parsedContext, escaper)
for ____, cmd in ipairs(commands) do
local isMatchedName = string.lower(cmd.name) == string.lower(parsedContext.name)
local isMatchedAlias = false
for ____, alias in ipairs(cmd.alias) do
if string.lower(alias) == string.lower(parsedContext.name) then
isMatchedAlias = true
break
end
end
local ____cmd_enabled_0
if cmd.enabled then
____cmd_enabled_0 = cmd:enabled(parsedContext, escaper)
else
____cmd_enabled_0 = true
end
local isEnabled = ____cmd_enabled_0
local hasAccess = accessCheck(escaper, cmd)
if (isMatchedName or isMatchedAlias) and isEnabled and hasAccess then
return cmd
end
end
end
local function ExecuteCommandSingle(escaper, cmd)
do
local function ____catch(____error)
if type(____error) == "string" then
if escaper:getPlayer() then
Text.erP(
escaper:getPlayer(),
____error
)
else
Text.erA(____error)
end
end
end
local ____try, ____hasReturned = pcall(function()
local parsedContext = parseCmdContext(cmd)
local targetCmd = findTargetCommand(commands, parsedContext, escaper)
local ____targetCmd_cb_result_1 = targetCmd
if ____targetCmd_cb_result_1 ~= nil then
____targetCmd_cb_result_1 = ____targetCmd_cb_result_1:cb(parsedContext, escaper)
end
MemoryHandler.destroyObject(parsedContext)
end)
if not ____try then
____catch(____hasReturned)
end
end
end
local function ExecuteCommand(escaper, cmd)
local singleCommands = MemoryHandler.getEmptyArray()
local char
local i
local nbParenthesesNonFermees = 0
local singleCommandId = 0
local charId
if SubStringBJ(cmd, 2, 2) == "(" and SubStringBJ(
cmd,
StringLength(cmd),
StringLength(cmd)
) == ")" then
cmd = SubStringBJ(cmd, 1, 1) .. SubStringBJ(
cmd,
3,
StringLength(cmd) - 1
)
end
charId = 2
while true do
if charId > StringLength(cmd) then
break
end
char = SubStringBJ(cmd, charId, charId)
if char == "," then
if nbParenthesesNonFermees <= 0 then
singleCommandId = singleCommandId + 1
charId = charId + 1
end
else
if char == "(" then
nbParenthesesNonFermees = nbParenthesesNonFermees + 1
else
if char == ")" then
nbParenthesesNonFermees = nbParenthesesNonFermees - 1
end
end
end
if char ~= "," or nbParenthesesNonFermees > 0 then
singleCommands[singleCommandId + 1] = (singleCommands[singleCommandId + 1] or "") .. char
end
charId = charId + 1
end
i = 0
while true do
if i > singleCommandId then
break
end
if singleCommands[i + 1] ~= nil and singleCommands[i + 1] ~= "" then
ExecuteCommandSingle(escaper, "-" .. singleCommands[i + 1])
end
i = i + 1
end
MemoryHandler.destroyArray(singleCommands)
end
createEvent({
events = {function(t) return forRange(
NB_PLAYERS_MAX,
function(i) return TriggerRegisterPlayerChatEvent(
t,
Player(i),
"-",
false
) end
) end},
actions = {function()
if not IsCmd(GetEventPlayerChatString()) then
return
end
local escaper = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
if not escaper then
return
end
ExecuteCommand(
escaper,
GetEventPlayerChatString()
)
end}
})
local function initCommands()
initCommandAll()
initExecuteCommandRed()
initExecuteCommandCheat()
initExecuteCommandMake()
initExecuteCommandMax()
initExecuteCommandTrueMax()
registerCommand({
name = "help",
alias = {"h", "?"},
group = "all",
argDescription = "",
description = "",
cb = function(____, ____bindingPattern0)
local param1
param1 = ____bindingPattern0.param1
local filtered = __TS__ArrayFilter(
commands,
function(____, cmd)
local ____param1_3
if param1 then
____param1_3 = (string.find(
string.lower(cmd.name),
string.lower(param1),
nil,
true
) or 0) - 1 >= 0 or cmd.alias and __TS__ArrayFind(
cmd.alias,
function(____, alias) return (string.find(
string.lower(alias),
string.lower(param1),
nil,
true
) or 0) - 1 >= 0 end
)
else
____param1_3 = true
end
return ____param1_3
end
)
local s = "Commands:\n" .. table.concat(
__TS__ArrayMap(
filtered,
function(____, cmd) return ((("-" .. cmd.name) .. (#cmd.alias > 0 and ("(" .. table.concat(cmd.alias, " | ")) .. ")" or "")) .. (#cmd.argDescription > 0 and " " .. cmd.argDescription or "")) .. (#cmd.description > 0 and " --> " .. cmd.description or "") end
),
"\n"
)
Text.P(
GetTriggerPlayer(),
s
)
return true
end
})
end
return {registerCommand = registerCommand, ExecuteCommand = ExecuteCommand, initCommands = initCommands}
end
return ____exports
end,
["src.Services"] = function(...)
local ____exports = {}
local function initServiceManager()
local services = {}
local function registerServices(servicesIn)
for serviceName, service in pairs(servicesIn) do
services[serviceName] = service()
end
end
local function getService(serviceName)
local targetService = services[serviceName]
if not targetService then
error(
("Service: '" .. String(nil, serviceName)) .. "' not found",
0
)
end
return targetService
end
return {registerServices = registerServices, getService = getService}
end
____exports.ServiceManager = initServiceManager()
return ____exports
end,
["src.core.01_libraries.Init_terrain_limit_variables"] = function(...)
local ____exports = {}
local ____globals = require("globals")
local globals = ____globals.globals
____exports.init_terrain_limit_variables = function()
globals.MAP_MIN_X = math.floor(GetRectMinX(GetWorldBounds()) + 0.5)
globals.MAP_MAX_X = math.floor(GetRectMaxX(GetWorldBounds()) + 0.5)
globals.MAP_MIN_Y = math.floor(GetRectMinY(GetWorldBounds()) + 0.5)
globals.MAP_MAX_Y = math.floor(GetRectMaxY(GetWorldBounds()) + 0.5)
end
return ____exports
end,
["src.core.06_COMMANDS.COMMANDS_vJass.Autorevive"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local IsHero = ____Escaper_functions.IsHero
local ____globals = require("globals")
local globals = ____globals.globals
____exports.initTrig_Autorevive = function()
globals.autoreviveDelay = 4
createEvent({
events = {function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_DEATH) end},
conditions = {function() return IsHero(GetTriggerUnit()) end},
actions = {function()
local escaper = Hero2Escaper(GetTriggerUnit())
if not escaper then
return
end
if escaper:hasAutorevive() then
local ____ = globals.autoreviveDelay ~= nil and TriggerSleepAction(globals.autoreviveDelay)
escaper:reviveAtStart()
escaper:selectHero()
end
end}
})
end
return ____exports
end,
["src.core.07_TRIGGERS.Handling_secondary_hero.Stop_second_if_make"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local GetMirrorEscaper = ____Escaper_functions.GetMirrorEscaper
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsIssuedOrder = ____Basic_functions.IsIssuedOrder
local StopUnit = ____Basic_functions.StopUnit
--- Prevent secondary hero to move if the player is in "Make" mode
____exports.init_StopSecondIfMake = function()
createEvent({
events = {function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER) end},
actions = {function()
if IsIssuedOrder("smart") then
local unit = GetTriggerUnit()
local escaper = Hero2Escaper(unit)
local ____escaper_isEscaperSecondary_result_0 = escaper
if ____escaper_isEscaperSecondary_result_0 ~= nil then
____escaper_isEscaperSecondary_result_0 = ____escaper_isEscaperSecondary_result_0:isEscaperSecondary()
end
if ____escaper_isEscaperSecondary_result_0 then
local mainEscaper = GetMirrorEscaper(escaper)
local ____mainEscaper_getMake_result_2 = mainEscaper
if ____mainEscaper_getMake_result_2 ~= nil then
____mainEscaper_getMake_result_2 = ____mainEscaper_getMake_result_2:getMake()
end
if ____mainEscaper_getMake_result_2 then
StopUnit(unit)
end
end
end
end}
})
end
return ____exports
end,
["src.core.07_TRIGGERS.Start_of_the_game.start_first_level"] = function(...)
local ____exports = {}
local ____globals = require("globals")
local getUdgLevels = ____globals.getUdgLevels
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
____exports.init_startFirstLevel = function()
createTimer(
0,
false,
function()
local ____getUdgLevels_result_get_result_activate_result_0 = getUdgLevels():get(0)
if ____getUdgLevels_result_get_result_activate_result_0 ~= nil then
____getUdgLevels_result_get_result_activate_result_0 = ____getUdgLevels_result_get_result_activate_result_0:activate(true)
end
end
)
end
return ____exports
end,
["src.core.08_GAME.Camera_reset.Camera_position_at_start"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local ____globals = require("globals")
local getUdgLevels = ____globals.getUdgLevels
____exports.init_cameraPositionAtStart = function()
createTimer(
0,
false,
function()
local ____getUdgLevels_result_get_result_getStart_result_0 = getUdgLevels():get(0)
if ____getUdgLevels_result_get_result_getStart_result_0 ~= nil then
____getUdgLevels_result_get_result_getStart_result_0 = ____getUdgLevels_result_get_result_getStart_result_0:getStart()
end
local level0start = ____getUdgLevels_result_get_result_getStart_result_0
if level0start then
SetCameraPosition(
level0start:getCenterX(),
level0start:getCenterY()
)
end
end
)
end
return ____exports
end,
["src.core.08_GAME.Init_game.Allways_day"] = function(...)
local ____exports = {}
____exports.init_Trig_Allways_day = function()
SetTimeOfDay(12)
UseTimeOfDayBJ(false)
end
return ____exports
end,
["src.core.08_GAME.Init_game.No_selection_circle"] = function(...)
local ____exports = {}
____exports.initNoSelectionCircle = function()
EnableSelect(true, false)
end
return ____exports
end,
["src.core.08_GAME.select_unit"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local forRange = ____mapUtils.forRange
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local IsHero = ____Escaper_functions.IsHero
____exports.initSelectUnit = function()
createEvent({
events = {function(t) return forRange(
NB_ESCAPERS,
function(i) return TriggerRegisterPlayerSelectionEventBJ(
t,
Player(i),
true
) end
) end},
actions = {function()
if IsHero(GetTriggerUnit()) then
local escaper = Hero2Escaper(GetTriggerUnit())
if escaper then
local ____getUdgEscapers_result_get_result_setSelectedPlayerId_result_0 = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
if ____getUdgEscapers_result_get_result_setSelectedPlayerId_result_0 ~= nil then
____getUdgEscapers_result_get_result_setSelectedPlayerId_result_0 = ____getUdgEscapers_result_get_result_setSelectedPlayerId_result_0:setSelectedPlayerId(GetPlayerId(escaper:getPlayer()))
end
end
end
end}
})
end
return ____exports
end,
["src.core.Double_heroes.double_kill"] = function(...)
local ____exports = {}
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local GetMirrorEscaper = ____Escaper_functions.GetMirrorEscaper
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local IsHero = ____Escaper_functions.IsHero
local ____mapUtils = require("src.Utils.mapUtils")
local errorHandler = ____mapUtils.errorHandler
local ____double_heroes_config = require("src.core.Double_heroes.double_heroes_config")
local udg_doubleHeroesEnabled = ____double_heroes_config.udg_doubleHeroesEnabled
____exports.init_doubleKill = function()
local triggerDoubleKill = CreateTrigger()
TriggerRegisterAnyUnitEventBJ(triggerDoubleKill, EVENT_PLAYER_UNIT_DEATH)
TriggerAddAction(
triggerDoubleKill,
errorHandler(function()
if udg_doubleHeroesEnabled and IsHero(GetTriggerUnit()) then
local ____GetMirrorEscaper_result_kill_result_0 = GetMirrorEscaper(Hero2Escaper(GetTriggerUnit()))
if ____GetMirrorEscaper_result_kill_result_0 ~= nil then
____GetMirrorEscaper_result_kill_result_0 = ____GetMirrorEscaper_result_kill_result_0:kill()
end
end
end)
)
end
return ____exports
end,
["src.core.Keyboard_shortcuts.Cancel_redo"] = function(...)
local ____exports = {}
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____Constants = require("src.core.01_libraries.Constants")
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
____exports.init_shortcurt_cancelRedo = function()
local ____ServiceManager_getService_result_0 = ServiceManager.getService("Cmd")
local ExecuteCommand = ____ServiceManager_getService_result_0.ExecuteCommand
local function Cancel_Actions()
local escaper = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
local ____ = escaper and ExecuteCommand(escaper, "-z")
end
local function Redo_Actions()
local escaper = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
local ____ = escaper and ExecuteCommand(escaper, "-y")
end
do
local i = 0
while i < NB_PLAYERS_MAX do
local trgCancel = CreateTrigger()
TriggerAddAction(trgCancel, Cancel_Actions)
BlzTriggerRegisterPlayerKeyEvent(
trgCancel,
Player(i),
OSKEY_Z,
2,
false
)
local trgRedo = CreateTrigger()
TriggerAddAction(trgRedo, Redo_Actions)
BlzTriggerRegisterPlayerKeyEvent(
trgRedo,
Player(i),
OSKEY_Z,
3,
false
)
BlzTriggerRegisterPlayerKeyEvent(
trgRedo,
Player(i),
OSKEY_Y,
2,
false
)
i = i + 1
end
end
end
return ____exports
end,
["src.core.Test.test"] = function(...)
local ____exports = {}
local ____env = require("src.env")
local PROD = ____env.PROD
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____manage_rights = require("src.core.06_COMMANDS.Rights.manage_rights")
local makingRightsToAll = ____manage_rights.makingRightsToAll
____exports.init_Test = function()
local ____ServiceManager_getService_result_0 = ServiceManager.getService("Cmd")
local ExecuteCommand = ____ServiceManager_getService_result_0.ExecuteCommand
if not PROD then
makingRightsToAll()
local escaper = getUdgEscapers():get(0)
if escaper then
ExecuteCommand(escaper, "-va, news slide 'Nsnw', setta slide s, news reverse 5 -400, setta reverse rev, newd death 1 Abilities\\Spells\\NightElf\\EntanglingRoots\\EntanglingRootsTarget.mdl, setta death d, neww walk 97, setta walk w, crh")
ExecuteCommand(escaper, "-newm caisse 'cais' 40, newm naga 'nnsw' 60, newm peon 'opeo' 40")
ExecuteCommand(escaper, "-newCaster c naga peon")
end
end
end
return ____exports
end,
["src.core.Init.initArrays"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____EscaperArray = require("src.core.04_STRUCTURES.Escaper.EscaperArray")
local EscaperArray = ____EscaperArray.EscaperArray
local ____globals = require("globals")
local setUdgCasterTypes = ____globals.setUdgCasterTypes
local setUdgEscapers = ____globals.setUdgEscapers
local setUdgLevels = ____globals.setUdgLevels
local setUdgMonsterTypes = ____globals.setUdgMonsterTypes
local setUdgTerrainTypes = ____globals.setUdgTerrainTypes
local ____LevelArray = require("src.core.04_STRUCTURES.Level.LevelArray")
local LevelArray = ____LevelArray.LevelArray
local ____TerrainTypeArray = require("src.core.04_STRUCTURES.TerrainType.TerrainTypeArray")
local TerrainTypeArray = ____TerrainTypeArray.TerrainTypeArray
local ____MonsterTypeArray = require("src.core.04_STRUCTURES.Monster.MonsterTypeArray")
local MonsterTypeArray = ____MonsterTypeArray.MonsterTypeArray
local ____CasterTypeArray = require("src.core.04_STRUCTURES.Caster.CasterTypeArray")
local CasterTypeArray = ____CasterTypeArray.CasterTypeArray
local function initEscapers()
setUdgEscapers(__TS__New(EscaperArray))
end
local function initLevels()
setUdgLevels(__TS__New(LevelArray))
end
local function initTerrainTypes()
setUdgTerrainTypes(__TS__New(TerrainTypeArray))
end
local function initMonsterTypes()
setUdgMonsterTypes(__TS__New(MonsterTypeArray))
end
local function initCasterTypes()
setUdgCasterTypes(__TS__New(CasterTypeArray))
end
____exports.initArrays = function()
initEscapers()
initLevels()
initTerrainTypes()
initMonsterTypes()
initCasterTypes()
end
return ____exports
end,
["src.core.04_STRUCTURES.Meteor.Effect_meteor_on_pick_down"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local IsHero = ____Escaper_functions.IsHero
local ____Meteor = require("src.core.04_STRUCTURES.Meteor.Meteor")
local METEOR_CHEAT = ____Meteor.METEOR_CHEAT
local METEOR_NORMAL = ____Meteor.METEOR_NORMAL
____exports.InitTrig_Effect_meteor_on_pick_down = function()
createEvent({
events = {function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_DROP_ITEM) end},
actions = {function()
if not (IsHero(GetTriggerUnit()) and (GetItemTypeId(GetManipulatedItem()) == METEOR_NORMAL or GetItemTypeId(GetManipulatedItem()) == METEOR_CHEAT)) then
return
end
local ____Hero2Escaper_result_removeEffectMeteor_result_0 = Hero2Escaper(GetTriggerUnit())
if ____Hero2Escaper_result_removeEffectMeteor_result_0 ~= nil then
____Hero2Escaper_result_removeEffectMeteor_result_0 = ____Hero2Escaper_result_removeEffectMeteor_result_0:removeEffectMeteor()
end
end}
})
end
return ____exports
end,
["src.core.04_STRUCTURES.Meteor.Effect_meteor_on_pick_up"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local ____Meteor = require("src.core.04_STRUCTURES.Meteor.Meteor")
local METEOR_NORMAL = ____Meteor.METEOR_NORMAL
____exports.InitTrig_Effect_meteor_on_pick_up = function()
createEvent({
events = {function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_PICKUP_ITEM) end},
conditions = {function() return GetItemTypeId(UnitItemInSlotBJ(
GetTriggerUnit(),
1
)) == METEOR_NORMAL end},
actions = {function()
local ____Hero2Escaper_result_addEffectMeteor_result_0 = Hero2Escaper(GetTriggerUnit())
if ____Hero2Escaper_result_addEffectMeteor_result_0 ~= nil then
____Hero2Escaper_result_addEffectMeteor_result_0 = ____Hero2Escaper_result_addEffectMeteor_result_0:addEffectMeteor()
end
return ____Hero2Escaper_result_addEffectMeteor_result_0
end}
})
end
return ____exports
end,
["src.core.04_STRUCTURES.Meteor.Stop_using_normal_meteor"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local StopUnit = ____Basic_functions.StopUnit
____exports.InitTrig_Stop_using_normal_meteor = function()
____exports.gg_trg_Stop_using_normal_meteor = createEvent({
events = {function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_CAST) end},
conditions = {function()
if not (GetSpellAbilityId() == FourCC("A002")) then
return false
end
return true
end},
actions = {function() return StopUnit(GetTriggerUnit()) end}
})
DisableTrigger(____exports.gg_trg_Stop_using_normal_meteor)
end
return ____exports
end,
["src.core.04_STRUCTURES.Meteor.Meteor_being_used"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local ____Meteor = require("src.core.04_STRUCTURES.Meteor.Meteor")
local METEOR_NORMAL = ____Meteor.METEOR_NORMAL
local udg_meteors = ____Meteor.udg_meteors
local ____Stop_using_normal_meteor = require("src.core.04_STRUCTURES.Meteor.Stop_using_normal_meteor")
local gg_trg_Stop_using_normal_meteor = ____Stop_using_normal_meteor.gg_trg_Stop_using_normal_meteor
____exports.InitTrig_Meteor_being_used = function()
createEvent({
events = {function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_USE_ITEM) end},
actions = {function()
SetUnitAnimation(
GetTriggerUnit(),
"attack"
)
if GetItemTypeId(GetManipulatedItem()) == METEOR_NORMAL then
DisableTrigger(GetTriggeringTrigger())
EnableTrigger(gg_trg_Stop_using_normal_meteor)
udg_meteors[GetItemUserData(GetManipulatedItem())]:removeMeteorItem()
local ____Hero2Escaper_result_removeEffectMeteor_result_0 = Hero2Escaper(GetTriggerUnit())
if ____Hero2Escaper_result_removeEffectMeteor_result_0 ~= nil then
____Hero2Escaper_result_removeEffectMeteor_result_0 = ____Hero2Escaper_result_removeEffectMeteor_result_0:removeEffectMeteor()
end
TriggerSleepAction(1)
EnableTrigger(GetTriggeringTrigger())
DisableTrigger(gg_trg_Stop_using_normal_meteor)
end
end}
})
end
return ____exports
end,
["src.core.04_STRUCTURES.Meteor.Right_click_on_widget"] = function(...)
local ____exports = {}
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsIssuedOrder = ____Basic_functions.IsIssuedOrder
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local IsHero = ____Escaper_functions.IsHero
local ____Meteor_functions = require("src.core.04_STRUCTURES.Meteor.Meteor_functions")
local MeteorFunctions = ____Meteor_functions.MeteorFunctions
____exports.InitTrig_Right_click_on_widget = function()
createEvent({
events = {function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER) end},
conditions = {function() return IsHero(GetTriggerUnit()) and IsIssuedOrder("smart") end},
actions = {function()
if GetOrderTargetUnit() ~= nil then
MeteorFunctions.ExecuteRightClicOnUnit(
GetTriggerUnit(),
GetOrderTargetUnit()
)
end
end}
})
end
return ____exports
end,
["src.core.08_GAME.Afk_mode.Afk_mode_ordre_recu"] = function(...)
local ____exports = {}
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local IsHero = ____Escaper_functions.IsHero
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local createTimer = ____mapUtils.createTimer
local forRange = ____mapUtils.forRange
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____Constants = require("src.core.01_libraries.Constants")
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____Afk_mode = require("src.core.08_GAME.Afk_mode.Afk_mode")
local AfkMode = ____Afk_mode.AfkMode
____exports.InitTrig_Afk_mode_ordre_recu = function()
createEvent({
events = {
function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER) end,
function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER) end
},
actions = {function()
if IsHero(GetTriggerUnit()) then
AfkMode.resetAfk(GetUnitUserData(GetTriggerUnit()))
end
end}
})
local lastMousesX = {}
local lastMousesY = {}
forRange(
NB_PLAYERS_MAX,
function(i)
lastMousesX[i + 1] = 0
lastMousesY[i + 1] = 0
end
)
createTimer(
0.1,
true,
function()
do
local i = 0
while i < NB_PLAYERS_MAX do
local escaper = getUdgEscapers():get(i)
if escaper then
if escaper.mouseX ~= lastMousesX[i + 1] or escaper.mouseY ~= lastMousesY[i + 1] then
AfkMode.resetAfk(i)
end
lastMousesX[i + 1] = escaper.mouseX
lastMousesY[i + 1] = escaper.mouseY
end
i = i + 1
end
end
end
)
end
return ____exports
end,
["src.core.08_GAME.Camera_reset.Camera_reset"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local forRange = ____mapUtils.forRange
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
____exports.InitTrig_Camera_reset = function()
createEvent({
events = {function(t) return forRange(
NB_ESCAPERS,
function(i) return TriggerRegisterPlayerEventEndCinematic(
t,
Player(i)
) end
) end},
actions = {function()
local ____getUdgEscapers_result_get_result_resetCamera_result_0 = getUdgEscapers():get(GetPlayerId(GetTriggerPlayer()))
if ____getUdgEscapers_result_get_result_resetCamera_result_0 ~= nil then
____getUdgEscapers_result_get_result_resetCamera_result_0 = ____getUdgEscapers_result_get_result_resetCamera_result_0:resetCamera()
end
end}
})
end
return ____exports
end,
["src.core.08_GAME.Death.Sound_monster_dies"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
____exports.InitTrig_Sound_monster_dies = function()
createEvent({
events = {function(t) return TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_DEATH) end},
conditions = {function()
if not (GetOwningPlayer(GetTriggerUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE)) then
return false
end
return true
end},
actions = {function() return PlaySoundBJ(gg_snd_goodJob) end}
})
end
return ____exports
end,
["src.core.08_GAME.Init_game.Forces_ally"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local forRange = ____mapUtils.forRange
local ____Constants = require("src.core.01_libraries.Constants")
local NB_PLAYERS_MAX_REFORGED = ____Constants.NB_PLAYERS_MAX_REFORGED
____exports.InitTrig_Forces_ally = function()
forRange(
NB_PLAYERS_MAX_REFORGED,
function(i)
forRange(
NB_PLAYERS_MAX_REFORGED,
function(j)
if i ~= j then
SetPlayerAllianceStateBJ(
Player(i),
Player(j),
bj_ALLIANCE_ALLIED_VISION
)
end
end
)
end
)
end
return ____exports
end,
["src.core.08_GAME.Init_game.Start_sound"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
____exports.InitTrig_Start_sound = function()
createEvent({
events = {function(t) return TriggerRegisterTimerEventSingle(t, 2) end},
actions = {function() return PlaySoundBJ(gg_snd_start) end}
})
end
return ____exports
end,
["src.core.08_GAME.Leavers.A_player_leaves"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____Init_colorCodes = require("src.core.01_libraries.Init_colorCodes")
local udg_colorCode = ____Init_colorCodes.udg_colorCode
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local forRange = ____mapUtils.forRange
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____Afk_mode = require("src.core.08_GAME.Afk_mode.Afk_mode")
local AfkMode = ____Afk_mode.AfkMode
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local playerId2colorId = ____Command_functions.playerId2colorId
____exports.InitTrig_A_player_leaves = function()
createEvent({
events = {function(t) return forRange(
NB_ESCAPERS,
function(i) return TriggerRegisterPlayerEventLeave(
t,
Player(i)
) end
) end},
actions = {function()
local n = GetPlayerId(GetTriggerPlayer())
local ____getUdgEscapers_result_get_result_getDisplayName_result_0 = getUdgEscapers():get(n)
if ____getUdgEscapers_result_get_result_getDisplayName_result_0 ~= nil then
____getUdgEscapers_result_get_result_getDisplayName_result_0 = ____getUdgEscapers_result_get_result_getDisplayName_result_0:getDisplayName()
end
local displayName = ____getUdgEscapers_result_get_result_getDisplayName_result_0
getUdgEscapers():destroyEscaper(n)
AfkMode.StopAfk(n)
AfkMode.StopAfk(n + NB_PLAYERS_MAX)
DisplayTextToForce(
GetPlayersAll(),
((udg_colorCode[playerId2colorId(n) + 1] .. "This is too difficult for ") .. tostring(displayName)) .. ", (s)he has left the game."
)
StartSound(gg_snd_noob)
end}
})
end
return ____exports
end,
["src.core.08_GAME.Select_and_unselect_heroes.Select_hero"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local IsHero = ____Escaper_functions.IsHero
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local forRange = ____mapUtils.forRange
____exports.InitTrig_Select_hero = function()
createEvent({
events = {function(t) return forRange(
NB_ESCAPERS,
function(i) return TriggerRegisterPlayerSelectionEventBJ(
t,
Player(i),
true
) end
) end},
actions = {function()
if IsHero(GetTriggerUnit()) then
local ____Hero2Escaper_result_setIsHeroSelectedForPlayer_result_0 = Hero2Escaper(GetTriggerUnit())
if ____Hero2Escaper_result_setIsHeroSelectedForPlayer_result_0 ~= nil then
____Hero2Escaper_result_setIsHeroSelectedForPlayer_result_0 = ____Hero2Escaper_result_setIsHeroSelectedForPlayer_result_0:setIsHeroSelectedForPlayer(
GetTriggerPlayer(),
true
)
end
end
end}
})
end
return ____exports
end,
["src.core.08_GAME.Select_and_unselect_heroes.Unselect_hero"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local Hero2Escaper = ____Escaper_functions.Hero2Escaper
local IsHero = ____Escaper_functions.IsHero
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local forRange = ____mapUtils.forRange
____exports.InitTrig_Unselect_hero = function()
createEvent({
events = {function(t) return forRange(
NB_ESCAPERS,
function(i) return TriggerRegisterPlayerSelectionEventBJ(
t,
Player(i),
false
) end
) end},
actions = {function()
if IsHero(GetTriggerUnit()) then
local ____Hero2Escaper_result_setIsHeroSelectedForPlayer_result_0 = Hero2Escaper(GetTriggerUnit())
if ____Hero2Escaper_result_setIsHeroSelectedForPlayer_result_0 ~= nil then
____Hero2Escaper_result_setIsHeroSelectedForPlayer_result_0 = ____Hero2Escaper_result_setIsHeroSelectedForPlayer_result_0:setIsHeroSelectedForPlayer(
GetTriggerPlayer(),
false
)
end
end
end}
})
end
return ____exports
end,
["src.core.Init.init_old_triggers"] = function(...)
local ____exports = {}
local ____Effect_meteor_on_pick_down = require("src.core.04_STRUCTURES.Meteor.Effect_meteor_on_pick_down")
local InitTrig_Effect_meteor_on_pick_down = ____Effect_meteor_on_pick_down.InitTrig_Effect_meteor_on_pick_down
local ____Effect_meteor_on_pick_up = require("src.core.04_STRUCTURES.Meteor.Effect_meteor_on_pick_up")
local InitTrig_Effect_meteor_on_pick_up = ____Effect_meteor_on_pick_up.InitTrig_Effect_meteor_on_pick_up
local ____Meteor_being_used = require("src.core.04_STRUCTURES.Meteor.Meteor_being_used")
local InitTrig_Meteor_being_used = ____Meteor_being_used.InitTrig_Meteor_being_used
local ____Right_click_on_widget = require("src.core.04_STRUCTURES.Meteor.Right_click_on_widget")
local InitTrig_Right_click_on_widget = ____Right_click_on_widget.InitTrig_Right_click_on_widget
local ____Stop_using_normal_meteor = require("src.core.04_STRUCTURES.Meteor.Stop_using_normal_meteor")
local InitTrig_Stop_using_normal_meteor = ____Stop_using_normal_meteor.InitTrig_Stop_using_normal_meteor
local ____Afk_mode_ordre_recu = require("src.core.08_GAME.Afk_mode.Afk_mode_ordre_recu")
local InitTrig_Afk_mode_ordre_recu = ____Afk_mode_ordre_recu.InitTrig_Afk_mode_ordre_recu
local ____Camera_reset = require("src.core.08_GAME.Camera_reset.Camera_reset")
local InitTrig_Camera_reset = ____Camera_reset.InitTrig_Camera_reset
local ____A_hero_dies_check_if_all_dead_and_sounds = require("src.core.08_GAME.Death.A_hero_dies_check_if_all_dead_and_sounds")
local InitTrig_A_hero_dies_check_if_all_dead_and_sounds = ____A_hero_dies_check_if_all_dead_and_sounds.InitTrig_A_hero_dies_check_if_all_dead_and_sounds
local ____InvisUnit_is_getting_damage = require("src.core.08_GAME.Death.InvisUnit_is_getting_damage")
local InitTrig_InvisUnit_is_getting_damage = ____InvisUnit_is_getting_damage.InitTrig_InvisUnit_is_getting_damage
local ____Sound_monster_dies = require("src.core.08_GAME.Death.Sound_monster_dies")
local InitTrig_Sound_monster_dies = ____Sound_monster_dies.InitTrig_Sound_monster_dies
local ____Forces_ally = require("src.core.08_GAME.Init_game.Forces_ally")
local InitTrig_Forces_ally = ____Forces_ally.InitTrig_Forces_ally
local ____Start_sound = require("src.core.08_GAME.Init_game.Start_sound")
local InitTrig_Start_sound = ____Start_sound.InitTrig_Start_sound
local ____A_player_leaves = require("src.core.08_GAME.Leavers.A_player_leaves")
local InitTrig_A_player_leaves = ____A_player_leaves.InitTrig_A_player_leaves
local ____creation_dialogue = require("src.core.08_GAME.Mode_coop.creation_dialogue")
local InitTrig_creation_dialogue = ____creation_dialogue.InitTrig_creation_dialogue
local ____Select_hero = require("src.core.08_GAME.Select_and_unselect_heroes.Select_hero")
local InitTrig_Select_hero = ____Select_hero.InitTrig_Select_hero
local ____Unselect_hero = require("src.core.08_GAME.Select_and_unselect_heroes.Unselect_hero")
local InitTrig_Unselect_hero = ____Unselect_hero.InitTrig_Unselect_hero
____exports.initOldTriggers = function()
InitTrig_Right_click_on_widget()
InitTrig_Meteor_being_used()
InitTrig_Stop_using_normal_meteor()
InitTrig_Effect_meteor_on_pick_up()
InitTrig_Effect_meteor_on_pick_down()
InitTrig_Forces_ally()
InitTrig_Start_sound()
InitTrig_creation_dialogue()
InitTrig_Camera_reset()
InitTrig_Afk_mode_ordre_recu()
InitTrig_A_player_leaves()
InitTrig_InvisUnit_is_getting_damage()
InitTrig_A_hero_dies_check_if_all_dead_and_sounds()
InitTrig_Sound_monster_dies()
InitTrig_Select_hero()
InitTrig_Unselect_hero()
end
return ____exports
end,
["src.core.Init.initializers"] = function(...)
local ____exports = {}
local ____Cpm = require("src.core.08_GAME.Apm_clics_par_minute.Cpm")
local init_Cpm = ____Cpm.init_Cpm
local ____Init_terrain_limit_variables = require("src.core.01_libraries.Init_terrain_limit_variables")
local init_terrain_limit_variables = ____Init_terrain_limit_variables.init_terrain_limit_variables
local ____View_all_hide_all = require("src.core.03_view_all_hide_all.View_all_hide_all")
local initViewAllHideAll = ____View_all_hide_all.initViewAllHideAll
local ____Escaper_firstPerson = require("src.core.04_STRUCTURES.Escaper.Escaper_firstPerson")
local initFirstPerson = ____Escaper_firstPerson.initFirstPerson
local ____StartAndEnd = require("src.core.04_STRUCTURES.Level.StartAndEnd")
local init_StartAndEnd = ____StartAndEnd.init_StartAndEnd
local ____MonsterSimplePatrol = require("src.core.04_STRUCTURES.Monster.MonsterSimplePatrol")
local initMonsterSimplePatrol = ____MonsterSimplePatrol.initMonsterSimplePatrol
local ____trig_Monsters_clickable_set_life = require("src.core.04_STRUCTURES.Monster.trig_Monsters_clickable_set_life")
local init_TrigMonstersClickableSetLife = ____trig_Monsters_clickable_set_life.init_TrigMonstersClickableSetLife
local ____Autorevive = require("src.core.06_COMMANDS.COMMANDS_vJass.Autorevive")
local initTrig_Autorevive = ____Autorevive.initTrig_Autorevive
local ____Command_functions = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_functions")
local initCachedPlayerNames = ____Command_functions.initCachedPlayerNames
local ____Stop_second_if_make = require("src.core.07_TRIGGERS.Handling_secondary_hero.Stop_second_if_make")
local init_StopSecondIfMake = ____Stop_second_if_make.init_StopSecondIfMake
local ____Terrain_type_names_and_data = require("src.core.07_TRIGGERS.Modify_terrain_Functions.Terrain_type_names_and_data")
local init_TerrainTypeNamesAndData = ____Terrain_type_names_and_data.init_TerrainTypeNamesAndData
local ____To_turn_on_slide = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.To_turn_on_slide")
local init_ToTurnOnSlide = ____To_turn_on_slide.init_ToTurnOnSlide
local ____start_first_level = require("src.core.07_TRIGGERS.Start_of_the_game.start_first_level")
local init_startFirstLevel = ____start_first_level.init_startFirstLevel
local ____Reinit_terrains = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Reinit_terrains")
local ReinitTerrains = ____Reinit_terrains.ReinitTerrains
local ____Reinit_terrains_position_Change_variations_and_ut_at_beginning = require("src.core.07_TRIGGERS.Triggers_to_modify_terrains.Reinit_terrains_position_Change_variations_and_ut_at_beginning")
local ReinitTerrainsPositions = ____Reinit_terrains_position_Change_variations_and_ut_at_beginning.ReinitTerrainsPositions
local ____Apm = require("src.core.08_GAME.Apm_clics_par_minute.Apm")
local init_Apm = ____Apm.init_Apm
local ____Camera_position_at_start = require("src.core.08_GAME.Camera_reset.Camera_position_at_start")
local init_cameraPositionAtStart = ____Camera_position_at_start.init_cameraPositionAtStart
local ____Allways_day = require("src.core.08_GAME.Init_game.Allways_day")
local init_Trig_Allways_day = ____Allways_day.init_Trig_Allways_day
local ____Heroes = require("src.core.08_GAME.Init_game.Heroes")
local init_Heroes = ____Heroes.init_Heroes
local ____No_selection_circle = require("src.core.08_GAME.Init_game.No_selection_circle")
local initNoSelectionCircle = ____No_selection_circle.initNoSelectionCircle
local ____select_unit = require("src.core.08_GAME.select_unit")
local initSelectUnit = ____select_unit.initSelectUnit
local ____EnableDisableInterface = require("src.core.DisablingInterface.EnableDisableInterface")
local init_customUI = ____EnableDisableInterface.init_customUI
local ____double_kill = require("src.core.Double_heroes.double_kill")
local init_doubleKill = ____double_kill.init_doubleKill
local ____Cancel_redo = require("src.core.Keyboard_shortcuts.Cancel_redo")
local init_shortcurt_cancelRedo = ____Cancel_redo.init_shortcurt_cancelRedo
local ____test = require("src.core.Test.test")
local init_Test = ____test.init_Test
local ____initArrays = require("src.core.Init.initArrays")
local initArrays = ____initArrays.initArrays
local ____init_old_triggers = require("src.core.Init.init_old_triggers")
local initOldTriggers = ____init_old_triggers.initOldTriggers
____exports.initializers = function()
init_terrain_limit_variables()
initArrays()
init_StartAndEnd()
initViewAllHideAll()
initNoSelectionCircle()
init_Apm()
init_Cpm()
init_Heroes()
initSelectUnit()
initOldTriggers()
init_TerrainTypeNamesAndData()
init_ToTurnOnSlide()
init_StopSecondIfMake()
initCachedPlayerNames()
init_doubleKill()
initTrig_Autorevive()
init_TrigMonstersClickableSetLife()
init_Trig_Allways_day()
ReinitTerrains.init_ReinitAtStart()
ReinitTerrainsPositions.init_reinitTerrainsPositions()
initFirstPerson()
initMonsterSimplePatrol()
init_startFirstLevel()
init_cameraPositionAtStart()
init_shortcurt_cancelRedo()
init_customUI()
init_Test()
end
return ____exports
end,
["src.main"] = function(...)
local ____exports = {}
local ____renderInterface = require("src.App.renderInterface")
local renderInterface = ____renderInterface.renderInterface
local ____Services = require("src.Services")
local ServiceManager = ____Services.ServiceManager
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local errorHandler = ____mapUtils.errorHandler
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local IsBoolString = ____Basic_functions.IsBoolString
local S2B = ____Basic_functions.S2B
local ____Lives_and_game_time = require("src.core.04_STRUCTURES.Lives_and_game_time.Lives_and_game_time")
local initLives = ____Lives_and_game_time.initLives
local ____Multiboard = require("src.core.04_STRUCTURES.Lives_and_game_time.Multiboard")
local initMultiboard = ____Multiboard.initMultiboard
local ____Command_execution = require("src.core.06_COMMANDS.COMMANDS_vJass.Command_execution")
local initCommandExecution = ____Command_execution.initCommandExecution
local ____index = require("lua_modules.w3ts.hooks.index")
local W3TS_HOOK = ____index.W3TS_HOOK
local addScriptHook = ____index.addScriptHook
local ____MEC_core_API = require("src.core.API.MEC_core_API")
local MEC_core_API = ____MEC_core_API.MEC_core_API
local ____initializers = require("src.core.Init.initializers")
local initializers = ____initializers.initializers
local ____env = require("src.env")
local PROD = ____env.PROD
local function tsMain()
ServiceManager.registerServices({
Lives = initLives,
Multiboard = initMultiboard,
Cmd = initCommandExecution,
React = function()
return renderInterface({cb = function(____, ____bindingPattern0)
local resetUI
local setVisible
setVisible = ____bindingPattern0.setVisible
resetUI = ____bindingPattern0.resetUI
ServiceManager.getService("Cmd").registerCommand({
name = "palette",
alias = {"p"},
group = "make",
argDescription = "",
description = "",
cb = function(____, ____bindingPattern0)
local param1
local nbParam
nbParam = ____bindingPattern0.nbParam
param1 = ____bindingPattern0.param1
if nbParam ~= 1 then
error("Wrong command parameters", 0)
end
if param1 == "reset" then
resetUI(
nil,
GetPlayerId(GetTriggerPlayer())
)
return true
end
if not IsBoolString(param1) then
return true
end
setVisible(
nil,
{
visible = S2B(param1),
playerId = GetPlayerId(GetTriggerPlayer())
}
)
return true
end
})
end})
end
})
ServiceManager.getService("Cmd").initCommands()
initializers()
ServiceManager.getService("React").init()
if not PROD then
local gcState = {
lastRun = os.clock(),
waitingForGc = false
}
createTimer(
1,
true,
function()
if not gcState.waitingForGc then
gcState.waitingForGc = true
local trash = {a = 3}
setmetatable(
trash,
{__gc = function()
local now = os.clock()
print("GC: " .. tostring(now - gcState.lastRun))
gcState.lastRun = now
gcState.waitingForGc = false
end}
)
end
end
)
end
end
errorHandler(tsMain)()
____exports.MEC_core = MEC_core_API
return ____exports
end,
["src.render"] = function(...)
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local ____globals = require("globals")
local getUdgLevels = ____globals.getUdgLevels
local function getTileCenter(a)
local b = math.floor(a + 0.5)
return b - math.fmod(b, 128)
end
____exports.renderWorldSingle = function(renderInfo, playerIndex, x, y)
if GetLocalPlayer() == Player(playerIndex) then
local camX = getTileCenter(x)
local camY = getTileCenter(y)
local monstersMap = MemoryHandler.getEmptyObject()
for _, m in pairs(getUdgLevels():getCurrentLevel().monsters:getAll()) do
local ____temp_2 = m.u and m.mt
if ____temp_2 then
local ____m_mt_getUnitMoveSpeed_result_0 = m.mt
if ____m_mt_getUnitMoveSpeed_result_0 ~= nil then
____m_mt_getUnitMoveSpeed_result_0 = ____m_mt_getUnitMoveSpeed_result_0:getUnitMoveSpeed()
end
____temp_2 = ____m_mt_getUnitMoveSpeed_result_0
end
if ____temp_2 then
if not monstersMap[(tostring(getTileCenter(GetUnitX(m.u))) .. "_") .. tostring(getTileCenter(GetUnitY(m.u)))] then
monstersMap[(tostring(getTileCenter(GetUnitX(m.u))) .. "_") .. tostring(getTileCenter(GetUnitY(m.u)))] = MemoryHandler.getEmptyArray()
end
arrayPush(
monstersMap[(tostring(getTileCenter(GetUnitX(m.u))) .. "_") .. tostring(getTileCenter(GetUnitY(m.u)))],
m.u
)
end
end
for _, ms in pairs(getUdgLevels():getCurrentLevel().monsterSpawns:getAll()) do
if ms.monsters then
ForGroup(
ms.monsters,
function()
local m = GetEnumUnit()
if not monstersMap[(tostring(getTileCenter(GetUnitX(m))) .. "_") .. tostring(getTileCenter(GetUnitY(m)))] then
monstersMap[(tostring(getTileCenter(GetUnitX(m))) .. "_") .. tostring(getTileCenter(GetUnitY(m)))] = MemoryHandler.getEmptyArray()
end
arrayPush(
monstersMap[(tostring(getTileCenter(GetUnitX(m))) .. "_") .. tostring(getTileCenter(GetUnitY(m)))],
m
)
end
)
end
end
if not renderInfo[playerIndex] or renderInfo[playerIndex].lastCameraPosX ~= camX or renderInfo[playerIndex].lastCameraPosY ~= camY then
local viewDistance = 16
if renderInfo[playerIndex] then
local camX = renderInfo[playerIndex].lastCameraPosX
local camY = renderInfo[playerIndex].lastCameraPosY
local minX = camX - 128 * viewDistance
local maxX = camX + 128 * viewDistance
local minY = camY - 128 * viewDistance
local maxY = camY + 128 * viewDistance
do
local x = minX
while x < maxX do
do
local y = minY
while y < maxY do
local dKey = (tostring(R2I(x)) .. "_") .. tostring(R2I(y))
if monstersMap[dKey] then
for ____, a in ipairs(monstersMap[dKey]) do
ShowUnit(a, false)
end
end
y = y + 128
end
end
x = x + 128
end
end
end
do
local minX = camX - 128 * viewDistance
local maxX = camX + 128 * viewDistance
local minY = camY - 128 * viewDistance
local maxY = camY + 128 * viewDistance
do
local x = minX
while x < maxX do
do
local y = minY
while y < maxY do
local dKey = (tostring(R2I(x)) .. "_") .. tostring(R2I(y))
if monstersMap[dKey] then
for ____, a in ipairs(monstersMap[dKey]) do
ShowUnit(a, true)
end
end
y = y + 128
end
end
x = x + 128
end
end
end
if not renderInfo[playerIndex] then
renderInfo[playerIndex] = MemoryHandler.getEmptyObject()
end
renderInfo[playerIndex].lastCameraPosX = camX
renderInfo[playerIndex].lastCameraPosY = camY
end
for _, v in pairs(monstersMap) do
MemoryHandler.destroyArray(v)
end
MemoryHandler.destroyObject(monstersMap)
end
end
____exports.renderWorld = function(renderInfo)
do
local i = 0
while i < 24 do
if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING and GetPlayerController(Player(i)) == MAP_CONTROL_USER then
____exports.renderWorldSingle(
renderInfo,
i,
GetCameraEyePositionX(),
GetCameraEyePositionY()
)
end
i = i + 1
end
end
end
return ____exports
end,
["src.App.Hooks.useDrag"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local __TS__Class = ____lualib.__TS__Class
local ____exports = {}
local FollowMouse
local ____Constants = require("src.core.01_libraries.Constants")
local NB_PLAYERS_MAX_REFORGED = ____Constants.NB_PLAYERS_MAX_REFORGED
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local forRange = ____mapUtils.forRange
____exports.useDrag = function(props)
forRange(
NB_PLAYERS_MAX_REFORGED,
function(i)
__TS__New(FollowMouse, i, props.onDrag)
end
)
end
FollowMouse = __TS__Class()
FollowMouse.name = "FollowMouse"
function FollowMouse.prototype.____constructor(self, playerId, onDrag)
self.startFollowingMouse = function()
local ____ = self.tMouseMove and DestroyTrigger(self.tMouseMove)
self.tMouseMove = createEvent({
events = {function(t) return TriggerRegisterPlayerEvent(
t,
Player(self.playerId),
EVENT_PLAYER_MOUSE_MOVE
) end},
actions = {function()
if BlzGetTriggerPlayerMouseX() == 0 and BlzGetTriggerPlayerMouseY() == 0 then
return
end
self.onDrag(
self.playerId,
BlzGetTriggerPlayerMouseX(),
BlzGetTriggerPlayerMouseY()
)
end}
})
end
self.stopFollowingMouse = function()
local ____ = self.tMouseMove and DestroyTrigger(self.tMouseMove)
end
self.destroy = function()
self:stopFollowingMouse()
local ____ = self.tPress and DestroyTrigger(self.tPress)
local ____ = self.tUnpress and DestroyTrigger(self.tUnpress)
end
self.playerId = playerId
self.onDrag = onDrag
self.tPress = createEvent({
events = {function(t) return TriggerRegisterPlayerEvent(
t,
Player(self.playerId),
EVENT_PLAYER_MOUSE_DOWN
) end},
actions = {function()
if BlzGetTriggerPlayerMouseButton() == MOUSE_BUTTON_TYPE_LEFT then
self:startFollowingMouse()
end
end}
})
self.tUnpress = createEvent({
events = {function(t) return TriggerRegisterPlayerEvent(
t,
Player(self.playerId),
EVENT_PLAYER_MOUSE_UP
) end},
actions = {function()
if BlzGetTriggerPlayerMouseButton() == MOUSE_BUTTON_TYPE_LEFT then
self:stopFollowingMouse()
end
end}
})
end
return ____exports
end,
["src.Utils.CommandHandler"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ArrayForEach = ____lualib.__TS__ArrayForEach
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createEvent = ____mapUtils.createEvent
local forRange = ____mapUtils.forRange
____exports.CommandHandler = function(____bindingPattern0)
local commandTrigger
commandTrigger = ____bindingPattern0.commandTrigger
local commands = {}
local function registerCommand(____bindingPattern0)
local exactMatchOnly
local cb
local desc
local alias
local cmd
cmd = ____bindingPattern0.cmd
alias = ____bindingPattern0.alias
desc = ____bindingPattern0.desc
cb = ____bindingPattern0.cb
exactMatchOnly = ____bindingPattern0.exactMatchOnly
commands[#commands + 1] = {cmd = cmd, desc = desc}
createEvent({
events = {function(t)
forRange(
bj_MAX_PLAYER_SLOTS,
function(i) return TriggerRegisterPlayerChatEvent(
t,
Player(i),
commandTrigger .. cmd,
exactMatchOnly
) end
)
if alias then
__TS__ArrayForEach(
alias,
function(____, alias)
forRange(
bj_MAX_PLAYER_SLOTS,
function(i) return TriggerRegisterPlayerChatEvent(
t,
Player(i),
commandTrigger .. alias,
exactMatchOnly
) end
)
end
)
end
end},
conditions = {function() return (string.find(
GetEventPlayerChatString(),
commandTrigger,
nil,
true
) or 0) - 1 == 0 end},
actions = {function() return cb(nil) end}
})
end
registerCommand({
cmd = "help",
exactMatchOnly = true,
cb = function()
local s = "Commands:\n"
__TS__ArrayForEach(
commands,
function(____, c)
s = s .. c.cmd
if c.desc then
s = s .. " - " .. c.desc
end
s = s .. "\n"
end
)
print(s)
end
})
return {registerCommand = registerCommand}
end
return ____exports
end,
["src.core.01_libraries.Decode_string"] = function(...)
local ____exports = {}
local function initDecodeString()
local decodeMap = {
A = "Z",
B = "A",
C = "B",
D = "C",
E = "D",
F = "E",
G = "F",
H = "G",
I = "H",
J = "I",
K = "J",
L = "K",
M = "L",
N = "M",
O = "N",
P = "O",
Q = "P",
R = "Q",
S = "R",
T = "S",
U = "T",
V = "U",
W = "V",
X = "W",
Y = "X",
Z = "Y",
a = "z",
b = "a",
c = "b",
d = "c",
e = "d",
f = "e",
g = "f",
h = "g",
i = "h",
j = "i",
k = "j",
l = "k",
m = "l",
n = "m",
o = "n",
p = "o",
q = "p",
r = "q",
s = "r",
t = "s",
u = "t",
v = "u",
w = "v",
x = "w",
y = "x",
z = "y"
}
local function DecodeChar(char)
return decodeMap[char] or char
end
local function DecodeString(strIn)
local strOut = ""
local i = 1
while true do
if i > StringLength(strIn) then
break
end
strOut = strOut .. DecodeChar(SubStringBJ(strIn, i, i))
i = i + 1
end
return strOut
end
return {DecodeString = DecodeString}
end
____exports.DecodeString = initDecodeString()
return ____exports
end,
["src.core.07_TRIGGERS.Modify_terrain_Functions.All_terrain_functions"] = function(...)
end,
["src.core.07_TRIGGERS.Save_map_in_gamecache.Save_water"] = function(...)
local ____exports = {}
local ____MemoryHandler = require("src.Utils.MemoryHandler")
local MemoryHandler = ____MemoryHandler.MemoryHandler
local ____Constants = require("src.core.01_libraries.Constants")
local LARGEUR_CASE = ____Constants.LARGEUR_CASE
local ____Text = require("src.core.01_libraries.Text")
local Text = ____Text.Text
local ____ZLibrary = require("src.core.02_bibliotheques_externes.ZLibrary")
local ZLibrary = ____ZLibrary.ZLibrary
local ____globals = require("globals")
local globals = ____globals.globals
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local arrayPush = ____Basic_functions.arrayPush
local function initSaveWater()
local function SaveWaterHeights(json)
if json.terrainHeights then
json.waterHeights = json.terrainHeights
return
end
json.waterHeights = MemoryHandler.getEmptyArray()
local y = globals.MAP_MIN_Y
while y <= globals.MAP_MAX_Y do
local x = globals.MAP_MIN_X
while x <= globals.MAP_MAX_X do
arrayPush(
json.waterHeights,
R2I(ZLibrary.GetSurfaceZ(x, y))
)
x = x + LARGEUR_CASE
end
y = y + LARGEUR_CASE
end
Text.A("water heights saved")
end
local function SaveWater(json)
SaveWaterHeights(json)
end
return {SaveWater = SaveWater}
end
____exports.SaveWater = initSaveWater()
return ____exports
end,
["src.core.07_TRIGGERS.Triggers_to_modify_terrains.Terrain_modifying_trig"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local LOW_PERIOD_FOR_WORK = ____Constants.LOW_PERIOD_FOR_WORK
local NB_ESCAPERS = ____Constants.NB_ESCAPERS
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local function initTerrainModifyingTrig()
local y
local wasCheckTerrainTriggerOn = {}
____exports.gg_trg_Terrain_modifying_trig = CreateTrigger()
DisableTrigger(____exports.gg_trg_Terrain_modifying_trig)
TriggerRegisterTimerEvent(____exports.gg_trg_Terrain_modifying_trig, LOW_PERIOD_FOR_WORK, true)
local function StopEnabledCheckTerrainTriggers()
local escaper
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
escaper = getUdgEscapers():get(i)
if escaper ~= nil then
if escaper:doesCheckTerrain() then
wasCheckTerrainTriggerOn[i + 1] = true
escaper:enableCheckTerrain(false)
else
wasCheckTerrainTriggerOn[i + 1] = false
end
end
i = i + 1
end
end
local function RestartEnabledCheckTerrainTriggers()
local escaper
local i = 0
while true do
if i >= NB_ESCAPERS then
break
end
escaper = getUdgEscapers():get(i)
if escaper ~= nil then
if wasCheckTerrainTriggerOn[i + 1] then
escaper:enableCheckTerrain(true)
end
end
i = i + 1
end
end
return {gg_trg_Terrain_modifying_trig = ____exports.gg_trg_Terrain_modifying_trig, StopEnabledCheckTerrainTriggers = StopEnabledCheckTerrainTriggers, RestartEnabledCheckTerrainTriggers = RestartEnabledCheckTerrainTriggers}
end
____exports.TerrainModifyingTrig = initTerrainModifyingTrig()
return ____exports
end,
["src.core.Double_heroes.force_selection_while_sliding"] = function(...)
local ____exports = {}
local ____Constants = require("src.core.01_libraries.Constants")
local NB_PLAYERS_MAX = ____Constants.NB_PLAYERS_MAX
local ____Escaper_functions = require("src.core.04_STRUCTURES.Escaper.Escaper_functions")
local ForceSelectHeroes = ____Escaper_functions.ForceSelectHeroes
local GetMirrorEscaper = ____Escaper_functions.GetMirrorEscaper
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____double_heroes_config = require("src.core.Double_heroes.double_heroes_config")
local udg_doubleHeroesEnabled = ____double_heroes_config.udg_doubleHeroesEnabled
____exports.init_forceSelectionWhileSliding = function()
local function ForceSelectionWhileSliding_Actions()
local escaper1
local escaper2
local isSelected1
local isSelected2
local i = 0
if udg_doubleHeroesEnabled then
while true do
if i >= NB_PLAYERS_MAX then
break
end
escaper1 = getUdgEscapers():get(i)
if escaper1 ~= nil then
escaper2 = GetMirrorEscaper(escaper1)
local ____temp_2 = escaper1:isSliding()
if not ____temp_2 then
local ____escaper2_isSliding_result_0 = escaper2
if ____escaper2_isSliding_result_0 ~= nil then
____escaper2_isSliding_result_0 = ____escaper2_isSliding_result_0:isSliding()
end
____temp_2 = ____escaper2_isSliding_result_0
end
if ____temp_2 then
local h1 = escaper1:getHero()
local ____escaper2_getHero_result_3 = escaper2
if ____escaper2_getHero_result_3 ~= nil then
____escaper2_getHero_result_3 = ____escaper2_getHero_result_3:getHero()
end
local h2 = ____escaper2_getHero_result_3
isSelected1 = not not h1 and IsUnitSelected(
h1,
escaper1:getControler():getPlayer()
)
isSelected2 = not not h2 and not not escaper2 and IsUnitSelected(
h2,
escaper2:getControler():getPlayer()
)
if isSelected1 ~= isSelected2 then
ForceSelectHeroes(escaper1)
end
end
end
i = i + 1
end
end
end
createTimer(0.1, true, ForceSelectionWhileSliding_Actions)
end
return ____exports
end,
["src.core.Test.measure_hero_rotation_speed"] = function(...)
local ____exports = {}
local ____mapUtils = require("src.Utils.mapUtils")
local createTimer = ____mapUtils.createTimer
local ____globals = require("globals")
local getUdgEscapers = ____globals.getUdgEscapers
local ____Basic_functions = require("src.core.01_libraries.Basic_functions")
local AnglesDiff = ____Basic_functions.AnglesDiff
local ____Constants = require("src.core.01_libraries.Constants")
local SLIDE_PERIOD = ____Constants.SLIDE_PERIOD
local ____log = require("src.core.Log.log")
local log = ____log.log
local ____SlidingMax = require("src.core.07_TRIGGERS.Slide_and_CheckTerrain_triggers.SlidingMax")
local HERO_ROTATION_SPEED = ____SlidingMax.HERO_ROTATION_SPEED
local HERO_ROTATION_TIME_FOR_MAXIMUM_SPEED = ____SlidingMax.HERO_ROTATION_TIME_FOR_MAXIMUM_SPEED
____exports.init_measureSpeed = function()
createTimer(
10,
false,
function()
local ____getUdgEscapers_result_get_result_getHero_result_0 = getUdgEscapers():get(0)
if ____getUdgEscapers_result_get_result_getHero_result_0 ~= nil then
____getUdgEscapers_result_get_result_getHero_result_0 = ____getUdgEscapers_result_get_result_getHero_result_0:getHero()
end
local hero = ____getUdgEscapers_result_get_result_getHero_result_0
local ____getUdgEscapers_result_get_result_getHero_result_2 = getUdgEscapers():get(1)
if ____getUdgEscapers_result_get_result_getHero_result_2 ~= nil then
____getUdgEscapers_result_get_result_getHero_result_2 = ____getUdgEscapers_result_get_result_getHero_result_2:getHero()
end
local hero2 = ____getUdgEscapers_result_get_result_getHero_result_2
if hero and hero2 then
local maxSlideTurnPerPeriod = HERO_ROTATION_SPEED * SLIDE_PERIOD * 360
local heroBlueStarted = false
local sens = 1
local lastSens = sens
local currentRotationSpeed = 0
local increaseRotationSpeedPerPeriod = maxSlideTurnPerPeriod * SLIDE_PERIOD / HERO_ROTATION_TIME_FOR_MAXIMUM_SPEED
local tBlueHero = nil
local curSlideTurn = 0
local function startBlueHero()
end
local function stopBlueHero()
local ____tBlueHero_destroy_result_4 = tBlueHero
if ____tBlueHero_destroy_result_4 ~= nil then
____tBlueHero_destroy_result_4 = ____tBlueHero_destroy_result_4:destroy()
end
end
local lastTimeAngle0 = 0
local currentTime = 0
BlzSetUnitFacingEx(hero, 0)
createTimer(
0.01,
true,
function()
if not heroBlueStarted then
heroBlueStarted = true
end
local oldAngle = GetUnitFacing(hero)
local newAngle = oldAngle + 70 * sens
SetUnitFacing(hero, newAngle)
currentTime = currentTime + 0.01
if RAbsBJ(AnglesDiff(
GetUnitFacing(hero),
0
)) < 5 then
local circleDuration = currentTime - lastTimeAngle0
if circleDuration > 0.3 then
local roundsPerSecond = 1 / circleDuration
local str = (((((((("Angle " .. tostring(GetUnitFacing(hero))) .. " ; anglesDiff ") .. tostring(AnglesDiff(
GetUnitFacing(hero),
0
))) .. " ; lastTime ") .. tostring(lastTimeAngle0)) .. " ; currentTime : ") .. tostring(currentTime)) .. " ; speed : ") .. tostring(roundsPerSecond)
print(str)
log(str)
lastTimeAngle0 = currentTime
end
end
end
)
end
end
)
end
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.utils.colorize"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
local __TS__ArrayForEach = ____lualib.__TS__ArrayForEach
local ____exports = {}
____exports.hex = {mana = 12835839, health = 65280, healthHigh = 65280}
local color = {
red = "|cffff0303",
blue = "|cff0042ff",
teal = "|cff1ce6b9",
purple = "|cff540081",
yellow = "|cfffffc00",
orange = "|cfffe8a0e",
green = "|cff20c000",
pink = "|cffe55bb0",
gray = "|cff959697",
lightblue = "|cff7ebff1",
darkgreen = "|cff106246",
brown = "|cff4a2a04",
maroon = "|cff9b0000",
navy = "|cff0000c3",
turquoise = "|cff00eaff",
violet = "|cffbe00fe",
wheat = "|cffebcd87",
peach = "|cfff8a48b",
mint = "|cffbfff80",
lavender = "|cffdcb9eb",
coal = "|cff282828",
snow = "|cffebf0ff",
emerald = "|cff00781e",
peanut = "|cffa46f33",
sheepblue = "|CFF3F81F8",
wolfred = "|CFFC00040",
gold = "|CFFD9D919",
string = "|cffce915b",
number = "|cffdcdc8b",
boolean = "|cff569cd6",
white = "|cffffffff",
handle = "|cff7ebff1"
}
____exports.colorize = {}
__TS__ArrayForEach(
__TS__ObjectEntries(color),
function(____, ____bindingPattern0)
local code
local color
color = ____bindingPattern0[1]
code = ____bindingPattern0[2]
local function ____temp_0(____string)
return (code .. tostring(____string)) .. "|r"
end
____exports.colorize[color] = ____temp_0
return ____temp_0
end
)
return ____exports
end,
["lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.utils.log"] = function(...)
local ____lualib = require("lualib_bundle")
local __TS__ParseInt = ____lualib.__TS__ParseInt
local __TS__ObjectKeys = ____lualib.__TS__ObjectKeys
local __TS__ArrayEvery = ____lualib.__TS__ArrayEvery
local __TS__StringSlice = ____lualib.__TS__StringSlice
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
local __TS__ObjectEntries = ____lualib.__TS__ObjectEntries
local __TS__StringSplit = ____lualib.__TS__StringSplit
local __TS__ArrayForEach = ____lualib.__TS__ArrayForEach
local ____exports = {}
local ____colorize = require("lua_modules.w3ts-jsx.dist.node_modules.basic-pragma.src.utils.colorize")
local colorize = ____colorize.colorize
local MAX_WIDTH = 78
local TRAILING_COMMA = false
local INDENT = " "
local INDENT_WIDTH = #INDENT
local function isArray(v)
if type(v) ~= "table" then
return false
end
return __TS__ArrayEvery(
__TS__ObjectKeys(v),
function(____, v, index) return __TS__ParseInt(v) == index + 1 or __TS__ParseInt(v) == index end
) and (v[0] ~= nil or v[1] ~= nil)
end
local function userdataType(userdata)
local typeString = tostring(userdata)
return __TS__StringSlice(
typeString,
0,
(string.find(typeString, ":", nil, true) or 0) - 1
)
end
____exports.termToString = function(v, color, level)
if color == nil then
color = true
end
if level == nil then
level = 0
end
if type(v) == "string" then
return color and colorize.string(("\"" .. v) .. "\"") or v
end
if type(v) == "number" then
return color and colorize.number(v) or tostring(v)
end
if type(v) == "boolean" then
return color and colorize.boolean(v) or tostring(v)
end
if type(v) == "function" then
return color and colorize.number("<function>") or "<function>"
end
if v == nil then
return color and colorize.boolean("null") or "null"
end
if isArray(v) then
local arr = v
local tryingCompact = level + #arr * 3 + 2 < MAX_WIDTH
local compact = "[" .. (#arr and " " or "")
do
local i = 0
while i < #arr and tryingCompact do
compact = compact .. ____exports.termToString(arr[i + 1], color, level + 1) .. (i < #arr - 1 and ", " or "")
if #compact > MAX_WIDTH then
tryingCompact = false
end
i = i + 1
end
end
if tryingCompact then
compact = compact .. (#arr and " " or "") .. "]"
if #compact <= MAX_WIDTH then
return compact
end
end
return table.concat(
{
"[",
table.concat(
__TS__ArrayMap(
arr,
function(____, element) return string.rep(
INDENT,
math.floor(level + 1)
) .. ____exports.termToString(element, color, level + 1) end
),
",\n"
) .. (TRAILING_COMMA and "," or ""),
string.rep(
INDENT,
math.floor(level)
) .. "]"
},
"\n"
)
end
if type(v) == "table" and v ~= nil then
local entries = __TS__ObjectEntries(v)
local tryingCompact = level * INDENT_WIDTH + #entries * 3 + 2 < MAX_WIDTH
if tryingCompact then
local compact = "{" .. (#entries > 0 and " " or "")
do
local i = 0
while i < #entries and tryingCompact do
local key, value = table.unpack(entries[i + 1])
compact = compact .. ((key .. ": ") .. ____exports.termToString(value, color, level + 1)) .. (i < #entries - 1 and ", " or "")
if level * INDENT_WIDTH + #compact > MAX_WIDTH then
tryingCompact = false
end
i = i + 1
end
end
if tryingCompact then
compact = compact .. (#entries and " " or "") .. "}"
if level * INDENT_WIDTH + #compact <= MAX_WIDTH then
return compact
end
end
end
return table.concat(
{
"{",
table.concat(
__TS__ArrayMap(
entries,
function(____, ____bindingPattern0)
local value
local key
key = ____bindingPattern0[1]
value = ____bindingPattern0[2]
local prefix = key .. ": "
return (string.rep(
INDENT,
math.floor(level + 1)
) .. prefix) .. ____exports.termToString(value, color, level + 1)
end
),
",\n"
) .. (TRAILING_COMMA and "," or ""),
string.rep(
INDENT,
math.floor(level)
) .. "}"
},
"\n"
)
end
local ____type = userdataType(v)
local str = ("<" .. ____type) .. ">"
return color and colorize.handle(str) or str
end
____exports.log = function(...)
local args = {...}
return __TS__ArrayForEach(
__TS__StringSplit(
table.concat(
__TS__ArrayMap(
args,
function(____, v) return ____exports.termToString(v) end
),
" "
),
"\n"
),
function(____, line) return print(line) end
)
end
return ____exports
end,
}
return ____modules["src.main"]
end
-- Global Initialization 1.2 adds an onGameStart function.
do
local PRINT_CAUGHT_ERRORS = true
local errors = {}
local errorCount = 0
local gFuncs = {}
local gFuncCount = 0
local tFuncs = {}
local tFuncCount = 0
local iFuncs = {}
local iFuncCount = 0
local sFuncs = {}
local sFuncCount = 0
function onGlobalInit(func) -- Runs once all variables are instantiated.
gFuncCount = gFuncCount + 1
gFuncs[gFuncCount] = func
end
function onTriggerInit(func) -- Runs once all InitTrig_ are called
tFuncCount = tFuncCount + 1
tFuncs[tFuncCount] = func
end
function onInitialization(func) -- Runs once all Map Initialization triggers are run
iFuncCount = iFuncCount + 1
iFuncs[iFuncCount] = func
end
function onGameStart(func) -- Runs once the game has actually started
sFuncCount = sFuncCount + 1
sFuncs[sFuncCount] = func
end
local function handleError(where, error)
if PRINT_CAUGHT_ERRORS then
errorCount = errorCount + 1
errors[errorCount] = "Global Initialization: caught error in " .. where .. ": " .. error
end
end
local function startPrintErrorTimer()
if not PRINT_CAUGHT_ERRORS or errorCount == 0 then return end
TimerStart(
CreateTimer(),
1.00,
false,
function()
DestroyTimer(GetExpiredTimer())
print("|cffff0000Global Initialization: " .. errorCount .. " errors occured during Initialization.|r")
for i = 1, errorCount do
print(errors[i])
end
errors = nil
end
)
end
local function startOnGameStartTimer()
if sFuncCount < 1 then return end
TimerStart(
CreateTimer(),
0.00,
false,
function()
DestroyTimer(GetExpiredTimer())
for i = 1, sFuncCount do
local result, error = pcall(sFuncs[i])
if not result then
handleError("onGameStart", error)
end
end
sFuncs = nil
end
)
end
local function runInitialization()
for i = 1, iFuncCount do
local result, error = pcall(iFuncs[i])
if not result then
handleError("runInitialization", error)
end
end
iFuncs = nil
end
local function runTriggerInit()
for i = 1, tFuncCount do
local result, error = pcall(tFuncs[i])
if not result then
handleError("runTriggerInit", error)
end
end
tFuncs = nil
local old = RunInitializationTriggers
if old then
function RunInitializationTriggers()
old()
runInitialization()
end
else
runInitialization()
end
end
local function runGlobalInit()
for i = 1, gFuncCount do
local result, error = pcall(gFuncs[i])
if not result then
handleError("runGlobalInit", error)
end
end
gFuncs = nil
local old = InitCustomTriggers
if old then
function InitCustomTriggers()
old()
runTriggerInit()
end
else
runTriggerInit()
end
end
local oldBliz = InitBlizzard
function InitBlizzard()
oldBliz()
local old = InitGlobals
if old then
function InitGlobals()
old()
runGlobalInit()
end
else
runGlobalInit()
end
-- Start timer to call onGameStart functions
startOnGameStartTimer()
-- Start timer to print caught errors
startPrintErrorTimer()
end
end
MEC_core = nil
function initMEC_core()
MEC_core = get_MEC_core()().MEC_core
-- "quest" to tell the MEC core version
local function QuestVersion_Actions()
local q = CreateQuest()
QuestSetIconPath(q, "ReplaceableTextures\\CommandButtonsDisabled\\DISBTNEvilIllidan.blp")
QuestSetTitle(q, "MEC core v.2.0")
QuestSetDescription(q, "Max Escape Creation v.2.0 - 2023-07-08 15:46:38\ncreated by Maximaxou, joined by Stan since 2022\nhttps://mec.maxslid.com")
QuestSetDiscovered(q, true)
QuestSetRequired(q, false)
end
local trg = CreateTrigger()
TriggerRegisterTimerEvent(trg, 0.01, false)
TriggerAddAction(trg, QuestVersion_Actions)
end
onGlobalInit(initMEC_core)
function setGameData()
MEC_core.setGameData("{\"terrainTypesMec\":[{\"terrainTypeId\":\"cXc1\",\"label\":\"w\",\"cliffClassId\":1,\"orderId\":0,\"walkSpeed\":522,\"kind\":\"walk\"},{\"killingEffet\":\"\",\"terrainTypeId\":\"Xrtl\",\"label\":\"d\",\"timeToKill\":0,\"toleranceDist\":15,\"orderId\":0,\"cliffClassId\":1,\"kind\":\"death\"},{\"canTurn\":true,\"terrainTypeId\":\"Xbtl\",\"label\":\"s\",\"slideSpeed\":550,\"rotationSpeed\":1.2439999580383,\"orderId\":0,\"cliffClassId\":1,\"kind\":\"slide\"}],\"levels\":[{\"id\":0,\"monsterSpawns\":[],\"monsters\":[{\"id\":18,\"y2\":642,\"x2\":4417,\"monsterTypeLabel\":\"murloc\",\"x1\":3897,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":651},{\"id\":21,\"y2\":141,\"x2\":4194,\"monsterTypeLabel\":\"murloc\",\"x1\":3963,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":448},{\"id\":22,\"y2\":-67,\"x2\":4108,\"monsterTypeLabel\":\"murloc\",\"x1\":3741,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":236},{\"id\":23,\"y2\":-135,\"x2\":4046,\"monsterTypeLabel\":\"murloc\",\"x1\":3580,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":65},{\"id\":25,\"y2\":-313,\"x2\":3454,\"monsterTypeLabel\":\"murloc\",\"x1\":4031,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-451},{\"id\":26,\"y2\":-482,\"x2\":3398,\"monsterTypeLabel\":\"murloc\",\"x1\":3901,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-648},{\"id\":27,\"y2\":-886,\"x2\":3793,\"monsterTypeLabel\":\"murloc\",\"x1\":3360,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-542},{\"id\":29,\"y2\":-966,\"x2\":3577,\"monsterTypeLabel\":\"murloc\",\"x1\":3269,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-634},{\"id\":32,\"y2\":-1304,\"x2\":3501,\"monsterTypeLabel\":\"murloc\",\"x1\":3024,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-886},{\"id\":34,\"y2\":-1720,\"x2\":3222,\"monsterTypeLabel\":\"murloc\",\"x1\":2996,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1297},{\"id\":35,\"y2\":-1858,\"x2\":3017,\"monsterTypeLabel\":\"murloc\",\"x1\":2855,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1341},{\"id\":37,\"y2\":-1583,\"x2\":2450,\"monsterTypeLabel\":\"murloc\",\"x1\":2759,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1926},{\"id\":38,\"y2\":-1859,\"x2\":2826,\"monsterTypeLabel\":\"murloc\",\"x1\":2672,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1462},{\"id\":40,\"y2\":-2033,\"x2\":2754,\"monsterTypeLabel\":\"murloc\",\"x1\":2359,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1981},{\"id\":45,\"y2\":-2631,\"x2\":3293,\"monsterTypeLabel\":\"murloc\",\"x1\":3311,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2233},{\"id\":46,\"y2\":-2635,\"x2\":3705,\"monsterTypeLabel\":\"murloc\",\"x1\":3482,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2202},{\"id\":47,\"y2\":-2379,\"x2\":3837,\"monsterTypeLabel\":\"murloc\",\"x1\":3585,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1984},{\"id\":48,\"y2\":-2277,\"x2\":3932,\"monsterTypeLabel\":\"murloc\",\"x1\":3797,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1860},{\"id\":52,\"y2\":-2080,\"x2\":4573,\"monsterTypeLabel\":\"murloc\",\"x1\":4257,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2423},{\"id\":53,\"y2\":-1463,\"x2\":3340,\"monsterTypeLabel\":\"murloc\",\"x1\":3079,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1192},{\"id\":56,\"y2\":-334,\"x2\":4088,\"monsterTypeLabel\":\"murloc\",\"x1\":3628,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-146},{\"id\":57,\"y2\":401,\"x2\":4437,\"monsterTypeLabel\":\"murloc\",\"x1\":4021,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":506},{\"id\":59,\"y2\":-1009,\"x2\":3424,\"monsterTypeLabel\":\"murloc\",\"x1\":3156,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-751},{\"id\":681,\"y2\":-2336,\"x2\":4185,\"monsterTypeLabel\":\"murloc\",\"x1\":4230,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1717},{\"id\":682,\"y2\":-1816,\"x2\":4469,\"monsterTypeLabel\":\"murloc\",\"x1\":4086,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2237},{\"id\":685,\"y2\":-2248,\"x2\":4028,\"monsterTypeLabel\":\"murloc\",\"x1\":3951,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1745},{\"id\":1381,\"y2\":-2652,\"x2\":2953,\"monsterTypeLabel\":\"murloc\",\"x1\":3178,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2219},{\"id\":1382,\"y2\":-2656,\"x2\":3167,\"monsterTypeLabel\":\"murloc\",\"x1\":2969,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2207},{\"id\":1383,\"y2\":-2507,\"x2\":2511,\"monsterTypeLabel\":\"murloc\",\"x1\":2833,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2092},{\"id\":1384,\"y2\":-2602,\"x2\":2613,\"monsterTypeLabel\":\"murloc\",\"x1\":2940,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2183}],\"visibilities\":[{\"y2\":5056,\"x2\":8640,\"x1\":-11712,\"y1\":2431},{\"y2\":4793,\"x2\":7979,\"x1\":8640,\"y1\":5056},{\"y2\":-12207,\"x2\":-9679,\"x1\":6600,\"y1\":3891},{\"y2\":-15296,\"x2\":-11712,\"x1\":8672,\"y1\":4964},{\"y2\":5056,\"x2\":-11712,\"x1\":8604,\"y1\":4291}],\"portalMobs\":[],\"end\":{\"maxY\":-2248.0378417969,\"minX\":4798.7724609375,\"minY\":-2932.9826660156,\"maxX\":4804.1982421875},\"nbLives\":999,\"meteors\":[],\"start\":{\"minX\":4161.8881835938,\"maxX\":4287.7436523438,\"maxY\":965.79858398438,\"minY\":963.66149902344,\"facing\":270},\"circleMobs\":[],\"clearMobs\":[],\"staticSlides\":[]},{\"id\":1,\"monsterSpawns\":[],\"monsters\":[{\"id\":60,\"y2\":-2609,\"x2\":5345,\"monsterTypeLabel\":\"murloc\",\"x1\":4895,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3045},{\"id\":63,\"y2\":-2797,\"x2\":5550,\"monsterTypeLabel\":\"murloc\",\"x1\":5048,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3333},{\"id\":64,\"y2\":-3240,\"x2\":4952,\"monsterTypeLabel\":\"murloc\",\"x1\":5450,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2690},{\"id\":66,\"y2\":-2986,\"x2\":5601,\"monsterTypeLabel\":\"murloc\",\"x1\":5100,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3506},{\"id\":67,\"monsterTypeLabel\":\"murloc\",\"xArr\":[5792,5499,5206],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-3053,-3327,-3602]},{\"id\":68,\"y2\":-3070,\"x2\":5824,\"monsterTypeLabel\":\"murloc\",\"x1\":5388,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3658},{\"id\":70,\"y2\":-3132,\"x2\":5864,\"monsterTypeLabel\":\"murloc\",\"x1\":5436,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3717},{\"id\":73,\"monsterTypeLabel\":\"murloc\",\"xArr\":[6005,5756,5507],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-3257,-3584,-3911]},{\"id\":74,\"y2\":-4002,\"x2\":5587,\"monsterTypeLabel\":\"murloc\",\"x1\":6100,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3603},{\"id\":75,\"y2\":-4079,\"x2\":5677,\"monsterTypeLabel\":\"murloc\",\"x1\":6202,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3732},{\"id\":76,\"y2\":-4010,\"x2\":6330,\"monsterTypeLabel\":\"murloc\",\"x1\":5701,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4167},{\"id\":77,\"y2\":-4279,\"x2\":6339,\"monsterTypeLabel\":\"murloc\",\"x1\":5700,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4222},{\"id\":78,\"y2\":-4293,\"x2\":5632,\"monsterTypeLabel\":\"murloc\",\"x1\":6283,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4538},{\"id\":79,\"y2\":-4683,\"x2\":6208,\"monsterTypeLabel\":\"murloc\",\"x1\":5571,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4426},{\"id\":80,\"y2\":-4526,\"x2\":5570,\"monsterTypeLabel\":\"murloc\",\"x1\":6136,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4809},{\"id\":81,\"y2\":-4963,\"x2\":6003,\"monsterTypeLabel\":\"murloc\",\"x1\":5547,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4630},{\"id\":82,\"y2\":-4839,\"x2\":5444,\"monsterTypeLabel\":\"murloc\",\"x1\":5945,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5049},{\"id\":83,\"y2\":-5196,\"x2\":5953,\"monsterTypeLabel\":\"murloc\",\"x1\":5363,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4938},{\"id\":84,\"y2\":-5096,\"x2\":5314,\"monsterTypeLabel\":\"murloc\",\"x1\":5871,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5327},{\"id\":85,\"y2\":-5269,\"x2\":5300,\"monsterTypeLabel\":\"murloc\",\"x1\":5820,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5552},{\"id\":86,\"y2\":-5793,\"x2\":5670,\"monsterTypeLabel\":\"murloc\",\"x1\":5209,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5352},{\"id\":88,\"y2\":-5530,\"x2\":5156,\"monsterTypeLabel\":\"murloc\",\"x1\":5546,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5910},{\"id\":89,\"y2\":-5990,\"x2\":5471,\"monsterTypeLabel\":\"murloc\",\"x1\":5071,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5609},{\"id\":90,\"y2\":-5665,\"x2\":5012,\"monsterTypeLabel\":\"murloc\",\"x1\":5400,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6072},{\"id\":91,\"y2\":-6162,\"x2\":5289,\"monsterTypeLabel\":\"murloc\",\"x1\":4940,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5757},{\"id\":690,\"y2\":-6624,\"x2\":6212,\"monsterTypeLabel\":\"murloc\",\"x1\":6016,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6864},{\"id\":692,\"y2\":-7021,\"x2\":6350,\"monsterTypeLabel\":\"murloc\",\"x1\":6063,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7021},{\"id\":693,\"y2\":-7202,\"x2\":6064,\"monsterTypeLabel\":\"murloc\",\"x1\":6351,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7202},{\"id\":694,\"y2\":-7383,\"x2\":6350,\"monsterTypeLabel\":\"murloc\",\"x1\":6063,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7383},{\"id\":695,\"y2\":-6476,\"x2\":4943,\"monsterTypeLabel\":\"murloc\",\"x1\":4656,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6476},{\"id\":696,\"y2\":-6673,\"x2\":4656,\"monsterTypeLabel\":\"murloc\",\"x1\":4943,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6673},{\"id\":697,\"y2\":-6859,\"x2\":4943,\"monsterTypeLabel\":\"murloc\",\"x1\":4656,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6859},{\"id\":698,\"y2\":-7050,\"x2\":4655,\"monsterTypeLabel\":\"murloc\",\"x1\":4942,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7050},{\"id\":699,\"y2\":-7375,\"x2\":5011,\"monsterTypeLabel\":\"murloc\",\"x1\":5011,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7088},{\"id\":700,\"y2\":-7089,\"x2\":5218,\"monsterTypeLabel\":\"murloc\",\"x1\":5218,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7376},{\"id\":978,\"monsterTypeLabel\":\"murloc\",\"xArr\":[6208,5823,5438],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-3825,-3799,-3774]},{\"id\":981,\"y2\":-6222,\"x2\":5124,\"monsterTypeLabel\":\"murloc\",\"x1\":4919,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6019},{\"id\":1315,\"y2\":-3508,\"x2\":6081,\"monsterTypeLabel\":\"murloc\",\"x1\":5379,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3669},{\"id\":1389,\"y2\":-7743,\"x2\":6204,\"monsterTypeLabel\":\"murloc\",\"x1\":5929,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7533},{\"id\":1390,\"y2\":-7388,\"x2\":5452,\"monsterTypeLabel\":\"murloc\",\"x1\":5453,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6691},{\"id\":1391,\"y2\":-7388,\"x2\":5620,\"monsterTypeLabel\":\"murloc\",\"x1\":5613,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6689},{\"id\":1392,\"y2\":-7060,\"x2\":5846,\"monsterTypeLabel\":\"murloc\",\"x1\":5273,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7024},{\"id\":1393,\"y2\":-6634,\"x2\":5657,\"monsterTypeLabel\":\"murloc\",\"x1\":5880,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6909}],\"visibilities\":[],\"portalMobs\":[],\"end\":{\"maxY\":-8083.7841796875,\"minX\":5558.60546875,\"minY\":-8100.2568359375,\"maxX\":6359.3764648438},\"nbLives\":1,\"meteors\":[],\"start\":{\"minX\":4870.0361328125,\"maxX\":4870.0361328125,\"maxY\":-2561.4418945312,\"minY\":-2561.4418945312,\"facing\":315},\"circleMobs\":[],\"clearMobs\":[],\"staticSlides\":[]},{\"id\":2,\"monsterSpawns\":[{\"spawnAmount\":2,\"label\":\"1\",\"initialDelay\":0,\"fixedSpawnOffsetMirrored\":false,\"spawnOffset\":0,\"maxX\":6373,\"sens\":0,\"minY\":-9472,\"minX\":5420,\"frequence\":1,\"maxY\":-8834,\"monsterTypeLabel\":\"murloc\",\"fixedSpawnOffsetBounce\":false},{\"spawnAmount\":2,\"label\":\"2\",\"initialDelay\":0,\"fixedSpawnOffsetMirrored\":false,\"spawnOffset\":0,\"maxX\":6471,\"sens\":180,\"minY\":-9472,\"minX\":5560,\"frequence\":1,\"maxY\":-8824,\"monsterTypeLabel\":\"murloc\",\"fixedSpawnOffsetBounce\":false}],\"monsters\":[{\"id\":130,\"monsterTypeLabel\":\"murloc\",\"xArr\":[5940],\"mode\":\"normal\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-9223]},{\"id\":134,\"y2\":-10047,\"x2\":5515,\"monsterTypeLabel\":\"murloc\",\"x1\":5213,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9688},{\"id\":137,\"y2\":-10175,\"x2\":5159,\"monsterTypeLabel\":\"murloc\",\"x1\":5563,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9710},{\"id\":143,\"y2\":-10150,\"x2\":4504,\"monsterTypeLabel\":\"murloc\",\"x1\":4474,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9671},{\"id\":144,\"y2\":-10209,\"x2\":4440,\"monsterTypeLabel\":\"murloc\",\"x1\":4400,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9668},{\"id\":145,\"y2\":-10306,\"x2\":4301,\"monsterTypeLabel\":\"murloc\",\"x1\":4275,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9668},{\"id\":146,\"y2\":-9662,\"x2\":4201,\"monsterTypeLabel\":\"murloc\",\"x1\":4217,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10313},{\"id\":147,\"monsterTypeLabel\":\"murloc\",\"xArr\":[4104,4091,4079],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-9671,-10055,-10440]},{\"id\":148,\"monsterTypeLabel\":\"murloc\",\"xArr\":[3949,3966,3984],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-9540,-9984,-10428]},{\"id\":149,\"monsterTypeLabel\":\"murloc\",\"xArr\":[3893,3896,3899],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-10359,-9953,-9548]},{\"id\":150,\"y2\":-10300,\"x2\":3783,\"monsterTypeLabel\":\"murloc\",\"x1\":3773,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9608},{\"id\":151,\"y2\":-9664,\"x2\":3655,\"monsterTypeLabel\":\"murloc\",\"x1\":3668,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10307},{\"id\":152,\"y2\":-10307,\"x2\":3525,\"monsterTypeLabel\":\"murloc\",\"x1\":3488,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9669},{\"id\":162,\"y2\":-10219,\"x2\":3361,\"monsterTypeLabel\":\"murloc\",\"x1\":3345,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9766},{\"id\":164,\"y2\":-9984,\"x2\":2897,\"monsterTypeLabel\":\"murloc\",\"x1\":2726,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9750},{\"id\":165,\"y2\":-9959,\"x2\":2460,\"monsterTypeLabel\":\"murloc\",\"x1\":2660,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9750},{\"id\":166,\"y2\":-9455,\"x2\":2363,\"monsterTypeLabel\":\"murloc\",\"x1\":2626,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9457},{\"id\":170,\"y2\":-9280,\"x2\":2780,\"monsterTypeLabel\":\"murloc\",\"x1\":2505,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8963},{\"id\":171,\"y2\":-9069,\"x2\":2906,\"monsterTypeLabel\":\"murloc\",\"x1\":2721,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8859},{\"id\":172,\"y2\":-8702,\"x2\":2869,\"monsterTypeLabel\":\"murloc\",\"x1\":3076,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8901},{\"id\":178,\"y2\":-8130,\"x2\":4159,\"monsterTypeLabel\":\"murloc\",\"x1\":3516,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7928},{\"id\":179,\"y2\":-8013,\"x2\":3511,\"monsterTypeLabel\":\"murloc\",\"x1\":4166,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7946},{\"id\":181,\"y2\":-7852,\"x2\":3512,\"monsterTypeLabel\":\"murloc\",\"x1\":4156,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7826},{\"id\":182,\"y2\":-7709,\"x2\":3518,\"monsterTypeLabel\":\"murloc\",\"x1\":4161,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7702},{\"id\":184,\"y2\":-8327,\"x2\":3653,\"monsterTypeLabel\":\"murloc\",\"x1\":3465,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8122},{\"id\":186,\"y2\":-9924,\"x2\":3007,\"monsterTypeLabel\":\"murloc\",\"x1\":2920,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9537},{\"id\":187,\"y2\":-9924,\"x2\":3112,\"monsterTypeLabel\":\"murloc\",\"x1\":3122,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9527},{\"id\":704,\"monsterTypeLabel\":\"murloc\",\"xArr\":[5933],\"mode\":\"normal\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-8964]},{\"id\":987,\"y2\":-10064,\"x2\":5684,\"monsterTypeLabel\":\"murloc\",\"x1\":5684,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9777},{\"id\":992,\"y2\":-10192,\"x2\":5095,\"monsterTypeLabel\":\"murloc\",\"x1\":5095,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9905},{\"id\":993,\"y2\":-8897,\"x2\":3261,\"monsterTypeLabel\":\"murloc\",\"x1\":2881,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8501},{\"id\":995,\"y2\":-8706,\"x2\":3402,\"monsterTypeLabel\":\"murloc\",\"x1\":3058,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8384},{\"id\":997,\"y2\":-8503,\"x2\":3492,\"monsterTypeLabel\":\"murloc\",\"x1\":3288,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8279},{\"id\":998,\"monsterTypeLabel\":\"murloc\",\"xArr\":[3542,3839,4136],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-7649,-7949,-8249]},{\"id\":1394,\"y2\":-8593,\"x2\":6109,\"monsterTypeLabel\":\"murloc\",\"x1\":5791,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8583},{\"id\":1395,\"y2\":-10024,\"x2\":6075,\"monsterTypeLabel\":\"murloc\",\"x1\":5790,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9728},{\"id\":1396,\"y2\":-10206,\"x2\":4927,\"monsterTypeLabel\":\"murloc\",\"x1\":4789,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9766}],\"visibilities\":[],\"portalMobs\":[],\"end\":{\"maxY\":-7120.6767578125,\"minX\":3504.9577636719,\"minY\":-7133.7719726562,\"maxX\":4178.064453125},\"nbLives\":1,\"meteors\":[],\"start\":{\"minX\":5889.1850585938,\"maxX\":6018.1323242188,\"maxY\":-8189.875,\"minY\":-8194.6376953125,\"facing\":270},\"circleMobs\":[],\"clearMobs\":[],\"staticSlides\":[]},{\"id\":3,\"monsterSpawns\":[{\"spawnAmount\":5,\"label\":\"1\",\"initialDelay\":0,\"fixedSpawnOffsetMirrored\":false,\"spawnOffset\":0,\"maxX\":1835,\"sens\":270,\"minY\":-6951,\"minX\":1230,\"frequence\":0.5,\"maxY\":-4608,\"monsterTypeLabel\":\"tank1\",\"fixedSpawnOffsetBounce\":false}],\"monsters\":[{\"id\":193,\"monsterTypeLabel\":\"murloc\",\"xArr\":[3969,3968,3967],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-5181,-5572,-5963]},{\"id\":264,\"y2\":-6852,\"x2\":-870,\"monsterTypeLabel\":\"murloc\",\"x1\":-616,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6344},{\"id\":265,\"y2\":-6848,\"x2\":-1040,\"monsterTypeLabel\":\"murloc\",\"x1\":-780,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6337},{\"id\":266,\"y2\":-6846,\"x2\":-1226,\"monsterTypeLabel\":\"murloc\",\"x1\":-987,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6332},{\"id\":267,\"y2\":-6852,\"x2\":-712,\"monsterTypeLabel\":\"murloc\",\"x1\":-947,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6327},{\"id\":268,\"y2\":-6337,\"x2\":-1522,\"monsterTypeLabel\":\"murloc\",\"x1\":-1310,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6848},{\"id\":269,\"y2\":-6330,\"x2\":-1682,\"monsterTypeLabel\":\"murloc\",\"x1\":-1438,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6850},{\"id\":270,\"y2\":-6341,\"x2\":-1813,\"monsterTypeLabel\":\"murloc\",\"x1\":-1580,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6850},{\"id\":271,\"y2\":-6334,\"x2\":-1639,\"monsterTypeLabel\":\"murloc\",\"x1\":-1779,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6848},{\"id\":273,\"y2\":-6852,\"x2\":-2218,\"monsterTypeLabel\":\"murloc\",\"x1\":-2041,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6339},{\"id\":274,\"y2\":-6844,\"x2\":-2001,\"monsterTypeLabel\":\"murloc\",\"x1\":-2225,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6327},{\"id\":275,\"y2\":-6735,\"x2\":-2470,\"monsterTypeLabel\":\"murloc\",\"x1\":-2470,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6448},{\"id\":282,\"y2\":-6449,\"x2\":-2637,\"monsterTypeLabel\":\"murloc\",\"x1\":-2637,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6736},{\"id\":283,\"y2\":-6735,\"x2\":-2812,\"monsterTypeLabel\":\"murloc\",\"x1\":-2812,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6448},{\"id\":284,\"y2\":-6448,\"x2\":-3008,\"monsterTypeLabel\":\"murloc\",\"x1\":-3008,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6735},{\"id\":285,\"y2\":-6735,\"x2\":-3205,\"monsterTypeLabel\":\"murloc\",\"x1\":-3205,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6448},{\"id\":286,\"y2\":-6449,\"x2\":-3392,\"monsterTypeLabel\":\"murloc\",\"x1\":-3392,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6736},{\"id\":287,\"y2\":-6863,\"x2\":-1913,\"monsterTypeLabel\":\"murloc\",\"x1\":-1913,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6320},{\"id\":289,\"y2\":-6864,\"x2\":-1286,\"monsterTypeLabel\":\"murloc\",\"x1\":-1286,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6321},{\"id\":1000,\"y2\":-5452,\"x2\":3833,\"monsterTypeLabel\":\"murloc\",\"x1\":3837,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5067},{\"id\":1007,\"y2\":-5871,\"x2\":4079,\"monsterTypeLabel\":\"murloc\",\"x1\":4084,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5267},{\"id\":1010,\"y2\":-6089,\"x2\":3853,\"monsterTypeLabel\":\"murloc\",\"x1\":3689,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5841},{\"id\":1398,\"y2\":-4948,\"x2\":3421,\"monsterTypeLabel\":\"murloc\",\"x1\":3422,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4642},{\"id\":1401,\"y2\":-4958,\"x2\":3258,\"monsterTypeLabel\":\"murloc\",\"x1\":3252,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4656},{\"id\":1402,\"y2\":-4649,\"x2\":3056,\"monsterTypeLabel\":\"murloc\",\"x1\":3082,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4958},{\"id\":1403,\"y2\":-4952,\"x2\":2914,\"monsterTypeLabel\":\"murloc\",\"x1\":2910,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4662},{\"id\":1404,\"y2\":-4649,\"x2\":2726,\"monsterTypeLabel\":\"murloc\",\"x1\":2740,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4942},{\"id\":1405,\"y2\":-4946,\"x2\":2586,\"monsterTypeLabel\":\"murloc\",\"x1\":2569,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4651},{\"id\":1406,\"y2\":-4952,\"x2\":2401,\"monsterTypeLabel\":\"murloc\",\"x1\":2395,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4637},{\"id\":1408,\"y2\":-5515,\"x2\":1193,\"monsterTypeLabel\":\"murloc\",\"x1\":1884,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5537},{\"id\":1409,\"y2\":-5778,\"x2\":1877,\"monsterTypeLabel\":\"murloc\",\"x1\":1185,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5763},{\"id\":1410,\"y2\":-6033,\"x2\":1179,\"monsterTypeLabel\":\"murloc\",\"x1\":1878,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6011},{\"id\":1411,\"y2\":-6244,\"x2\":1876,\"monsterTypeLabel\":\"murloc\",\"x1\":1176,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6237},{\"id\":1413,\"y2\":-6434,\"x2\":1870,\"monsterTypeLabel\":\"murloc\",\"x1\":1173,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6416},{\"id\":1414,\"y2\":-6791,\"x2\":1874,\"monsterTypeLabel\":\"murloc\",\"x1\":1194,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6806},{\"id\":1415,\"y2\":-4869,\"x2\":1190,\"monsterTypeLabel\":\"murloc\",\"x1\":1887,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4864},{\"id\":1419,\"y2\":-4703,\"x2\":2098,\"monsterTypeLabel\":\"murloc\",\"x1\":2311,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4978},{\"id\":1420,\"y2\":-5137,\"x2\":2132,\"monsterTypeLabel\":\"murloc\",\"x1\":1926,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4874},{\"id\":1424,\"y2\":-6737,\"x2\":1128,\"monsterTypeLabel\":\"murloc\",\"x1\":1140,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6444},{\"id\":1426,\"y2\":-6737,\"x2\":968,\"monsterTypeLabel\":\"murloc\",\"x1\":976,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6452},{\"id\":1427,\"y2\":-6452,\"x2\":807,\"monsterTypeLabel\":\"murloc\",\"x1\":812,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6739},{\"id\":1428,\"y2\":-6748,\"x2\":633,\"monsterTypeLabel\":\"murloc\",\"x1\":645,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6442},{\"id\":1429,\"y2\":-6454,\"x2\":455,\"monsterTypeLabel\":\"murloc\",\"x1\":465,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6732},{\"id\":1430,\"y2\":-6741,\"x2\":310,\"monsterTypeLabel\":\"murloc\",\"x1\":303,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6446},{\"id\":1431,\"y2\":-6452,\"x2\":130,\"monsterTypeLabel\":\"murloc\",\"x1\":152,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6737},{\"id\":1432,\"y2\":-6746,\"x2\":-38,\"monsterTypeLabel\":\"murloc\",\"x1\":-50,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6440},{\"id\":1433,\"y2\":-6463,\"x2\":-224,\"monsterTypeLabel\":\"murloc\",\"x1\":-194,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6738},{\"id\":1434,\"y2\":-6737,\"x2\":-361,\"monsterTypeLabel\":\"murloc\",\"x1\":-380,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6448}],\"visibilities\":[],\"portalMobs\":[],\"end\":{\"maxY\":-6169.1630859375,\"minX\":-3736.4436035156,\"minY\":-7017.1196289062,\"maxX\":-3709.8405761719},\"nbLives\":1,\"meteors\":[],\"start\":{\"minX\":3854.37890625,\"maxX\":3854.37890625,\"maxY\":-7044.853515625,\"minY\":-7044.853515625,\"facing\":90},\"circleMobs\":[],\"clearMobs\":[],\"staticSlides\":[]},{\"id\":4,\"monsterSpawns\":[],\"monsters\":[{\"id\":290,\"y2\":-6719,\"x2\":-4284,\"monsterTypeLabel\":\"murloc\",\"x1\":-4222,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6462},{\"id\":291,\"y2\":-6980,\"x2\":-4637,\"monsterTypeLabel\":\"murloc\",\"x1\":-4417,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6464},{\"id\":292,\"y2\":-6919,\"x2\":-4801,\"monsterTypeLabel\":\"murloc\",\"x1\":-4508,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6428},{\"id\":293,\"y2\":-6636,\"x2\":-4930,\"monsterTypeLabel\":\"murloc\",\"x1\":-4545,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6341},{\"id\":294,\"y2\":-6394,\"x2\":-4940,\"monsterTypeLabel\":\"murloc\",\"x1\":-4631,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6180},{\"id\":296,\"y2\":-6331,\"x2\":-5007,\"monsterTypeLabel\":\"murloc\",\"x1\":-4786,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6029},{\"id\":298,\"y2\":-6017,\"x2\":-5179,\"monsterTypeLabel\":\"murloc\",\"x1\":-4800,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5963},{\"id\":301,\"y2\":-5833,\"x2\":-4734,\"monsterTypeLabel\":\"murloc\",\"x1\":-5037,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5733},{\"id\":305,\"y2\":-5798,\"x2\":-4448,\"monsterTypeLabel\":\"murloc\",\"x1\":-4927,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5434},{\"id\":306,\"y2\":-5750,\"x2\":-4400,\"monsterTypeLabel\":\"murloc\",\"x1\":-4864,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5318},{\"id\":307,\"y2\":-5679,\"x2\":-4340,\"monsterTypeLabel\":\"murloc\",\"x1\":-4799,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5235},{\"id\":310,\"y2\":-5017,\"x2\":-4575,\"monsterTypeLabel\":\"murloc\",\"x1\":-4120,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5469},{\"id\":312,\"y2\":-5417,\"x2\":-4070,\"monsterTypeLabel\":\"murloc\",\"x1\":-4521,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4955},{\"id\":315,\"y2\":-5335,\"x2\":-3979,\"monsterTypeLabel\":\"murloc\",\"x1\":-4422,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4873},{\"id\":317,\"y2\":-5314,\"x2\":-3911,\"monsterTypeLabel\":\"murloc\",\"x1\":-3971,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4919},{\"id\":318,\"y2\":-5367,\"x2\":-3645,\"monsterTypeLabel\":\"murloc\",\"x1\":-3790,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4881},{\"id\":319,\"y2\":-5309,\"x2\":-3543,\"monsterTypeLabel\":\"murloc\",\"x1\":-3654,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4793},{\"id\":320,\"y2\":-5314,\"x2\":-3479,\"monsterTypeLabel\":\"murloc\",\"x1\":-3483,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4801},{\"id\":322,\"y2\":-5314,\"x2\":-3104,\"monsterTypeLabel\":\"murloc\",\"x1\":-3032,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4809},{\"id\":323,\"y2\":-5309,\"x2\":-2983,\"monsterTypeLabel\":\"murloc\",\"x1\":-2874,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4807},{\"id\":326,\"y2\":-4980,\"x2\":-2232,\"monsterTypeLabel\":\"murloc\",\"x1\":-2406,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4763},{\"id\":327,\"y2\":-4868,\"x2\":-1992,\"monsterTypeLabel\":\"murloc\",\"x1\":-2352,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4470},{\"id\":328,\"y2\":-4342,\"x2\":-2233,\"monsterTypeLabel\":\"murloc\",\"x1\":-1864,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4759},{\"id\":341,\"y2\":-4070,\"x2\":-1577,\"monsterTypeLabel\":\"murloc\",\"x1\":-2119,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4055},{\"id\":342,\"y2\":-3915,\"x2\":-2065,\"monsterTypeLabel\":\"murloc\",\"x1\":-1476,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3961},{\"id\":343,\"y2\":-3715,\"x2\":-1860,\"monsterTypeLabel\":\"murloc\",\"x1\":-1598,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3781},{\"id\":346,\"y2\":-3496,\"x2\":-1472,\"monsterTypeLabel\":\"murloc\",\"x1\":-1969,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3464},{\"id\":347,\"y2\":-3201,\"x2\":-1605,\"monsterTypeLabel\":\"murloc\",\"x1\":-1855,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3325},{\"id\":348,\"y2\":-3063,\"x2\":-1589,\"monsterTypeLabel\":\"murloc\",\"x1\":-1850,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2810},{\"id\":349,\"y2\":-2627,\"x2\":-1602,\"monsterTypeLabel\":\"murloc\",\"x1\":-1398,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3006},{\"id\":352,\"y2\":-2507,\"x2\":-1166,\"monsterTypeLabel\":\"murloc\",\"x1\":-1024,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2756},{\"id\":353,\"y2\":-2750,\"x2\":-903,\"monsterTypeLabel\":\"murloc\",\"x1\":-868,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2374},{\"id\":354,\"y2\":-2559,\"x2\":-587,\"monsterTypeLabel\":\"murloc\",\"x1\":-791,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2859},{\"id\":356,\"y2\":-3177,\"x2\":-468,\"monsterTypeLabel\":\"murloc\",\"x1\":-436,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2623},{\"id\":357,\"y2\":-3263,\"x2\":-353,\"monsterTypeLabel\":\"murloc\",\"x1\":-355,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2625},{\"id\":358,\"y2\":-3263,\"x2\":-248,\"monsterTypeLabel\":\"murloc\",\"x1\":-261,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2630},{\"id\":359,\"y2\":-3137,\"x2\":-120,\"monsterTypeLabel\":\"murloc\",\"x1\":-121,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2497},{\"id\":360,\"y2\":-2766,\"x2\":122,\"monsterTypeLabel\":\"murloc\",\"x1\":-3,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2497},{\"id\":361,\"y2\":-2754,\"x2\":265,\"monsterTypeLabel\":\"murloc\",\"x1\":254,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2374},{\"id\":362,\"y2\":-2872,\"x2\":513,\"monsterTypeLabel\":\"murloc\",\"x1\":511,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2494},{\"id\":363,\"y2\":-2759,\"x2\":686,\"monsterTypeLabel\":\"murloc\",\"x1\":710,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2371},{\"id\":365,\"y2\":-2876,\"x2\":1154,\"monsterTypeLabel\":\"murloc\",\"x1\":1152,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2371},{\"id\":366,\"y2\":-2659,\"x2\":1502,\"monsterTypeLabel\":\"murloc\",\"x1\":1205,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2318},{\"id\":368,\"y2\":-1797,\"x2\":1476,\"monsterTypeLabel\":\"murloc\",\"x1\":1145,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2116},{\"id\":372,\"y2\":-2112,\"x2\":997,\"monsterTypeLabel\":\"murloc\",\"x1\":1352,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1533},{\"id\":373,\"monsterTypeLabel\":\"murloc\",\"xArr\":[1195,860,525],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-1124,-1503,-1882]},{\"id\":374,\"monsterTypeLabel\":\"murloc\",\"xArr\":[583,907,1231],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-1941,-1553,-1166]},{\"id\":375,\"monsterTypeLabel\":\"murloc\",\"xArr\":[1276,965,654],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-1195,-1601,-2007]},{\"id\":376,\"monsterTypeLabel\":\"murloc\",\"xArr\":[720,1033,1347],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2082,-1691,-1301]},{\"id\":380,\"monsterTypeLabel\":\"murloc\",\"xArr\":[793,771,749],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2119,-1598,-1077]},{\"id\":381,\"monsterTypeLabel\":\"murloc\",\"xArr\":[835,857,880],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-1086,-1603,-2121]},{\"id\":382,\"monsterTypeLabel\":\"murloc\",\"xArr\":[960,940,920],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2108,-1595,-1083]},{\"id\":383,\"y2\":-1363,\"x2\":401,\"monsterTypeLabel\":\"murloc\",\"x1\":603,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1041},{\"id\":384,\"y2\":-903,\"x2\":465,\"monsterTypeLabel\":\"murloc\",\"x1\":298,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1269},{\"id\":386,\"y2\":-774,\"x2\":-190,\"monsterTypeLabel\":\"murloc\",\"x1\":61,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-636},{\"id\":391,\"y2\":663,\"x2\":207,\"monsterTypeLabel\":\"murloc\",\"x1\":-79,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":663},{\"id\":392,\"y2\":279,\"x2\":-208,\"monsterTypeLabel\":\"murloc\",\"x1\":78,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":279},{\"id\":400,\"y2\":81,\"x2\":-195,\"monsterTypeLabel\":\"murloc\",\"x1\":61,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":81},{\"id\":710,\"y2\":-2893,\"x2\":-1278,\"monsterTypeLabel\":\"murloc\",\"x1\":-1282,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2598},{\"id\":1018,\"y2\":-4543,\"x2\":-2355,\"monsterTypeLabel\":\"murloc\",\"x1\":-1808,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4268},{\"id\":1019,\"y2\":-1053,\"x2\":-43,\"monsterTypeLabel\":\"murloc\",\"x1\":287,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-733},{\"id\":1020,\"y2\":-1169,\"x2\":69,\"monsterTypeLabel\":\"murloc\",\"x1\":373,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-814},{\"id\":1318,\"y2\":-5315,\"x2\":-3185,\"monsterTypeLabel\":\"murloc\",\"x1\":-3209,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4935},{\"id\":1320,\"y2\":-5433,\"x2\":-3334,\"monsterTypeLabel\":\"murloc\",\"x1\":-3317,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4928},{\"id\":1435,\"y2\":-6410,\"x2\":-4951,\"monsterTypeLabel\":\"murloc\",\"x1\":-4339,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6767},{\"id\":1438,\"y2\":-5664,\"x2\":-4278,\"monsterTypeLabel\":\"murloc\",\"x1\":-4761,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5172},{\"id\":1439,\"y2\":-5114,\"x2\":-4701,\"monsterTypeLabel\":\"murloc\",\"x1\":-4242,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5613},{\"id\":1440,\"y2\":-5565,\"x2\":-4173,\"monsterTypeLabel\":\"murloc\",\"x1\":-4648,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5046},{\"id\":1441,\"y2\":-5398,\"x2\":-2877,\"monsterTypeLabel\":\"murloc\",\"x1\":-2689,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4885},{\"id\":1442,\"y2\":-5158,\"x2\":-2368,\"monsterTypeLabel\":\"murloc\",\"x1\":-2631,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4831},{\"id\":1443,\"y2\":-2969,\"x2\":-32,\"monsterTypeLabel\":\"murloc\",\"x1\":-600,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2973},{\"id\":1444,\"y2\":-2672,\"x2\":886,\"monsterTypeLabel\":\"murloc\",\"x1\":959,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2231},{\"id\":1445,\"y2\":-2038,\"x2\":1612,\"monsterTypeLabel\":\"murloc\",\"x1\":1198,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2201},{\"id\":1446,\"y2\":-2301,\"x2\":1745,\"monsterTypeLabel\":\"murloc\",\"x1\":1195,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2292},{\"id\":1449,\"y2\":-260,\"x2\":-331,\"monsterTypeLabel\":\"murloc\",\"x1\":-55,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-275}],\"visibilities\":[],\"portalMobs\":[],\"end\":{\"maxY\":1317.7668457031,\"minX\":-309.60827636719,\"minY\":1303.4938964844,\"maxX\":334.01229858398},\"nbLives\":1,\"meteors\":[],\"start\":{\"minX\":-3834.2810058594,\"maxX\":-3828.8139648438,\"maxY\":-6520.7763671875,\"minY\":-6667.4990234375,\"facing\":180},\"circleMobs\":[],\"clearMobs\":[],\"staticSlides\":[]},{\"id\":5,\"monsterSpawns\":[],\"monsters\":[{\"id\":405,\"y2\":1094,\"x2\":-1410,\"monsterTypeLabel\":\"murloc\",\"x1\":-1421,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1598},{\"id\":406,\"y2\":1595,\"x2\":-1569,\"monsterTypeLabel\":\"murloc\",\"x1\":-1536,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1203},{\"id\":407,\"y2\":961,\"x2\":-1736,\"monsterTypeLabel\":\"murloc\",\"x1\":-1751,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1598},{\"id\":410,\"y2\":830,\"x2\":-2321,\"monsterTypeLabel\":\"murloc\",\"x1\":-2437,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1475},{\"id\":412,\"y2\":958,\"x2\":-2602,\"monsterTypeLabel\":\"murloc\",\"x1\":-2594,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1466},{\"id\":413,\"y2\":1086,\"x2\":-2995,\"monsterTypeLabel\":\"murloc\",\"x1\":-3004,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1464},{\"id\":414,\"y2\":1595,\"x2\":-3260,\"monsterTypeLabel\":\"murloc\",\"x1\":-3241,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1217},{\"id\":417,\"y2\":1217,\"x2\":-4024,\"monsterTypeLabel\":\"murloc\",\"x1\":-3897,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1653},{\"id\":420,\"y2\":1150,\"x2\":-4668,\"monsterTypeLabel\":\"murloc\",\"x1\":-4500,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1366},{\"id\":421,\"y2\":1542,\"x2\":-4674,\"monsterTypeLabel\":\"murloc\",\"x1\":-4859,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1328},{\"id\":422,\"y2\":1623,\"x2\":-5103,\"monsterTypeLabel\":\"murloc\",\"x1\":-4859,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1339},{\"id\":427,\"y2\":1146,\"x2\":-6082,\"monsterTypeLabel\":\"murloc\",\"x1\":-5930,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1388},{\"id\":428,\"y2\":1213,\"x2\":-6253,\"monsterTypeLabel\":\"murloc\",\"x1\":-6276,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1717},{\"id\":429,\"y2\":1732,\"x2\":-6394,\"monsterTypeLabel\":\"murloc\",\"x1\":-6372,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1213},{\"id\":430,\"y2\":1082,\"x2\":-6557,\"monsterTypeLabel\":\"murloc\",\"x1\":-6582,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1468},{\"id\":432,\"y2\":1215,\"x2\":-7038,\"monsterTypeLabel\":\"murloc\",\"x1\":-6907,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1600},{\"id\":437,\"y2\":1086,\"x2\":-7169,\"monsterTypeLabel\":\"murloc\",\"x1\":-7168,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1595},{\"id\":438,\"y2\":967,\"x2\":-7427,\"monsterTypeLabel\":\"murloc\",\"x1\":-7423,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1337},{\"id\":439,\"y2\":1215,\"x2\":-7816,\"monsterTypeLabel\":\"murloc\",\"x1\":-7811,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1714},{\"id\":441,\"y2\":1590,\"x2\":-7998,\"monsterTypeLabel\":\"murloc\",\"x1\":-7933,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1207},{\"id\":443,\"y2\":1217,\"x2\":-8438,\"monsterTypeLabel\":\"murloc\",\"x1\":-8417,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1598},{\"id\":445,\"y2\":1209,\"x2\":-8194,\"monsterTypeLabel\":\"murloc\",\"x1\":-8193,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1478},{\"id\":1022,\"y2\":1564,\"x2\":-688,\"monsterTypeLabel\":\"murloc\",\"x1\":-401,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1323},{\"id\":1023,\"y2\":1501,\"x2\":-757,\"monsterTypeLabel\":\"murloc\",\"x1\":-481,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1242},{\"id\":1025,\"y2\":1179,\"x2\":-671,\"monsterTypeLabel\":\"murloc\",\"x1\":-920,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1442},{\"id\":1033,\"y2\":1057,\"x2\":-959,\"monsterTypeLabel\":\"murloc\",\"x1\":-447,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":537},{\"id\":1034,\"y2\":938,\"x2\":-963,\"monsterTypeLabel\":\"murloc\",\"x1\":-436,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":436},{\"id\":1035,\"y2\":276,\"x2\":-438,\"monsterTypeLabel\":\"murloc\",\"x1\":-959,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":803},{\"id\":1036,\"y2\":177,\"x2\":-433,\"monsterTypeLabel\":\"murloc\",\"x1\":-974,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":653},{\"id\":1037,\"y2\":522,\"x2\":-968,\"monsterTypeLabel\":\"murloc\",\"x1\":-437,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":27},{\"id\":1039,\"y2\":-224,\"x2\":-440,\"monsterTypeLabel\":\"murloc\",\"x1\":-695,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":9},{\"id\":1041,\"y2\":-553,\"x2\":-477,\"monsterTypeLabel\":\"murloc\",\"x1\":-749,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-162},{\"id\":1045,\"y2\":-573,\"x2\":-990,\"monsterTypeLabel\":\"murloc\",\"x1\":-1316,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-197},{\"id\":1046,\"y2\":-573,\"x2\":-1295,\"monsterTypeLabel\":\"murloc\",\"x1\":-980,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-188},{\"id\":1047,\"y2\":-577,\"x2\":-1143,\"monsterTypeLabel\":\"murloc\",\"x1\":-1149,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-192},{\"id\":1052,\"y2\":-79,\"x2\":-1871,\"monsterTypeLabel\":\"murloc\",\"x1\":-1584,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-79},{\"id\":1056,\"y2\":112,\"x2\":-1456,\"monsterTypeLabel\":\"murloc\",\"x1\":-1871,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":112},{\"id\":1057,\"y2\":245,\"x2\":-1328,\"monsterTypeLabel\":\"murloc\",\"x1\":-1871,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":245},{\"id\":1058,\"y2\":414,\"x2\":-1328,\"monsterTypeLabel\":\"murloc\",\"x1\":-1871,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":414},{\"id\":1059,\"y2\":635,\"x2\":-1743,\"monsterTypeLabel\":\"murloc\",\"x1\":-1200,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":635},{\"id\":1062,\"y2\":786,\"x2\":-1607,\"monsterTypeLabel\":\"murloc\",\"x1\":-1085,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":793},{\"id\":1066,\"y2\":201,\"x2\":-1398,\"monsterTypeLabel\":\"murloc\",\"x1\":-1388,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":958},{\"id\":1067,\"y2\":815,\"x2\":-2043,\"monsterTypeLabel\":\"murloc\",\"x1\":-2043,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1486},{\"id\":1068,\"y2\":1487,\"x2\":-1905,\"monsterTypeLabel\":\"murloc\",\"x1\":-1905,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":944},{\"id\":1069,\"y2\":944,\"x2\":-2155,\"monsterTypeLabel\":\"murloc\",\"x1\":-2155,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1487},{\"id\":1070,\"y2\":916,\"x2\":-2520,\"monsterTypeLabel\":\"murloc\",\"x1\":-2224,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1531},{\"id\":1072,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-5490,-5490,-5490],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[943,1342,1742]},{\"id\":1073,\"y2\":1228,\"x2\":-4968,\"monsterTypeLabel\":\"murloc\",\"x1\":-5210,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1519},{\"id\":1322,\"y2\":1212,\"x2\":-3441,\"monsterTypeLabel\":\"murloc\",\"x1\":-3480,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1475},{\"id\":1324,\"y2\":1085,\"x2\":-3716,\"monsterTypeLabel\":\"murloc\",\"x1\":-3633,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1525},{\"id\":1450,\"y2\":-569,\"x2\":-1843,\"monsterTypeLabel\":\"murloc\",\"x1\":-1544,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-152},{\"id\":1452,\"y2\":-595,\"x2\":-772,\"monsterTypeLabel\":\"murloc\",\"x1\":-840,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-161},{\"id\":1453,\"y2\":-600,\"x2\":-1578,\"monsterTypeLabel\":\"murloc\",\"x1\":-1444,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-165},{\"id\":1454,\"y2\":1311,\"x2\":-5634,\"monsterTypeLabel\":\"murloc\",\"x1\":-5620,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1739},{\"id\":1455,\"y2\":1087,\"x2\":-6940,\"monsterTypeLabel\":\"murloc\",\"x1\":-6787,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1500},{\"id\":1456,\"y2\":1069,\"x2\":-6720,\"monsterTypeLabel\":\"murloc\",\"x1\":-6677,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1484},{\"id\":1457,\"y2\":1064,\"x2\":-5255,\"monsterTypeLabel\":\"murloc\",\"x1\":-5355,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1493},{\"id\":1458,\"y2\":1184,\"x2\":-4211,\"monsterTypeLabel\":\"murloc\",\"x1\":-4423,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1421},{\"id\":1459,\"y2\":1192,\"x2\":-4165,\"monsterTypeLabel\":\"murloc\",\"x1\":-4283,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1695},{\"id\":1460,\"y2\":1190,\"x2\":-4097,\"monsterTypeLabel\":\"murloc\",\"x1\":-4083,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1759},{\"id\":1461,\"y2\":1125,\"x2\":-3899,\"monsterTypeLabel\":\"murloc\",\"x1\":-3756,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":1604}],\"visibilities\":[],\"portalMobs\":[],\"end\":{\"maxY\":1744.1298828125,\"minX\":-8798.248046875,\"minY\":888.21588134766,\"maxX\":-8786.10546875},\"nbLives\":1,\"meteors\":[],\"start\":{\"minX\":6.0261211395264,\"maxX\":6.0261211395264,\"maxY\":1411.5299072266,\"minY\":1411.5299072266,\"facing\":180},\"circleMobs\":[],\"clearMobs\":[],\"staticSlides\":[]},{\"id\":6,\"monsterSpawns\":[],\"monsters\":[{\"id\":446,\"y2\":911,\"x2\":-8763,\"monsterTypeLabel\":\"murloc\",\"x1\":-9024,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":933},{\"id\":447,\"y2\":655,\"x2\":-8766,\"monsterTypeLabel\":\"murloc\",\"x1\":-9063,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":728},{\"id\":448,\"y2\":508,\"x2\":-9149,\"monsterTypeLabel\":\"murloc\",\"x1\":-8766,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":551},{\"id\":449,\"y2\":227,\"x2\":-8995,\"monsterTypeLabel\":\"murloc\",\"x1\":-8707,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":453},{\"id\":451,\"y2\":11,\"x2\":-8771,\"monsterTypeLabel\":\"murloc\",\"x1\":-8508,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":255},{\"id\":452,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-8258,-8640,-9023],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[203,-84,-371]},{\"id\":453,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-8204,-8507,-8810],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[87,-183,-453]},{\"id\":455,\"y2\":-389,\"x2\":-8120,\"monsterTypeLabel\":\"murloc\",\"x1\":-8646,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-529},{\"id\":456,\"y2\":-633,\"x2\":-8640,\"monsterTypeLabel\":\"murloc\",\"x1\":-8120,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-645},{\"id\":458,\"y2\":-902,\"x2\":-8504,\"monsterTypeLabel\":\"murloc\",\"x1\":-8130,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-766},{\"id\":459,\"y2\":-1073,\"x2\":-8382,\"monsterTypeLabel\":\"murloc\",\"x1\":-7999,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-995},{\"id\":460,\"y2\":-1367,\"x2\":-8204,\"monsterTypeLabel\":\"murloc\",\"x1\":-8429,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1193},{\"id\":461,\"y2\":-1518,\"x2\":-8358,\"monsterTypeLabel\":\"murloc\",\"x1\":-8625,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1262},{\"id\":462,\"y2\":-1674,\"x2\":-8893,\"monsterTypeLabel\":\"murloc\",\"x1\":-8387,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1658},{\"id\":463,\"y2\":-1903,\"x2\":-8251,\"monsterTypeLabel\":\"murloc\",\"x1\":-8764,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1922},{\"id\":465,\"y2\":-1864,\"x2\":-7804,\"monsterTypeLabel\":\"murloc\",\"x1\":-8386,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2338},{\"id\":466,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-7877,-8205,-8533],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2226,-2511,-2797]},{\"id\":467,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-7879,-8196,-8514],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2403,-2679,-2955]},{\"id\":468,\"y2\":-2975,\"x2\":-8509,\"monsterTypeLabel\":\"murloc\",\"x1\":-8005,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2802},{\"id\":469,\"y2\":-3074,\"x2\":-7884,\"monsterTypeLabel\":\"murloc\",\"x1\":-8516,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3062},{\"id\":470,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-9023,-8517,-8012],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-3205,-3209,-3214]},{\"id\":471,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-8132,-8580,-9028],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-3340,-3329,-3319]},{\"id\":472,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-8900,-8514,-8128],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-3465,-3465,-3466]},{\"id\":473,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-8131,-8515,-8900],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-3707,-3710,-3713]},{\"id\":474,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-8007,-8449,-8892],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-3840,-3840,-3841]},{\"id\":475,\"y2\":-3978,\"x2\":-8123,\"monsterTypeLabel\":\"murloc\",\"x1\":-8643,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3967},{\"id\":476,\"y2\":-4081,\"x2\":-8753,\"monsterTypeLabel\":\"murloc\",\"x1\":-8132,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4083},{\"id\":477,\"y2\":-4205,\"x2\":-8893,\"monsterTypeLabel\":\"murloc\",\"x1\":-8256,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4238},{\"id\":478,\"y2\":-4349,\"x2\":-9020,\"monsterTypeLabel\":\"murloc\",\"x1\":-8355,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4455},{\"id\":479,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-8386,-8771,-9156],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-4570,-4562,-4554]},{\"id\":480,\"y2\":-4772,\"x2\":-8992,\"monsterTypeLabel\":\"murloc\",\"x1\":-8357,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4638},{\"id\":481,\"y2\":-5021,\"x2\":-8744,\"monsterTypeLabel\":\"murloc\",\"x1\":-8286,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4706},{\"id\":482,\"y2\":-5184,\"x2\":-8519,\"monsterTypeLabel\":\"murloc\",\"x1\":-8236,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4751},{\"id\":483,\"y2\":-5180,\"x2\":-8219,\"monsterTypeLabel\":\"murloc\",\"x1\":-8190,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4801},{\"id\":484,\"y2\":-5055,\"x2\":-8054,\"monsterTypeLabel\":\"murloc\",\"x1\":-8020,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4426},{\"id\":488,\"y2\":-5182,\"x2\":-7473,\"monsterTypeLabel\":\"murloc\",\"x1\":-7639,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4497},{\"id\":489,\"y2\":-4936,\"x2\":-7170,\"monsterTypeLabel\":\"murloc\",\"x1\":-7620,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4471},{\"id\":491,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-7620,-7238,-6856],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-4445,-4508,-4572]},{\"id\":492,\"y2\":-4610,\"x2\":-6843,\"monsterTypeLabel\":\"murloc\",\"x1\":-7170,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4940},{\"id\":493,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-6731,-7174,-7617],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-4374,-4373,-4372]},{\"id\":494,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-7731,-7221,-6711],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-4233,-4290,-4347]},{\"id\":495,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-6592,-7105,-7619],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-4177,-4136,-4095]},{\"id\":496,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-7619,-7170,-6721],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-3990,-3979,-3969]},{\"id\":497,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-6714,-7165,-7617],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-3883,-3880,-3877]},{\"id\":498,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-7622,-7173,-6724],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-3759,-3741,-3724]},{\"id\":499,\"y2\":-3595,\"x2\":-6718,\"monsterTypeLabel\":\"murloc\",\"x1\":-7110,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3578},{\"id\":500,\"y2\":-3453,\"x2\":-7111,\"monsterTypeLabel\":\"murloc\",\"x1\":-6601,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3451},{\"id\":501,\"y2\":-3216,\"x2\":-6719,\"monsterTypeLabel\":\"murloc\",\"x1\":-7110,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3261},{\"id\":503,\"y2\":-2945,\"x2\":-7347,\"monsterTypeLabel\":\"murloc\",\"x1\":-6842,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3067},{\"id\":504,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-7238,-6849,-6461],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2804,-2797,-2791]},{\"id\":505,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-6461,-6847,-7233],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2687,-2667,-2648]},{\"id\":516,\"y2\":-760,\"x2\":-6847,\"monsterTypeLabel\":\"murloc\",\"x1\":-6368,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1056},{\"id\":519,\"y2\":-15,\"x2\":-6574,\"monsterTypeLabel\":\"murloc\",\"x1\":-6984,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-384},{\"id\":520,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-6974,-6634,-6295],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-119,228,576]},{\"id\":521,\"y2\":331,\"x2\":-6778,\"monsterTypeLabel\":\"murloc\",\"x1\":-6545,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":36},{\"id\":522,\"y2\":144,\"x2\":-6204,\"monsterTypeLabel\":\"murloc\",\"x1\":-6438,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":539},{\"id\":524,\"y2\":399,\"x2\":-5822,\"monsterTypeLabel\":\"murloc\",\"x1\":-6144,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":180},{\"id\":525,\"y2\":4,\"x2\":-5960,\"monsterTypeLabel\":\"murloc\",\"x1\":-5718,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":283},{\"id\":526,\"y2\":-132,\"x2\":-5830,\"monsterTypeLabel\":\"murloc\",\"x1\":-5618,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":55},{\"id\":527,\"y2\":-110,\"x2\":-5451,\"monsterTypeLabel\":\"murloc\",\"x1\":-5816,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-384},{\"id\":528,\"y2\":-578,\"x2\":-5530,\"monsterTypeLabel\":\"murloc\",\"x1\":-5401,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-287},{\"id\":529,\"y2\":-504,\"x2\":-5057,\"monsterTypeLabel\":\"murloc\",\"x1\":-5344,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-285},{\"id\":533,\"y2\":-5056,\"x2\":-7827,\"monsterTypeLabel\":\"murloc\",\"x1\":-7813,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4424},{\"id\":534,\"y2\":-2741,\"x2\":-8845,\"monsterTypeLabel\":\"murloc\",\"x1\":-8575,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2492},{\"id\":535,\"y2\":-2641,\"x2\":-8950,\"monsterTypeLabel\":\"murloc\",\"x1\":-8685,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2392},{\"id\":536,\"y2\":-2317,\"x2\":-9147,\"monsterTypeLabel\":\"murloc\",\"x1\":-8759,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2305},{\"id\":539,\"y2\":-2220,\"x2\":-8671,\"monsterTypeLabel\":\"murloc\",\"x1\":-8885,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2028},{\"id\":716,\"y2\":-2171,\"x2\":-8400,\"monsterTypeLabel\":\"murloc\",\"x1\":-8185,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1983},{\"id\":717,\"y2\":-484,\"x2\":-6978,\"monsterTypeLabel\":\"murloc\",\"x1\":-6455,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-385},{\"id\":721,\"y2\":-642,\"x2\":-6863,\"monsterTypeLabel\":\"murloc\",\"x1\":-6576,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-642},{\"id\":723,\"y2\":-2522,\"x2\":-7283,\"monsterTypeLabel\":\"murloc\",\"x1\":-6592,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2507},{\"id\":726,\"y2\":-2407,\"x2\":-7403,\"monsterTypeLabel\":\"murloc\",\"x1\":-6653,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2370},{\"id\":727,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-6632,-7025,-7419],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2234,-2225,-2217]},{\"id\":729,\"y2\":-167,\"x2\":-4669,\"monsterTypeLabel\":\"murloc\",\"x1\":-5313,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-155},{\"id\":735,\"y2\":36,\"x2\":-5182,\"monsterTypeLabel\":\"murloc\",\"x1\":-4794,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":29},{\"id\":737,\"y2\":241,\"x2\":-5192,\"monsterTypeLabel\":\"murloc\",\"x1\":-4467,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":255},{\"id\":1076,\"y2\":-2379,\"x2\":-8366,\"monsterTypeLabel\":\"murloc\",\"x1\":-7965,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2658},{\"id\":1079,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-8113,-8512,-8912],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-3594,-3594,-3594]},{\"id\":1082,\"y2\":-3199,\"x2\":-7985,\"monsterTypeLabel\":\"murloc\",\"x1\":-8500,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2869},{\"id\":1084,\"y2\":-5066,\"x2\":-7908,\"monsterTypeLabel\":\"murloc\",\"x1\":-7906,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4405},{\"id\":1090,\"y2\":55,\"x2\":-6384,\"monsterTypeLabel\":\"murloc\",\"x1\":-6530,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":451},{\"id\":1308,\"y\":-4647,\"x\":-7375,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1310,\"y\":-4684,\"x\":-7328,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1311,\"y\":-3997,\"x\":-7119,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1314,\"y\":-4042,\"x\":-7076,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1462,\"y2\":-754,\"x2\":-6452,\"monsterTypeLabel\":\"murloc\",\"x1\":-6725,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1062},{\"id\":1463,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-7491,-7087,-6682],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2310,-2313,-2316]},{\"id\":1464,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-7343,-6934,-6524],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2135,-2135,-2135]},{\"id\":1465,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-7276,-6863,-6449],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2034,-2016,-1998]},{\"id\":1466,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-7304,-6927,-6550],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2007,-1907,-1807]},{\"id\":1467,\"y2\":-1649,\"x2\":-6712,\"monsterTypeLabel\":\"murloc\",\"x1\":-7379,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1870},{\"id\":1468,\"y2\":-1512,\"x2\":-6917,\"monsterTypeLabel\":\"murloc\",\"x1\":-7152,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-912},{\"id\":1469,\"y2\":-1374,\"x2\":-7252,\"monsterTypeLabel\":\"murloc\",\"x1\":-6918,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-810},{\"id\":1470,\"y2\":-1147,\"x2\":-7241,\"monsterTypeLabel\":\"murloc\",\"x1\":-6820,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1220},{\"id\":1472,\"y2\":-1674,\"x2\":-7265,\"monsterTypeLabel\":\"murloc\",\"x1\":-6936,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1537}],\"visibilities\":[],\"portalMobs\":[],\"end\":{\"maxY\":547.10791015625,\"minX\":-4278.95703125,\"minY\":-39.946533203125,\"maxX\":-4259.6850585938},\"nbLives\":1,\"meteors\":[],\"start\":{\"minX\":-8818.6103515625,\"maxX\":-8818.6103515625,\"maxY\":1413.4027099609,\"minY\":1413.4027099609,\"facing\":270},\"circleMobs\":[],\"clearMobs\":[],\"staticSlides\":[]},{\"id\":7,\"monsterSpawns\":[],\"monsters\":[{\"id\":540,\"y2\":-142,\"x2\":-3394,\"monsterTypeLabel\":\"murloc\",\"x1\":-3648,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-137},{\"id\":568,\"monsterTypeLabel\":\"murloc\",\"xArr\":[],\"mode\":\"normal\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[]},{\"id\":569,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-3305],\"mode\":\"normal\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-670]},{\"id\":577,\"y2\":-1161,\"x2\":-4539,\"monsterTypeLabel\":\"murloc\",\"x1\":-4031,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1148},{\"id\":579,\"y2\":-561,\"x2\":-3526,\"monsterTypeLabel\":\"murloc\",\"x1\":-3264,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-678},{\"id\":582,\"y2\":-500,\"x2\":-3140,\"monsterTypeLabel\":\"murloc\",\"x1\":-2881,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-355},{\"id\":583,\"y2\":-768,\"x2\":-3143,\"monsterTypeLabel\":\"murloc\",\"x1\":-2879,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-582},{\"id\":586,\"y2\":-890,\"x2\":-2492,\"monsterTypeLabel\":\"murloc\",\"x1\":-2758,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-727},{\"id\":592,\"y2\":-528,\"x2\":-2494,\"monsterTypeLabel\":\"murloc\",\"x1\":-2758,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-270},{\"id\":593,\"y2\":-725,\"x2\":-2489,\"monsterTypeLabel\":\"murloc\",\"x1\":-2754,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-497},{\"id\":616,\"y2\":-1219,\"x2\":-2824,\"monsterTypeLabel\":\"murloc\",\"x1\":-2824,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1980},{\"id\":617,\"y2\":-1221,\"x2\":-3198,\"monsterTypeLabel\":\"murloc\",\"x1\":-3199,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1859},{\"id\":632,\"y2\":-1729,\"x2\":-5247,\"monsterTypeLabel\":\"murloc\",\"x1\":-5380,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1355},{\"id\":635,\"y2\":-2330,\"x2\":-5181,\"monsterTypeLabel\":\"murloc\",\"x1\":-5695,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2319},{\"id\":638,\"y2\":-2614,\"x2\":-5168,\"monsterTypeLabel\":\"murloc\",\"x1\":-5455,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2614},{\"id\":641,\"y2\":-2839,\"x2\":-5041,\"monsterTypeLabel\":\"murloc\",\"x1\":-5584,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2839},{\"id\":642,\"y2\":-2946,\"x2\":-5583,\"monsterTypeLabel\":\"murloc\",\"x1\":-5040,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2946},{\"id\":643,\"y2\":-2511,\"x2\":-5557,\"monsterTypeLabel\":\"murloc\",\"x1\":-5557,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1968},{\"id\":644,\"y2\":-3199,\"x2\":-5456,\"monsterTypeLabel\":\"murloc\",\"x1\":-5169,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3199},{\"id\":648,\"y2\":-4047,\"x2\":-4517,\"monsterTypeLabel\":\"murloc\",\"x1\":-4517,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3760},{\"id\":651,\"y2\":-4047,\"x2\":-4326,\"monsterTypeLabel\":\"murloc\",\"x1\":-4326,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3760},{\"id\":652,\"y2\":-3761,\"x2\":-4157,\"monsterTypeLabel\":\"murloc\",\"x1\":-4157,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4048},{\"id\":656,\"y2\":-3760,\"x2\":-3977,\"monsterTypeLabel\":\"murloc\",\"x1\":-3977,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-4047},{\"id\":657,\"y2\":-4048,\"x2\":-3726,\"monsterTypeLabel\":\"murloc\",\"x1\":-3726,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3761},{\"id\":664,\"y2\":-5272,\"x2\":-5680,\"monsterTypeLabel\":\"murloc\",\"x1\":-6351,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5272},{\"id\":665,\"y2\":-5337,\"x2\":-6351,\"monsterTypeLabel\":\"murloc\",\"x1\":-5680,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5337},{\"id\":666,\"y2\":-5448,\"x2\":-5680,\"monsterTypeLabel\":\"murloc\",\"x1\":-6351,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5448},{\"id\":667,\"y2\":-5517,\"x2\":-6352,\"monsterTypeLabel\":\"murloc\",\"x1\":-5681,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5517},{\"id\":669,\"y2\":-5602,\"x2\":-5780,\"monsterTypeLabel\":\"murloc\",\"x1\":-6251,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5602},{\"id\":672,\"y2\":-5138,\"x2\":-5790,\"monsterTypeLabel\":\"murloc\",\"x1\":-6238,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5141},{\"id\":674,\"y2\":-6630,\"x2\":-5669,\"monsterTypeLabel\":\"murloc\",\"x1\":-6104,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6162},{\"id\":675,\"y2\":-6673,\"x2\":-5696,\"monsterTypeLabel\":\"murloc\",\"x1\":-6151,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6215},{\"id\":676,\"y2\":-6260,\"x2\":-6193,\"monsterTypeLabel\":\"murloc\",\"x1\":-5694,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6779},{\"id\":677,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-6235,-6009,-5783],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-6287,-6629,-6972]},{\"id\":678,\"y2\":-6972,\"x2\":-5885,\"monsterTypeLabel\":\"murloc\",\"x1\":-6269,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6332},{\"id\":679,\"y2\":-6969,\"x2\":-5999,\"monsterTypeLabel\":\"murloc\",\"x1\":-6284,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6356},{\"id\":680,\"y2\":-6972,\"x2\":-6105,\"monsterTypeLabel\":\"murloc\",\"x1\":-6318,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6389},{\"id\":742,\"y2\":-4175,\"x2\":-3458,\"monsterTypeLabel\":\"murloc\",\"x1\":-3458,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3888},{\"id\":744,\"y2\":-4047,\"x2\":-4713,\"monsterTypeLabel\":\"murloc\",\"x1\":-4713,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3760},{\"id\":943,\"y\":114,\"x\":-3061,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"tpt\"},{\"id\":945,\"y\":112,\"x\":-2678,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"tpt\"},{\"id\":956,\"y\":-1711,\"x\":-3582,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"tp\"},{\"id\":957,\"y\":-1830,\"x\":-3201,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"tp\"},{\"id\":961,\"y\":-1965,\"x\":-2817,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"tp\"},{\"id\":964,\"y\":-539,\"x\":-4217,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"tp\"},{\"id\":977,\"y2\":-1165,\"x2\":-3579,\"monsterTypeLabel\":\"murloc\",\"x1\":-3579,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1778},{\"id\":1300,\"y\":-3815,\"x\":-2920,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1301,\"y\":-3775,\"x\":-2881,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1304,\"y\":-3775,\"x\":-2727,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1306,\"y\":-3811,\"x\":-2690,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1336,\"y\":-2159,\"x\":-2802,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"tp\"},{\"id\":1338,\"y\":-2030,\"x\":-3175,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"tp\"},{\"id\":1340,\"y\":-1898,\"x\":-3578,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"tp\"},{\"id\":1344,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-2750,-3196,-3643],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2298,-2178,-2059]},{\"id\":1345,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-3643,-3193,-2744],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2059,-2183,-2307]},{\"id\":1346,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-2744,-3190,-3637],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2307,-2184,-2061]},{\"id\":1347,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-3645,-3192,-2739],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2034,-2174,-2314]},{\"id\":1348,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-2751,-3199,-3647],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-2304,-2173,-2042]},{\"id\":1351,\"y\":-4784,\"x\":-6005,\"angle\":-1,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"tpt\"},{\"id\":1473,\"y2\":-2968,\"x2\":-3627,\"monsterTypeLabel\":\"murloc\",\"x1\":-3923,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2667},{\"id\":1474,\"y2\":-2970,\"x2\":-3537,\"monsterTypeLabel\":\"murloc\",\"x1\":-3238,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2675},{\"id\":1475,\"y2\":-2960,\"x2\":-3224,\"monsterTypeLabel\":\"murloc\",\"x1\":-3541,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2682},{\"id\":1476,\"y2\":-2958,\"x2\":-3938,\"monsterTypeLabel\":\"murloc\",\"x1\":-3638,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-2670},{\"id\":1477,\"y2\":-4041,\"x2\":-4990,\"monsterTypeLabel\":\"murloc\",\"x1\":-4978,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3626},{\"id\":1479,\"y2\":-4047,\"x2\":-4856,\"monsterTypeLabel\":\"murloc\",\"x1\":-4866,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-3649},{\"id\":1480,\"y2\":-1752,\"x2\":-5402,\"monsterTypeLabel\":\"murloc\",\"x1\":-5545,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1474},{\"id\":1482,\"y2\":-1636,\"x2\":-5130,\"monsterTypeLabel\":\"murloc\",\"x1\":-4984,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1452},{\"id\":1483,\"y2\":-1782,\"x2\":-4981,\"monsterTypeLabel\":\"murloc\",\"x1\":-4745,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1562},{\"id\":1484,\"y2\":-1895,\"x2\":-4655,\"monsterTypeLabel\":\"murloc\",\"x1\":-4943,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-1903},{\"id\":1485,\"y2\":-6890,\"x2\":-6263,\"monsterTypeLabel\":\"murloc\",\"x1\":-5713,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6360},{\"id\":1486,\"y2\":-5396,\"x2\":-5682,\"monsterTypeLabel\":\"murloc\",\"x1\":-6363,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-5388}],\"visibilities\":[],\"portalMobs\":[{\"id\":0,\"portalEffectDuration\":1.5000001192093,\"triggerMobId\":956,\"targetMobId\":943,\"freezeDuration\":1.5000001192093,\"portalEffect\":\"\"},{\"id\":1,\"portalEffectDuration\":1.5000001192093,\"triggerMobId\":957,\"targetMobId\":945,\"freezeDuration\":1.5000001192093,\"portalEffect\":\"\"},{\"id\":2,\"portalEffectDuration\":1,\"triggerMobId\":956,\"targetMobId\":943,\"freezeDuration\":1,\"portalEffect\":\"Abilities\\\\Spells\\\\Orc\\\\FeralSpirit\\\\feralspiritdone.mdl\"},{\"id\":3,\"portalEffectDuration\":1,\"triggerMobId\":957,\"targetMobId\":945,\"freezeDuration\":1,\"portalEffect\":\"Abilities\\\\Spells\\\\Orc\\\\FeralSpirit\\\\feralspiritdone.mdl\"},{\"id\":4,\"portalEffectDuration\":1,\"triggerMobId\":961,\"targetMobId\":964,\"freezeDuration\":1,\"portalEffect\":\"Abilities\\\\Spells\\\\Orc\\\\FeralSpirit\\\\feralspiritdone.mdl\"},{\"id\":5,\"portalEffectDuration\":0.5,\"triggerMobId\":956,\"targetMobId\":943,\"freezeDuration\":0.5,\"portalEffect\":\"Abilities\\\\Spells\\\\Orc\\\\FeralSpirit\\\\feralspiritdone.mdl\"},{\"id\":6,\"portalEffectDuration\":0.5,\"triggerMobId\":957,\"targetMobId\":945,\"freezeDuration\":0.5,\"portalEffect\":\"Abilities\\\\Spells\\\\Orc\\\\FeralSpirit\\\\feralspiritdone.mdl\"},{\"id\":7,\"portalEffectDuration\":0.5,\"triggerMobId\":961,\"targetMobId\":964,\"freezeDuration\":0.5,\"portalEffect\":\"Abilities\\\\Spells\\\\Orc\\\\FeralSpirit\\\\feralspiritdone.mdl\"},{\"id\":8,\"portalEffectDuration\":0.65000003576279,\"triggerMobId\":956,\"targetMobId\":943,\"freezeDuration\":0.65000003576279,\"portalEffect\":\"Abilities\\\\Spells\\\\Orc\\\\FeralSpirit\\\\feralspiritdone.mdl\"},{\"id\":9,\"portalEffectDuration\":0.65000003576279,\"triggerMobId\":957,\"targetMobId\":945,\"freezeDuration\":0.65000003576279,\"portalEffect\":\"Abilities\\\\Spells\\\\Orc\\\\FeralSpirit\\\\feralspiritdone.mdl\"},{\"id\":10,\"portalEffectDuration\":0.65000003576279,\"triggerMobId\":961,\"targetMobId\":964,\"freezeDuration\":0.65000003576279,\"portalEffect\":\"Abilities\\\\Spells\\\\Orc\\\\FeralSpirit\\\\feralspiritdone.mdl\"},{\"id\":11,\"portalEffectDuration\":1.5000001192093,\"triggerMobId\":956,\"targetMobId\":943,\"freezeDuration\":1.5000001192093,\"portalEffect\":\"Abilities\\\\Spells\\\\Other\\\\Monsoon\\\\MonsoonBoltTarget.mdl\"},{\"id\":12,\"portalEffectDuration\":1.5000001192093,\"triggerMobId\":957,\"targetMobId\":945,\"freezeDuration\":1.5000001192093,\"portalEffect\":\"Abilities\\\\Spells\\\\Other\\\\Monsoon\\\\MonsoonBoltTarget.mdl\"},{\"id\":13,\"portalEffectDuration\":1,\"triggerMobId\":956,\"targetMobId\":943,\"freezeDuration\":1,\"portalEffect\":\"Abilities\\\\Spells\\\\Other\\\\Monsoon\\\\MonsoonBoltTarget.mdl\"},{\"id\":14,\"portalEffectDuration\":1,\"triggerMobId\":957,\"targetMobId\":945,\"freezeDuration\":1,\"portalEffect\":\"Abilities\\\\Spells\\\\Other\\\\Monsoon\\\\MonsoonBoltTarget.mdl\"},{\"id\":15,\"portalEffectDuration\":1,\"triggerMobId\":961,\"targetMobId\":964,\"freezeDuration\":1,\"portalEffect\":\"Abilities\\\\Spells\\\\Other\\\\Monsoon\\\\MonsoonBoltTarget.mdl\"},{\"freezeDuration\":1,\"portalEffectDuration\":1,\"triggerMobId\":1336,\"id\":16,\"portalEffect\":\"Doodads\\\\Cinematic\\\\Lightningbolt\\\\Lightningbolt.mdl\"},{\"id\":17,\"portalEffectDuration\":1,\"triggerMobId\":1336,\"targetMobId\":964,\"freezeDuration\":1,\"portalEffect\":\"Doodads\\\\Cinematic\\\\Lightningbolt\\\\Lightningbolt.mdl\"},{\"id\":18,\"portalEffectDuration\":1,\"triggerMobId\":1338,\"targetMobId\":964,\"freezeDuration\":1,\"portalEffect\":\"Doodads\\\\Cinematic\\\\Lightningbolt\\\\Lightningbolt.mdl\"},{\"id\":19,\"portalEffectDuration\":1,\"triggerMobId\":1340,\"targetMobId\":964,\"freezeDuration\":1,\"portalEffect\":\"Doodads\\\\Cinematic\\\\Lightningbolt\\\\Lightningbolt.mdl\"},{\"id\":20,\"portalEffectDuration\":0,\"triggerMobId\":1340,\"targetMobId\":964,\"freezeDuration\":0,\"portalEffect\":\"\"},{\"freezeDuration\":0,\"portalEffectDuration\":0,\"triggerMobId\":1338,\"id\":21,\"portalEffect\":\"\"},{\"id\":22,\"portalEffectDuration\":0,\"triggerMobId\":1336,\"targetMobId\":1351,\"freezeDuration\":0,\"portalEffect\":\"\"},{\"id\":23,\"portalEffectDuration\":0,\"triggerMobId\":1338,\"targetMobId\":1351,\"freezeDuration\":0,\"portalEffect\":\"\"},{\"id\":24,\"portalEffectDuration\":0,\"triggerMobId\":1340,\"targetMobId\":1351,\"freezeDuration\":0,\"portalEffect\":\"\"},{\"id\":25,\"portalEffectDuration\":1,\"triggerMobId\":1336,\"targetMobId\":1351,\"freezeDuration\":1,\"portalEffect\":\"Abilities\\\\Spells\\\\Other\\\\Monsoon\\\\MonsoonBoltTarget.mdl\"},{\"id\":26,\"portalEffectDuration\":1,\"triggerMobId\":1338,\"targetMobId\":1351,\"freezeDuration\":1,\"portalEffect\":\"Abilities\\\\Spells\\\\Other\\\\Monsoon\\\\MonsoonBoltTarget.mdl\"},{\"id\":27,\"portalEffectDuration\":1,\"triggerMobId\":1340,\"targetMobId\":1351,\"freezeDuration\":1,\"portalEffect\":\"Abilities\\\\Spells\\\\Other\\\\Monsoon\\\\MonsoonBoltTarget.mdl\"}],\"end\":{\"maxY\":-6213.9267578125,\"minX\":-7723.1137695312,\"minY\":-6946.6196289062,\"maxX\":-7705.5854492188},\"nbLives\":1,\"meteors\":[],\"start\":{\"minX\":-4213.7846679688,\"maxX\":-4213.7846679688,\"maxY\":257.20251464844,\"minY\":257.20251464844,\"facing\":0},\"circleMobs\":[],\"clearMobs\":[],\"staticSlides\":[]},{\"id\":8,\"monsterSpawns\":[{\"spawnAmount\":1,\"label\":\"1\",\"initialDelay\":0,\"fixedSpawnOffsetMirrored\":false,\"spawnOffset\":0,\"maxX\":-7015,\"sens\":0,\"minY\":-9080,\"minX\":-8888,\"frequence\":2.5,\"maxY\":-7323,\"monsterTypeLabel\":\"tank1\",\"fixedSpawnOffsetBounce\":false},{\"spawnAmount\":1,\"label\":\"2\",\"initialDelay\":0,\"fixedSpawnOffsetMirrored\":false,\"spawnOffset\":0,\"maxX\":-7048,\"sens\":0,\"minY\":-10753,\"minX\":-8878,\"frequence\":2.5,\"maxY\":-9057,\"monsterTypeLabel\":\"tank1\",\"fixedSpawnOffsetBounce\":false},{\"spawnAmount\":1,\"label\":\"3\",\"initialDelay\":0,\"fixedSpawnOffsetMirrored\":false,\"spawnOffset\":0,\"maxX\":-6665,\"sens\":180,\"minY\":-9060,\"minX\":-8621,\"frequence\":2.5,\"maxY\":-7326,\"monsterTypeLabel\":\"tank1\",\"fixedSpawnOffsetBounce\":false},{\"spawnAmount\":1,\"label\":\"4\",\"initialDelay\":0,\"fixedSpawnOffsetMirrored\":false,\"spawnOffset\":0,\"maxX\":-6665,\"sens\":180,\"minY\":-10746,\"minX\":-8599,\"frequence\":2.5,\"maxY\":-9053,\"monsterTypeLabel\":\"tank1\",\"fixedSpawnOffsetBounce\":false}],\"monsters\":[{\"id\":854,\"y2\":-11264,\"x2\":-5944,\"monsterTypeLabel\":\"murloc\",\"x1\":-6151,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11068},{\"id\":855,\"y2\":-10892,\"x2\":-6206,\"monsterTypeLabel\":\"murloc\",\"x1\":-5997,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10700},{\"id\":856,\"y2\":-10554,\"x2\":-5887,\"monsterTypeLabel\":\"murloc\",\"x1\":-6107,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10274},{\"id\":857,\"y2\":-10436,\"x2\":-5758,\"monsterTypeLabel\":\"murloc\",\"x1\":-5887,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10165},{\"id\":858,\"y2\":-9861,\"x2\":-5822,\"monsterTypeLabel\":\"murloc\",\"x1\":-5509,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9519},{\"id\":862,\"y2\":-9150,\"x2\":-5310,\"monsterTypeLabel\":\"murloc\",\"x1\":-5355,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8610},{\"id\":863,\"y2\":-9150,\"x2\":-5231,\"monsterTypeLabel\":\"murloc\",\"x1\":-5264,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8531},{\"id\":865,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-5098,-5098,-5098],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-8241,-8704,-9168]},{\"id\":866,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-5072,-4672,-4273],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-9205,-9205,-9205]},{\"id\":872,\"y2\":-8240,\"x2\":-3640,\"monsterTypeLabel\":\"murloc\",\"x1\":-3640,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8655},{\"id\":873,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-3457,-3457,-3457],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-9167,-8767,-8368]},{\"id\":874,\"y2\":-8791,\"x2\":-3121,\"monsterTypeLabel\":\"murloc\",\"x1\":-3536,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8791},{\"id\":876,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-3120,-3519,-3919],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-9410,-9410,-9410]},{\"id\":878,\"y2\":-9592,\"x2\":-3906,\"monsterTypeLabel\":\"murloc\",\"x1\":-3373,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9597},{\"id\":880,\"y2\":-9729,\"x2\":-3251,\"monsterTypeLabel\":\"murloc\",\"x1\":-3784,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9867},{\"id\":883,\"y2\":-10161,\"x2\":-3838,\"monsterTypeLabel\":\"murloc\",\"x1\":-3255,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10238},{\"id\":887,\"y2\":-10570,\"x2\":-3710,\"monsterTypeLabel\":\"murloc\",\"x1\":-3845,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10176},{\"id\":890,\"y2\":-10621,\"x2\":-3657,\"monsterTypeLabel\":\"murloc\",\"x1\":-3244,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10257},{\"id\":902,\"y2\":-11459,\"x2\":-2687,\"monsterTypeLabel\":\"murloc\",\"x1\":-3119,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10983},{\"id\":903,\"y2\":-11059,\"x2\":-3204,\"monsterTypeLabel\":\"murloc\",\"x1\":-2772,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11551},{\"id\":907,\"y2\":-11602,\"x2\":-2461,\"monsterTypeLabel\":\"murloc\",\"x1\":-2769,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11199},{\"id\":912,\"y2\":-11587,\"x2\":-2322,\"monsterTypeLabel\":\"murloc\",\"x1\":-2616,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11204},{\"id\":917,\"y2\":-11428,\"x2\":-3157,\"monsterTypeLabel\":\"murloc\",\"x1\":-3707,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10945},{\"id\":918,\"y2\":-11380,\"x2\":-3668,\"monsterTypeLabel\":\"murloc\",\"x1\":-3291,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10967},{\"id\":926,\"y2\":-11471,\"x2\":-3455,\"monsterTypeLabel\":\"murloc\",\"x1\":-3455,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10928},{\"id\":1116,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-4975,-4901,-4828],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-8255,-8828,-9402]},{\"id\":1118,\"y2\":-8438,\"x2\":-5175,\"monsterTypeLabel\":\"murloc\",\"x1\":-4762,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8789},{\"id\":1119,\"y2\":-9185,\"x2\":-5089,\"monsterTypeLabel\":\"murloc\",\"x1\":-4778,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8968},{\"id\":1120,\"y2\":-9540,\"x2\":-4527,\"monsterTypeLabel\":\"murloc\",\"x1\":-4663,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9023},{\"id\":1121,\"y2\":-8270,\"x2\":-4513,\"monsterTypeLabel\":\"murloc\",\"x1\":-4661,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8756},{\"id\":1123,\"y2\":-8814,\"x2\":-4552,\"monsterTypeLabel\":\"murloc\",\"x1\":-4271,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8464},{\"id\":1492,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-8142,-8447,-8753],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-6343,-6650,-6958]},{\"id\":1493,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-8108,-8375,-8641],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-6423,-6707,-6991]},{\"id\":1494,\"y2\":-6996,\"x2\":-8517,\"monsterTypeLabel\":\"murloc\",\"x1\":-8110,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6535},{\"id\":1495,\"y2\":-6991,\"x2\":-8358,\"monsterTypeLabel\":\"murloc\",\"x1\":-8113,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6687},{\"id\":1496,\"y2\":-6808,\"x2\":-8775,\"monsterTypeLabel\":\"murloc\",\"x1\":-8275,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6328},{\"id\":1497,\"y2\":-6639,\"x2\":-8782,\"monsterTypeLabel\":\"murloc\",\"x1\":-8429,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-6323},{\"id\":1498,\"y2\":-11361,\"x2\":-6481,\"monsterTypeLabel\":\"murloc\",\"x1\":-5935,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11336},{\"id\":1499,\"y2\":-11609,\"x2\":-6139,\"monsterTypeLabel\":\"murloc\",\"x1\":-6344,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11117},{\"id\":1500,\"y2\":-9388,\"x2\":-5821,\"monsterTypeLabel\":\"murloc\",\"x1\":-5505,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9695},{\"id\":1501,\"y2\":-9162,\"x2\":-5159,\"monsterTypeLabel\":\"murloc\",\"x1\":-5198,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8411},{\"id\":1502,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-4093,-4095,-4097],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-8271,-8774,-9277]},{\"id\":1503,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-4097,-4096,-4095],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-9278,-8780,-8282]},{\"id\":1504,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-4095,-4096,-4097],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-8279,-8782,-9285]},{\"id\":1505,\"y2\":-8944,\"x2\":-4559,\"monsterTypeLabel\":\"murloc\",\"x1\":-4245,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9080},{\"id\":1506,\"y2\":-9062,\"x2\":-4227,\"monsterTypeLabel\":\"murloc\",\"x1\":-4219,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8489},{\"id\":1510,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-3838,-3834,-3831],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-8353,-8761,-9168]},{\"id\":1511,\"y2\":-9164,\"x2\":-3654,\"monsterTypeLabel\":\"murloc\",\"x1\":-3654,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8873},{\"id\":1512,\"y2\":-9207,\"x2\":-3416,\"monsterTypeLabel\":\"murloc\",\"x1\":-3062,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8887},{\"id\":1513,\"y2\":-9519,\"x2\":-3161,\"monsterTypeLabel\":\"murloc\",\"x1\":-3433,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9222},{\"id\":1515,\"y2\":-10730,\"x2\":-4173,\"monsterTypeLabel\":\"murloc\",\"x1\":-3750,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10775},{\"id\":1516,\"y2\":-11273,\"x2\":-4175,\"monsterTypeLabel\":\"murloc\",\"x1\":-3732,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10889},{\"id\":1517,\"y2\":-11381,\"x2\":-3728,\"monsterTypeLabel\":\"murloc\",\"x1\":-4078,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10900},{\"id\":1518,\"y2\":-10625,\"x2\":-3739,\"monsterTypeLabel\":\"murloc\",\"x1\":-4085,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10484},{\"id\":1519,\"y2\":-9954,\"x2\":-3122,\"monsterTypeLabel\":\"murloc\",\"x1\":-3799,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9965},{\"id\":1520,\"y2\":-10094,\"x2\":-3108,\"monsterTypeLabel\":\"murloc\",\"x1\":-3803,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10061}],\"visibilities\":[],\"portalMobs\":[],\"end\":{\"maxY\":-11072.850585938,\"minX\":-2143.0075683594,\"minY\":-11854.404296875,\"maxX\":-2112.7595214844},\"nbLives\":1,\"meteors\":[],\"start\":{\"minX\":-7800.9760742188,\"maxX\":-7800.9760742188,\"maxY\":-6532.6552734375,\"minY\":-6532.6552734375,\"facing\":90},\"circleMobs\":[],\"clearMobs\":[],\"staticSlides\":[]},{\"id\":9,\"monsterSpawns\":[],\"monsters\":[{\"id\":1124,\"y2\":-11710,\"x2\":-1597,\"monsterTypeLabel\":\"murloc\",\"x1\":-1719,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11252},{\"id\":1125,\"y2\":-11631,\"x2\":-1447,\"monsterTypeLabel\":\"murloc\",\"x1\":-1578,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11199},{\"id\":1126,\"y2\":-11576,\"x2\":-1297,\"monsterTypeLabel\":\"murloc\",\"x1\":-1320,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11328},{\"id\":1127,\"y2\":-11186,\"x2\":-516,\"monsterTypeLabel\":\"murloc\",\"x1\":-1041,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11687},{\"id\":1128,\"y2\":-11092,\"x2\":-598,\"monsterTypeLabel\":\"murloc\",\"x1\":-1144,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11600},{\"id\":1129,\"y2\":-11095,\"x2\":-1047,\"monsterTypeLabel\":\"murloc\",\"x1\":-700,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11524},{\"id\":1130,\"y2\":-11155,\"x2\":-1118,\"monsterTypeLabel\":\"murloc\",\"x1\":-753,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11591},{\"id\":1133,\"y2\":-11459,\"x2\":-457,\"monsterTypeLabel\":\"murloc\",\"x1\":-317,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11194},{\"id\":1134,\"y2\":-11465,\"x2\":-164,\"monsterTypeLabel\":\"murloc\",\"x1\":-260,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11189},{\"id\":1137,\"y2\":-10800,\"x2\":152,\"monsterTypeLabel\":\"murloc\",\"x1\":152,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11215},{\"id\":1138,\"y2\":-11216,\"x2\":260,\"monsterTypeLabel\":\"murloc\",\"x1\":260,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10801},{\"id\":1141,\"y2\":-11343,\"x2\":375,\"monsterTypeLabel\":\"murloc\",\"x1\":375,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10800},{\"id\":1142,\"y2\":-10672,\"x2\":532,\"monsterTypeLabel\":\"murloc\",\"x1\":532,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11215},{\"id\":1143,\"y2\":-11215,\"x2\":661,\"monsterTypeLabel\":\"murloc\",\"x1\":661,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10800},{\"id\":1144,\"y2\":-10800,\"x2\":893,\"monsterTypeLabel\":\"murloc\",\"x1\":893,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11087},{\"id\":1148,\"y2\":-9725,\"x2\":442,\"monsterTypeLabel\":\"murloc\",\"x1\":656,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9408},{\"id\":1149,\"y2\":-9664,\"x2\":339,\"monsterTypeLabel\":\"murloc\",\"x1\":391,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9281},{\"id\":1150,\"y2\":-9666,\"x2\":203,\"monsterTypeLabel\":\"murloc\",\"x1\":223,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9278},{\"id\":1152,\"y2\":-9016,\"x2\":-316,\"monsterTypeLabel\":\"murloc\",\"x1\":-44,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9576},{\"id\":1153,\"y2\":-9102,\"x2\":-467,\"monsterTypeLabel\":\"murloc\",\"x1\":-95,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9644},{\"id\":1154,\"y2\":-9146,\"x2\":-599,\"monsterTypeLabel\":\"murloc\",\"x1\":-183,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9727},{\"id\":1155,\"y2\":-9201,\"x2\":-700,\"monsterTypeLabel\":\"murloc\",\"x1\":-257,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9802},{\"id\":1156,\"y2\":-9268,\"x2\":-759,\"monsterTypeLabel\":\"murloc\",\"x1\":-309,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9847},{\"id\":1158,\"y2\":-9325,\"x2\":-809,\"monsterTypeLabel\":\"murloc\",\"x1\":-390,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9903},{\"id\":1160,\"y2\":-9543,\"x2\":-905,\"monsterTypeLabel\":\"murloc\",\"x1\":-638,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9931},{\"id\":1182,\"y2\":-8109,\"x2\":-743,\"monsterTypeLabel\":\"murloc\",\"x1\":-765,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7375},{\"id\":1183,\"y2\":-7983,\"x2\":-625,\"monsterTypeLabel\":\"murloc\",\"x1\":-639,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7485},{\"id\":1189,\"y2\":-7270,\"x2\":-432,\"monsterTypeLabel\":\"murloc\",\"x1\":-436,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7680},{\"id\":1190,\"y2\":-7220,\"x2\":-282,\"monsterTypeLabel\":\"murloc\",\"x1\":-331,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7678},{\"id\":1191,\"y2\":-7929,\"x2\":-194,\"monsterTypeLabel\":\"murloc\",\"x1\":-147,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7337},{\"id\":1192,\"y2\":-8054,\"x2\":-87,\"monsterTypeLabel\":\"murloc\",\"x1\":-54,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7549},{\"id\":1193,\"y2\":-8124,\"x2\":39,\"monsterTypeLabel\":\"murloc\",\"x1\":70,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7674},{\"id\":1194,\"y2\":-8130,\"x2\":176,\"monsterTypeLabel\":\"murloc\",\"x1\":194,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7685},{\"id\":1195,\"y2\":-8191,\"x2\":317,\"monsterTypeLabel\":\"murloc\",\"x1\":329,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7618},{\"id\":1197,\"y2\":-8259,\"x2\":411,\"monsterTypeLabel\":\"murloc\",\"x1\":440,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7661},{\"id\":1198,\"y2\":-8257,\"x2\":536,\"monsterTypeLabel\":\"murloc\",\"x1\":514,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7732},{\"id\":1199,\"y2\":-8254,\"x2\":637,\"monsterTypeLabel\":\"murloc\",\"x1\":660,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7621},{\"id\":1200,\"monsterTypeLabel\":\"murloc\",\"xArr\":[789,780,771],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-7607,-7992,-8378]},{\"id\":1201,\"monsterTypeLabel\":\"murloc\",\"xArr\":[912,894,877],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-7610,-7995,-8380]},{\"id\":1202,\"y2\":-8384,\"x2\":994,\"monsterTypeLabel\":\"murloc\",\"x1\":1025,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7632},{\"id\":1210,\"y2\":-7760,\"x2\":1183,\"monsterTypeLabel\":\"murloc\",\"x1\":1061,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8412},{\"id\":1211,\"y2\":-8212,\"x2\":1370,\"monsterTypeLabel\":\"murloc\",\"x1\":1094,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8450},{\"id\":1212,\"y2\":-8609,\"x2\":1096,\"monsterTypeLabel\":\"murloc\",\"x1\":1584,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8305},{\"id\":1214,\"y2\":-8726,\"x2\":1108,\"monsterTypeLabel\":\"murloc\",\"x1\":1639,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8349},{\"id\":1215,\"y2\":-8812,\"x2\":1198,\"monsterTypeLabel\":\"murloc\",\"x1\":1694,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8399},{\"id\":1216,\"y2\":-8976,\"x2\":1231,\"monsterTypeLabel\":\"murloc\",\"x1\":1775,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8478},{\"id\":1217,\"y2\":-9062,\"x2\":1314,\"monsterTypeLabel\":\"murloc\",\"x1\":1847,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8542},{\"id\":1218,\"y2\":-9140,\"x2\":1403,\"monsterTypeLabel\":\"murloc\",\"x1\":1880,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8723},{\"id\":1219,\"y2\":-9189,\"x2\":1572,\"monsterTypeLabel\":\"murloc\",\"x1\":1959,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8789},{\"id\":1220,\"y2\":-9430,\"x2\":1475,\"monsterTypeLabel\":\"murloc\",\"x1\":1983,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8972},{\"id\":1221,\"y2\":-9556,\"x2\":1476,\"monsterTypeLabel\":\"murloc\",\"x1\":1984,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9090},{\"id\":1223,\"y2\":-9712,\"x2\":1989,\"monsterTypeLabel\":\"murloc\",\"x1\":1597,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9225},{\"id\":1224,\"y2\":-9812,\"x2\":1906,\"monsterTypeLabel\":\"murloc\",\"x1\":1515,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9296},{\"id\":1225,\"y2\":-10548,\"x2\":1995,\"monsterTypeLabel\":\"murloc\",\"x1\":1964,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10188},{\"id\":1226,\"y2\":-10490,\"x2\":1709,\"monsterTypeLabel\":\"murloc\",\"x1\":2131,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10247},{\"id\":1230,\"y2\":-11398,\"x2\":1483,\"monsterTypeLabel\":\"murloc\",\"x1\":1848,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11407},{\"id\":1231,\"y2\":-11690,\"x2\":1352,\"monsterTypeLabel\":\"murloc\",\"x1\":1854,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11501},{\"id\":1232,\"y2\":-11885,\"x2\":1459,\"monsterTypeLabel\":\"murloc\",\"x1\":1882,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11548},{\"id\":1233,\"y2\":-11967,\"x2\":1903,\"monsterTypeLabel\":\"murloc\",\"x1\":1919,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11573},{\"id\":1242,\"y2\":-11855,\"x2\":4696,\"monsterTypeLabel\":\"murloc\",\"x1\":4696,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11440},{\"id\":1243,\"y2\":-11440,\"x2\":4809,\"monsterTypeLabel\":\"murloc\",\"x1\":4809,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11855},{\"id\":1245,\"y2\":-11984,\"x2\":5001,\"monsterTypeLabel\":\"murloc\",\"x1\":5001,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11313},{\"id\":1246,\"y2\":-11965,\"x2\":5103,\"monsterTypeLabel\":\"murloc\",\"x1\":5135,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11328},{\"id\":1249,\"y2\":-11967,\"x2\":5245,\"monsterTypeLabel\":\"murloc\",\"x1\":5225,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11328},{\"id\":1250,\"y2\":-11323,\"x2\":5354,\"monsterTypeLabel\":\"murloc\",\"x1\":5342,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11972},{\"id\":1254,\"y2\":-11441,\"x2\":2668,\"monsterTypeLabel\":\"murloc\",\"x1\":2668,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11856},{\"id\":1263,\"y2\":-11847,\"x2\":3993,\"monsterTypeLabel\":\"murloc\",\"x1\":4001,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11453},{\"id\":1267,\"y2\":-11441,\"x2\":3479,\"monsterTypeLabel\":\"murloc\",\"x1\":3479,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11856},{\"id\":1269,\"y2\":-11855,\"x2\":3677,\"monsterTypeLabel\":\"murloc\",\"x1\":3708,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11460},{\"id\":1270,\"y2\":-11845,\"x2\":2499,\"monsterTypeLabel\":\"murloc\",\"x1\":2488,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11455},{\"id\":1274,\"y2\":-11453,\"x2\":2138,\"monsterTypeLabel\":\"murloc\",\"x1\":2140,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11855},{\"id\":1279,\"y2\":-10569,\"x2\":1998,\"monsterTypeLabel\":\"murloc\",\"x1\":1668,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10171},{\"id\":1288,\"y2\":-11127,\"x2\":2259,\"monsterTypeLabel\":\"murloc\",\"x1\":2057,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10801},{\"id\":1289,\"y2\":-11237,\"x2\":2148,\"monsterTypeLabel\":\"murloc\",\"x1\":1930,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10916},{\"id\":1295,\"y2\":-11324,\"x2\":1937,\"monsterTypeLabel\":\"murloc\",\"x1\":2365,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10921},{\"id\":1379,\"y2\":-9572,\"x2\":1983,\"monsterTypeLabel\":\"murloc\",\"x1\":1681,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9816},{\"id\":1521,\"y2\":-9976,\"x2\":-667,\"monsterTypeLabel\":\"murloc\",\"x1\":-976,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9726},{\"id\":1522,\"y2\":-10092,\"x2\":-780,\"monsterTypeLabel\":\"murloc\",\"x1\":-1072,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9817},{\"id\":1528,\"y2\":-9718,\"x2\":-2140,\"monsterTypeLabel\":\"murloc\",\"x1\":-1659,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10215},{\"id\":1530,\"y2\":-9773,\"x2\":-2210,\"monsterTypeLabel\":\"murloc\",\"x1\":-1719,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10286},{\"id\":1532,\"y2\":-9841,\"x2\":-2264,\"monsterTypeLabel\":\"murloc\",\"x1\":-1787,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10338},{\"id\":1533,\"y2\":-10399,\"x2\":-1847,\"monsterTypeLabel\":\"murloc\",\"x1\":-2342,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9907},{\"id\":1534,\"y2\":-9975,\"x2\":-2387,\"monsterTypeLabel\":\"murloc\",\"x1\":-1925,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10477},{\"id\":1535,\"y2\":-10562,\"x2\":-2023,\"monsterTypeLabel\":\"murloc\",\"x1\":-2485,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10065},{\"id\":1541,\"y2\":-8323,\"x2\":-1052,\"monsterTypeLabel\":\"murloc\",\"x1\":-1391,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7945},{\"id\":1542,\"y2\":-8435,\"x2\":-1076,\"monsterTypeLabel\":\"murloc\",\"x1\":-1521,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-7980},{\"id\":1543,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-427,-841,-1256],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-7693,-7682,-7670]},{\"id\":1544,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-1375,-932,-489],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-7911,-7901,-7890]},{\"id\":1545,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-1050,-1066,-1082],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-8321,-7912,-7503]},{\"id\":1548,\"y2\":-8521,\"x2\":-1066,\"monsterTypeLabel\":\"murloc\",\"x1\":-1600,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8040},{\"id\":1549,\"y2\":-8095,\"x2\":-1656,\"monsterTypeLabel\":\"murloc\",\"x1\":-1109,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8616},{\"id\":1550,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-1724,-1430,-1136],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-8151,-8405,-8658]},{\"id\":1551,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-1201,-1479,-1758],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-8724,-8458,-8192]},{\"id\":1552,\"y2\":-8768,\"x2\":-1250,\"monsterTypeLabel\":\"murloc\",\"x1\":-1811,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8250},{\"id\":1553,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-1314,-1592,-1871],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-8828,-8562,-8295]},{\"id\":1554,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-1932,-1651,-1370],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-8345,-8613,-8882]},{\"id\":1555,\"y2\":-8433,\"x2\":-1980,\"monsterTypeLabel\":\"murloc\",\"x1\":-1514,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8916},{\"id\":1558,\"y2\":-8686,\"x2\":-1985,\"monsterTypeLabel\":\"murloc\",\"x1\":-1653,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9024},{\"id\":1564,\"y2\":-9654,\"x2\":-1834,\"monsterTypeLabel\":\"murloc\",\"x1\":-2118,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9527},{\"id\":1565,\"y2\":-9456,\"x2\":-1827,\"monsterTypeLabel\":\"murloc\",\"x1\":-2126,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9337},{\"id\":1566,\"y2\":-9227,\"x2\":-1828,\"monsterTypeLabel\":\"murloc\",\"x1\":-2124,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9128},{\"id\":1568,\"y2\":-10180,\"x2\":-1496,\"monsterTypeLabel\":\"murloc\",\"x1\":-1610,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9921},{\"id\":1569,\"y2\":-10182,\"x2\":-1327,\"monsterTypeLabel\":\"murloc\",\"x1\":-1447,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9911},{\"id\":1570,\"y2\":-10186,\"x2\":-1153,\"monsterTypeLabel\":\"murloc\",\"x1\":-1254,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9915},{\"id\":1571,\"y2\":-10187,\"x2\":-937,\"monsterTypeLabel\":\"murloc\",\"x1\":-1141,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9889},{\"id\":1572,\"y2\":-11969,\"x2\":6162,\"monsterTypeLabel\":\"murloc\",\"x1\":6150,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11322},{\"id\":1573,\"y2\":-11320,\"x2\":6264,\"monsterTypeLabel\":\"murloc\",\"x1\":6278,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11973},{\"id\":1574,\"y2\":-11973,\"x2\":6406,\"monsterTypeLabel\":\"murloc\",\"x1\":6393,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11325},{\"id\":1575,\"y2\":-11318,\"x2\":6523,\"monsterTypeLabel\":\"murloc\",\"x1\":6530,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11980},{\"id\":1576,\"y2\":-11973,\"x2\":6658,\"monsterTypeLabel\":\"murloc\",\"x1\":6656,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11320},{\"id\":1577,\"y2\":-11322,\"x2\":6781,\"monsterTypeLabel\":\"murloc\",\"x1\":6783,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11968},{\"id\":1578,\"y2\":-11973,\"x2\":6894,\"monsterTypeLabel\":\"murloc\",\"x1\":6909,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11322},{\"id\":1579,\"y2\":-11335,\"x2\":7051,\"monsterTypeLabel\":\"murloc\",\"x1\":7042,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11966},{\"id\":1581,\"y2\":-11969,\"x2\":7147,\"monsterTypeLabel\":\"murloc\",\"x1\":7164,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11315},{\"id\":1582,\"y2\":-11858,\"x2\":7313,\"monsterTypeLabel\":\"murloc\",\"x1\":7331,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11445},{\"id\":1583,\"y2\":-11852,\"x2\":5539,\"monsterTypeLabel\":\"murloc\",\"x1\":5527,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11438},{\"id\":1584,\"y2\":-11851,\"x2\":5993,\"monsterTypeLabel\":\"murloc\",\"x1\":5990,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11440},{\"id\":1585,\"y2\":-11852,\"x2\":5893,\"monsterTypeLabel\":\"murloc\",\"x1\":5658,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11431},{\"id\":1586,\"y2\":-11845,\"x2\":5635,\"monsterTypeLabel\":\"murloc\",\"x1\":5879,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11438},{\"id\":1587,\"y2\":-11860,\"x2\":5749,\"monsterTypeLabel\":\"murloc\",\"x1\":5764,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11438},{\"id\":1588,\"y2\":-8385,\"x2\":920,\"monsterTypeLabel\":\"murloc\",\"x1\":1349,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-8006},{\"id\":1590,\"monsterTypeLabel\":\"murloc\",\"xArr\":[3406,3077,2748],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-11375,-11660,-11946]},{\"id\":1591,\"monsterTypeLabel\":\"murloc\",\"xArr\":[2742,3064,3385],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-11355,-11649,-11944]},{\"id\":1592,\"y2\":-11980,\"x2\":2915,\"monsterTypeLabel\":\"murloc\",\"x1\":2925,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11319},{\"id\":1593,\"y2\":-11986,\"x2\":3212,\"monsterTypeLabel\":\"murloc\",\"x1\":3219,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-11321},{\"id\":1601,\"y\":-9889,\"x\":-1820,\"angle\":215,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1602,\"y\":-9923,\"x\":-1852,\"angle\":215,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1603,\"y\":-9953,\"x\":-1888,\"angle\":215,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1604,\"y\":-9993,\"x\":-1921,\"angle\":215,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1605,\"y\":-10031,\"x\":-1960,\"angle\":215,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1606,\"y\":-10065,\"x\":-1998,\"angle\":215,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1609,\"y\":-10106,\"x\":-2037,\"angle\":215,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1610,\"y\":-10144,\"x\":-2077,\"angle\":215,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1611,\"y\":-10173,\"x\":-2113,\"angle\":215,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1612,\"y\":-10213,\"x\":-2152,\"angle\":215,\"monsterClassName\":\"MonsterNoMove\",\"monsterTypeLabel\":\"shadow\"},{\"id\":1615,\"y2\":-10473,\"x2\":1038,\"monsterTypeLabel\":\"murloc\",\"x1\":1257,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10272},{\"id\":1616,\"y2\":-10225,\"x2\":913,\"monsterTypeLabel\":\"murloc\",\"x1\":1170,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-10045},{\"id\":1617,\"y2\":-9930,\"x2\":742,\"monsterTypeLabel\":\"murloc\",\"x1\":1010,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9756},{\"id\":1618,\"y2\":-9562,\"x2\":2,\"monsterTypeLabel\":\"murloc\",\"x1\":-33,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9138},{\"id\":1620,\"y2\":-9934,\"x2\":-492,\"monsterTypeLabel\":\"murloc\",\"x1\":-840,\"monsterClassName\":\"MonsterSimplePatrol\",\"y1\":-9463},{\"id\":1622,\"monsterTypeLabel\":\"murloc\",\"xArr\":[-948,-942,-936],\"mode\":\"string\",\"monsterClassName\":\"MonsterMultiplePatrols\",\"yArr\":[-7487,-7894,-8302]}],\"visibilities\":[],\"portalMobs\":[],\"end\":{\"maxY\":-11646.094726562,\"minX\":7937.2416992188,\"minY\":-11646.094726562,\"maxX\":7937.2416992188},\"nbLives\":1,\"meteors\":[],\"start\":{\"minX\":-2047.2802734375,\"maxX\":-2043.2445068359,\"maxY\":-11389.888671875,\"minY\":-11519.71875,\"facing\":0},\"circleMobs\":[],\"clearMobs\":[],\"staticSlides\":[{\"angle\":360,\"speed\":750,\"x3\":2445,\"y3\":-11411,\"x1\":2177,\"y1\":-11434,\"y4\":-11897,\"x4\":2445,\"x2\":2222,\"y2\":-11577},{\"angle\":360,\"speed\":750,\"x3\":2452,\"y3\":-11292,\"x1\":2180,\"y1\":-11679,\"y4\":-12080,\"x4\":2452,\"x2\":2237,\"y2\":-11849},{\"angle\":360,\"speed\":750,\"x3\":3976,\"y3\":-11369,\"x1\":3720,\"y1\":-11425,\"y4\":-11896,\"x4\":3976,\"x2\":3781,\"y2\":-11577},{\"angle\":360,\"speed\":750,\"x3\":3980,\"y3\":-11254,\"x1\":3722,\"y1\":-11686,\"y4\":-11997,\"x4\":3980,\"x2\":3771,\"y2\":-11865}]}],\"casterTypes\":[],\"monsterTypes\":[{\"height\":-1,\"unitTypeId\":\"hpea\",\"label\":\"tp\",\"speed\":400,\"immolationRadius\":80,\"scale\":0.0010000000474975,\"isClickable\":false,\"nbMeteorsToKill\":1},{\"height\":-1,\"unitTypeId\":\"hpea\",\"label\":\"tpt\",\"speed\":400,\"immolationRadius\":0,\"scale\":0.0010000000474975,\"isClickable\":false,\"nbMeteorsToKill\":1},{\"height\":-1,\"unitTypeId\":\"h000\",\"label\":\"murloc\",\"speed\":360,\"immolationRadius\":45,\"scale\":1.3000000715256,\"isClickable\":false,\"nbMeteorsToKill\":1},{\"height\":-1,\"unitTypeId\":\"h008\",\"label\":\"tank\",\"speed\":500,\"immolationRadius\":65,\"scale\":1.3000000715256,\"isClickable\":false,\"nbMeteorsToKill\":1},{\"height\":-1,\"unitTypeId\":\"h006\",\"label\":\"tank1\",\"speed\":250,\"immolationRadius\":55,\"scale\":1,\"isClickable\":false,\"nbMeteorsToKill\":1},{\"height\":-1,\"unitTypeId\":\"hpea\",\"label\":\"shadow\",\"speed\":400,\"immolationRadius\":35,\"scale\":0.0010000000474975,\"isClickable\":false,\"nbMeteorsToKill\":1}],\"gameData\":{\"gravity\":-45,\"USE_VTOTO_SLIDE_LOGIC\":true,\"coopCircles\":true,\"CAN_TURN_IN_AIR\":false}}")
end
onGlobalInit(setGameData)
function Trig_Giving_making_rights_Actions()
-- giving admin rights to the boss
for i = 0, 23, 1
do
if (GetPlayerName(Player(i)) == "ImNotCrazy01#2445" or GetPlayerName(Player(i)) == "Freazy#2752") then
MEC_core.getEscapers():get(i):setIsTrueMaximaxou(true)
end
end
end
onGlobalInit(Trig_Giving_making_rights_Actions)