Files
2HUCardTDGame/content/panorama/scripts/custom_game/team_select.js

1070 lines
31 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use strict";
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", "Only VIPs can play this outside of open day.", true);
return;
}
}
if (level === 6) {
ShowMessageDialog('DoNothing', "Based on Funny Mode, you cannot use teammates items and will be ranked on the solo leaderboard.", true);
}
if (level === 3) {
ShowMessageDialog('DoNothing', "Not yet implemented", 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", "Please hit continue");
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 + ".&nbsp;&nbsp;" + 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", "You can only select this deck as a VIP or during Open Day", 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", "You must have at least 5 decks", 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 + ".&nbsp;&nbsp;" + $("#CardGroupText").text;
}
//培养卡牌
function TrainCard(levelUp) {
if (TrainCardDoing) {
ShowMessageDialog('DoNothing', "Request in progress", 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 ); // Disable lower time for multiplayer
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', "Card group saved!", true);
} else {
ShowMessageDialog('DoNothing', "Failed to save deck, " + 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" ? "Success" : 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', "Train card failed, " + 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 = "<font color='red'>Server returned error" + GameData.code + "" + GameData.msg + "</font><br><br>" + $.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 = "<font color='red'>Server returned player data error" + PlayerData.code + "" + PlayerData.msg + "</font><br><br>" + $.Localize("#td_load_tips");
return;
}
// 是否在黑名单
if (PlayerData.ban === 1) {
GameUI.Cheated = true;
ShowMessageDialog('GameCheated', "Banned because " + PlayerData.reason + "until " + PlayerData.end_time.substr(0,10) + "you cannot play this game version.", 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', "Please enter internal use code", true);
}
}
// 输入内部代码
function GameCodeInputOK() {
var code = $("#MessageInput").text;
$("#MessageInput").text = "";
if (code !== GameData.game_code) {
InputErrorCount++;
if (InputErrorCount >= 3) {
$.Schedule(0.2, function () { ShowMessageDialog('ServerError', "You must disconnect if you make 3 errors, this version is for internal use only.", true);});
} else {
$.Schedule(0.2, function () { ShowMessageDialog('GameCodeInput', "Please enter the internal use code", 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, 11) == "Leaderboard")
ShowMessageDialog('DoNothing', "Congratulations, S7 original" + 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);
}
}