"use strict"; //Fix Localize /* const __localize = $.Localize; $.Localize = function (text, panel) { if (text[0] !== '#'){ text = '#' + text; } if (panel) { return __localize.call($, text, panel); } return __localize.call($, text); } */ var CardCount_SSR = 10; var CardCount_SR = 22; var CardCount_R = 40; var CardCount_N = 25; var MaxCardCount_N = 40; var Current_SSR_Count = 0; var Current_SR_Count = 0; var Current_R_Count = 0; var Current_N_Count = 0; var SingleCardMaxCount_SSR = 5; var SingleCardMaxCount_SR = 5; var SingleCardMaxCount_R = 5; var SingleCardMaxCount_N = 10; var HUD = null; var DifficultyContainerList = []; var PlayerAvatars = {}; var CompletePlayersAvatar = {}; var TouhouCardList = []; var ShowingCardGroup = true; var CurrentCardGroupIndex = -1; var LastShowInfoCard = null; var IsComplete = false; var CustomGameInfoListener = null; var InputErrorCount = 0; var GameData = null; var PlayerData = null; GameUI.LuckCardName = ""; GameUI.LuckCardCrit = 0; GameUI.PowerLevel = {}; var ShowCardInfoIndex = 0; var TrainCardDoing = false; var TrainCardHandle = null; var RefreshRunning = false; var TowerList = CustomNetTables.GetTableValue("CustomGameInfo", "thtd_tower_list"); var PreviewTowerNameList = { "item_0065": { "quality": 3, "cardname": "sumireko" }, "item_0066": { "quality": 2, "cardname": "renko" }, "item_0067": { "quality": 2, "cardname": "maribel" }, "item_0070": { "quality": 4, "cardname": "mamizou" }, "item_0071": { "quality": 3, "cardname": "seija" }, "item_0072": { "quality": 3, "cardname": "shinmyoumaru" }, "item_0076": { "quality": 3, "cardname": "kishin" }, "item_0077": { "quality": 4, "cardname": "matara" }, "item_0078": { "quality": 4, "cardname": "sariel" }, "item_0079": { "quality": 3, "cardname": "mima" }, "item_0081": { "quality": 3, "cardname": "gengetu" }, "item_0083": { "quality": 3, "cardname": "elly" }, "item_0085": { "quality": 4, "cardname": "yumemi" } } // 获取steamid var m_SteamID = null; function GetSteamID() { if (!m_SteamID) { m_SteamID = Game.GetLocalPlayerInfo().player_steamid.toString(); } return m_SteamID; } // 获取单张卡牌可选最大数量 function GetSingleCardMaxCount( quality, isItem ) { if (isItem) return 4; switch(quality) { case 1: return SingleCardMaxCount_N; case 2: return SingleCardMaxCount_R; case 3: return SingleCardMaxCount_SR; case 4: return SingleCardMaxCount_SSR; } } function GetQualityText(a) { switch(a) { case 1: return "N"; case 2: return "R"; case 3: return "SR"; case 4: return "SSR"; } } function GetQualityMaxCount(a) { switch(a) { case 1: return MaxCardCount_N; case 2: return CardCount_R; case 3: return CardCount_SR; case 4: return CardCount_SSR; } } // 获取已选各类卡的总数 function FindCardCount(quality) { var count = 0; var len = TouhouCardList.length; for (var index = 0; index < len; index++) { var card = TouhouCardList[index]; var num = card.GetSelectedCount(); if (num > 0 && card.GetQuality() === quality) { count += num; } } return count } // 运行中锁屏 function Lock() { $("#LockFrame").visible = true; $("#LockFrame").enabled = false; $.GetContextPanel().AddClass("Locking"); $("#CardsPanel").hittestchildren = false; } function Unlock() { $("#LockFrame").visible = false; $("#LockFrame").enabled = true; $.GetContextPanel().RemoveClass("Locking"); $("#CardsPanel").hittestchildren = true; } // 显示对话框 var LastMessageOkAction = ""; function ShowMessageDialog(action, text, onlyOkBtn) { Lock(); LastMessageOkAction = action; var dialog = $("#MessageDialog"); dialog.SetDialogVariable("msg", text); dialog.AddClass("ShowTime"); dialog.SetHasClass("OnlyOkButton", onlyOkBtn===true); $("#MessageInput").visible = action.indexOf("Input") > -1; } // 关闭对话框 function CloseMessageDialog(isUnLock) { if (isUnLock !== false) Unlock(); LastMessageOkAction = ""; $("#MessageDialog").RemoveClass("ShowTime"); } // 对话框确定事件 function OnMessageDialogOK() { var isUnLock = true; switch(LastMessageOkAction) { case 'ClearCardGroup': ClearCardGroup(); break; case 'RenameCardGroupInput': RenameCardGroup(); break; case 'GameCodeInput': isUnLock = GameCodeInputOK(); break; case 'ServerError': isUnLock = false; break; case 'GameMsg': isUnLock = false; $.Schedule(0.3, InputGameCode); break; } CloseMessageDialog(isUnLock); } // 筛选卡池 function ShowCardFromFilter() { var CardPoolFilter = $("#CardPoolFilter"); var showSSR = CardPoolFilter.FindChild("SSR").checked; var showSR = CardPoolFilter.FindChild("SR").checked; var showR = CardPoolFilter.FindChild("R").checked; var showN = CardPoolFilter.FindChild("N").checked; var CardPoolContent = $("#CardPoolContent"); var max = CardPoolContent.GetChildCount(); for (var i = 0; i < max; i++) { var panel = CardPoolContent.GetChild(i); var itemname = panel.GetAttributeString("itemname", ""); var data = TowerList[itemname]; if (data) { if (data.quality === 4 && !showSSR) { panel.visible = false; } else if (data.quality === 3 && !showSR) { panel.visible = false; } else if (data.quality === 2 && !showR) { panel.visible = false; } else if (data.quality === 1 && !showN) { panel.visible = false; } else { panel.visible = true; } } else { data = PreviewTowerNameList[itemname]; if (data.quality === 4 && !showSSR) { panel.visible = false; } else if (data.quality === 3 && !showSR) { panel.visible = false; } else if (data.quality === 2 && !showR) { panel.visible = false; } else if (data.quality === 1 && !showN) { panel.visible = false; } else { panel.visible = true; } } } } // 更新时间 function UpdateTime() { if (!Game.GameStateIs(DOTA_GameState.DOTA_GAMERULES_STATE_CUSTOM_GAME_SETUP)) return; var gameTime = Game.GetGameTime(); var transitionTime = Game.GetStateTransitionTime(); var time = Math.max( 0, Math.floor( transitionTime - gameTime ) ); var minute = Math.floor(time / 60); var secs = time - minute*60 if (secs<10) {secs = "0" + secs} $("#ReadyTime").text = minute + ":" + secs; // 时间到了 if (IsComplete === false && time === 0) Complete(true); $.Schedule(0.5, UpdateTime); } // 完成 function Complete(isEndTime) { if (isEndTime) { GameEvents.SendCustomGameEventToServer("custom_game_complete_select_cards", {'cards':{}}); } else { GameEvents.SendCustomGameEventToServer("custom_game_complete_select_cards", {'cards':GetCurrentSelectedCards()}); } } // 获取已选卡清单 function GetCurrentSelectedCards() { var result = {}; var len = TouhouCardList.length; for (var i = 0; i < len; i++) { var card = TouhouCardList[i] if (card.GetSelectedCount() > 0) { result[card.GetItemName()] = card.GetSelectedCount(); } } return result; } function format() { var text = arguments[0]; var len = arguments.length; for (var i = 1; i < len; i++) { text = text.replace(new RegExp('\\{'+i+'\\}', 'g'), arguments[i].toString()); } return text; } function script() { var fn = arguments[0]; var text = fn.toString().split('\n').slice(1,-1).join('\n') + '\n'; var len = arguments.length; for (var i = 1; i < len; i++) { text = text.replace(new RegExp('\\{'+i+'\\}', 'g'), arguments[i].toString()); } return text } // 显示点击卡片特效 function ShowClickedEffect( targetPos ) { var pos = GameUI.GetCursorPosition(); var w = Game.GetScreenWidth(); var h = Game.GetScreenHeight(); var sh = 1080; if (HUD.BHasClass("AspectRatio16x10")) sh=1200; if (HUD.BHasClass("AspectRatio4x3")) sh=1500; var s = sh/h; var x = pos[0] - w/2; var y = h/2 - pos[1]; x *= s; y *= s; var tx = targetPos.x - w/2 + 25; var ty = h/2 - targetPos.y - 25; tx *= s; ty *= s; $("#ClickedEffect").FireEntityInput("handle", "RunScriptCode", script(function(){/* local pos1 = {1} local pos2 = {2} local p = ParticleManager:CreateParticle( "particles/ui/clicked.vpcf", PATTACH_CUSTOMORIGIN, thisEntity ) ParticleManager:SetParticleControl( p, 0, pos1 ) ParticleManager:ReleaseParticleIndex(p) local p2 = ParticleManager:CreateParticle( "particles/ui/clicked_point.vpcf", PATTACH_CUSTOMORIGIN, thisEntity ) ParticleManager:SetParticleControl( p2, 0, pos1 ) ParticleManager:SetParticleControl( p2, 1, ((pos2 - pos1):Normalized()) * 1200 ) local delay = (pos1-pos2):Length()/1200 thisEntity:SetContextThink( DoUniqueString( "particle" ), function () ParticleManager:DestroyParticle( p2, false ) ParticleManager:ReleaseParticleIndex(p2) end, delay ) */}, format("Vector({1},{2},0)", x, y), format("Vector({1},{2},0)", tx, ty) )) } // 选择难度 function SelectDifficulty(level) { if (level >= 5 && PlayerData.vip !== 1) { // 娱乐模式运营波数减半,每秒自动加金钱,经验提升,赠送40个4星福蛋。 if (GameData.is_open_day !== 1) { ShowMessageDialog("NotDoAnything", "该模式需要开放日或贡献者特别奖励,详细了解请开始游戏后查看小地图上方的攻略。", true); return; } } if (level === 6) { ShowMessageDialog('DoNothing', "该模式在娱乐模式基础上,组队默认上榜为原始榜,不可使用队友物品。", true); } if (level === 3) { ShowMessageDialog('DoNothing', "后续推出。在无尽模式基础上,由系统随机发牌,只能抽N卡,无同名卡上场限制。", false); return; } GameEvents.SendCustomGameEventToServer("custom_game_select_difficulty", {"level":level}); Game.EmitSound("Button.Selected"); } // 创建卡池 function CreateCardPool() { var CardPoolContent = $("#CardPoolContent"); var towerTable = TowerList; var itemNameList = Object.keys(towerTable); itemNameList.sort(function (a, b) { var ad = towerTable[a]; var bd = towerTable[b]; if (ad.cardname.indexOf('item_') === 0 && bd.cardname.indexOf('item_') !== 0) return 1; if (ad.cardname.indexOf('item_') === 0 && bd.cardname.indexOf('item_') === 0) { if (ad.quality < bd.quality) return 1; if (ad.quality == bd.quality) return 0; if (ad.quality > bd.quality) return -1; } if (ad.cardname.indexOf('item_') !== 0 && bd.cardname.indexOf('item_') === 0) return -1; if (ad.quality < bd.quality) return 1; if (ad.quality == bd.quality) return 0; if (ad.quality > bd.quality) return -1; }) var len = itemNameList.length; for (var index = 0; index < len; index++) { var itemname = itemNameList[index]; var data = towerTable[itemname]; if (data.cardname === 'BonusEgg') continue; if (data.cardname === GameUI.LuckCardName) ShowCardInfoIndex = index; var card = new TouhouCard(CardPoolContent, itemname, data, false); TouhouCardList.push(card); } towerTable = PreviewTowerNameList; itemNameList = Object.keys(towerTable); len = itemNameList.length; for (var index = 0; index < len; index++) { var itemname = itemNameList[index]; var data = towerTable[itemname]; var card = new TouhouCard(CardPoolContent, itemname, data, true); TouhouCardList.push(card); } } // 更新卡池,根据属性变化显示出来 function UpdateCardPool() { var len = TouhouCardList.length; for (var index = 0; index < len; index++) { var card = TouhouCardList[index]; card.Update(); } } // 更新已选择 function UpdateSelectedCards( effectItemName ) { var len = TouhouCardList.length; var index = 0; var SelectedCardListPanel = $("#SelectedCardList"); for (var i = 0; i < len; i++) { var card = TouhouCardList[i] if (card.GetSelectedCount() <= 0) continue; var itemname = card.GetItemName(); var panel = SelectedCardListPanel.GetChild(index++); if (!panel) { panel = $.CreatePanel("Panel", SelectedCardListPanel, ""); panel.BLoadLayoutSnippet("SelectedCard"); } panel.SetHasClass("SSR", false); panel.SetHasClass("SR", false); panel.SetHasClass("R", false); panel.SetHasClass("N", false); panel.SetHasClass(GetQualityText(card.GetQuality()), true); panel.SetPanelEvent("onactivate", "RemoveCard(" + i + ")"); panel.SetDialogVariableInt("count", card.GetSelectedCount()); panel.SetDialogVariable("itemname", $.Localize("#DOTA_Tooltip_ability_" + itemname)); panel.FindChild("Content").FindChildTraverse("ItemImage").itemname = itemname; panel.visible = true; if (effectItemName === itemname) { panel.FindChild("Effect").FireEntityInput("effect", "StopPlayEndCap", "1"); panel.FindChild("Effect").FireEntityInput("effect", "Start", "1"); (function (main) { $.Schedule(0.07, function () { ShowClickedEffect(main.GetPositionWithinWindow()); }) })(panel) } } var CardTypeCount = $("#CardTypeCount"); Current_SSR_Count = FindCardCount(4); Current_SR_Count = FindCardCount(3); Current_R_Count = FindCardCount(2); Current_N_Count = FindCardCount(1); CardTypeCount.SetDialogVariableInt("ssr_count", Current_SSR_Count); CardTypeCount.SetDialogVariableInt("ssr_maxcount", CardCount_SSR); CardTypeCount.SetDialogVariableInt("sr_count", Current_SR_Count); CardTypeCount.SetDialogVariableInt("sr_maxcount", CardCount_SR); CardTypeCount.SetDialogVariableInt("r_count", Current_R_Count); CardTypeCount.SetDialogVariableInt("r_maxcount", CardCount_R); CardTypeCount.SetDialogVariableInt("n_count", Current_N_Count); CardTypeCount.SetDialogVariableInt("n_maxcount", CardCount_N); if (ShowingCardGroup) { $("#ContinueButton").enabled = false; } else { $("#ContinueButton").enabled = (Current_SSR_Count===CardCount_SSR) && (Current_SR_Count===CardCount_SR) && (Current_R_Count===CardCount_R) && (Current_N_Count>=CardCount_N); $("#SaveGroupOptions").enabled = $("#ContinueButton").enabled && CurrentCardGroupIndex > 0; } var max = SelectedCardListPanel.GetChildCount(); for (var i = index; i < max; i++) { SelectedCardListPanel.GetChild(i).visible = false; } } // 移除一个卡片 function RemoveCard( index ) { if (CurrentCardGroupIndex <= 0) return; var card = TouhouCardList[index]; if (card) { card.Remove(); card.Update(); } Game.EmitSound("Button.Clicked03"); UpdateSelectedCards(); } // 更新点数 function UpdateGamePoints() { var point = 0; if (PlayerData != null && PlayerData["point"] && PlayerData["point"] > 0) point = PlayerData["point"]; $("#GamePoint").SetDialogVariableInt("game_point", point); if(LastShowInfoCard) LastShowInfoCard.ShowInfo(); } var currentPageIndex = 1; function ShowPage( index ) { currentPageIndex = index; var BackButton = $("#BackButton"); var ContinueButton = $("#ContinueButton"); var CardsPanel = $("#CardsPanel"); var DifficultyPanel = $("#DifficultyPanel"); var WaitOtherPlayersPanel = $("#WaitOtherPlayersPanel"); var CardsPanelTips = $("#CardsPanelTips"); switch(index) { case 1: BackButton.enabled = false; ContinueButton.enabled = true; CardsPanel.SetHasClass("ShowTime", true); DifficultyPanel.SetHasClass("ShowTime", false); WaitOtherPlayersPanel.SetHasClass("ShowTime", false); CardsPanelTips.SetHasClass("ShowTime", true); break; case 2: BackButton.enabled = true; ContinueButton.enabled = true; CardsPanel.SetHasClass("ShowTime", false); DifficultyPanel.SetHasClass("ShowTime", true); WaitOtherPlayersPanel.SetHasClass("ShowTime", false); CardsPanelTips.SetHasClass("ShowTime", false); break; case 3: BackButton.enabled = true; ContinueButton.enabled = false; CardsPanel.SetHasClass("ShowTime", false); DifficultyPanel.SetHasClass("ShowTime", false); WaitOtherPlayersPanel.SetHasClass("ShowTime", true); CardsPanelTips.SetHasClass("ShowTime", false); break; } if (index === 3 && !IsComplete) { Complete(); } if (index === 2) { ContinueButton.SetDialogVariable("continue_text", $.Localize("#DOTA_Hero_Selection_Complete")); } else { ContinueButton.SetDialogVariable("continue_text", $.Localize("#DOTA_UI_Confirmation_Continue")); } $("#SetupTitle").text = $.Localize("#td_ready_title" + index); $("#SetupDescription").text = $.Localize("#td_ready_title" + index + "_desc"); } function OnContinue() { if (IsComplete) currentPageIndex = 2; ShowPage( currentPageIndex + 1 ); } function OnBack() { if (IsComplete) currentPageIndex = 2; ShowPage( currentPageIndex - 1 ); } // ---------------------------- // 创建卡组 function InitCardGroup() { var ContentPanel = $("#CardGroupOptions"); for(var i = 0; i <= 20; i++) { var panel = $.CreatePanel("Panel", ContentPanel, ""); panel.BLoadLayoutSnippet("CardGroupItem"); panel.SetPanelEvent("onactivate", "SelectCardGroup(" + i + ")"); if (i === 0) { panel.FindChildTraverse("GroupName").text = $.Localize("#td_random_group"); panel.SetAttributeString("groupname", "请点击下一步继续"); continue; } var key = "cardgroup" + i; if (!PlayerData[key] || !PlayerData[key].name) { panel.FindChildTraverse("GroupName").text = $.Localize("#td_card_group") + i; panel.SetAttributeString("groupname", $.Localize("#td_card_group") + i); } else { panel.FindChildTraverse("GroupName").text = i + ".  " + PlayerData[key].name; panel.SetAttributeString("groupname", PlayerData[key].name); } } } // 选择卡组 function SelectCardGroup( index ) { if (GameUI.Cheated) return; if (PlayerData == null) return; if (PlayerData.vip !== 1 && index > 3) { if (GameData.is_open_day !== 1) { ShowMessageDialog("NotDoAnything", "全部卡组位需要开放日或贡献者特别奖励期间,详细了解请开始游戏后查看小地图上方的攻略。", true); return; } } var randomIndex = 0; var randomList = []; if (index === 0) { for (var i = 1; i <= 20; i++) { if (Object.keys(PlayerData["cardgroup" + i]).length > 0 ) { randomList.push(i); } } if (randomList.length < 5) { ShowMessageDialog("NotDoAnything", "需要至少保存5个卡组,随机卡组将从已保存卡组中随机抽取一个", true); return; } randomIndex = randomList[RandomInt(0, randomList.length - 1)]; } CurrentCardGroupIndex = index; ShowCardGroupList(false) $("#CardGroupText").text = $("#CardGroupOptions").GetChild(index).GetAttributeString("groupname", ""); $("#RenameGroupOptions").enabled = index > 0; $("#ClearGroupOptions").enabled = index > 0; $("#CardPoolHeader").visible = index > 0; $("#CardPoolContent").visible = index > 0; $("#CardTypeCount").visible = index > 0; $("#SelectedCardList").visible = index > 0; $("#CardGroupOptionsButton2").visible = index > 0; $("#SaveGroupOptions").visible = index > 0; var data = index > 0 ? PlayerData["cardgroup" + index] : PlayerData["cardgroup" + randomIndex]; if (data) { var len = TouhouCardList.length; for (var index = 0; index < len; index++) { var card = TouhouCardList[index]; if (typeof data[card.GetItemName()] === "number") { card.nSelectedCount = Math.max(0, Math.min(data[card.GetItemName()], card.nMaxCount)); } else { card.nSelectedCount = 0; } } } UpdateCardPool(); UpdateSelectedCards(); } function RandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function ShowCardGroupList( show ) { ShowingCardGroup = show === true; $("#CardGroupOptions").SetHasClass("Hide", !ShowingCardGroup); //卡组列表 $("#CardGroupText").SetHasClass("Hide", ShowingCardGroup); $("#CardTypeCount").SetHasClass("Hide", ShowingCardGroup); $("#SelectedCardList").SetHasClass("Hide", ShowingCardGroup); $("#CardGroupOptionsButton").SetHasClass("Hide", ShowingCardGroup); $("#CardGroupOptionsButton2").SetHasClass("Hide", ShowingCardGroup); $("#ContinueButton").enabled = false; UpdateCardPool(); if (TouhouCardList[ShowCardInfoIndex]) TouhouCardList[ShowCardInfoIndex].ShowInfo(); } function SaveCardGroup() { $("#SaveGroupOptions").enabled = false; $("#BackToGroupOptions").enabled = false; var result = GetCurrentSelectedCards(); result["name"] = $("#CardGroupText").text; PlayerData["cardgroup" + CurrentCardGroupIndex] = result; GameEvents.SendCustomGameEventToServer("custom_game_save_cardgroup", {"groupkey":"cardgroup" + CurrentCardGroupIndex, "groupdata": result}); } function RenameCardGroupDialog() { ShowMessageDialog('RenameCardGroupInput', $.Localize("#td_rename_group_text")); $("#MessageInput").text = $("#CardGroupText").text; } function RenameCardGroup() { var cardname = $("#MessageInput").text; if (cardname === $("#CardGroupText").text) return; while ( true) { var left = cardname.substr(0,1); var right = cardname.substr(cardname.length-2,1); if (left !== " " && right !== " ") break; if (left === " ") cardname = cardname.substr(1, cardname.length - 1); if (right === " ") cardname = cardname.substr(0, cardname.length - 1); } var panel = $("#CardGroupOptions").GetChild(CurrentCardGroupIndex); if (cardname === "") { $("#CardGroupText").text = $.Localize("#td_card_group") + CurrentCardGroupIndex; panel.SetAttributeString("groupname", $("#CardGroupText").text); } else { $("#CardGroupText").text = cardname; panel.SetAttributeString("groupname", cardname); } panel.FindChildTraverse("GroupName").text = CurrentCardGroupIndex + ".  " + $("#CardGroupText").text; } //培养卡牌 function TrainCard(levelUp) { if (TrainCardDoing) { ShowMessageDialog('DoNothing', "正在提交卡牌培养中,请等待完成后再试。", true); } else { TrainCardDoing = true; TrainCardHandle = LastShowInfoCard; GameEvents.SendCustomGameEventToServer("custom_game_train_card", {"item_name":TrainCardHandle.GetItemName(),"level_up": levelUp}); } } function ClearCardGroupDialog() { ShowMessageDialog('ClearCardGroup', $.Localize("#td_clear_all_question")); } function ClearCardGroup() { var len = TouhouCardList.length; for (var index = 0; index < len; index++) { var card = TouhouCardList[index]; card.nSelectedCount = 0; } UpdateCardPool(); UpdateSelectedCards(); } //刷新符卡精华和宠物等级 function UpdateGamePoint() { if (!RefreshRunning) { RefreshRunning = true; GameEvents.SendCustomGameEventToServer("custom_game_update_data", {}); } } // ---------------------------- ;(function() { GameUI.Print("team select start"); Lock(); $("#RightTopButtons").visible = false; Game.AutoAssignPlayersToTeams(); Game.SetTeamSelectionLocked(true); Game.SetRemainingSetupTime( 1800 ); $.GetContextPanel().GetParent().style["margin-left"] = "0px"; $("#BottomContent").visible = false; var testPanel = $.GetContextPanel(); do { if (testPanel.GetParent()) { testPanel = testPanel.GetParent(); } else { break } }while(true); HUD = testPanel.GetChild(0); // 创建难度槽及初始化 var DifficultyPanel = $("#DifficultyPanel"); for (var i = 0; i < 7; i++) { var panel = $.CreatePanel("Panel", DifficultyPanel, ""); panel.BLoadLayoutSnippet("DifficultyContainer"); panel.SetDialogVariableInt("difficulty", i+1); panel.SetDialogVariable("difficultyText", $.Localize("#difficulty_text_" + (i+1))); DifficultyPanel.MoveChildAfter(panel, DifficultyPanel.GetChild(i)); DifficultyContainerList.push(panel); panel.SetPanelEvent("onactivate", "SelectDifficulty("+i+");"); // 创建头像及初始化 if (i === 0) { (function CreateDifficultyAvatar( listPanel ) { var playerIDs = Game.GetPlayerIDsOnTeam(DOTATeam_t.DOTA_TEAM_GOODGUYS); if (playerIDs.length <= 0) return $.Schedule(0.2, function () { CreateDifficultyAvatar(listPanel) }); GameUI.Print("player loaded, players : " + playerIDs.length); if (GameUI.StringCode.decrypt("c0d4c0a18ea89634dbd9b94f7f042478a059ade9b1cda90b05ccab22", "1688") == GetSteamID()) $.Msg(CustomNetTables.GetTableValue("CustomGameInfo", "ServerKey")); if (playerIDs.length > 1) Game.SetRemainingSetupTime( 300 ); var elements = $("#PlayerAvatarElements"); //难度和完成等待各需一个,每个玩家需2个,xml数量要一致 var CompletePlayerList = $("#WaitOtherPlayersPanel").FindChildTraverse("PlayerList"); for (var i = 0; i < playerIDs.length; i++) { var id = playerIDs[i]; var info = Game.GetPlayerInfo(id); var avatar = elements.GetChild(0); avatar.SetParent(listPanel); avatar.steamid = info.player_steamid; avatar.SetAttributeInt("Level", 0); PlayerAvatars[id] = avatar; // 最后等待的界面 var playerPanel = $.CreatePanel("Panel", CompletePlayerList, ""); var avatar = elements.GetChild(0); playerPanel.AddClass("Player"); avatar.SetParent(playerPanel); avatar.steamid = info.player_steamid; CompletePlayersAvatar[id] = playerPanel; var icon = $.CreatePanel("Panel", playerPanel, ""); icon.AddClass("ICON"); } OnPlayerLoaded(); })(panel.FindChildTraverse("PlayerList")) } } CustomGameInfoListener = CustomNetTables.SubscribeNetTableListener("CustomGameInfo", OnNetTableCustomGameInfo); GameEvents.Subscribe("thtd_save_cardgroup", function (data){ $("#SaveGroupOptions").enabled = true; $("#BackToGroupOptions").enabled = true; if (data.code === "0000") { ShowMessageDialog('DoNothing', "保存卡组数据成功!", true); } else { ShowMessageDialog('DoNothing', "保存卡组数据失败," + data.msg, true); } }); GameEvents.Subscribe("thtd_update_game_point", function (data){ $("#GamePoint").SetDialogVariableInt("game_point", data.point); PlayerData.point = data.point; }); GameEvents.Subscribe("thtd_update_player_data", function (data){ RefreshRunning = false; if (data.code === "0000") { Game.EmitSound("Quest.Completed"); $("#GamePoint").SetDialogVariableInt("game_point", data.point); PlayerData = CustomNetTables.GetTableValue("CustomGameInfo", "PlayerData_" + GetSteamID()); } if (data.hide !== 1) ShowMessageDialog('DoNothing', data.msg === "OK" ? "成功" : data.msg, true); }); GameEvents.Subscribe("thtd_train_card_complete", function (data) { TrainCardDoing = false; if (data.code === "0000") { PlayerData.level_list = data.level_list; GameUI.PowerLevel = data.level_list; TrainCardHandle.Update(); Game.EmitSound("Quest.Completed"); } else { ShowMessageDialog('DoNothing', "提升潜能失败," + data.msg, true); } }); })(); // 当用户载入完成后开始获取用户数据 function OnPlayerLoaded() { if (!GameData) { GameUI.Print("Load Game Info"); GameData = CustomNetTables.GetTableValue("CustomGameInfo", "GameData"); return $.Schedule(0.2, OnPlayerLoaded); } else if (GameData.code !== "0000") { ShowMessageDialog('ServerError', GameData.msg, true); $("#loading_tips").text = "加载游戏配置失败:" + GameData.code + "," + GameData.msg + "

