// 卡池中的卡片事件 function setCardPoolEvent(panel, card) { panel.SetPanelEvent("oncontextmenu", function () { if (card.IsDisabled() || ShowingCardGroup) return; card.Select(); }) panel.SetPanelEvent("ondblclick", function () { if (card.IsDisabled() || ShowingCardGroup) return; card.Select(); }) panel.SetPanelEvent("onactivate", function () { card.ShowInfo(); Game.EmitSound("UI.ClickCard"); }) } function TouhouCard( parent, itemName, itemData, isPreview ) { var panel = $.CreatePanel("Panel", parent, ""); panel.BLoadLayoutSnippet("CardPoolCard"); setCardPoolEvent(panel, this); panel.SetDialogVariable("remaining_count", "0"); panel.SetDialogVariable("level", "0"); panel.SetAttributeString("itemname", itemName); panel.SetHasClass(GetQualityText(itemData.quality), true); panel.FindChild("CardBackGround").SetImage("s2r://panorama/images/custom_game/cards/item_" + GetQualityText(itemData.quality) + "_png.vtex"); panel.FindChild("CardImage").SetImage("s2r://panorama/images/custom_game/cards/" + itemData.cardname + "_png.vtex"); this.hPanel = panel; this.szItemName = itemName; this.hItemData = itemData; this.bIsItem = itemData.cardname.indexOf("item_") === 0; this.nSelectedCount = 0; if (itemName === "item_2021" || itemName === "item_2022") this.nMaxCount = 1; else if (isPreview) this.nMaxCount = 0; else this.nMaxCount = GetSingleCardMaxCount(itemData.quality, this.bIsItem); if (this.bIsItem) { panel.GetChild(panel.GetChildCount() - 1).visible = false; } } // 物品名称 TouhouCard.prototype.GetItemName = function() { return this.szItemName }; // TouhouCard.prototype.GetItemData = function() { return this.hItemData }; // 获取已选数量 TouhouCard.prototype.GetSelectedCount = function() { return this.nSelectedCount }; // 获取品质 TouhouCard.prototype.GetQuality = function() { return this.hItemData.quality }; // 更新卡牌 TouhouCard.prototype.Update = function() { var itemname = this.szItemName; var isItem = this.bIsItem; var quality = this.hItemData.quality; var singleCount = this.nSelectedCount; var maxCount = this.nMaxCount; var remainingCount = maxCount - singleCount; var panel = this.hPanel; // 设置剩余数量 if (ShowingCardGroup) { this.nSelectedCount = 0; panel.SetDialogVariable("remaining_count", maxCount.toString()); } else { panel.SetDialogVariable("remaining_count", remainingCount.toString()); } if (!isItem) { var level = GameUI.PowerLevel && GameUI.PowerLevel[itemname] ? GameUI.PowerLevel[itemname] : 0; panel.SetDialogVariable("level", level.toString()); panel.GetChild(panel.GetChildCount() - 1).visible = level > 0; } if (quality === 4) Current_SSR_Count = FindCardCount(4); else if (quality === 3) Current_SR_Count = FindCardCount(3); else if (quality === 2) Current_R_Count = FindCardCount(2); else if (quality === 1) Current_N_Count = FindCardCount(1); // 设置禁用状态 if (ShowingCardGroup) { panel.SetHasClass("disable", true); } else if (remainingCount <= 0) { panel.SetHasClass("disable", true); } else if (quality === 4) { panel.SetHasClass("disable", (Current_SSR_Count === CardCount_SSR) || singleCount >= maxCount); } else if (quality === 3) { panel.SetHasClass("disable", (Current_SR_Count === CardCount_SR) || singleCount >= maxCount); } else if (quality === 2) { panel.SetHasClass("disable", (Current_R_Count === CardCount_R) || singleCount >= maxCount); } else if (quality === 1) { panel.SetHasClass("disable", (Current_N_Count >= MaxCardCount_N) || singleCount >= maxCount); } }; // 是否为禁用状态 TouhouCard.prototype.IsDisabled = function() { return this.hPanel.BHasClass("disable"); }; // 选择卡牌 TouhouCard.prototype.Select = function() { var count = FindCardCount(quality); if (count >= GetQualityMaxCount(quality)) return; var data = this.hItemData; var quality = data.quality; var itemname = this.szItemName; var singleCount = this.nSelectedCount; var maxCount = this.nMaxCount; var isItem = this.bIsItem; if (singleCount >= maxCount) { this.Update(); return; } this.nSelectedCount++; UpdateSelectedCards(itemname); UpdateCardPool(); Game.EmitSound('UI.SelectCard'); }; // 移除卡牌 TouhouCard.prototype.Remove = function() { this.nSelectedCount--; if (this.nSelectedCount < 0) this.nSelectedCount = 0; UpdateCardPool(); }; // 显示查看卡牌信息 TouhouCard.prototype.ShowInfo = function() { if (LastShowInfoCard) { LastShowInfoCard.hPanel.SetHasClass("ShowInfo", false); } this.hPanel.SetHasClass("ShowInfo", true); LastShowInfoCard = this; var data = this.hItemData; var isItem = this.bIsItem; var quality = data.quality; if ( isItem ) { $("#CardInfoName").text = $.Localize("#DOTA_Tooltip_ability_" + data.cardname); } else { $("#CardInfoName").text = $.Localize("#" + data.cardname); } var CardInfoContent = $("#CardInfoContent"); var Card = CardInfoContent.GetChild(0); Card.SetHasClass("SwapCard", false); Card.SetHasClass("SwapCard", true); Card.SetHasClass("SSR", false); Card.SetHasClass("SR", false); Card.SetHasClass("R", false); Card.SetHasClass("N", false); Card.SetHasClass(GetQualityText(quality), true); if (data.cardname.indexOf("item_") === 0) { Card.FindChildTraverse("CardImage").SetImage("s2r://panorama/images/custom_game/cards/" + data.cardname + "_png.vtex"); } else { Card.FindChildTraverse("CardImage").SetImage("s2r://panorama/images/custom_game/cards/" + data.cardname + "_big_png.vtex"); } if (GameUI.LuckCardCrit > 0 && (data.cardname === GameUI.LuckCardName || GameUI.LuckCardName === "all")) { Card.FindChildTraverse("CardName").SetImage("s2r://panorama/images/custom_game/cards/luck_png.vtex"); } else { Card.FindChildTraverse("CardName").SetImage("s2r://panorama/images/custom_game/cards/" + data.cardname + "_name_png.vtex"); } Card.FindChildTraverse("CardBackGround").SetImage("s2r://panorama/images/custom_game/cards/item_" + GetQualityText(quality) + "_png.vtex"); // 特效 var CardEffect = Card.FindChildTraverse("CardEffect"); CardEffect.FireEntityInput("SSR", "StopPlayEndCap", "1"); CardEffect.FireEntityInput("SR", "StopPlayEndCap", "1"); CardEffect.FireEntityInput(GetQualityText(quality), "Start", "1"); // 显示培养按钮 var decomposeValue = 0; if (quality === 1) decomposeValue = 5; else decomposeValue = 10; var DecomposeCardButton = $("#DecomposeCardButton"); DecomposeCardButton.enabled = !isItem && decomposeValue > 0; DecomposeCardButton.SetDialogVariableInt("amount", decomposeValue); // 显示技能 var CardAbilities = $("#CardAbilities"); var index = 0; if (isItem) { $("#CardInfoItem").visible = true; $("#CardInfoItem").itemname = data.cardname; } else { $("#CardInfoItem").visible = false; // 显示技能 for (var i = 0; i < 8; i++) { var abilityname = "thtd_" + data.cardname + "_0" + i; var key = "DOTA_Tooltip_ability_" + abilityname; var nameText = $.Localize("#" + key); if (nameText !== "#" + key) { if (nameText.substr(0, 5) === "link_") { key = nameText.substr(5, nameText.length - 5); abilityname = key.substr("DOTA_Tooltip_ability_".length, key.length - "DOTA_Tooltip_ability_".length); nameText = $.Localize("#" + key); } var panel = CardAbilities.GetChild(index++); if (!panel) { var panel = $.CreatePanel("Panel", CardAbilities, ""); panel.BLoadLayoutSnippet("CardAbility"); (function (main) { main.SetPanelEvent("onmouseover", function () { var name = main.GetAttributeString("abilityname", ""); $.DispatchEvent("DOTAShowAbilityTooltip", main, name); }); main.SetPanelEvent("onmouseout", function () { $.DispatchEvent("DOTAHideAbilityTooltip"); }); })(panel) } panel.SetAttributeString("abilityname", abilityname); panel.FindChildTraverse("AbilityImage").abilityname = abilityname; panel.FindChildTraverse("AbilityName").text = nameText; panel.visible = true; } } } var max = CardAbilities.GetChildCount(); for (var i = index; i < max; i++) { CardAbilities.GetChild(i).visible = false; } };