"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", "该模式需要开放日或贡献者特别奖励,详细了解请开始游戏后查看小地图上方的攻略。", 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);
}
}