搜索
热搜: 活动 交友 discuz
查看: 9731|回复: 20

[代码] 触发区域的设置

[复制链接]

54

主题

539

帖子

3419

积分

魔导师

UID
2370
金币
3442
精华
0
节操
-364

创世者隐修议员扛把子脑洞大开教程大师开拓者我是鸽手黑科技玩的6平妖侠士

发表于 2014-11-19 07:34:38 | 显示全部楼层 |阅读模式
本帖最后由 Xavier 于 2014-11-19 09:39 编辑

触发区域就是在地图上一块区域 可以对进入的单位和出去的单位用脚本做一些事情
最常见的用法包括 传送区域 虚弱区域 等等
当然还有很基本的用法 比如限制施法地点 限制xx单位召唤地点(比如眼)之类的 这部分自行看wiki即可

以我正在做的军团战争为例子吧

首先 用方块哗啦一个方块出来(使用的是左侧第五个工具,拖完图形记得按ENTER,此外,也可以按3进入面选择模式,选择“模型”或者“其他可以选择的东西”选定一个面,复制一个面,在选定了trigger材质之后,点击Apply Current Material,就可以把那个地方设置成触发区域,(也就是说,DOTA2的触发区域其实是阔以任意形状的),By: XavierCHN)
不放图了 应该大家都会

然后在左下角选择方块的材质 照例选择trigger材质


然后同样照例在上面粘个entity, ctrl+t就行了

然后给entity起个名字

然后把entity的class选为trigger_dota 经过试验 这个是对所有进入单位判断 如果是trigger_hero是只对英雄生效 不过无所谓 反正后面在脚本里我们还要判断

然后alt+enter打开entity编辑面板 找到output

直接add一个新的output
第一栏是行为 到现在只有 OnStartTouch和OnEndTouch两种 分别是进入和出去的时候会触发判断
第二栏是实体的名字 就是你刚刚创建的那啥
第三栏统一是CallScriptFunction(调用程序中的函数)
第四栏是你要call的function的名字(填入你要调用的函数的函数名)

好的 关闭属性栏

在entity的属性栏里找到entity script 填入你文件的名字
(这里的文件名是从vscripts文件夹开始,比如说,你的文件是vscripts\test\teleport.lua,此处应填入test\teleport.lua)


然后进入你的vscripts文件夹 创建一个和这个entity script同名的文件.lua 我这里用的就是teleport.lua
下面是此文件的全部代码
(这是一个完成触发区域传送功能的源代码,我来加点注释)

[mw_shl_code=golang,true]

require("playerstats")


function OnStartTouch1(trigger)

     -- 使用FindByName来获取要传送的位置
    local ent = Entities:FindByName(nil,        "mudi_"..tostring(1)) --西方军团的王前传送点
     -- 在这句之前最好判定ent不为nil,否则下一句就会跳红字了。 -- if ent == nil then return end
    local point=ent:GetAbsOrigin()                                 
    -- 获取触发单位的队伍
    local nt=trigger.activator:GetTeam()
    if not(nt==DOTA_TEAM_NEUTRALS) then                            --不对刷出来的怪有效
        if not(trigger.activator:IsHero()) then                    --不对英雄生效
            FindClearSpaceForUnit(trigger.activator, point, false)  --完成传送
            trigger.activator:Stop()
        end
     end
end


[/mw_shl_code]

这样就完成了一个简单的传送阵 当非中立的非英雄的单位进入时会传送到目标地点

我要节操………………



本帖子中包含更多资源

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

x

评分

参与人数 10金币 +30 创造力 +10 求知欲 +10 互助 +11 节操 -29 收起 理由
zwzt0001 -1 你的节操掉了!
soulsky812 -1 你的节操掉了!
种花家的兔兔 -1 很给力!赞!
FateZ-Saber -1
Crane -1 很给力!赞!
imba久期 -1 碎了一地 →_→
burden -10 很给力!赞!
造纸农 -3 62才是好数字嘛..
裸奔的代码 + 10 + 1 -69节操啊,好数字,我不加了
Xavier + 20 + 10 + 10 + 10 -10 前面是浮云,后面是润笔费~

查看全部评分

回复

使用道具 举报

20

主题

118

帖子

844

积分

魔导师

UID
2311
金币
932
精华
0
节操
-58

隐修议员幸运儿!

发表于 2014-11-20 18:34:06 | 显示全部楼层
卧槽,本来想扣你节操的,不小心加了

鸽老师送我鸽至宝,我就不扣回来了

评分

参与人数 1节操 -1 收起 理由
无双 -1 君不知撤销评分功能?

查看全部评分

回复 支持 反对

使用道具 举报

1

主题

89

帖子

256

积分

Lv:2 长袍法师

UID
2908
金币
190
精华
0
节操
1
发表于 2014-12-9 11:07:28 | 显示全部楼层
本帖最后由 徐胜 于 2014-12-9 11:18 编辑

