1070 lines
31 KiB
JavaScript
1070 lines
31 KiB
JavaScript
"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 + ". " + 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 + ". " + $("#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 );
|
||
|
||
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);
|
||
}
|
||
} |