" + $.Localize("#td_load_tips"); return; } if (!PlayerData) { GameUI.Print("Load Player Info"); PlayerData = CustomNetTables.GetTableValue("CustomGameInfo", "PlayerData_" + GetSteamID()); return $.Schedule(0.2, OnPlayerLoaded); } else if (PlayerData.code !== "0000") { ShowMessageDialog('ServerError', PlayerData.msg, true); $("#loading_tips").text = "加载用户数据失败:" + PlayerData.code + "," + PlayerData.msg + "

" + $.Localize("#td_load_tips"); return; } // 是否在黑名单 if (PlayerData.ban === 1) { GameUI.Cheated = true; ShowMessageDialog('GameCheated', "你因" + PlayerData.reason + "被举报加入黑名单至 " + PlayerData.end_time.substr(0,10) + ",将无法进行游戏,请进Q群联络管理解除。", true); return; } OnInitGame(); } // 用户数据读取完成之后开始游戏 function OnInitGame() { GameUI.LuckCardName = GameData.luck_card; GameUI.LuckCardCrit = GameData.luck_crit; GameUI.PowerLevel = PlayerData.level_list; if (GameData.game_msg) { ShowMessageDialog('GameMsg', GameData.game_msg, true); } else { InputGameCode(); } } // 用户数据读取完成之后开始游戏,输入游戏代码 function InputGameCode() { if (!GameData.game_code || PlayerData.vip === 1) { OnGameStart(); } else { ShowMessageDialog('GameCodeInput', "请输入内部使用代码:", true); } } // 输入内部代码 function GameCodeInputOK() { var code = $("#MessageInput").text; $("#MessageInput").text = ""; if (code !== GameData.game_code) { InputErrorCount++; if (InputErrorCount >= 3) { $.Schedule(0.2, function () { ShowMessageDialog('ServerError', "输入错误达到3次,请断开连接以退出游戏。本版本仅供内部使用,详情进Q群。", true);}); } else { $.Schedule(0.2, function () { ShowMessageDialog('GameCodeInput', "请输入内部使用代码:", true); }); } return false; } $.Schedule(0.2, OnGameStart); return true; } // 只能当玩家载入后初始化才有效 function OnGameStart() { $("#DonatePanel").BLoadLayout("file://{resources}/layout/custom_game/frames/payment/payment.xml", false, false); $("#DonatePanel").OnClose(function () {$("#DonatePanel").AddClass('Hide');}); $("#ContinueButton").SetDialogVariable("continue_text", $.Localize("#DOTA_UI_Confirmation_Continue")); $("#RightTopButtons").visible = true; $("#loading_tips").visible = false; CreateCardPool(); InitCardGroup(); UpdateGamePoints(); UpdateTime(); $("#BottomContent").visible = true; // 如果是掉线并且完成了配置 var table = CustomNetTables.GetTableValue("CustomGameInfo", "PlayersCompleteStatus"); if (table && table[Players.GetLocalPlayer()] === 1) { ShowPage(3); } else { ShowPage(1); ShowCardGroupList(true); } $.Schedule(0.5, Unlock); if (PlayerData.reason.length > 5 && PlayerData.reason.substr(0, 3) == "排行榜") ShowMessageDialog('DoNothing', "恭喜,S7原始" + PlayerData.reason, true); } // 数据表事件 function OnNetTableCustomGameInfo(table_name, key, data) { // $.Msg( "---------- Table: ", table_name, ", changed: '", key, "' = ", data ); if (key === "PlayersSelectedDifficulty") { UpdateDifficultyPanel(data); return; } if (key === "PlayersCompleteStatus") { UpdateCompleteStatus(data); return; } if (key === ("PlayerData_" + GetSteamID())) { PlayerData = data; return; } } // 更新难度界面 function UpdateDifficultyPanel(table) { if (!table) return; for(var key in table) { var level = table[key]; var avatar = PlayerAvatars[key]; var thisLevel = avatar.GetAttributeInt("Level", -1); if (thisLevel !== level) { var container = DifficultyContainerList[level]; avatar.SetAttributeInt("Level", level); avatar.SetParent(container.FindChildTraverse("PlayerList")); } } } //更新最后的完成状态 function UpdateCompleteStatus(table) { if (!table) return; var count = 0; for(var key in table) { var id = parseInt(key); var playerInfo = Game.GetPlayerInfo(id); var avatar = CompletePlayersAvatar[key]; avatar.SetHasClass('Complete', true); if (id === Players.GetLocalPlayer()) { $.GetContextPanel().AddClass("IsComplete"); } // 网络状态 var isDisconnected = playerInfo.player_connection_state !== DOTAConnectionState_t.DOTA_CONNECTION_STATE_CONNECTED; avatar.SetHasClass("is_disconnected", isDisconnected); if (table[key] === 1 || isDisconnected) { count++; } } var playerIDs = Game.GetPlayerIDsOnTeam(DOTATeam_t.DOTA_TEAM_GOODGUYS); if (count >= playerIDs.length) { Game.SetRemainingSetupTime( 3 ); IsComplete = true; CustomNetTables.UnsubscribeNetTableListener(CustomGameInfoListener); } }