哗拉一下方块就消失了啊!!!



此外,也可以按3进入面选择模式,选择“模型”或者“其他可以选择的东西”选定一个面

这又突然来个中文,不知道你点击了啥??


开始的地方能不能详细一点哦!
回复 支持 反对

使用道具 举报

54

主题

539

帖子

3419

积分

魔导师

UID
2370
金币
3442
精华
0
节操
-364

创世者隐修议员扛把子脑洞大开教程大师开拓者我是鸽手黑科技玩的6平妖侠士

 楼主| 发表于 2014-12-9 12:02:37 | 显示全部楼层
徐胜 发表于 2014-12-9 11:07
哗拉一下方块就消失了啊!!!

。。。在地图上放个方块不是最简单的事情吗
回复 支持 反对

使用道具 举报

75

主题

694

帖子

3026

积分

大摸导师

热爱让我们并肩

UID
4
金币
3378
精华
0
节操
-232

隐修议员

QQ
发表于 2014-12-9 15:36:28 | 显示全部楼层
火柴人 发表于 2014-11-20 18:34
卧槽,本来想扣你节操的,不小心加了

鸽老师送我鸽至宝,我就不扣回来了

看完全篇了,我决定把你对鸽老师的节操评分撤销

评分

参与人数 1节操 -10 收起 理由
kzhang9 -10 你的节操掉了!

查看全部评分

如果一个人尽可能做好能做的事情,那这个世界就一定会因为这件事情而变得更美好一点。
回复 支持 反对

使用道具 举报

1

主题

89

帖子

256

积分

Lv:2 长袍法师

UID
2908
金币
190
精华
0
节操
1
发表于 2014-12-9 17:09:45 | 显示全部楼层
kzhang9 发表于 2014-12-9 12:02
。。。在地图上放个方块不是最简单的事情吗


是中间这个吗?

回复 支持 反对

使用道具 举报

1

主题

89

帖子

256

积分

Lv:2 长袍法师

UID
2908
金币
190
精华
0
节操
1
发表于 2014-12-9 17:24:06 | 显示全部楼层
我用block tool工具哗拉出一个小区域来
alt+enter能看到他默认的class名叫trrige_multiple

然后看到你说按例在上面ctrl+t一个实体来,意思是在上面哗拉的区域上面再哗拉出一个小方块,然后把这个方块的类名改成trrige_dote?
我alt+enter之后,add一个output发现没有ontarchstart和 ontarchend呀?
是这样的一个东西么


哥,没图看不懂啊

回复 支持 反对

使用道具 举报

54

主题

539

帖子

3419

积分

魔导师

UID
2370
金币
3442
精华
0
节操
-364

创世者隐修议员扛把子脑洞大开教程大师开拓者我是鸽手黑科技玩的6平妖侠士

 楼主| 发表于 2014-12-9 19:08:42 | 显示全部楼层
徐胜 发表于 2014-12-9 17:24
我用block tool工具哗拉出一个小区域来
alt+enter能看到他默认的class名叫trrige_multiple

方块是方块 实体是实体 不要混为一谈
你对方块ctrl+t之后他才会有class 之前只是一个方块
如果你看到他默认的class了说明你已经在上面附着了一个实体了

我讲的已经很详细了啊。。。官方wiki上这个连图都没有
回复 支持 反对

使用道具 举报

1

主题

89

帖子

256

积分

Lv:2 长袍法师

UID
2908
金币
190
精华
0
节操
1
发表于 2014-12-10 09:59:30 | 显示全部楼层
徐胜 发表于 2014-12-9 17:24
我用block tool工具哗拉出一个小区域来
alt+enter能看到他默认的class名叫trrige_multiple

[   VScript           ]: I come in the trigger area!!
[   VScript           ]: I leave the trigger area!!

嘿嘿,我搞出来了,其实是没有明白你的ctrl+t是什么意思!谢谢
回复 支持 反对

使用道具 举报

54

主题

539

帖子

3419

积分

魔导师

UID
2370
金币
3442
精华
0
节操
-364

创世者隐修议员扛把子脑洞大开教程大师开拓者我是鸽手黑科技玩的6平妖侠士

 楼主| 发表于 2014-12-10 10:16:54 | 显示全部楼层
徐胜 发表于 2014-12-10 09:59
[   VScript           ]: I come in the trigger area!!
[   VScript           ]: I leave the trigge ...

方块就是个方块 只是一个模型
ctr t之后才会变成一个实体
回复 支持 反对

使用道具 举报

3

主题

32

帖子

88

积分

Lv:1 隐谧贤者

UID
2998
金币
67
精华
0
节操
0
发表于 2015-3-15 21:34:59 | 显示全部楼层
kzhang9 发表于 2014-12-10 10:16
方块就是个方块 只是一个模型
ctr t之后才会变成一个实体

我怎么不会评分呢,好想给你节操呢
回复 支持 反对

