"use strict"; // 获取steamid var m_SteamID = null; function GetSteamID() { if (!m_SteamID) { m_SteamID = Game.GetLocalPlayerInfo().player_steamid.toString(); } return m_SteamID; } var TowerList = CustomNetTables.GetTableValue("CustomGameInfo", "thtd_tower_list"); GameUI.SetGamePoint = function (point) { var panel = $("#KillCount"); if (panel) panel.SetDialogVariableInt("point", point); }; function FindItemName( unitname ) { for(var itemname in TowerList) { if (TowerList[itemname]["cardname"] === unitname) { return itemname; } } return ""; } function SetTowerTooltip( panel ) { panel.SetPanelEvent("onmouseover", function () { var text = $.Localize(panel.GetAttributeString("UnitName", "")); $.DispatchEvent("DOTAShowTextTooltip", panel, text) }); panel.SetPanelEvent("onmouseout", function () { $.DispatchEvent("DOTAHideTextTooltip") }); panel.SetPanelEvent("onactivate", function () { var ent = panel.GetAttributeInt("Ent", 0); GameEvents.SendCustomGameEventToServer("custom_game_show_dps_card", {"ent": ent}); }); } function UpdateTowerList( list , dps_max ) { var len = list.length; var TowerList = $("#TowerList"); var index = 1; var dps_highest = 0; for (var i = 0; i < len; i++) { var data = list[i]; var panel = TowerList.GetChild(index++); if (!panel) { panel = $.CreatePanel("Panel", TowerList, ""); panel.BLoadLayoutSnippet("Tower"); SetTowerTooltip(panel); } if (index==2) { dps_highest = data.damage; } panel.FindChild("Item").itemname = data.itemname; var dpstext = ""; var dpsfixed = GameUI.DpsFix(data.damage, GameUI.Wave); if (dpsfixed < 100) { dpstext = dpsfixed * 100; } else { var wan = Math.floor(dpsfixed / 100 + 0.5); if (wan < 10000) { dpstext = wan + "万"; } else { dpstext = Math.floor(wan/10000) + "亿" + wan%10000 + "万"; } } panel.FindChildTraverse("DPS").text = dpstext; var dps_bar_pct = ( (data.damage/dps_highest)*100 || 0); panel.FindChildTraverse("DPS_bar").style.width = dps_bar_pct + "%"; var dps_pct = ( (data.damage/dps_max)*100 || 0); panel.FindChildTraverse("DPS_pct").text = dps_pct.toFixed(1) + "%"; panel.SetAttributeString("UnitName", data.unitname); panel.SetAttributeInt("Ent", data.ent); panel.visible = true; } var max = TowerList.GetChildCount(); for (var i = index; i < max; i++) { TowerList.GetChild(i).visible = false; } } function Update(damagelist) { if (!$.GetContextPanel().BHasClass("ShowTime")) return; if (!damagelist) return; var list = []; var dps_max = 0; var keys = Object.keys(damagelist); //for (var i in data) 取不到值 for (var i = 0; i < keys.length; i++) { var damage = damagelist[keys[i]]; var ent = parseInt(keys[i]); var unitname = Entities.GetUnitName(ent); if (unitname == null || unitname == "") continue; var itemname = FindItemName(unitname); list.push({'itemname':itemname, 'damage':Math.floor(damage), 'unitname': unitname, 'ent': ent}); dps_max = dps_max + Math.floor(damage); } list.sort(function (a, b) { if (a.damage < b.damage) return 1; if (a.damage == b.damage) return 0; if (a.damage > b.damage) return -1; }) UpdateTowerList( list, dps_max); } // {"creature_kill_count":0,"creep_count":0,"food_count":0} function UpdateInfo(table) { if (!table) return; var FoodCount = $("#FoodCount"); FoodCount.SetDialogVariableInt("count", table["food_count"]); FoodCount.SetDialogVariableInt("max_count", GameUI.GameData.max_food); $("#KillCount").SetDialogVariableInt("count", table["creature_kill_count"]); } ;(function(){ $("#FoodCount").SetDialogVariableInt("count", 0); $("#FoodCount").SetDialogVariableInt("max_count", 12); $("#KillCount").SetDialogVariableInt("count", 0); $("#KillCount").SetDialogVariableInt("point", 0); if (Players.IsSpectator(Players.GetLocalPlayer())) { $("#TowerList").visible = false; return; } GameUI.SetGamePoint(GameUI.PlayerData.point); CustomNetTables.SubscribeNetTableListener("TowerListInfo", OnNetTableTowerListInfo); CustomNetTables.SubscribeNetTableListener("CustomGameInfo", OnNetTableCustomGameInfo); })(); function OnNetTableTowerListInfo(table_name, key, data) { // $.Msg( "---------- Table: ", table_name, ", changed: '", key, "' = ", data ); if (key === "damagelist" + GetSteamID()) { Update(data); return; } } function OnNetTableCustomGameInfo(table_name, key, data) { // $.Msg( "---------- Table: ", table_name, ", changed: '", key, "' = ", data ); if (key === "game_info" + GetSteamID()) { UpdateInfo(data); return; } }