搜索
热搜: 活动 交友 discuz
查看: 2794|回复: 8

[教程] [PUI]移除天赋树

[复制链接]

3

主题

23

帖子

900

积分

Lv:4 虚灵先知

UID
13026
金币
261
精华
0
节操
0
发表于 2018-8-12 10:17:47 | 显示全部楼层 |阅读模式

前方高能预警!非战斗人员请尽快登录!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
移除天赋树这种操作属于UI的操作,需要一些预备知识去理解,还没有了解过UI的同学可以先看代码君的教程
        http://www.dota2rpg.com/forum.php?mod=viewthread&tid=1258
        UI部分

        提前了解过UI知识的同学可以接着往下看
        在custom_ui_manifest.xml中找到脚本那一行 将这一段代码加入到脚本当中去
        custom_ui_manifest.xml中查看脚本哪一行 对应找到js脚本文件
        [mw_shl_code=xml,true]<scripts>
                <include src="s2r://panorama/scripts/custom_game/custom_ui_manifest.js" />
        </scripts>[/mw_shl_code]        custom_ui_manifest.js中加入
        [mw_shl_code=javascript,true]var newUI = $.GetContextPanel().GetParent().GetParent().FindChildTraverse("HUDElements");
    var centerBlock = newUI.FindChildTraverse("center_block");
    centerBlock.FindChildTraverse("StatBranch").style.visibility = "collapse";
    //you are not spawning the talent UI, fuck off (Disabling mouseover and onactivate)
    centerBlock.FindChildTraverse("StatBranch").SetPanelEvent("onmouseover", function(){});
    centerBlock.FindChildTraverse("StatBranch").SetPanelEvent("onactivate", function(){});[/mw_shl_code]    到游戏中查看效果基本就完成了
    另外附一段在lua中移除天赋技能的代码配合食用
    -- X大的移除天赋代码  可以在选择英雄或者监听英雄出生的时候使用
    --(可能会存在移除错误的情况,加入一个定时器让他延迟1秒移除就好)
   [mw_shl_code=c,true] for i = 0, 23 do
        local ability = hero:GetAbilityByIndex(i)
                      if ability then
            local name = ability:GetAbilityName()
                    if string.find(name, "special_bonus") then
                print("removed ability", name)
                hero:RemoveAbility(name)
                    end
                end
                   end[/mw_shl_code]           --移除天赋树
回复

使用道具 举报

3

主题

23

帖子

900

积分

Lv:4 虚灵先知

UID
13026
金币
261
精华
0
节操
0
 楼主| 发表于 2018-8-12 10:24:56 | 显示全部楼层
另外附一段js中禁用扫描按钮的代码[mw_shl_code=c,true]var newUI = $.GetContextPanel().GetParent().GetParent().FindChildTraverse("HUDElements");
    var centerBlock = newUI.FindChildTraverse("center_block");

    newUI.FindChildTraverse("RadarButton").style.visibility = "collapse";
[/mw_shl_code]
抛砖引玉,我只是代码的搬运工,对于每个UI在哪里叫什么名字我并不清楚,只能模仿借鉴别人的东西来用
成功又水一贴(逃)
回复 支持 反对

使用道具 举报

3

主题

23

帖子

900

积分

Lv:4 虚灵先知

UID
13026
金币
261
精华
0
节操
0
 楼主| 发表于 2018-8-12 10:35:13 | 显示全部楼层
再水一贴
经过群里小伙伴提醒  F6可以在游戏中调出Debugger
进入游戏中按F6 双击相应的位置可以看到面板名字和继承关系
有了这个就可以为所欲为了
回复 支持 反对

使用道具 举报

0

主题

7

帖子

417

积分

Lv:3 空明术士

UID
14086
金币
158
精华
0
节操
0
发表于 2019-4-16 17:11:48 | 显示全部楼层
为啥按照教程,在英雄升级后还会出那个天赋树的icon啊?
回复 支持 反对

使用道具 举报

3

主题

23

帖子

900

积分

Lv:4 虚灵先知

UID
13026
金币
261
精华
0
节操
0
 楼主| 发表于 2019-4-19 15:22:11 | 显示全部楼层
kaka_ai 发表于 2019-4-16 17:11
为啥按照教程,在英雄升级后还会出那个天赋树的icon啊?

