搜索
热搜: 活动 交友 discuz
查看: 2203|回复: 4

[讨论] wiki有没有监听英雄移动的事件

[复制链接]

2

主题

5

帖子

21

积分

Lv:1 隐谧贤者

UID
14897
金币
44
精华
0
节操
0
发表于 2019-9-4 00:45:54 | 显示全部楼层 |阅读模式

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

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

x
想让小鸡一直跟随英雄,但是没找到监听移动的事件,难道要写个定时器循环让小鸡往英雄身上移动?
回复

使用道具 举报

0

主题

8

帖子

225

积分

Lv:2 长袍法师

UID
14780
金币
93
精华
0
节操
0
发表于 2019-9-4 16:09:29 | 显示全部楼层
本帖最后由 cowboyfan 于 2019-9-4 17:16 编辑

监听英雄位置,对比小鸡位置,超出一个范围就让小鸡move。7、CalcDistanceBetweenEntityOBB  

原型:float CalcDistanceBetweenEntityOBB(handle handle_1, handle handle_2)
功能:取得实体handle_1的OBB盒与实体handle_2的OBB盒上最近两点间的距离
距离:local dist = CalDistanceBetweenEntityOBB(u1,u2)
说明:令dist等于单位u1和单位u2的OBB盒上最近两个点的距离


验证:
在地面距离1000的两个点上创建两个单位,利用上述API取得OBB盒上的最近2点距离,与1000值做比较。

local p1 = Vector(0,0,0)
local p2 = Vector(1000,0,0)
local u1 = CreateUnitByName("npc_dota_hero_lina",p1,true,nil,nil,DOTA_TEAM_GOODGUYS)
local u2 = CreateUnitByName("npc_dota_hero_lina",p2,true,nil,nil,DOTA_TEAM_GOODGUYS)
local dist = CalcDistanceBetweenEntityOBB(u1,u2)
print(dist)    ->934.1
回复 支持 反对

使用道具 举报

2

主题

5

帖子

21

积分

Lv:1 隐谧贤者

UID
14897
金币
44
精华
0
节操
0
 楼主| 发表于 2019-9-4 23:08:49 | 显示全部楼层
cowboyfan 发表于 2019-9-4 16:09
监听英雄位置,对比小鸡位置,超出一个范围就让小鸡move。7、CalcDistanceBetweenEntityOBB  

原型:flo ...

CalcDistanceBetweenEntityOBB计算两个实体的距离是理解了,但是重点还是在于你说的监听英雄位置,我在api里面也没找到能实时监听英雄位置的功能。依然只能写个think定时器实时取得英雄和小鸡两个两个实体的位置,然后判断距离,再让小鸡移动
回复 支持 反对

使用道具 举报

0

主题

11

帖子

829

积分

Lv:4 虚灵先知

UID
12961
金币
257
精华
0
节操
0
发表于 2019-10-13 01:01:26 | 显示全部楼层
可以参考下,我用的是定时检测,因为是做的宠物跟随,所以移动有随机性就没用移动的事件
API上跟移动相关的事件大概有两个,一个是MODIFIER_EVENT_ON_UNIT_MOVED,一个是MODIFIER_EVENT_ON_ORDER,你可以试试前者的事件

  1. -- Project Name:         Siltbreaker Hard Mode

  2. modifier_pet_follow = class({})

  3. -----------------------------------------------------------------------------------------

  4. function modifier_pet_follow:IsHidden()
  5.         return false
  6. end

  7. -----------------------------------------------------------------------------------------

  8. function modifier_pet_follow:IsPurgable()
  9.         return false
  10. end

  11. --------------------------------------------------------------------------------

  12. function modifier_pet_follow:GetPriority()
  13.         return MODIFIER_PRIORITY_ULTRA
  14. end

  15. -----------------------------------------------------------------------------------------

  16. function modifier_pet_follow:OnCreated( kv )
  17.         self:StartIntervalThink(1.5)
  18. end

  19. -----------------------------------------------------------------------------------------

  20. function modifier_pet_follow:DeclareFunctions()
  21.         local funcs =
  22.         {
  23.         }

  24.         return funcs
  25. end

  26. -----------------------------------------------------------------------------------------

  27. function modifier_pet_follow:OnIntervalThink()
  28.         if IsServer() then
  29.                 local owner = self:GetParent().PetOwner
  30.                 --print("Owner: "..owner:GetUnitName())
  31.                 if owner == nil then return 1 end
  32.                 if owner:IsNull() then
  33.                         self:StartIntervalThink(-1)
  34.                         UTIL_Remove(self:GetParent())
  35.                         return 0
  36.                 end
  37.                 if owner.PetIsCollecting == true then return 0 end
  38.                 local transport_distance = 1400
  39.                 --local fly_distance = 1200
  40.                 local walk_distance = 625
  41.                 local walk_radius = 250
  42.                 local distance = (owner:GetOrigin() - self:GetParent():GetOrigin()):Length2D()
  43.                 --print("Pet Follow : Distance "..distance)
  44.                
  45.                 if distance > transport_distance then
  46.                         FindClearSpaceForUnit( self:GetParent(), owner:GetOrigin() + RandomVector( RandomFloat(-walk_distance, walk_distance) ), false )
  47.                 end
  48.                 -- Fly
  49.                 --if distance > fly_distance then
  50.                         --self:GetParent():SetMoveCapability(DOTA_UNIT_CAP_MOVE_FLY)
  51.                         --print("Pet Follow : Flying")
  52.                 --else
  53.                         --self:GetParent():SetMoveCapability(DOTA_UNIT_CAP_MOVE_GROUND)
  54.                         --print("Pet Follow : Walking")               
  55.                 --end
  56.                
  57.                 -- Walk
  58.                 --if distance > walk_distance then
  59.                         local owner_pos = owner:GetAbsOrigin()
  60.                         local new_pos = owner_pos + RandomVector( RandomFloat(-walk_radius, walk_radius) )
  61.                         self:GetParent():Interrupt()
  62.                         self:GetParent():MoveToPosition(new_pos)
  63.                         --print("Pet Follow : Walk To "..new_pos)
  64.                 --end
  65.         end
  66. end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2020-5-26 21:20 , Processed in 0.048981 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Theme.Yeei

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