-- Copyright (c) 2019-2022 David Vogel -- -- This software is released under the MIT License. -- https://opensource.org/licenses/MIT function SplitStringByLength(string, length) local chunks = {} for i = 1, #string, length do table.insert(chunks, string:sub(i, i + length - 1)) end return chunks end -- Improved version of GamePrint, that behaves more like print. local oldGamePrint = GamePrint function GamePrint(...) local arg = {...} local result = "" for i, v in ipairs(arg) do result = result .. tostring(v) .. " " end for line in result:gmatch("[^\r\n]+") do for i, v in ipairs(SplitStringByLength(line, 100)) do oldGamePrint(v) end end end function getPlayer() local players = EntityGetWithTag("player_unit") if players == nil or #players < 1 then return nil end return players[1] end function getPlayerPos() return EntityGetTransform(getPlayer()) end function teleportPlayer(x, y) EntitySetTransform(getPlayer(), x, y) end function setPlayerHP(hp) local damagemodels = EntityGetComponent(getPlayer(), "DamageModelComponent") if damagemodels ~= nil then for i, damagemodel in ipairs(damagemodels) do ComponentSetValue(damagemodel, "max_hp", hp) ComponentSetValue(damagemodel, "hp", hp) end end end function addEffectToEntity(entity, gameEffect) local gameEffectComp = GetGameEffectLoadTo(entity, gameEffect, true) if gameEffectComp ~= nil then ComponentSetValue(gameEffectComp, "frames", "-1") end end function addPerkToPlayer(perkID) local playerEntity = getPlayer() local x, y = getPlayerPos() local perkData = get_perk_with_id(perk_list, perkID) -- Add effect addEffectToEntity(playerEntity, perkData.game_effect) -- Add ui icon etc --[[local perkIcon = EntityCreateNew("") EntityAddComponent( perkIcon, "UIIconComponent", { name = perkData.ui_name, description = perkData.ui_description, icon_sprite_file = perkData.ui_icon } ) EntityAddChild(playerEntity, perkIcon)]] --local effect = EntityLoad("data/entities/misc/effect_protection_all.xml", x, y) --EntityAddChild(playerEntity, effect) end function fileExists(fileName) local f = io.open(fileName, "r") if f ~= nil then io.close(f) return true else return false end end function progressBarString(progress, look) local factor = progress.Progress / progress.Max local count = math.ceil(look.BarLength * factor) local barString = string.rep(look.CharFull, count) .. string.rep(look.CharEmpty, look.BarLength - count) return string.format(look.Format, barString, progress.Progress, progress.Max, factor * 100) end ---Returns a new table with all arguments stored into keys `1`, `2`, etc. and with a field `"n"` with the total number of arguments. ---@param ... any ---@return table function table.pack(...) t = {...} t.n = select("#", ...) return t end