使用道具 举报

20

主题

118

帖子

844

积分

魔导师

UID
2311
金币
932
精华
0
节操
-58

隐修议员幸运儿!

发表于 2015-8-15 21:14:15 | 显示全部楼层
为什么我的 trigger_dota 类不会对 npc_dota_creature 生效啊,只对英雄有效
回复 支持 反对

使用道具 举报

54

主题

539

帖子

3419

积分

魔导师

UID
2370
金币
3442
精华
0
节操
-364

创世者隐修议员扛把子脑洞大开教程大师开拓者我是鸽手黑科技玩的6平妖侠士

 楼主| 发表于 2015-8-15 23:55:29 | 显示全部楼层
火柴人 发表于 2015-8-15 21:14
为什么我的 trigger_dota 类不会对 npc_dota_creature 生效啊,只对英雄有效

因为你在实体的选项下面勾选了hero
回复 支持 反对

使用道具 举报

20

主题

118

帖子

844

积分

魔导师

UID
2311
金币
932
精华
0
节操
-58

隐修议员幸运儿!

发表于 2015-8-17 10:15:50 | 显示全部楼层
kzhang9 发表于 2015-8-15 23:55
因为你在实体的选项下面勾选了hero

可以了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

19

积分

Lv:1 隐谧贤者

UID
12331
金币
27
精华
0
节操
0
发表于 2017-6-29 18:25:52 | 显示全部楼层
大神,我按照步骤做了,把代码中的寻找 实体的传送目标的名字改了,在地图上新增了一个传送点实体和mesh,但是依然没有效果(我注掉了非英雄这两条,因为我用英雄去测试),并且我给触发器贴了材质在编辑器中可以看到,不知道为什么在地图中就看不到了。很奇怪。
回复 支持 反对

使用道具 举报

54

主题

539

帖子

3419

积分

魔导师

UID
2370
金币
3442
精华
0
节操
-364

创世者隐修议员扛把子脑洞大开教程大师开拓者我是鸽手黑科技玩的6平妖侠士

 楼主| 发表于 2017-7-12 19:34:11 | 显示全部楼层
tian2589 发表于 2017-6-29 18:25
大神,我按照步骤做了,把代码中的寻找 实体的传送目标的名字改了,在地图上新增了一个传送点实体和mesh, ...

进群问吧
回复 支持 反对

使用道具 举报

0

主题

2

帖子

12

积分

Lv:1 隐谧贤者

UID
12422
金币
33
精华
0
节操
0
发表于 2017-7-16 15:36:25 | 显示全部楼层

大神能给个群号吗?
回复 支持 反对

使用道具 举报

54

主题

539

帖子

3419

积分

魔导师

UID
2370
金币
3442
精华
0
节操
-364

创世者隐修议员扛把子脑洞大开教程大师开拓者我是鸽手黑科技玩的6平妖侠士

 楼主| 发表于 2017-7-17 18:50:00 | 显示全部楼层
小萌鸡 发表于 2017-7-16 15:36
大神能给个群号吗?

347735258
回复 支持 反对

使用道具 举报

32

主题

50

帖子

846

积分

Lv:4 虚灵先知

UID
7200
金币
418
精华
0
节操
-1
发表于 2017-7-23 13:01:40 | 显示全部楼层
触发区域可以移动吗?,可以的话怎么移动,
回复 支持 反对

使用道具 举报

2

主题

20

帖子

1688

积分

Lv:5 紫苑魔导士

UID
12360
金币
635
精华
0
节操
0
发表于 2017-7-23 16:39:34 | 显示全部楼层
shaderxyz 发表于 2017-7-23 13:01
触发区域可以移动吗?,可以的话怎么移动,

我的理解是,你可以制作一个单位,这个单位拥有触发某个效果的技能。就像大屁股的大招一样。
回复 支持 反对

使用道具 举报

2

主题

20

帖子

1688

积分

Lv:5 紫苑魔导士

UID
12360
金币
635
精华
0
节操
0
发表于 2017-8-11 16:07:32 | 显示全部楼层
本帖最后由 freemanhust 于 2019-5-4 14:52 编辑

在使用触发区域对两个全局变量赋值的过程中产生一点疑问。
[mw_shl_code=applescript,true]_G.para1 = 0
_G.para2 = 0
function trigger(trigger)
  local x = trigger.activator:GetTeam()
  if x == 2 then
    para1 = para1 + 1
  elseif x == 3 then
    para2 = para2 + 1
  end
end[/mw_shl_code]
第一次调用时x == a para1被赋值为1,但是如果第二次调用时x == b,para2为1,para1却为0,第三次调用时x == a,para1为2,很奇怪为什么。论坛中有一个帖子是说全局变量的问题,_G命名的全局变量范围有限,使用custom_net_tables或者GameRules.para1就解决了。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2019-11-12 18:51 , Processed in 0.088500 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Theme.Yeei

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