按 F6 打开 PUI 调试器 自己试着调吧 看看是哪里出了问题
另外最省时的学习方法是拆别人的代码来看  PUI的代码是开源的 直接找一个没有天赋树的游廊地图拆开来看就知道了
回复 支持 反对

使用道具 举报

0

主题

7

帖子

417

积分

Lv:3 空明术士

UID
14086
金币
158
精华
0
节操
0
发表于 2019-4-22 14:50:24 | 显示全部楼层
王思聪 发表于 2019-4-19 15:22
按 F6 打开 PUI 调试器 自己试着调吧 看看是哪里出了问题
另外最省时的学习方法是拆别人的代码来看  PUI ...

嗯,好的。多谢指点!
回复 支持 反对

使用道具 举报

9

主题

65

帖子

572

积分

Lv:3 空明术士

UID
3036
金币
831
精华
0
节操
0
QQ
发表于 2019-4-23 15:42:57 | 显示全部楼层
[mw_shl_code=javascript,true]function disTree() {
    // $.Msg("Disable Talent Tree")
    var x = $.GetContextPanel().GetParent().GetParent().GetParent();
    x = x.FindChildTraverse('HUDElements')
    x = x.FindChildTraverse('lower_hud')
    //x = x.FindChildTraverse('GlyphScanContainer')
    //x = x.FindChildTraverse('GlyphButton')

    x = x.FindChildTraverse('center_with_stats')
    x = x.FindChildTraverse('center_block')
    var level_stats_frame = x.FindChildTraverse('level_stats_frame')
    level_stats_frame.RemoveClass('CanLevelStats')
    level_stats_frame.hittest = false
    level_stats_frame.hittestchildren = false
    level_stats_frame.FindChildTraverse('LevelUpBurstFX').visible = false
    var LevelUpTab = level_stats_frame.FindChildTraverse('LevelUpTab')
    var LevelUpButton = LevelUpTab.FindChildTraverse('LevelUpButton')
    var LevelUpIcon = LevelUpTab.FindChildTraverse('LevelUpIcon')
    LevelUpButton.visible = false
    LevelUpIcon.visible = false
    x = x.FindChildTraverse('AbilitiesAndStatBranch')
    x = x.FindChildTraverse('StatBranch')
    x.hittest = false
    x.hittestchildren = false
}[/mw_shl_code]
回复 支持 反对

使用道具 举报

0

主题

5

帖子

137

积分

Lv:1 隐谧贤者

UID
14100
金币
103
精华
0
节操
0
发表于 2019-8-4 11:15:01 | 显示全部楼层
本帖最后由 longzuyz 于 2019-11-15 22:23 编辑

首先,在游戏运行的情况下按F6,打开UI调试面板,然后在dota里点击要清除的区块。在F6里就会显示出该区块在UI里的ID,这里是StatBranch,然后
var UI = $.GetContextPanel().GetParent().GetParent().FindChildTraverse("StatBranch");
$.GetContextPanel()这个是定位当前所在的panel在哪儿,因为custom_ui_manifest.xml不是位于最高层panel,不能直接查找子元素,所以要使用GetParent(),找出上一层,看是否包含StatBranch,没有就继续再上一层。当来到包含StatBranch的panel后,使用FindChildTraverse("StatBranch"),这个是穿透式的在当前panel所包含的所有子元素里查找,不用一层一层往下找了。然后就可以设置该区块不可看见了
UI.visible = false;
至于这2条,可有可无
UI.SetPanelEvent("onmouseover", function(){});
UI.SetPanelEvent("onactivate", function(){});
现在天赋树在面板上已经不显示了,但是当等级到达10级时又会突然跳出来在第一个技能的位置。这时通过LUA设置技能点数为0,可以取消掉,但是比较麻烦,到15级又要设置一次。
还是直接在JS里设置
var talent = UI.FindChildTraverse("LevelUpGlow");这是升级后天赋树会显示到的版
talent.visible = false;
就可以直接干掉天赋树了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|Archiver|手机版|小黑屋|AMHC!dota2rpg~ ( 闽ICP备14009209 )

GMT+8, 2019-12-6 18:49 , Processed in 0.095855 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Theme.Yeei

快速回复 返回顶部 返回列表