slot0 = UnityEngine function flog(slot0, slot1) if slot0 and slot1 and pg.ConnectionMgr.GetInstance():isConnected() then pg.m02:sendNotification(GAME.SEND_CMD, { cmd = "log", arg1 = slot0, arg2 = slot1 }) end end function throttle(slot0, slot1, slot2) slot3, slot4, slot5 = nil slot6 = 0 function slot7() uv0 = uv1 and Time.unscaledTime or 0 uv2 = nil uv3 = uv4(unpack(uv5, 1, uv5.len)) if not uv2 then uv5 = nil end end return function (...) slot0 = Time.unscaledTime if not uv0 and not uv1 then uv0 = slot0 end uv3 = { len = select("#", ...), ... } if uv2 - (slot0 - uv0) <= 0 or uv2 < slot1 then if uv4 then uv4:Stop() uv4 = nil end uv0 = slot0 uv5 = uv6(unpack(uv3, 1, uv3.len)) if not uv4 then uv3 = nil end elseif not uv4 and uv1 then uv4 = Timer.New(uv7, slot1, 1) uv4:Start() end return uv5 end end function debounce(slot0, slot1, slot2) slot3, slot4, slot5, slot6, slot7 = nil function slot7() if Time.unscaledTime - uv0 < uv1 and slot0 > 0 then uv2 = Timer.New(uv3, uv1 - slot0, 1) uv2:Start() else uv2 = nil if not uv4 then uv5 = uv6(unpack(uv7, 1, uv7.len)) if not uv2 then uv7 = nil end else uv4 = false end end end return function (...) uv0 = { len = select("#", ...), ... } uv1 = Time.unscaledTime slot0 = uv2 and not uv3 if not uv3 then uv3 = Timer.New(uv4, uv5, 1) uv3:Start() end if slot0 then uv6 = uv7(unpack(uv0, 1, uv0.len)) uv0 = nil end return uv6 end end function createLog(slot0, slot1) if LOG and slot1 then return function (...) print(uv0 .. ": ", ...) end else print(slot0 .. ": log disabled") return function () end end end function getProxy(slot0) return pg.m02:retrieveProxy(slot0.__cname) end function getBackYardProxy(slot0) return pg.backyard:retrieveProxy(slot0.__cname) end function LoadAndInstantiateAsync(slot0, slot1, slot2, slot3, slot4) slot5, slot1 = HXSet.autoHxShift(slot0 .. "/", slot1) ResourceMgr.Inst:getAssetAsync(slot5 .. slot1, slot1, uv0.Events.UnityAction_UnityEngine_Object(function (slot0) uv0(Instantiate(slot0)) end), defaultValue(slot3, true), defaultValue(slot4, true)) end function LoadAndInstantiateSync(slot0, slot1, slot2, slot3) slot4, slot1 = HXSet.autoHxShift(slot0 .. "/", slot1) return Instantiate(ResourceMgr.Inst:getAssetSync(slot4 .. slot1, slot1, defaultValue(slot2, true), defaultValue(slot3, true))) end slot1 = {} function LoadSprite(slot0, slot1) slot2, slot3 = HXSet.autoHxShiftPath(slot0, slot1) return ResourceMgr.Inst:getAssetSync(slot2, slot3 or "", typeof(Sprite), true, false) end function LoadSpriteAtlasAsync(slot0, slot1, slot2) slot3, slot4 = HXSet.autoHxShiftPath(slot0, slot1) ResourceMgr.Inst:getAssetAsync(slot3, slot4 or "", typeof(Sprite), uv0.Events.UnityAction_UnityEngine_Object(function (slot0) uv0(slot0) end), true, false) end function LoadSpriteAsync(slot0, slot1) LoadSpriteAtlasAsync(slot0, nil, slot1) end function LoadAny(slot0, slot1, slot2) slot3, slot4 = HXSet.autoHxShiftPath(slot0, slot1) return ResourceMgr.Inst:getAssetSync(slot3, slot4, slot2, true, false) end function LoadAnyAsync(slot0, slot1, slot2, slot3) slot4, slot5 = HXSet.autoHxShiftPath(slot0, slot1) return ResourceMgr.Inst:getAssetAsync(slot4, slot5, slot2, slot3, true, false) end function LoadImageSpriteAtlasAsync(slot0, slot1, slot2, slot3) slot4 = slot2:GetComponent(typeof(Image)) slot4.enabled = false uv0[slot4] = slot0 LoadSpriteAtlasAsync(slot0, slot1, function (slot0) if not IsNil(uv0) and uv1[uv0] == uv2 then uv1[uv0] = nil uv0.enabled = true uv0.sprite = slot0 if uv3 then uv0:SetNativeSize() end end end) end function LoadImageSpriteAsync(slot0, slot1, slot2) LoadImageSpriteAtlasAsync(slot0, nil, slot1, slot2) end function GetSpriteFromAtlas(slot0, slot1) slot3, slot4 = HXSet.autoHxShiftPath(slot0, slot1) PoolMgr.GetInstance():GetSprite(slot3, slot4, false, function (slot0) uv0 = slot0 end) return nil end function GetSpriteFromAtlasAsync(slot0, slot1, slot2) slot3, slot4 = HXSet.autoHxShiftPath(slot0, slot1) PoolMgr.GetInstance():GetSprite(slot3, slot4, true, function (slot0) uv0(slot0) end) end function GetImageSpriteFromAtlasAsync(slot0, slot1, slot2, slot3) slot0, slot1 = HXSet.autoHxShiftPath(slot0, slot1) slot4 = slot2:GetComponent(typeof(Image)) slot4.enabled = false uv0[slot4] = slot0 .. slot1 GetSpriteFromAtlasAsync(slot0, slot1, function (slot0) if not IsNil(uv0) and uv1[uv0] == uv2 .. uv3 then uv1[uv0] = nil uv0.enabled = true uv0.sprite = slot0 if uv4 then uv0:SetNativeSize() end end end) end function SetAction(slot0, slot1) slot0:GetComponent(typeof(SpineAnimUI)):SetAction(slot1, 0) end function emojiText(slot0, slot1) slot2 = ResourceMgr.Inst:loadAssetBundleSync("emojis") slot4 = GetComponent(slot0, "MeshRenderer") slot5 = Shader.Find("Unlit/Transparent") slot8 = {} slot9 = 0 GetComponent(slot0, "TextMesh").text = string.gsub(slot1, "#(%d+)#", function (slot0) if not uv0[slot0] then uv1 = uv1 + 1 slot2 = Material.New(uv2) slot2.mainTexture = ResourceMgr.Inst:LoadAssetSync(uv3, "emoji" .. slot0, false, false) table.insert(uv4, slot2) uv0[slot0] = uv1 slot1 = uv1 end return "" end) slot4.materials = { slot4.materials[0] } ResourceMgr.Inst:ClearBundleRef("emojis", false, false) end function setPaintingImg(slot0, slot1) setImageSprite(slot0, LoadSprite("painting/" .. slot1) or LoadSprite("painting/unknown")) resetAspectRatio(slot0) end function setPaintingPrefab(slot0, slot1, slot2, slot3) slot4 = findTF(slot0, "fitter") removeAllChildren(slot4) slot5 = GetOrAddComponent(slot4, "PaintingScaler") slot5.FrameName = slot2 or "" slot5.Tween = 1 slot6 = slot1 if not slot3 and PathMgr.FileExists(PathMgr.getAssetBundle("painting/" .. slot1 .. "_n")) and PlayerPrefs.GetInt("paint_hide_other_obj_" .. slot1, 0) ~= 0 then slot1 = slot1 .. "_n" end PoolMgr.GetInstance():GetPainting(slot1, false, function (slot0) setParent(slot0, uv0, false) if not IsNil(findTF(slot0, "Touch")) then setActive(slot1, false) end if not IsNil(findTF(slot0, "hx")) then setActive(slot2, HXSet.isHx()) end ShipExpressionHelper.SetExpression(uv0:GetChild(0), uv1) end) end slot2 = {} function setPaintingPrefabAsync(slot0, slot1, slot2, slot3, slot4) slot5 = findTF(slot0, "fitter") removeAllChildren(slot5) slot6 = GetOrAddComponent(slot5, "PaintingScaler") slot6.FrameName = slot2 or "" slot6.Tween = 1 slot7 = slot1 if PathMgr.FileExists(PathMgr.getAssetBundle("painting/" .. slot1 .. "_n")) and PlayerPrefs.GetInt("paint_hide_other_obj_" .. slot1, 0) ~= 0 then slot1 = slot1 .. "_n" end uv0[slot0] = slot1 PoolMgr.GetInstance():GetPainting(slot1, true, function (slot0) if IsNil(uv0) or uv1[uv0] ~= uv2 then PoolMgr.GetInstance():ReturnPainting(uv2, slot0) else setParent(slot0, uv3, false) uv1[uv0] = nil ShipExpressionHelper.SetExpression(slot0, uv4) end if not IsNil(findTF(slot0, "Touch")) then setActive(slot1, false) end if not IsNil(findTF(slot0, "hx")) then setActive(slot2, HXSet.isHx()) end if uv5 then uv5() end end) end function retPaintingPrefab(slot0, slot1) if slot0 and slot1 then if findTF(slot0, "fitter") and slot2.childCount > 0 and not IsNil(slot2:GetChild(0)) then if not IsNil(findTF(slot3, "Touch")) then eachChild(slot4, function (slot0) if not IsNil(slot0:GetComponent(typeof(Button))) then removeOnButton(slot0) end end) end PoolMgr.GetInstance():ReturnPainting(string.gsub(slot3.name, "%(Clone%)", ""), slot3.gameObject) end uv0[slot0] = nil end end function numberFormat(slot0, slot1) slot2 = "" slot4 = string.len(tostring(slot0)) if slot1 == nil then slot1 = "," end for slot8 = 1, slot4 do if slot8 % 3 == 0 and slot4 - slot8 ~= 0 then slot2 = tostring(slot1) .. (string.char(string.byte(slot3, slot4 + 1 - slot8)) .. slot2) end end return slot2 end function usMoneyFormat(slot0, slot1) if slot0 % 100 > 0 then if math.floor(slot0 / 100) < 1 then return "0." .. (slot2 > 10 and slot2 or "0" .. slot2) else return numberFormat(slot3, slot1) .. "." .. slot2 end else return numberFormat(slot3, slot1) end end function setColorCount(slot0, slot1, slot2) setText(slot0, string.format(slot1 < slot2 and "%d/%d" or "%d/%d", slot1, slot2)) end function setColorStr(slot0, slot1) return "" .. slot0 .. "" end function setSizeStr(slot0, slot1) slot2, slot3 = string.gsub(slot0, "[<]size=%d+[>]", "") if slot3 == 0 then slot2 = "" .. slot2 .. "" end return slot2 end function playBGM(slot0) pg.CriMgr.GetInstance():PlayBGM(slot0) end function playStory(slot0, slot1) pg.NewStoryMgr.GetInstance():Play(slot0, slot1) end function errorMessage(slot0) if ERROR_MESSAGE[slot0] == nil then slot1 = ERROR_MESSAGE[9999] .. ":" .. slot0 end return slot1 end function errorTip(slot0, slot1, ...) slot3 = nil if pg.gametip[slot0 .. "_error_" .. slot1] then return ((not pg.gametip[slot0 .. "_error"] or slot2.tip) and pg.gametip.common_error.tip) .. i18n(slot4, ...) elseif pg.gametip["common_error_" .. slot1] then return slot3 .. i18n(slot4, ...) else return slot3 .. slot1 .. ":" .. errorMessage(slot1) end end function colorNumber(slot0, slot1) if #{} > 0 then slot4 = 0 return string.gsub(string.gsub(string.gsub(slot0, "", function (slot0) table.insert(uv0, slot0) return uv1 end), "%d+%.?%d*%%*", function (slot0) return "" .. slot0 .. "" end), "@COLOR_SCOPE", function (slot0) uv0 = uv0 + 1 return uv1[uv0] end) else return slot0 end end function getBounds(slot0) slot1 = LuaHelper.GetWorldCorners(rtf(slot0)) slot2 = Bounds.New(slot1[0], Vector3.zero) slot2:Encapsulate(slot1[2]) return slot2 end function slot3(slot0, slot1) slot0.localScale = Vector3.one slot0.anchorMin = Vector2.zero slot0.anchorMax = Vector2.one slot0.offsetMin = Vector2(slot1[1], slot1[2]) slot0.offsetMax = Vector2(-slot1[3], -slot1[4]) end slot4 = { frame04 = { -8, -8.5, -8, -8 }, frame05 = { -8, -8.5, -8, -8 }, frame14 = { -8, -8.5, -8, -8 }, frame6 = { -16.5, -2.5, -3.5, -16.5 }, frame7 = { -16.5, -2.5, -3.5, -16.5 }, frame_npc = { -4, -4, -4, -4 }, frame_prop = { -11, -12, -14, -14 }, frame_prop_meta = { -11, -12, -14, -14 }, other = { -2.5, -4.5, -3, -4.5 } } function setFrame(slot0, slot1, slot2) slot1 = tostring(slot1) setImageSprite(slot0, GetSpriteFromAtlas("weaponframes", "frame")) slot3 = findTF(slot0, "specialFrame") if slot2 or #slot1 > 1 or #slot1 == 1 and tonumber(slot1) > 5 then setImageColor(slot0, Color.white) if not slot3 then removeAllChildren(cloneTplTo(slot0, slot0, "specialFrame")) end slot2 = slot2 or "frame" .. slot1 uv0(slot3, uv1[slot2] or uv1.other) setImageSprite(slot3, GetSpriteFromAtlas("weaponframes", slot2)) setActive(slot3, true) else setImageColor(slot0, shipRarity2FrameColor(tonumber(slot1) + 1)) if slot3 then setActive(slot3, false) end end end function slot5(slot0, slot1, slot2, slot3) slot4 = findTF(slot0, "icon_bg/frame") function slot5(slot0, slot1) if uv0:Find(slot0 .. "(Clone)") then setActive(slot2, slot1) elseif slot1 then LoadAndInstantiateAsync("ui", string.lower(slot0), function (slot0) if IsNil(uv0) or uv1:Find(uv2 .. "(Clone)") then Object.Destroy(slot0) else setParent(slot0, uv1) tf(slot0):SetAsFirstSibling() setActive(slot0, uv3) end end) end end slot6 = nil if slot3 then slot6 = { [5] = { name = "Item_duang5", active = slot2.fromAwardLayer and slot1 >= 5 } } else slot6 = { [6] = { name = "IconColorful", active = not slot2.noIconColorful and slot1 == 6 } } end for slot10, slot11 in pairs(slot6) do slot5(slot11.name, slot11.active) end end function slot6(slot0, slot1, slot2) slot3 = findTF(slot0, "icon_bg/startpl") if findTF(slot0, "icon_bg/stars") and slot3 then setActive(slot4, false) setActive(slot3, false) end if not slot4 or not slot1 then return end slot8 = slot4.childCount for slot8 = 1, math.max(slot2, slot8) do setActive(slot4.childCount < slot8 and cloneTplTo(slot3, slot4) or slot4:GetChild(slot8 - 1), slot8 <= slot2) end setActive(slot4, true) end function slot7(slot0, slot1) if not IsNil(findTF(slot0, "icon_bg/slv")) then setActive(slot2, slot1 > 0) setText(findTF(slot2, "Text"), slot1) end end function slot8(slot0, slot1, slot2) if not IsNil(findTF(slot0, "name")) then setText(slot3, slot1) if slot2.hideName then setActive(slot3, false) end end end function slot9(slot0, slot1) if not IsNil(findTF(slot0, "icon_bg/count")) then setText(slot2, slot1 and (type(slot1) ~= "number" or slot1 > 0) and slot1 or "") end end function updateEquipment(slot0, slot1, slot2) slot2 = slot2 or {} slot3 = EquipmentRarity.Rarity2Print(slot1.config.rarity) setImageSprite(findTF(slot0, "icon_bg"), GetSpriteFromAtlas("weaponframes", "bg" .. slot3)) setFrame(findTF(slot0, "icon_bg/frame"), slot3) slot4 = findTF(slot0, "icon_bg/icon") uv0(slot4, { 16, 16, 16, 16 }) GetImageSpriteFromAtlasAsync("equips/" .. slot1.config.icon, "", slot4) uv1(slot0, true, slot1.config.rarity) uv2(slot0, slot1.config.level - 1) uv3(slot0, slot1.config.name, slot2) uv4(slot0, slot1.count) uv5(slot0, slot1.config.rarity, slot2) end function updateItem(slot0, slot1, slot2) slot2 = slot2 or {} slot3 = pg.item_data_statistics[slot1.id] setImageSprite(findTF(slot0, "icon_bg"), GetSpriteFromAtlas("weaponframes", "bg" .. ItemRarity.Rarity2Print(slot3.rarity))) slot5 = nil if slot3.type == 9 then slot5 = "frame6" end setFrame(findTF(slot0, "icon_bg/frame"), slot4, slot5) GetImageSpriteFromAtlasAsync(slot1.icon or slot3.icon, "", findTF(slot0, "icon_bg/icon")) uv0(slot0, false) uv1(slot0, HXSet.hxLan(slot3.name), slot2) uv2(slot0, slot3.rarity + 1, slot2) end function updateWorldItem(slot0, slot1, slot2) slot2 = slot2 or {} slot4 = ItemRarity.Rarity2Print(pg.world_item_data_template[slot1.id].rarity) setImageSprite(findTF(slot0, "icon_bg"), GetSpriteFromAtlas("weaponframes", "bg" .. slot4)) setFrame(findTF(slot0, "icon_bg/frame"), slot4) GetImageSpriteFromAtlasAsync(slot1.icon or slot3.icon, "", findTF(slot0, "icon_bg/icon")) uv0(slot0, false) uv1(slot0, HXSet.hxLan(slot3.name), slot2) uv2(slot0, slot3.rarity + 1, slot2) end function updateWorldCollection(slot0, slot1, slot2) slot2 = slot2 or {} slot5 = ItemRarity.Rarity2Print(4) setImageSprite(findTF(slot0, "icon_bg"), GetSpriteFromAtlas("weaponframes", "bg" .. slot5)) setFrame(findTF(slot0, "icon_bg/frame"), slot5) GetImageSpriteFromAtlasAsync("props/" .. (WorldCollectionProxy.GetCollectionType(slot1.id) == WorldCollectionProxy.WorldCollectionType.FILE and "shoucangguangdie" or "shoucangjiaojuan"), "", findTF(slot0, "icon_bg/icon")) uv0(slot0, false) uv1(slot0, WorldCollectionProxy.GetCollectionTemplate(slot1.id).name, slot2) uv2(slot0, slot4, slot2) end function updateWorldBuff(slot0, slot1, slot2) slot2 = slot2 or {} slot4 = ItemRarity.Rarity2Print(ItemRarity.Gray) setImageSprite(findTF(slot0, "icon_bg"), GetSpriteFromAtlas("weaponframes", "bg" .. slot4)) setFrame(findTF(slot0, "icon_bg/frame"), slot4) GetImageSpriteFromAtlasAsync("world/buff/" .. pg.world_SLGbuff_data[slot1].icon, "", findTF(slot0, "icon_bg/icon")) if not IsNil(slot0:Find("icon_bg/stars")) then setActive(slot6, false) end if not IsNil(findTF(slot0, "name")) then setText(slot7, HXSet.hxLan(slot3.name)) end if not IsNil(findTF(slot0, "icon_bg/count")) then SetActive(slot8, false) end end function updateShip(slot0, slot1, slot2) slot3 = slot1:rarity2bgPrint() slot4 = slot1:getPainting() slot5 = getProxy(ShipSkinProxy) if (slot2 or {}).anonymous then slot3 = "1" slot4 = "unknown" end if findTF(slot0, "icon_bg/new") then if slot2.isSkin then setActive(slot6, not slot5:hasOldNonLimitSkin(slot1.skinId)) else setActive(slot6, slot1.virgin) end end setImageSprite(findTF(slot0, "icon_bg"), GetSpriteFromAtlas("weaponframes", "bg" .. (slot2.isSkin and "-skin" or slot3))) slot8 = findTF(slot0, "icon_bg/frame") slot9 = nil if slot1.isNpc then slot9 = "frame_npc" elseif slot1.propose then if slot1:isMetaShip() then slot9 = "frame_prop_meta" else slot9 = "frame_prop" end elseif slot2.isSkin then slot9 = "frame7" end setFrame(slot8, slot3, slot9) if slot2.gray then setGray(slot7, true, true) end GetImageSpriteFromAtlasAsync(slot2.Q and "QIcon/" or "SquareIcon/" .. slot4, "", findTF(slot0, "icon_bg/icon")) if findTF(slot0, "icon_bg/lv") then setActive(slot11, not slot1.isNpc) if not slot1.isNpc and findTF(slot11, "Text") and slot1.level then setText(slot12, slot1.level) end end if findTF(slot0, "ship_type") then setActive(slot12, true) setImageSprite(slot12, GetSpriteFromAtlas("shiptype", shipType2print(slot1:getShipType()))) end if not IsNil(slot7:Find("npc")) then if slot6 and go(slot6).activeSelf then setActive(slot13, false) else setActive(slot13, slot1:isActivityNpc()) end end uv0(slot0, slot2.initStar, slot1:getStar()) uv1(slot0, slot1:getName(), slot2) uv2(slot0, slot2.isSkin and 5 or slot1:getRarity(), slot2) end function updateCommander(slot0, slot1, slot2) slot4 = ShipRarity.Rarity2Print(slot1:getRarity()) slot5 = slot1:getPainting() if (slot2 or {}).anonymous then slot4 = 1 slot5 = "unknown" end setImageSprite(findTF(slot0, "icon_bg"), GetSpriteFromAtlas("weaponframes", "bg" .. (slot2.isSkin and "-skin" or slot4))) setFrame(findTF(slot0, "icon_bg/frame"), slot4) if slot2.gray then setGray(slot6, true, true) end GetImageSpriteFromAtlasAsync(slot2.Q and "QIcon/" or "SquareIcon/" .. slot5, "", findTF(slot0, "icon_bg/icon")) if findTF(slot0, "icon_bg/lv") then setActive(slot9, true) if findTF(slot9, "Text") and slot1.level then setText(slot10, slot1.level) end end uv0(slot0, slot2.initStar, slot1:getStar()) uv1(slot0, slot1:getName(), slot2) end function updateStrategy(slot0, slot1, slot2) slot2 = slot2 or {} slot3 = slot2.isWorldBuff and pg.world_SLGbuff_data[slot1.id] or pg.strategy_data_template[slot1.id] slot4 = ItemRarity.Rarity2Print(ItemRarity.Gray) setImageSprite(findTF(slot0, "icon_bg"), GetSpriteFromAtlas("weaponframes", "bg" .. slot4)) setFrame(findTF(slot0, "icon_bg/frame"), slot4) GetImageSpriteFromAtlasAsync((slot2.isWorldBuff and "world/buff/" or "strategyicon/") .. slot3.icon, "", findTF(slot0, "icon_bg/icon")) uv0(slot0, false) uv1(slot0, HXSet.hxLan(slot3.name), slot2) uv2(slot0, 1, slot2) end function updateFurniture(slot0, slot1, slot2) slot2 = slot2 or {} slot4 = ItemRarity.Rarity2Print(pg.furniture_data_template[slot1].rarity) or ItemRarity.Gray setImageSprite(findTF(slot0, "icon_bg"), GetSpriteFromAtlas("weaponframes", "bg" .. slot4)) setFrame(findTF(slot0, "icon_bg/frame"), slot4) GetImageSpriteFromAtlasAsync("furnitureicon/" .. slot3.icon, "", findTF(slot0, "icon_bg/icon")) uv0(slot0, false) uv1(slot0, HXSet.hxLan(slot3.name), slot2) uv2(slot0, slot3.rarity + 1, slot2) end slot10 = nil function findCullAndClipWorldRect(slot0) if #slot0 == 0 then return false end for slot5 = 1, #slot0 do slot1 = rectIntersect(slot0[1].canvasRect, slot0[slot5].canvasRect) end if slot1.width <= 0 or slot1.height <= 0 then return false end uv0 = uv0 or GameObject.Find("UICamera/Canvas").transform slot2 = uv0:TransformPoint(Vector3(slot1.x, slot1.y, 0)) slot3 = uv0:TransformPoint(Vector3(slot1.x + slot1.width, slot1.y + slot1.height, 0)) return true, Vector4(slot2.x, slot2.y, slot3.x, slot3.y) end function rectIntersect(slot0, slot1) slot4 = math.max(slot0.y, slot1.y) slot5 = math.min(slot0.y + slot0.height, slot1.y + slot1.height) if math.max(slot0.x, slot1.x) <= math.min(slot0.x + slot0.width, slot1.x + slot1.width) and slot4 <= slot5 then return uv0.Rect.New(slot2, slot4, slot3 - slot2, slot5 - slot4) end return uv0.Rect.New(0, 0, 0, 0) end function getDropInfo(slot0) slot1 = {} for slot5, slot6 in ipairs(slot0) do if slot6[1] == DROP_TYPE_SHIP then table.insert(slot1, Ship.New({ configId = slot6[2] }):getConfig("name") .. "x" .. (slot6[3] or 1)) elseif slot7 == DROP_TYPE_EQUIP then table.insert(slot1, Equipment.New({ id = slot8 }):getConfig("name") .. "x" .. counts) elseif slot7 == DROP_TYPE_RESOURCE then table.insert(slot1, Item.New({ id = id2ItemId(slot8) }):getConfig("name") .. "x" .. slot9) elseif slot7 == DROP_TYPE_ITEM then table.insert(slot1, Item.New({ id = slot8 }):getConfig("name") .. "x" .. slot9) elseif slot7 == DROP_TYPE_VITEM then table.insert(slot1, Item.New({ id = slot8 }):getConfig("name") .. "x" .. slot9) elseif slot7 == DROP_TYPE_FURNITURE then table.insert(slot1, Furniture.New({ id = slot8 }):getConfig("name") .. "x" .. slot9) elseif slot7 == DROP_TYPE_STRATEGY then table.insert(slot1, strategy_data_template[slot8].name .. "x" .. slot9) elseif slot7 == DROP_TYPE_SKIN then table.insert(slot1, pg.ship_skin_template[slot8].name .. "x" .. slot9) elseif slot7 == DROP_TYPE_EQUIPMENT_SKIN then table.insert(slot1, pg.equip_skin_template[slot8].name .. "x" .. slot9) end end return table.concat(slot1, "、") end function updateDrop(slot0, slot1, slot2) slot2 = slot2 or {} slot3 = type slot4 = slot1.type or slot1.dropType slot5 = "" slot6 = "" slot8 = nil for slot12, slot13 in ipairs({ { "icon_bg/slv" }, { "icon_bg/frame/specialFrame" }, { "ship_type", DROP_TYPE_SHIP }, { "icon_bg/new", DROP_TYPE_SHIP }, { "icon_bg/npc", DROP_TYPE_SHIP } }) do slot8 = slot0:Find(slot13[1]) if slot4 ~= slot13[2] and not IsNil(slot8) then setActive(slot8, false) end end slot0:Find("icon_bg/frame"):GetComponent(typeof(Image)).enabled = true uv0(slot0, getDropRarity(slot1), slot2, true) uv1(findTF(slot0, "icon_bg/icon"), { 2, 2, 2, 2 }) if slot4 == DROP_TYPE_RESOURCE then slot9 = id2ItemId(slot1.id) slot6 = pg.item_data_statistics[slot9].display updateItem(slot0, Item.New({ id = slot9 }), slot2) elseif slot4 == DROP_TYPE_ITEM then slot6 = pg.item_data_statistics[slot1.id].display updateItem(slot0, Item.New({ id = slot1.id }), slot2) elseif slot4 == DROP_TYPE_EQUIP then slot6 = pg.equip_data_statistics[slot1.id].descrip updateEquipment(slot0, Equipment.New({ id = slot1.id }), slot2) elseif slot4 == DROP_TYPE_SHIP then slot9, slot10, slot11 = ShipWordHelper.GetWordAndCV(pg.ship_data_statistics[slot1.id].skin_id, ShipWordHelper.WORD_TYPE_DROP) slot6 = slot11 or i18n("ship_drop_desc_default") slot12 = Ship.New({ configId = slot1.id, skin_id = slot1.skinId, propose = slot1.propose }) slot12.remoulded = slot1.remoulded slot12.virgin = slot1.virgin updateShip(slot0, slot12, slot2) elseif slot4 == DROP_TYPE_NPC_SHIP then slot10, slot11, slot12 = ShipWordHelper.GetWordAndCV(pg.ship_data_statistics[getProxy(BayProxy):getShipById(slot1.id).configId].skin_id, ShipWordHelper.WORD_TYPE_DROP) slot6 = slot12 or i18n("ship_drop_desc_default") updateShip(slot0, slot9, slot2) elseif slot4 == DROP_TYPE_FURNITURE then slot6 = pg.furniture_data_template[slot1.id].describe updateFurniture(slot0, slot1.id, slot2) elseif slot4 == DROP_TYPE_STRATEGY then slot6 = (slot1.isWorldBuff and pg.world_SLGbuff_data[slot1.id] or pg.strategy_data_template[slot1.id]).desc slot2.isWorldBuff = slot1.isWorldBuff updateStrategy(slot0, Item.New({ id = slot1.id }), slot2) elseif slot4 == DROP_TYPE_SKIN then slot9, slot10, slot6 = ShipWordHelper.GetWordAndCV(slot1.id, ShipWordHelper.WORD_TYPE_DROP) slot2.isSkin = true updateShip(slot0, Ship.New({ configId = tonumber(pg.ship_skin_template[slot1.id].ship_group .. "1"), skin_id = slot1.id }), slot2) elseif slot4 == DROP_TYPE_EQUIPMENT_SKIN then slot5 = pg.equip_skin_template[slot1.id] updateEquipmentSkin(slot0, { rarity = slot5.rarity, icon = slot5.icon, name = slot5.name, count = slot1.count }, slot2) elseif slot4 == DROP_TYPE_VITEM then slot6 = pg.item_data_statistics[slot1.id].display updateItem(slot0, Item.New({ id = slot1.id }), slot2) elseif slot4 == DROP_TYPE_WORLD_ITEM then slot6 = pg.world_item_data_template[slot1.id].display updateWorldItem(slot0, WorldItem.New({ id = slot1.id }), slot2) elseif slot4 == DROP_TYPE_WORLD_COLLECTION then slot6 = WorldCollectionProxy.GetCollectionTemplate(slot1.id).name updateWorldCollection(slot0, slot1, slot2) elseif slot4 == DROP_TYPE_CHAT_FRAME then updateAttire(slot0, AttireConst.TYPE_CHAT_FRAME, pg.item_data_chat[slot1.id], slot2) elseif slot4 == DROP_TYPE_ICON_FRAME then updateAttire(slot0, AttireConst.TYPE_ICON_FRAME, pg.item_data_frame[slot1.id], slot2) elseif slot4 == DROP_TYPE_EMOJI then slot5 = pg.emoji_template[slot1.id] slot6 = slot5.item_desc updateEmoji(slot0, slot5, slot2) end slot1.cfg = slot5 slot1.desc = HXSet.hxLan(slot6) uv2(slot0, slot1.count) end function updateDropCfg(slot0) slot1 = "" slot2 = "" if (slot0.type or slot0.dropType) == DROP_TYPE_RESOURCE then slot2 = pg.item_data_statistics[id2ItemId(slot0.id)].display elseif slot3 == DROP_TYPE_ITEM then slot2 = pg.item_data_statistics[slot0.id].display elseif slot3 == DROP_TYPE_EQUIP then slot2 = pg.equip_data_statistics[slot0.id].descrip elseif slot3 == DROP_TYPE_SIREN_EQUIP then slot2 = pg.equip_data_statistics[getProxy(EquipmentProxy):getEquipmentById(slot0.id).configId].descrip elseif slot3 == DROP_TYPE_SHIP then slot4, slot5, slot6 = ShipWordHelper.GetWordAndCV(pg.ship_data_statistics[slot0.id].skin_id, ShipWordHelper.WORD_TYPE_DROP) slot2 = slot6 or i18n("ship_drop_desc_default") elseif slot3 == DROP_TYPE_NPC_SHIP then slot5, slot6, slot7 = ShipWordHelper.GetWordAndCV(pg.ship_data_statistics[getProxy(BayProxy):getShipById(slot0.id).configId].skin_id, ShipWordHelper.WORD_TYPE_DROP) slot2 = slot7 or i18n("ship_drop_desc_default") elseif slot3 == DROP_TYPE_FURNITURE then slot2 = pg.furniture_data_template[slot0.id].describe elseif slot3 == DROP_TYPE_STRATEGY then slot2 = pg.strategy_data_template[slot0.id].desc elseif slot3 == DROP_TYPE_SKIN then slot1 = pg.ship_skin_template[slot0.id] slot4, slot5, slot2 = ShipWordHelper.GetWordAndCV(slot0.id, ShipWordHelper.WORD_TYPE_DROP) elseif slot3 == DROP_TYPE_EQUIPMENT_SKIN then slot1 = pg.equip_skin_template[slot0.id] elseif slot3 == DROP_TYPE_VITEM then slot2 = pg.item_data_statistics[slot0.id].display elseif slot3 == DROP_TYPE_WORLD_ITEM then slot2 = pg.world_item_data_template[slot0.id].display elseif slot3 == DROP_TYPE_CHAT_FRAME then slot1 = pg.item_data_chat[slot0.id] elseif slot3 == DROP_TYPE_ICON_FRAME then slot1 = pg.item_data_frame[slot0.id] elseif slot3 == DROP_TYPE_EMOJI then slot2 = pg.emoji_template[slot0.id].item_desc end slot0.cfg = slot1 slot0.desc = HXSet.hxLan(slot2) end function updateAttire(slot0, slot1, slot2, slot3) slot4 = slot2 slot5 = 4 setImageSprite(findTF(slot0, "icon_bg"), GetSpriteFromAtlas("weaponframes", "bg" .. slot5)) setFrame(findTF(slot0, "icon_bg/frame"), slot5) slot6 = findTF(slot0, "icon_bg/icon") slot7 = nil if slot1 == AttireConst.TYPE_CHAT_FRAME then slot7 = "chat_frame" elseif slot1 == AttireConst.TYPE_ICON_FRAME then slot7 = "icon_frame" end GetImageSpriteFromAtlasAsync("Props/" .. slot7, "", slot6) uv0(slot0, HXSet.hxLan(slot4.name), slot3) end function updateEmoji(slot0, slot1, slot2) GetImageSpriteFromAtlasAsync("Props/" .. "icon_emoji", "", findTF(slot0, "icon_bg/icon")) slot5 = 4 setImageSprite(findTF(slot0, "icon_bg"), GetSpriteFromAtlas("weaponframes", "bg" .. slot5)) setFrame(findTF(slot0, "icon_bg/frame"), slot5) uv0(slot0, HXSet.hxLan(slot1.name), slot2) end function GetOwnedpropCount(slot0) slot1 = 0 slot2 = false if slot0.type == DROP_TYPE_RESOURCE then slot1 = getProxy(PlayerProxy):getRawData():getResById(slot0.id) if slot0.id == 1 or slot0.id == 2 then slot2 = true end elseif slot3 == DROP_TYPE_ITEM then slot1 = getProxy(BagProxy):getItemCountById(slot0.id) slot2 = true elseif slot3 == DROP_TYPE_EQUIP then slot1 = getProxy(EquipmentProxy):getEquipmentById(slot0.id) and slot4.count or 0 elseif slot3 == DROP_TYPE_SHIP then slot1 = getProxy(BayProxy):getConfigShipCount(slot0.id) elseif slot3 == DROP_TYPE_FURNITURE then slot1 = getProxy(DormProxy):getFurnitrueCount(slot0.id) elseif slot3 == DROP_TYPE_STRATEGY then slot2 = tobool(slot0.strategyCount) elseif slot3 == DROP_TYPE_SKIN then slot1 = getProxy(ShipSkinProxy):getSkinCountById(slot0.id) elseif slot3 == DROP_TYPE_VITEM then -- Nothing elseif slot3 == DROP_TYPE_EQUIPMENT_SKIN then slot1 = getProxy(EquipmentProxy):getEquipmnentSkinById(slot0.id) and slot4.count or 0 end return slot1, slot2 end function updateEquipmentSkin(slot0, slot1, slot2) slot2 = slot2 or {} slot3 = EquipmentRarity.Rarity2Print(slot1.rarity) setImageSprite(findTF(slot0, "icon_bg"), GetSpriteFromAtlas("weaponframes", "bg" .. slot3)) setFrame(findTF(slot0, "icon_bg/frame"), slot3, "frame7") GetImageSpriteFromAtlasAsync("equips/" .. slot1.icon, "", findTF(slot0, "icon_bg/icon")) uv0(slot0, false) uv1(slot0, slot1.name, slot2) uv2(slot0, slot1.count) uv3(slot0, slot1.rarity, slot2) end function getDropRarity(slot0) slot1 = 1 if slot0.type == DROP_TYPE_RESOURCE then slot1 = pg.item_data_statistics[id2ItemId(slot0.id)].rarity + 1 elseif slot2 == DROP_TYPE_ITEM then slot1 = pg.item_data_statistics[slot0.id].rarity + 1 elseif slot2 == DROP_TYPE_EQUIP then slot1 = pg.equip_data_statistics[slot0.id].rarity elseif slot2 == DROP_TYPE_SHIP then slot1 = pg.ship_data_statistics[slot0.id].rarity elseif slot2 == DROP_TYPE_FURNITURE then slot1 = pg.furniture_data_template[slot0.id].comfortable + 1 elseif slot2 == DROP_TYPE_STRATEGY then slot1 = 1 elseif slot2 == DROP_TYPE_SKIN then slot1 = 5 elseif slot2 == DROP_TYPE_VITEM then slot1 = pg.item_data_statistics[slot0.id].rarity + 1 elseif slot2 == DROP_TYPE_WORLD_ITEM then slot1 = pg.world_item_data_template[slot0.id].rarity end return slot1 end function NoPosMsgBox(slot0, slot1, slot2, slot3) slot4 = nil if slot1 then table.insert({}, { text = "text_noPos_clear", atuoClose = true, onCallback = slot1 }) end if slot2 then table.insert(slot5, { text = "text_noPos_buy", atuoClose = true, onCallback = slot2 }) end if slot3 then table.insert(slot5, { text = "text_noPos_intensify", atuoClose = true, onCallback = slot3 }) end pg.MsgboxMgr.GetInstance():ShowMsgBox({ hideYes = true, hideNo = true, content = slot0, custom = slot5, weight = LayerWeightConst.TOP_LAYER }) end function openDestroyEquip() if pg.m02:hasMediator(EquipmentMediator.__cname) then if getProxy(ContextProxy):getCurrentContext():getContextByMediator(EquipmentMediator) and slot2.data.shipId then pg.m02:sendNotification(GAME.REMOVE_LAYERS, { context = slot2 }) else pg.m02:sendNotification(EquipmentMediator.BATCHDESTROY_MODE) return end end pg.m02:sendNotification(GAME.GO_SCENE, SCENE.EQUIPSCENE, { warp = StoreHouseConst.WARP_TO_WEAPON, mode = StoreHouseConst.DESTROY }) end function openDockyardClear() pg.m02:sendNotification(GAME.GO_SCENE, SCENE.DOCKYARD, { blockLock = true, skipSelect = true, selectedMax = 10, mode = DockyardScene.MODE_DESTROY, leftTopInfo = i18n("word_destroy"), onShip = ShipStatus.canDestroyShip, ignoredIds = pg.ShipFlagMgr.GetInstance():FilterShips({ isActivityNpc = true }) }) end function openDockyardIntensify() pg.m02:sendNotification(GAME.GO_SCENE, SCENE.DOCKYARD, { mode = DockyardScene.MODE_OVERVIEW, onClick = function (slot0, slot1) pg.m02:sendNotification(GAME.GO_SCENE, SCENE.SHIPINFO, { page = 3, shipId = slot0.id, shipVOs = slot1 }) end }) end function GoShoppingMsgBox(slot0, slot1, slot2) if slot2 then for slot7, slot8 in ipairs(slot2) do if slot7 < #slot2 then slot3 = "" .. i18n(slot8[1] == 59001 and "text_noRes_info_tip" or "text_noRes_info_tip2", pg.item_data_statistics[slot8[1]].name, slot8[2]) .. i18n("text_noRes_info_tip_link") end end if slot3 ~= "" then slot0 = slot0 .. "\n" .. i18n("text_noRes_tip", slot3) end end pg.MsgboxMgr.GetInstance():ShowMsgBox({ content = slot0, weight = LayerWeightConst.SECOND_LAYER, onYes = function () gotoChargeScene(uv0, uv1) end }) end function shoppingBatch(slot0, slot1, slot2, slot3, slot4) if math.floor(getProxy(PlayerProxy):getData()[id2res(pg.shop_template[slot0].resource_type)] / (slot1.price or slot5.resource_num)) <= 0 then slot10 = 1 end if slot2 ~= nil and slot2 < slot10 then slot10 = slot2 or slot10 end slot11 = true slot12 = 1 if slot5 ~= nil and slot1.id then print(slot10 * slot5.num, "--", slot10) slot13 = Item.New({ id = slot1.id }):getConfig("name") pg.MsgboxMgr.GetInstance():ShowMsgBox({ needCounter = true, type = MSGBOX_TYPE_SINGLE_ITEM, drop = { type = DROP_TYPE_ITEM, id = slot1.id }, addNum = slot5.num, maxNum = slot10 * slot5.num, defaultNum = slot5.num, numUpdate = function (slot0, slot1) uv0 = math.floor(slot1 / uv1.num) if uv3 < uv0 * uv2 then setText(slot0, i18n(uv4, slot2, slot1, COLOR_RED, uv5)) uv6 = false else setText(slot0, i18n(uv4, slot2, slot1, COLOR_GREEN, uv5)) uv6 = true end end, onYes = function () if uv0 then pg.m02:sendNotification(GAME.SHOPPING, { id = uv1, count = uv2 }) elseif uv3 then pg.TipsMgr.GetInstance():ShowTips(i18n(uv3)) else pg.TipsMgr.GetInstance():ShowTips(i18n("main_playerInfoLayer_error_changeNameNoGem")) end end }) end end function gotoChargeScene(slot0, slot1) pg.m02:sendNotification(GAME.GO_SCENE, SCENE.CHARGE, { wrap = slot0 or ChargeScene.TYPE_ITEM, noRes = slot1 }) end function clearDrop(slot0) clearImageSprite(findTF(slot0, "icon_bg")) clearImageSprite(findTF(slot0, "icon_bg/frame")) clearImageSprite(findTF(slot0, "icon_bg/icon")) if findTF(slot0, "icon_bg/icon/icon") then clearImageSprite(slot4) end end slot11 = { red = Color.New(1, 0.25, 0.25), blue = Color.New(0.11, 0.55, 0.64), yellow = Color.New(0.92, 0.52, 0) } function updateSkill(slot0, slot1, slot2, slot3) slot4 = findTF(slot0, "skill") if slot1 then setActive(slot4, true) setActive(findTF(slot0, "unknown"), false) setActive(findTF(slot0, "lock"), not slot2) LoadImageSpriteAsync("skillicon/" .. slot1.icon, findTF(slot4, "icon")) setText(findTF(slot4, "name"), shortenString(getSkillName(slot1.id), slot3 or 8)) setText(findTF(slot4, "level"), "LEVEL: " .. (slot2 and slot2.level or "??")) setTextColor(slot8, uv0[slot1.color or "blue"]) else setActive(slot4, false) setActive(slot6, true) setActive(slot5, false) end end slot12 = true function onBackButton(slot0, slot1, slot2, slot3) slot4 = GetOrAddComponent(slot1, "UILongPressTrigger") slot4.longPressThreshold = defaultValue(slot3, 1) function slot5(slot0) return function () if uv0 then pg.CriMgr.GetInstance():PlaySoundEffect_V3(SOUND_BACK) end slot0, slot1 = uv1() if slot0 then uv2(slot1) end end end slot6 = slot4.onReleased pg.DelegateInfo.Add(slot0, slot6) slot6:RemoveAllListeners() slot6:AddListener(slot5(function (slot0) slot0:emit(BaseUI.ON_BACK) end)) slot7 = slot4.onLongPressed pg.DelegateInfo.Add(slot0, slot7) slot7:RemoveAllListeners() slot7:AddListener(slot5(function (slot0) slot0:emit(BaseUI.ON_HOME) end)) end function GetZeroTime() return pg.TimeMgr.GetInstance():GetNextTime(0, 0, 0) end function GetHalfHour() return pg.TimeMgr.GetInstance():GetNextTime(0, 0, 0, 1800) end function GetNextHour(slot0) slot2, slot3 = pg.TimeMgr.GetInstance():parseTimeFrom(pg.TimeMgr.GetInstance():GetServerTime()) return slot2 * 86400 + (slot3 + slot0) * 3600 end function GetPerceptualSize(slot0) if type(slot0) == "number" then return function (slot0) if not slot0 then return 0, 1 elseif slot0 > 240 then return 4, 1 elseif slot0 > 225 then return 3, 1 elseif slot0 > 192 then return 2, 1 elseif slot0 < 126 then return 1, 0.5 else return 1, 1 end end(slot0) end slot2 = 1 slot3 = 0 slot4 = 0 while slot2 <= #slot0 do slot7, slot8 = slot1(string.byte(slot0, slot2)) slot2 = slot2 + slot7 slot3 = slot3 + slot8 end return slot3 end function shortenString(slot0, slot1) slot2 = 1 slot3 = 0 slot4 = 0 slot5 = #slot0 while slot2 <= slot5 do slot7, slot8 = GetPerceptualSize(string.byte(slot0, slot2)) if slot1 <= math.ceil(slot3 + slot8) then slot4 = slot2 + slot7 break end end if slot4 == 0 or slot5 < slot4 then return slot0 end return string.sub(slot0, 1, slot4 - 1) .. ".." end function nameValidityCheck(slot0, slot1, slot2, slot3) slot4 = true slot5, slot6 = utf8_to_unicode(slot0) slot7 = filterEgyUnicode(filterSpecChars(slot0)) slot8 = wordVer(slot0) if not checkSpaceValid(slot0) then pg.TipsMgr.GetInstance():ShowTips(i18n(slot3[1])) slot4 = false elseif slot8 > 0 or slot7 ~= slot0 then pg.TipsMgr.GetInstance():ShowTips(i18n(slot3[4])) slot4 = false elseif slot6 < slot1 then pg.TipsMgr.GetInstance():ShowTips(i18n(slot3[2])) slot4 = false elseif slot2 < slot6 then pg.TipsMgr.GetInstance():ShowTips(i18n(slot3[3])) slot4 = false end return slot4 end function checkSpaceValid(slot0) if PLATFORM_CODE == PLATFORM_US then return true end return slot0 == string.gsub(string.gsub(slot0, " ", ""), " ", "") end function filterSpecChars(slot0) slot1 = {} slot2 = 0 slot3 = 0 slot4 = 0 slot5 = 1 while slot5 <= #slot0 do if not string.byte(slot0, slot5) then break end if slot6 >= 48 and slot6 <= 57 or slot6 >= 65 and slot6 <= 90 or slot6 == 95 or slot6 >= 97 and slot6 <= 122 then table.insert(slot1, string.char(slot6)) elseif slot6 >= 228 and slot6 <= 233 then slot8 = string.byte(slot0, slot5 + 2) if string.byte(slot0, slot5 + 1) and slot8 and slot7 >= 128 and slot7 <= 191 and slot8 >= 128 and slot8 <= 191 then slot5 = slot5 + 2 table.insert(slot1, string.char(slot6, slot7, slot8)) slot2 = slot2 + 1 end elseif slot6 == 227 and PLATFORM_CODE == PLATFORM_JP then slot8 = string.byte(slot0, slot5 + 2) if string.byte(slot0, slot5 + 1) and slot8 and slot7 > 128 and slot7 <= 191 and slot8 >= 128 and slot8 <= 191 then slot5 = slot5 + 2 table.insert(slot1, string.char(slot6, slot7, slot8)) slot3 = slot3 + 1 end elseif slot6 > 233 and PLATFORM_CODE == PLATFORM_KR then slot8 = string.byte(slot0, slot5 + 2) if string.byte(slot0, slot5 + 1) and slot8 and slot7 >= 128 and slot7 <= 191 and slot8 >= 128 and slot8 <= 191 then slot5 = slot5 + 2 table.insert(slot1, string.char(slot6, slot7, slot8)) slot4 = slot4 + 1 end elseif PLATFORM_CODE == PLATFORM_US then if slot5 ~= 1 and slot6 == 32 and string.byte(slot0, slot5 + 1) ~= 32 then table.insert(slot1, string.char(slot6)) end if slot6 >= 192 and slot6 <= 223 then slot7 = string.byte(slot0, slot5 + 1) slot5 = slot5 + 1 if slot6 == 194 and slot7 and slot7 >= 128 then table.insert(slot1, string.char(slot6, slot7)) elseif slot6 == 195 and slot7 and slot7 <= 191 then table.insert(slot1, string.char(slot6, slot7)) end end if slot6 == 195 and string.byte(slot0, slot5 + 1) == 188 then table.insert(slot1, string.char(slot6, slot7)) end end slot5 = slot5 + 1 end return table.concat(slot1), slot2 + slot3 + slot4 end function filterEgyUnicode(slot0) return string.gsub(string.gsub(slot0, "\\xf0\\x93[\\x80-\\x8f][\\x80-\\xbf]", ""), "\\xf0\\x93\\x90[\\x80-\\xaf]", "") end function shiftPanel(slot0, slot1, slot2, slot3, slot4, slot5, slot6, slot7, slot8) slot3 = slot3 or 0.2 if slot5 then LeanTween.cancel(go(slot0)) end slot9 = rtf(slot0) LeanTween.move(slot9, Vector3(slot1 or slot9.anchoredPosition.x, slot2 or slot9.anchoredPosition.y, 0), slot3):setEase(slot7 or LeanTweenType.easeInOutSine) if slot4 then slot10:setDelay(slot4) end if slot6 then GetOrAddComponent(slot0, "CanvasGroup").blocksRaycasts = false end slot10:setOnComplete(System.Action(function () if uv0 then uv0() end if uv1 then GetOrAddComponent(uv2, "CanvasGroup").blocksRaycasts = true end end)) return slot10 end function TweenValue(slot0, slot1, slot2, slot3, slot4, slot5, slot6, slot7) slot8 = LeanTween.value(go(slot0), slot1, slot2, slot3):setOnUpdate(System.Action_float(function (slot0) if uv0 then uv0(slot0) end end)):setOnComplete(System.Action(function () if uv0 then uv0() end end)):setDelay(slot4 or 0) if slot7 and slot7 > 0 then slot8:setRepeat(slot7) end return slot8 end function rotateAni(slot0, slot1, slot2) return LeanTween.rotate(rtf(slot0), 360 * slot1, slot2):setLoopClamp() end function blinkAni(slot0, slot1, slot2, slot3) return LeanTween.alpha(rtf(slot0), slot3 or 0, slot1):setEase(LeanTweenType.easeInOutSine):setLoopPingPong(slot2 or 0) end function scaleAni(slot0, slot1, slot2, slot3) return LeanTween.scale(rtf(slot0), slot3 or 0, slot1):setLoopPingPong(slot2 or 0) end function floatAni(slot0, slot1, slot2, slot3) return LeanTween.moveY(rtf(slot0), slot0.localPosition.y + slot1, slot2):setLoopPingPong(slot3 or 0) end slot13 = tostring function tostring(slot0) if slot0 == nil then return "nil" end if uv0(slot0) == nil then if type(slot0) == "table" then return "{}" end return " ~nil" end return slot1 end function wordVer(slot0, slot1) if slot0:match(ChatConst.EmojiCodeMatch) then return 0, slot0 end if #filterEgyUnicode(slot0) ~= #slot0 then if (slot1 or {}).isReplace then slot0 = slot2 else return 1 end end slot4 = pg.word_template slot5 = pg.word_legal_template slot1.isReplace = slot1.isReplace or false slot1.replaceWord = slot1.replaceWord or "*" slot7 = 1 slot8 = "" slot9 = 0 while slot7 <= #wordSplit(slot0) do slot10, slot7, slot12 = wordLegalMatch(slot3, slot5, slot7) if slot10 then slot8 = slot8 .. slot12 else slot13, slot7, slot15 = wordVerMatch(slot3, slot4, slot1, slot7, "", false, slot7, "") if slot13 then slot9 = slot9 + 1 if slot1.isReplace then slot8 = slot8 .. slot15 end else if slot1.isReplace then slot8 = slot8 .. slot3[slot7] end slot7 = slot7 + 1 end end end if slot1.isReplace then return slot9, slot8 else return slot9 end end function wordLegalMatch(slot0, slot1, slot2, slot3, slot4) if slot2 > #slot0 then return slot3, slot2, slot4 end slot6 = slot1[slot0[slot2]] if slot4 == nil then slot4 = "" end if slot6 then if slot6.this then return wordLegalMatch(slot0, slot6, slot2 + 1, true, slot4 .. slot5) else return wordLegalMatch(slot0, slot6, slot2 + 1, false, slot4 .. slot5) end else return slot3, slot2, slot4 end end slot14 = string.byte("a") slot15 = string.byte("z") slot16 = string.byte("A") slot17 = string.byte("Z") function slot18(slot0) if not slot0 then return slot0 end if string.byte(slot0) > 128 then return end if uv0 <= slot1 and slot1 <= uv1 then return string.char(slot1 - 32) elseif uv2 <= slot1 and slot1 <= uv3 then return string.char(slot1 + 32) else return slot0 end end function wordVerMatch(slot0, slot1, slot2, slot3, slot4, slot5, slot6, slot7) if slot3 > #slot0 then return slot5, slot6, slot7 end if slot1[slot0[slot3]] then slot10, slot11, slot12 = wordVerMatch(slot0, slot9, slot2, slot3 + 1, slot2.isReplace and slot4 .. slot2.replaceWord or slot4, slot9.this or slot5, slot9.this and slot3 + 1 or slot6, slot9.this and (slot2.isReplace and slot4 .. slot2.replaceWord or slot4) or slot7) if slot10 then return slot10, slot11, slot12 end end slot10 = uv0(slot8) slot9 = slot1[slot10] if slot10 ~= slot8 and slot9 then slot11, slot12, slot13 = wordVerMatch(slot0, slot9, slot2, slot3 + 1, slot2.isReplace and slot4 .. slot2.replaceWord or slot4, slot9.this or slot5, slot9.this and slot3 + 1 or slot6, slot9.this and (slot2.isReplace and slot4 .. slot2.replaceWord or slot4) or slot7) if slot11 then return slot11, slot12, slot13 end end return slot5, slot6, slot7 end function wordSplit(slot0) slot1 = {} for slot5 in slot0:gmatch("[-\\xc2-\\xf4][\\x80-\\xbf]*") do slot1[#slot1 + 1] = slot5 end return slot1 end function contentWrap(slot0, slot1, slot2) return #LuaHelper.WrapContent(slot0, slot1, slot2) ~= #slot0, slot3 end function cancelRich(slot0) slot1 = nil for slot5 = 1, 20 do slot0, slot7 = string.gsub(slot0, "<([^>]*)>", "%1") if slot7 <= 0 then break end end return slot0 end function filterCharForiOS(slot0) end function filteAndDelTest(slot0) end function getSkillConfig(slot0) if not require("GameCfg.buff.buff_" .. slot0) then warning("找不到技能配置: " .. slot0) return end slot2 = Clone(slot1) slot2.name = getSkillName(slot0) slot2.desc = HXSet.hxLan(slot2.desc) slot2.desc_get = HXSet.hxLan(slot2.desc_get) _.each(slot2, function (slot0) slot0.desc = HXSet.hxLan(slot0.desc) end) return slot2 end function getSkillName(slot0) if pg.skill_data_template[slot0] or pg.skill_data_display[slot0] then return HXSet.hxLan(slot1.name) else return "" end end function getSkillDescGet(slot0, slot1) if not (slot1 and pg.skill_world_display[slot0] and setmetatable({}, { __index = function (slot0, slot1) return pg.skill_world_display[uv0][slot1] or pg.skill_data_template[uv0][slot1] end }) or pg.skill_data_template[slot0]) then return "" end slot3 = slot2.desc_get ~= "" and slot2.desc_get or slot2.desc for slot7, slot8 in pairs(slot2.desc_get_add) do if slot8[2] then slot9 = setColorStr(slot8[1], COLOR_GREEN) .. specialGSub(i18n("word_skill_desc_get"), "$1", setColorStr(slot8[2], COLOR_GREEN)) end slot3 = specialGSub(slot3, "$" .. slot7, slot9) end return HXSet.hxLan(slot3) end function getSkillDescLearn(slot0, slot1, slot2) if not (slot2 and pg.skill_world_display[slot0] and setmetatable({}, { __index = function (slot0, slot1) return pg.skill_world_display[uv0][slot1] or pg.skill_data_template[uv0][slot1] end }) or pg.skill_data_template[slot0]) then return "" end if not slot3.desc_add then return HXSet.hxLan(slot3.desc) end for slot8, slot9 in pairs(slot3.desc_add) do if slot9[slot1][2] then slot10 = slot9[slot1][1] .. specialGSub(i18n("word_skill_desc_learn"), "$1", slot9[slot1][2]) end slot4 = specialGSub(slot4, "$" .. slot8, setColorStr(slot10, COLOR_YELLOW)) end return HXSet.hxLan(slot4) end function getSkillDesc(slot0, slot1, slot2) if not (slot2 and pg.skill_world_display[slot0] and setmetatable({}, { __index = function (slot0, slot1) return pg.skill_world_display[uv0][slot1] or pg.skill_data_template[uv0][slot1] end }) or pg.skill_data_template[slot0]) then return "" end if not slot3.desc_add then return HXSet.hxLan(slot3.desc) end for slot8, slot9 in pairs(slot3.desc_add) do slot4 = specialGSub(slot4, "$" .. slot8, setColorStr(slot9[slot1][1], COLOR_GREEN)) end return HXSet.hxLan(slot4) end function specialGSub(slot0, slot1, slot2) return string.gsub(string.gsub(string.gsub(string.gsub(slot0, " 59 or i18n("just_now")) and (slot2 > 3599 or i18n("several_minutes_before", math.floor(slot2 / 60))) and (slot2 > 86399 or i18n("several_hours_before", math.floor(slot2 / 3600))) and i18n("several_days_before", math.floor(slot2 / 86400)) end function playMovie(slot0, slot1, slot2) if not IsNil(GameObject.Find("OverlayCamera/Overlay/UITop/MoviePanel")) then pg.UIMgr.GetInstance():LoadingOn() WWWLoader.Inst:LoadStreamingAsset(slot0, function (slot0) pg.UIMgr.GetInstance():LoadingOff() slot1 = GCHandle.Alloc(slot0, GCHandleType.Pinned) setActive(uv0, true) slot2 = uv0:AddComponent(typeof(CriManaMovieControllerForUI)) slot2.player:SetData(slot0, slot0.Length) slot2.target = uv0:GetComponent(typeof(Image)) slot2.loop = false slot2.additiveMode = false slot2.playOnStart = true slot3 = nil Timer.New(function () if uv0.player.status == CriMana.Player.Status.PlayEnd or uv0.player.status == CriMana.Player.Status.Stop or uv0.player.status == CriMana.Player.Status.Error then uv1:Stop() Object.Destroy(uv0) GCHandle.Free(uv2) setActive(uv3, false) if uv4 then uv4() end end end, 0.2, -1):Start() removeOnButton(uv0) if uv2 then onButton(nil, uv0, function () uv0:Stop() uv1.onClick:RemoveAllListeners() end, SFX_CANCEL) end end) elseif slot1 then slot1() end end PaintCameraAdjustOn = false function cameraPaintViewAdjust(slot0) if PaintCameraAdjustOn ~= slot0 then slot1 = GameObject.Find("UICamera/Canvas"):GetComponent(typeof(CanvasScaler)) if slot0 then CameraUtil.AutoAdapt = false CameraUtil.Revert() slot1.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight slot1.matchWidthOrHeight = 1 else CameraUtil.AutoAdapt = true CameraUtil.CurrentWidth = 1 CameraUtil.CurrentHeight = 1 CameraUtil.AspectRatio = 1.7777777777777777 slot1.screenMatchMode = CanvasScaler.ScreenMatchMode.Expand end PaintCameraAdjustOn = slot0 end end function ManhattonDist(slot0, slot1) return math.abs(slot0.row - slot1.row) + math.abs(slot0.column - slot1.column) end function checkFirstHelpShow(slot0) if not getProxy(SettingsProxy):checkReadHelp(slot0) then pg.MsgboxMgr.GetInstance():ShowMsgBox({ type = MSGBOX_TYPE_HELP, helps = pg.gametip[slot0].tip }) slot1:recordReadHelp(slot0) end end preOrientation = nil preNotchFitterEnabled = false function openPortrait(slot0) enableNotch(slot0, true) preOrientation = Input.deviceOrientation:ToString() print("Begining Orientation:" .. preOrientation) Screen.autorotateToPortrait = true Screen.autorotateToPortraitUpsideDown = true cameraPaintViewAdjust(true) end function closePortrait(slot0) enableNotch(slot0, false) Screen.autorotateToPortrait = false Screen.autorotateToPortraitUpsideDown = false print("Closing Orientation:" .. preOrientation) Screen.orientation = ScreenOrientation.LandscapeLeft slot1 = Timer.New(function () Screen.orientation = ScreenOrientation.AutoRotation end, 0.2, 1):Start() cameraPaintViewAdjust(false) end function enableNotch(slot0, slot1) if slot0 == nil then return end slot0:GetComponent("NotchAdapt").enabled = slot1 if slot0:GetComponent("AspectRatioFitter") then if slot1 then slot3.enabled = preNotchFitterEnabled else preNotchFitterEnabled = slot3.enabled slot3.enabled = false end end end function comma_value(slot0) slot2 = 0 while true do slot1, slot4 = string.gsub(slot0, "^(-?%d+)(%d%d%d)", "%1,%2") if slot4 == 0 then break end end return slot1 end function SwitchPanel(slot0, slot1, slot2, slot3, slot4, slot5) slot3 = defaultValue(slot3, SWITCH_PANEL_TIME) if slot5 then LeanTween.cancel(go(slot0)) end if slot1 then Vector3.New(tf(slot0).localPosition.x, tf(slot0).localPosition.y, tf(slot0).localPosition.z).x = slot1 end if slot2 then slot6.y = slot2 end slot7 = LeanTween.move(rtf(slot0), slot6, slot3):setEase(LeanTweenType.easeInOutSine) if slot4 then slot7:setDelay(slot4) end return slot7 end function updateActivityTaskStatus(slot0) slot1 = slot0:getConfig("config_id") slot2, slot3 = getActivityTask(slot0, true) if not slot3 then pg.m02:sendNotification(GAME.ACTIVITY_OPERATION, { cmd = 1, activity_id = slot0.id }) return true end return false end function updateCrusingActivityTask(slot0) slot1 = getProxy(TaskProxy) slot6 = "config_data" for slot6, slot7 in ipairs(slot0:getConfig(slot6)) do if pg.battlepass_task_group[slot7].time <= math.floor((pg.TimeMgr.GetInstance():GetServerTime() - slot0:getStartTime()) / 86400) + 1 and underscore.any(underscore.flatten(slot8.task_group), function (slot0) return uv0:getTaskVO(slot0) == nil end) then pg.m02:sendNotification(GAME.CRUSING_CMD, { cmd = 1, activity_id = slot0.id }) return true end end return false end function setShipCardFrame(slot0, slot1, slot2) slot0.localScale = Vector3.one slot0.anchorMin = Vector2.zero slot0.anchorMax = Vector2.one slot3 = slot2 or slot1 GetImageSpriteFromAtlasAsync("shipframe", slot3, slot0) if pg.frame_resource[slot3] then slot4 = slot4.param slot0.offsetMin = Vector2(slot4[1], slot4[2]) slot0.offsetMax = Vector2(slot4[3], slot4[4]) else slot0.offsetMin = Vector2.zero slot0.offsetMax = Vector2.zero end end function setRectShipCardFrame(slot0, slot1, slot2) slot0.localScale = Vector3.one slot0.anchorMin = Vector2.zero slot0.anchorMax = Vector2.one setImageSprite(slot0, GetSpriteFromAtlas("shipframe", "b" .. (slot2 or slot1))) if pg.frame_resource["b" .. (slot2 or slot1)] then slot4 = slot4.param slot0.offsetMin = Vector2(slot4[1], slot4[2]) slot0.offsetMax = Vector2(slot4[3], slot4[4]) else slot0.offsetMin = Vector2.zero slot0.offsetMax = Vector2.zero end end function flushShipCard(slot0, slot1) GetImageSpriteFromAtlasAsync("bg/star_level_card_" .. slot1:rarity2bgPrint(), "", findTF(slot0, "content/bg")) slot5 = slot1 and { "shipYardIcon/" .. slot1:getPainting(), slot1:getPainting() } or { "shipYardIcon/unknown", "" } GetImageSpriteFromAtlasAsync(slot5[1], slot5[2], findTF(slot0, "content/ship_icon")) GetImageSpriteFromAtlasAsync("shiptype", shipType2print(slot1:getShipType()), findTF(slot0, "content/info/top/type")) setText(findTF(slot0, "content/dockyard/lv/Text"), defaultValue(slot1.level, 1)) slot9 = nil setShipCardFrame(findTF(slot0, "content/front/frame"), slot2, slot1.propose and "prop" .. (slot1:isBluePrintShip() and slot2 or slot1:isMetaShip() and "14" or "") or nil) slot10 = findTF(slot0, "content/front/stars") setActive(slot10, true) slot13 = slot1:getStar() for slot18 = slot10.childCount, slot1:getMaxStar() - 1 do cloneTplTo(findTF(slot10, "star_tpl"), slot10) end for slot18 = 0, slot10.childCount - 1 do slot10:GetChild(slot18).gameObject:SetActive(slot18 < slot14) SetActive(slot19:Find("star_tpl"), slot18 < slot13) SetActive(slot19:Find("star_empty_tpl"), slot13 <= slot18) end slot15 = findTF(slot0, "content/front/bg_other") slot16 = nil slot17 = false if slot1.propose then if slot1:isMetaShip() then slot16 = "duang_meta_jiehun" else slot16 = "duang_6_jiehun" .. (slot1:isBluePrintShip() and "_tuzhi" or "") end elseif slot1:isMetaShip() then slot16 = "duang_meta_" .. slot2 elseif slot1:getRarity() == 6 then slot16 = "duang_6" end if slot16 then slot18 = slot16 .. "(Clone)" eachChild(slot15, function (slot0) setActive(slot0, slot0.name == uv0) uv1 = uv1 or slot0.name == uv0 end) if not slot17 then LoadAndInstantiateAsync("effect", slot16, function (slot0) if IsNil(uv0) or findTF(uv1, uv2) then Object.Destroy(slot0) else setParent(slot0, uv1) setActive(slot0, true) end end) end end setActive(slot15, slot16) end function TweenItemAlphaAndWhite(slot0) LeanTween.cancel(slot0) slot1 = GetOrAddComponent(slot0, "CanvasGroup") slot1.alpha = 0 LeanTween.alphaCanvas(slot1, 1, 0.2):setUseEstimatedTime(true) if findTF(slot0.transform, "white_mask") then setActive(slot2, false) end end function ClearTweenItemAlphaAndWhite(slot0) LeanTween.cancel(slot0) GetOrAddComponent(slot0, "CanvasGroup").alpha = 0 end function getGroupOwnSkins(slot0) slot1 = {} slot3 = getProxy(ShipSkinProxy):getSkinList() if getProxy(CollectionProxy):getShipGroup(slot0) then for slot9, slot10 in ipairs(ShipGroup.getSkinList(slot0)) do if slot10.skin_type == ShipSkin.SKIN_TYPE_DEFAULT or table.contains(slot3, slot10.id) or slot10.skin_type == ShipSkin.SKIN_TYPE_REMAKE and slot4.trans or slot10.skin_type == ShipSkin.SKIN_TYPE_PROPOSE and slot4.married == 1 then slot1[slot10.id] = true end end end return slot1 end function split(slot0, slot1) slot2 = {} if not slot0 then return nil end slot3 = #slot0 slot4 = 1 while slot3 >= slot4 do if string.find(slot0, slot1, slot4) == nil then table.insert(slot2, string.sub(slot0, slot4, slot3)) break end table.insert(slot2, string.sub(slot0, slot4, slot5 - 1)) if slot5 == slot3 then table.insert(slot2, "") break end slot4 = slot5 + 1 end return slot2 end function NumberToChinese(slot0, slot1) slot2 = "" for slot7 = 1, #slot0 do if string.sub(slot0, slot7, slot7) ~= "0" or slot8 == "0" and not slot1 then slot2 = slot1 and (slot3 >= 2 and (slot7 == 1 and (slot8 == "1" and i18n("number_" .. 10) or i18n("number_" .. slot8) .. i18n("number_" .. 10)) or i18n("number_" .. slot8) .. i18n("number_" .. 10) .. i18n("number_" .. slot8)) or i18n("number_" .. slot8) .. i18n("number_" .. 10) .. i18n("number_" .. slot8) .. i18n("number_" .. slot8)) or i18n("number_" .. slot8) .. i18n("number_" .. 10) .. i18n("number_" .. slot8) .. i18n("number_" .. slot8) .. i18n("number_" .. slot8) end end return slot2 end function getActivityTask(slot0, slot1) slot2 = getProxy(TaskProxy) slot4 = pg.TimeMgr.GetInstance() slot6, slot7, slot8 = nil slot12 = #slot0:getConfig("config_data") for slot12 = math.max(slot0.data3, 1), math.min(slot4:DiffDay(slot0.data1, slot4:GetServerTime()) + 1, slot12) do for slot17, slot18 in ipairs(_.flatten({ slot3[slot12] })) do if slot2:getTaskById(slot18) then return slot6.id, slot6 end if slot7 then if slot2:getFinishTaskById(slot18) then slot7 = slot8 elseif slot1 then return slot18 else return slot7.id, slot7 end else slot7 = slot2:getFinishTaskById(slot18) slot8 = slot8 or slot18 end end end if slot7 then return slot7.id, slot7 else return slot8 end end function setImageFromImage(slot0, slot1, slot2) GetComponent(slot0, "Image").sprite = GetComponent(slot1, "Image").sprite if slot2 then slot3:SetNativeSize() end end function skinTimeStamp(slot0) slot1, slot2, slot3, slot4 = pg.TimeMgr.GetInstance():parseTimeFrom(slot0) if slot1 >= 1 then return i18n("limit_skin_time_day", slot1) elseif slot1 <= 0 and slot2 > 0 then return i18n("limit_skin_time_day_min", slot2, slot3) elseif slot1 <= 0 and slot2 <= 0 and (slot3 > 0 or slot4 > 0) then return i18n("limit_skin_time_min", math.max(slot3, 1)) elseif slot1 <= 0 and slot2 <= 0 and slot3 <= 0 and slot4 <= 0 then return i18n("limit_skin_time_overtime") end end function InstagramTimeStamp(slot0) if (pg.TimeMgr.GetInstance():GetServerTime() - slot0) / 86400 > 1 then return i18n("ins_word_day", math.floor(slot3)) elseif slot2 / 3600 > 1 then return i18n("ins_word_hour", math.floor(slot4)) elseif slot2 / 60 > 1 then return i18n("ins_word_minu", math.floor(slot5)) else return i18n("ins_word_minu", 1) end end function InstagramReplyTimeStamp(slot0) if (pg.TimeMgr.GetInstance():GetServerTime() - slot0) / 86400 > 1 then return i18n1(math.floor(slot3) .. "d") elseif slot2 / 3600 > 1 then return i18n1(math.floor(slot4) .. "h") elseif slot2 / 60 > 1 then return i18n1(math.floor(slot5) .. "min") else return i18n1("1min") end end function attireTimeStamp(slot0) slot1, slot2, slot3, slot4 = pg.TimeMgr.GetInstance():parseTimeFrom(slot0) if slot1 <= 0 and slot2 <= 0 and slot3 <= 0 and slot4 <= 0 then return i18n("limit_skin_time_overtime") else return i18n("attire_time_stamp", slot1, slot2, slot3) end end function checkExist(slot0, ...) for slot5, slot6 in ipairs({ ... }) do if slot0 == nil then break end slot0 = (type(slot0[slot6[1]]) ~= "function" or slot0[slot6[1]](slot0, unpack(slot6[2] or {}))) and slot0[slot6[1]](slot0, unpack(slot6[2] or ))[slot6[1]] end return slot0 end function showRepairMsgbox() pg.MsgboxMgr.GetInstance():ShowMsgBox({ hideYes = true, content = i18n("resource_verify_warn"), custom = { { text = i18n("msgbox_repair_l2d"), onCallback = function () if PathMgr.FileExists(Application.persistentDataPath .. "/hashes-live2d.csv") then BundleWizard.Inst:GetGroupMgr("L2D"):StartVerifyForLua() else pg.TipsMgr.GetInstance():ShowTips(i18n("word_no_cache")) end end }, { text = i18n("msgbox_repair"), onCallback = function () if PathMgr.FileExists(Application.persistentDataPath .. "/hashes.csv") then BundleWizard.Inst:GetGroupMgr("DEFAULT_RES"):StartVerifyForLua() else pg.TipsMgr.GetInstance():ShowTips(i18n("word_no_cache")) end end } } }) end function resourceVerify(slot0, slot1) if CSharpVersion > 35 then BundleWizard.Inst:GetGroupMgr("DEFAULT_RES"):StartVerifyForLua() return end slot3 = nil slot4 = PathMgr.ReadAllLines(Application.persistentDataPath .. "/hashes.csv") slot5 = {} if slot0 then setActive(slot0, true) else pg.UIMgr.GetInstance():LoadingOn() end function slot6() if uv0 then setActive(uv0, false) else pg.UIMgr.GetInstance():LoadingOff() end print(uv1) if uv1 then pg.MsgboxMgr.GetInstance():ShowMsgBox({ content = i18n("resource_verify_fail", ""), onYes = function () VersionMgr.Inst:DeleteCacheFiles() Application.Quit() end }) else pg.MsgboxMgr.GetInstance():ShowMsgBox({ content = i18n("resource_verify_success") }) end end slot8 = nil function (slot0) if slot0 < 0 then uv0() return end if uv1 then setSlider(uv1, 0, uv2, uv2 - slot0) end slot1 = string.split(uv3[slot0], ",") if PathMgr.FileExists(PathMgr.getAssetBundle(slot1[1])) and slot1[3] == HashUtil.CalcMD5(PathMgr.ReadAllBytes(PathMgr.getAssetBundle(slot2))) then onNextTick(function () uv0(uv1 - 1) end) return end uv5 = slot2 uv0() end(slot4.Length - 1) end function splitByWordEN(slot0, slot1) slot3 = "" slot4 = "" for slot11, slot12 in ipairs(string.split(slot0, " ")) do slot13 = slot4 setText(slot1, slot4 == "" and slot12 or slot4 .. " " .. slot12) if slot1:GetComponent(typeof(RectTransform)).rect.width < slot1:GetComponent(typeof(Text)).preferredWidth then slot3 = slot3 == "" and slot13 or slot3 .. "\n" .. slot13 slot4 = slot12 end if slot11 >= #slot2 then slot3 = slot3 == "" and slot4 or slot3 .. "\n" .. slot4 end end return slot3 end function checkBirthFormat(slot0) if #slot0 ~= 8 then return false end slot1 = 0 while slot1 < #slot0 do if string.byte(slot0, slot1 + 1) < 48 or slot3 > 57 then return false end slot1 = slot1 + 1 end return true end slot19 = xpcall function TryCall(slot0, slot1, ...) uv0(slot0, function (slot0) errorMsg("Error Handler", slot0) if uv0 then uv0(slot0) end end, ...) end function isHalfBodyLive2D(slot0) return _.any({ "biaoqiang", "z23", "lafei", "lingbo", "mingshi", "xuefeng" }, function (slot0) return slot0 == uv0 end) end function GetServerState(slot0) slot1 = -1 slot2 = 0 slot3 = 1 slot4 = 2 VersionMgr.Inst:WebRequest(NetConst.GetServerStateUrl(), function (slot0, slot1) slot2 = true slot3 = false for slot7 in string.gmatch(slot1, "\"state\":%d") do if slot7 ~= "\"state\":1" then slot2 = false end slot3 = true end if not slot3 then slot2 = false end if uv0 ~= nil then uv0(slot2 and uv1 or uv2) end end) end function setScrollText(slot0, slot1) GetOrAddComponent(slot0, "ScrollText"):SetText(slot1) end function changeToScrollText(slot0, slot1) slot2 = GetComponent(slot0, typeof(Text)) if slot0.childCount == 0 then slot3 = cloneTplTo(slot0, slot0) slot0:GetComponent(typeof(Text)).enabled = false end setScrollText(slot0:GetChild(0), slot1) end slot20, slot21, slot22 = nil function slot20(slot0, slot1, slot2) slot3 = slot0:Find("base") slot4, slot5, slot6 = Equipment.GetInfoTrans(slot1, slot2) if slot1.nextValue then slot8, slot9 = Equipment.GetInfoTrans({ name = slot1.name, type = slot1.type, value = slot1.nextValue }, slot2) slot5 = slot5 .. setColorStr(" > " .. slot9, COLOR_GREEN) end setText(slot3:Find("name"), slot4) if slot6 then setText(slot3:Find("value"), slot5 .. ("(+" .. ys.Battle.BattleConst.UltimateBonus.AuxBoostValue * 100 .. "%)")) else setText(slot3:Find("value"), slot5) end setActive(slot3:Find("value/up"), slot1.compare and slot1.compare > 0) setActive(slot3:Find("value/down"), slot1.compare and slot1.compare < 0) triggerToggle(slot3, slot1.lock_open) if not slot1.lock_open and slot1.sub and #slot1.sub > 0 then GetComponent(slot3, typeof(Toggle)).enabled = true else setActive(slot3:Find("name/close"), false) setActive(slot3:Find("name/open"), false) GetComponent(slot3, typeof(Toggle)).enabled = false end end function slot21(slot0, slot1, slot2, slot3) uv0(slot0, slot2, slot3) if not slot2.sub or #slot2.sub == 0 then return end uv1(slot0:Find("subs"), slot1, slot2.sub, slot3) end function slot22(slot0, slot1, slot2, slot3) removeAllChildren(slot0) for slot7, slot8 in ipairs(slot2) do uv0(cloneTplTo(slot1, slot0), slot1, slot8, slot3) end end function updateEquipInfo(slot0, slot1, slot2, slot3) uv0(slot0:Find("attrs"), slot0:Find("attr_tpl"), slot1.attrs, slot3) setActive(slot0:Find("skill"), slot2) if slot2 then uv1(slot0:Find("skill/attr"), slot4, { name = i18n("skill"), value = setColorStr(slot2.name, "#FFDE00FF") }, slot3) setText(slot0:Find("skill/value/Text"), getSkillDescGet(slot2.id)) end setActive(slot0:Find("weapon"), #slot1.weapon.sub > 0) if #slot1.weapon.sub > 0 then uv0(slot0:Find("weapon"), slot4, { slot1.weapon }, slot3) end setActive(slot0:Find("equip_info"), #slot1.equipInfo.sub > 0) if #slot1.equipInfo.sub > 0 then uv0(slot0:Find("equip_info"), slot4, { slot1.equipInfo }, slot3) end uv1(slot0:Find("part/attr"), slot4, { name = i18n("equip_info_23") }, slot3) slot6 = slot0:Find("part/value"):Find("label") if #slot1.part[1] == 0 and #slot1.part[2] == 0 then setmetatable({}, { __index = function (slot0, slot1) return true end }) setmetatable({}, { __index = function (slot0, slot1) return true end }) else for slot12, slot13 in ipairs(slot1.part[1]) do slot7[slot13] = true end for slot12, slot13 in ipairs(slot1.part[2]) do slot8[slot13] = true end end for slot12, slot13 in ipairs(ShipType.AllShipType) do slot14 = slot12 <= slot5.childCount and slot5:GetChild(slot12 - 1) or cloneTplTo(slot6, slot5) GetImageSpriteFromAtlasAsync("shiptype", ShipType.Type2CNLabel(slot13), slot14) setActive(slot14:Find("main"), slot7[slot13] and not slot8[slot13]) setActive(slot14:Find("sub"), slot8[slot13] and not slot7[slot13]) setImageAlpha(slot14, not slot7[slot13] and not slot8[slot13] and 0.3 or 1) end end function updateEquipUpgradeInfo(slot0, slot1, slot2) uv0(slot0:Find("attrs"), slot0:Find("attr_tpl"), slot1.attrs, slot2) setActive(slot0:Find("weapon"), #slot1.weapon.sub > 0) if #slot1.weapon.sub > 0 then uv0(slot0:Find("weapon"), slot3, { slot1.weapon }, slot2) end setActive(slot0:Find("equip_info"), #slot1.equipInfo.sub > 0) if #slot1.equipInfo.sub > 0 then uv0(slot0:Find("equip_info"), slot3, { slot1.equipInfo }, slot2) end end function setCanvasOverrideSorting(slot0, slot1) slot0:SetParent(pg.LayerWeightMgr.GetInstance().uiOrigin, false) setActive(slot0, true) GetOrAddComponent(slot0, typeof(Canvas)).overrideSorting = slot1 slot0:SetParent(slot0.parent, false) setActive(slot0, isActive(slot0)) end function createNewGameObject(slot0, slot1) slot2 = GameObject.New() if slot0 then slot2.name = "model" end slot2.layer = slot1 or Layer.UI return GetOrAddComponent(slot2, "RectTransform") end function CreateShell(slot0) if type(slot0) ~= "table" and type(slot0) ~= "userdata" then return slot0 end return setmetatable({}, setmetatable({ __index = slot0 }, slot0)) end function CameraFittingSettin(slot0) if 1.7777777777777777 > Screen.width / Screen.height then slot4 = slot3 / slot2 GetComponent(slot0, typeof(Camera)).rect = uv0.Rect.New(0, (1 - slot4) / 2, 1, slot4) end end function SwitchSpecialChar(slot0, slot1) if PLATFORM_CODE ~= PLATFORM_US then slot0 = slot0:gsub(" ", " "):gsub("\t", "    ") end if not slot1 then slot0 = slot0:gsub("\n", " ") end return slot0 end function AfterCheck(slot0, slot1) slot2 = { [slot6] = slot7[1]() } for slot6, slot7 in ipairs(slot0) do -- Nothing end slot1() for slot6, slot7 in ipairs(slot0) do if slot2[slot6] ~= slot7[1]() then slot7[2]() end slot2[slot6] = slot7[1]() end end function CompareFuncs(slot0, slot1, slot2) slot3 = 1 while slot3 <= #slot2 do slot4 = slot2[slot3] if slot4(slot0) == slot4(slot1) then slot3 = slot3 + 1 else return slot5 < slot6 end end return false end function DropResultIntegration(slot0) slot1 = {} slot2 = 1 while slot2 <= #slot0 do slot1[slot3] = slot1[slot0[slot2].type] or {} if slot1[slot3][slot0[slot2].id] then slot5 = slot0[slot1[slot3][slot4]] slot5.count = slot5.count + table.remove(slot0, slot2).count else slot1[slot3][slot4] = slot2 slot2 = slot2 + 1 end end slot3 = { function (slot0) slot2 = slot0.id if slot0.type == DROP_TYPE_SHIP then return 1 elseif slot1 == DROP_TYPE_RESOURCE then if slot2 == 1 then return 2 else return 3 end elseif slot1 == DROP_TYPE_ITEM then if slot2 == 59010 then return 4 elseif slot2 == 59900 then return 5 elseif (pg.item_data_statistics[slot2] and slot3.type or 0) == 9 then return 6 elseif slot4 == 5 then return 7 elseif slot4 == 4 then return 8 elseif slot4 == 7 then return 9 end elseif slot1 == DROP_TYPE_VITEM and slot2 == 59011 then return 4 end return 100 end, function (slot0) slot1 = nil if slot0.type == DROP_TYPE_SHIP then slot1 = pg.ship_data_statistics[slot0.id] elseif slot0.type == DROP_TYPE_ITEM then slot1 = pg.item_data_statistics[slot0.id] end return (slot1 and slot1.rarity or 0) * -1 end, function (slot0) return slot0.id end } table.sort(slot0, function (slot0, slot1) return CompareFuncs(slot0, slot1, uv0) end) end function getLoginConfig() slot0 = os.time() slot1 = 1 for slot5, slot6 in ipairs(pg.login.all) do if pg.login[slot6].date ~= "stop" then if pg.TimeMgr.GetInstance():parseTimeFromConfig(pg.login[slot6].date[2]) < slot0 and slot0 < pg.TimeMgr.GetInstance():parseTimeFromConfig(pg.login[slot6].date[3]) then slot1 = slot6 end end end slot4 = pg.login[slot1].login_cri ~= "" and true or false return slot4, slot4 and slot3 or (pg.login[slot1].login_static ~= "" and slot2 or "login"), pg.login[slot1].bgm end function setIntimacyIcon(slot0, slot1, slot2) slot3 = {} slot4 = nil if slot0.childCount > 0 then slot4 = slot0:GetChild(0) else setParent(LoadAndInstantiateSync("template", "intimacytpl").transform, slot0) end setImageAlpha(slot4, slot2 and 0 or 1) eachChild(slot4, function (slot0) setActive(slot0, false) end) if slot2 then if not slot4:Find(slot2 .. "(Clone)") then setParent(LoadAndInstantiateSync("ui", slot2), slot4) end setActive(slot5, true) elseif slot1 then setImageSprite(slot4, GetSpriteFromAtlas("energy", slot1), true) end return slot4 end