Files
2HUCardTDGame/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", "该模式需要开放日或贡献者特别奖励,详细了解请开始游戏后查看小地图上方的攻略。", 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 + ".&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", "全部卡组位需要开放日或贡献者特别奖励期间,详细了解请开始游戏后查看小地图上方的攻略。", 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 + ".&nbsp;&nbsp;" + $("#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 = "<font color='red'>加载游戏配置失败:" + 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'>加载用户数据失败:" + PlayerData.code + "" + PlayerData.msg + "</font><br><br>" + $.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);
}
}