API
__tostring
由c++实现的api
即unit对象可以直接用print或log.info打印
get_id
获取unit_id
由c++实现的api
local unit_id = unit:get_id()
add
增加属性
由c++实现的api
- 参数
- state (string) - [单位属性]
- value (number) - 数值
-- 攻击增加50点
unit:add('攻击', 50)
-- 攻击增加50%
unit:add('攻击%', 50)
add_ex
增加属性的特定值
由c++实现的api
- 参数
- state (string) - [单位属性]
- value (number) - 数值
- value_type (integer) - [单位数值属性类型]
-- 攻击增加50点
unit:add_ex('攻击', 50, 0)
unit:add_ex('攻击', 50, 1)
-- 攻击增加50的百分比
unit:add_ex('攻击', 50, 2)
add_ai
添加AI
由c++实现的api
- 参数1
- name (string) - AI名称
- 参数2
- data (table) - AI数据
AI的说明见[这里][ai]。
unit:add_ai '小兵'
{
-- 自定义数据
}
add_animation
添加动画。同play_animation。为了兼容才保留的
由c++实现的api
play_animation
添加动画
由c++实现的api
- 参数1
- name (string) - 动画名称
- 参数2 (其实是返回的方法的参数1,注意看下面的例子)
- speed (number) - 动画播放速度,默认为
1.0
- loop (boolean) - 循环播放,默认为
false
- part (integer) - 播哪部分动作,默认为0,表示播全身动作;1表示上半身,2表示下半身。
- blend_in_time (integer) - 渐入时间 ms
- blend_out_time (integer) - 渐出时间 ms
- speed (number) - 动画播放速度,默认为
unit:play_animation '跳舞'
{
speed = 1.0,
loop = false,
blend_in_time = 200,
blend_out_time = 200,
}
unit2:play_animation '开枪'
{
speed = 1.0,
loop = false,
part = 1
}
add_buff
添加状态
由c++实现的api
- 参数1
- name (string) - 状态名称
- delay (number) - 生效延迟(秒)
- 参数2
- data (table) - [状态属性]
- 返回
- buff (buff) - 状态
状态的详细说明见[这里][buff]。指定生效延迟后,状态会在延迟时间后生效,但会立即返回状态,因此可以操作这个还未生效的状态,包括移除它。
local buff = unit:add_buff('状态名称', 1000)
{
skill = skill,
}
add_exp
增加经验
- 参数
- exp (number) - 经验值
用于[英雄升级]库。
unit:add_exp(100)
add_height
增加高度
由c++实现的api
- 参数
- height (name) - 高度
指的是单位距离地面的高度
unit:add_height(100)
add_item
添加物品
- 参数
- item (item) - 物品
- 返回
- result (boolean) - 是否成功
如果物品已经在单位身上,或单位物品栏已满,则会添加失败。添加成功且物品之前在另一个单位身上,则之前的单位会先失去该物品。
local suc = unit:add_item(item)
add_level
提升等级
- 参数
- level (interger) - 等级
用于[英雄升级]库。等级不能降低。
unit:add_level(1)
add_provide_sight
提供视野
由c++实现的api
- 参数
- team (integer) - 队伍ID
令单位的视野提供给指定队伍。视野的说明见[这里][视野]。
unit:add_provide_sight(1)
add_resource
增加能量
- 参数
- type (string) - [能量类型][能量]
- value (number) - 数值
unit:add_resource('怒气', 100)
add_restriction
老api,和add_mark效果一样。(单位标记以前叫行为限制)
由c++实现的api
- 参数
- type (string) - [单位标记]
unit:add_restriction '无敌'
add_mark
增加单位标记
由c++实现的api
- 参数
- type (string) - [单位标记]
unit:add_mark '无敌'
add_sight
添加可见形状
由c++实现的api
- 参数
- sight (sight) - [可见形状]
- 返回
- sight_handle (sight_handle) - [可见形状对象][可见形状]
local sight_handle = unit:add_sight(sight)
有个体型巨大的单位,希望能在它的轮廓进入视野时就能看到他。
-- 在单位位置创建一个半径500的圆形可见形状
local sight = base.sight_range(unit:get_point(), 500)
-- 将可见形状添加给单位
local sight_handle = unit:add_sight(sight)
之后不需要这个可见形状了
if sight_handle then
sight_handle:remove()
end
add_skill
添加技能
由c++实现的api
- 参数
- name (string) - 技能名称
- type (string) - [技能类型]
- slot (integer) - 技能格子
- 返回
- skill (skill) - 技能
每个类型的技能格子从0开始,最大为99。指定格子时,这个格子上已经有技能的话会添加失败;不指定格子时,会找一个最小的空格 。
unit:add_skill('技能名称', '英雄', 1)
attack
攻击
由c++实现的api
- 参数
- target (unit) - 攻击目标
- 返回
- valid (boolean) - 是否有效
local valid = unit:attack(target)
attack_skill
获取攻击技能
由c++实现的api
- 返回
- attack (attack/skill) - 当前[攻击技能]
local attack = unit:attack_skill()
blink
传送
由c++实现的api
- 参数
- target (point) - 目标位置
- is_relative (boolean) - (可选) 是否发送相对的偏移向量给客户端。走relative方式的话,客户端和服务器的传送偏移量会严格相等。也就是说,如果传送前双方因网络延迟有一定的位置偏差,传送后这个位置偏差依然存在。如果不填,则默认为false
- 返回
- result (boolean) - 是否成功(仅当单位非法时失败)
若目标位置有[静态碰撞]或[动态碰撞]且该单位不能无视它,则会将该单位传送至离目标位置最近的合法位置。
local result = unit:blink(target)
can_attack
是否可以攻击目标
由c++实现的api
- 参数
- target (unit) - 目标单位
- 返回
- result (boolean) - 结果
local result = unit:can_attack(target)
capturer
创建弹道捕获器
由c++实现的api
- 参数
- data (table) - [弹道捕获器属性]
- 返回
- capturer (capturer) - [弹道捕获器]
local capturer = unit:capturer
{
radius = 500,
}
cast
使用技能
由c++实现的api
- 参数
- name (string) - 技能名
- target - 目标(unit/point/..)
- data (table) - 数据
- 返回
- valid (boolean) - 是否合法
target
由技能属性决定,如果使用了错误的目标(比如无目标技能却传入了单位作为目标)会导致技能使用失败。data
中的数据会被设置到施法中。
local valid = unit:cast('技能名', target, data)
clean_command
清空命令队列
由c++实现的api
unit:clean_command()
create_illusion
创建幻象
由c++实现的api
- 参数
- where (point) - 创建位置
- face (number) - 朝向
- dest (unit) - 镜像复制目标
- 返回
- illusion (unit) - 幻象
镜像复制目标默认为对象自己。复制单位的流程如下:
- 触发[单位-初始化]事件
- 复制技能
- 复制单位属性
- 触发[单位-创建]事件
也可以用create_unit实现。
local illusion = unit:create_illusion(where, face, dest)
create_item
创建物品
- 参数
- name (string) - 物品名
- target (point/unit/nil) - 创建位置
- 返回
- item (item)
创建出来的物品所有者为unit
。当target
为点,物品会创建在地上;当target
为单位,物品会创建在单位身上,但如果该单位的[物品栏]已满则会创建在单位所在的位置上;当target
为nil
时,物品会创建在自己身上。
local item = unit:create_item('物品名', point)
local item = unit:create_item('物品名', unit)
local item = unit:create_item('物品名')
create_unit
创建单位
由c++实现的api
- 参数
- name (string/unit) - 单位名字/要复制的单位
- where (point) - 创建位置
- face (number) - 面朝方向
- on_init (function) - 初始化函数
- 返回
- new_unit (unit) - 单位
创建出来的单位属于unit
。如果name
是一个字符串,那么会创建名称为name
的单位。如果name
是一个单位,那么会复制该单位,目前该行为等同于[create_illusion]。单位创建后会最先执行on_init
,你可以在这里给单位初始化一些数据。创建单位的流程如下:
- 执行
on_init
- 触发[单位-初始化]事件
- 添加技能
- 触发[单位-创建]事件
local new_unit = unit:create_unit('$$td_template_ts_template_1_xevb.unit.英雄.root', where, face, function (new_unit)
-- 对unit进行初始化设置
end)
注意创建单位后在当帧立即在客户端使用该单位的信息可能有问题,详见[单位-初始化]中的描述
current_skill
获取当前施放的技能
由c++实现的api
- 返回
- skill (skill) - 施法
获取到的技能是施法。如果当前不在放技能,则返回nil
。
local skill = unit:current_skill()
disable_ai
禁用AI
由c++实现的api
令单位不再执行[AI][ai]。
unit:disable_ai()
drop_item
丢弃物品
- 参数
- item (item) - 物品
- target (point) - 丢弃位置
- 返回
- result (boolean) - 是否成功
如果物品不自己身上则会失败。单位会发动“.丢弃物品”技能来尝试靠近丢弃位置然后丢弃物品。
local suc = unit:drop_item(item, target)
each_buff
遍历状态
由c++实现的api
- 参数
- name (string) - 状态名
- 遍历
- buff (buff) - 遍历到的状态
当指定了name
后只会遍历到该名称的状态,否则遍历所有状态。
for buff in unit:each_buff '状态名' do
-- buff为遍历到的状态
end
each_mover
遍历运动
由c++实现的api
- 遍历
- mover (mover) - 遍历到的运动
for mover in unit:each_mover() do
-- mover为遍历到的运动
end
each_item
遍历物品
- 参数
- name (string) - 物品名
- 遍历
- item (item) - 遍历到的物品
当指定了name
后只会遍历到该名称的物品,否则遍历所有物品。
for item in unit:each_item() do
-- item为遍历到的物品
end
each_skill
遍历技能
由c++实现的api
- 参数
- type (string) - [技能类型]
- 遍历
- skill (skill) - 遍历到的技能
如果指定了type
,则会遍历到所有技能类型为type
的技能,不包括0级技能;否则会遍历到所有技能,包括0级技能。
for skill in unit:each_skill '英雄' do
-- skill为遍历到的技能
end
enable_ai
启用AI
由c++实现的api
unit:enable_ai()
event
注册事件
- 参数
- name (string) - 事件名
- callback (function) - 事件函数
- 返回
- trigger (trigger) - 触发器
- 事件参数
- trigger (trigger) - 触发器
- ... (...) - 自定义数据
这是对base.event_register
方法的封装,你可以在[这里][event]看到详细说明。
local trigger = unit:event('单位-死亡', function (trigger, unit)
-- 你的代码
end)
event_dispatch
触发事件
- 参数
- name (string) - 事件名
- ... (...) - 自定义数据
这是对base.event_dispatch
方法的封装,你可以在[这里][event]看到详细说明。
unit:event_dispatch('自定义事件', ...)
event_has
是否订阅事件
由c++实现的api
- 参数
- name (string) - 事件名
- 返回
- result (boolean) - 结果
local result = unit:event_has(name)
event_notify
触发事件
- 参数
- name (string) - 事件名
- ... (...) - 自定义数据
这是对base.event_notify
方法的封装,你可以在[这里][event]看到详细说明。
unit:event_notify('自定义事件', ...)
event_subscribe
订阅事件
由c++实现的api
- 参数
- name (string) - 事件名
订阅拥有计数,使用[event][unit:event]会自动订阅事件。
unit:event_subscribe(name)
event_unsubscribe
取消订阅事件
由c++实现的api
- 参数
- name (string) - 事件名
订阅拥有计数,删除触发器时会自动取消订阅相关事件。
unit:event_unsubscribe(name)
execute_ai
执行AI
由c++实现的api
unit:execute_ai()
follow
创建一个跟随当前单位的移动,附加到mover上。 附加后target会被添加上[幽灵],[失控],[定身],如果参数里有没有Block还会被加上[飞行]标记
由c++实现的api
- 参数
- data (table) - [跟随属性]
- 返回
- mover (mover) - 运动
local mover = unit:follow
{
source = unit,
skill = skill,
mover = target,
}
find_buff
寻找状态
由c++实现的api
- 参数
- name (string) - 状态名称
- 返回
- buff (buff) - 找到的状态
如果有多个同名状态,则返回其中一个状态。
local buff = unit:find_buff(name)
find_item
寻找物品
- 参数
- name (string/integer) - 物品名/物品栏索引
- 返回
- item (item) - 找到的物品
当name
为字符串时,寻找单位身上该名称的物品,若有多个同名物品则返回第一个物品。若name
为整数,则会找到物品栏索引为该值的物品。
local item = unit:find_item('物品名')
local item = unit:find_item(0)
find_skill
寻找技能
由c++实现的api
- 参数
- name (string/integer) - 技能名/格子
- type (string) - (可选) [技能类型]
- include_level_zero (bool) - (可选) 是否包含0级技能。
- 返回
- skill (skill) - 技能
指定type
后只在此类型中寻找技能。如果name
使用格子,那么必须要指定type
。除非最后个参数传了true,否则不会找到0级技能。
local skill = unit:find_skill('技能名')
local skill = unit:find_skill('技能名', true)
local skill = unit:find_skill(0, '英雄')
local skill = unit:find_skill(0, '英雄', true)
get
获取属性
由c++实现的api
- 参数
- state (string) - [单位属性]
- 返回
- value (number/string) - 数值或字符串
local value = unit:get '生命'
get_ex
获取单位属性的特定值
由c++实现的api
- 参数
- state (string) - [单位属性]
- 返回
- value (number/string) - 数值或字符串
- value_type (integer) - [单位数值属性类型]
local value = unit:get_ex(生命, 2)
get_attribute_max
获取属性上限
由c++实现的api
- 参数
- state (string) - [单位属性]
- 返回
- max (number/nil) - 上限
若没有上限,则返回nil
。
local max = unit:get_attribute_max '攻击'
get_attribute_min
获取属性下限
由c++实现的api
- 参数
- state (string) - [单位属性]
- 返回
- min (number/nil) - 下限
若没有下限,则返回nil
。
local min = unit:get_attribute_min '攻击'
get_class
获取单位类别
由c++实现的api
- 返回
- class (string) - [单位类别]
local class = unit:get_class()
get_data
获取数据
- 返回
- data (table) - 数据表
获取这个单位在[UnitData]中对应的数据表。等价于base.table.unit[unit:get_name()]
local data = unit:get_data()
get_exp
获取经验
- 返回
- exp (number) - 经验
用于[英雄升级]库。
local exp = unit:get_exp()
get_facing
获取朝向
由c++实现的api
- 返回
- face (number) - 朝向
朝向的取值范围为(-180, 180]。
local face = unit:get_facing()
get_height
获取高度 需要注意,这里的高度是指离地的高度,在客户端上的高度表现是离地高度加上地形的高度
由c++实现的api
- 返回
- height (number) - 离地高度
local height = unit:get_height()
get_level
获取等级
- 返回
- level (interger) - 等级
用于[英雄升级]。
local level = unit:get_level()
get_max_exp
获取经验上限
- 返回
- exp (number) - 经验上限
用于[英雄升级]库。
local exp = unit:get_max_exp()
get_name
获取名字
由c++实现的api
- 返回
- name (string) - 单位名字
local name = unit:get_name()
get_owner
获取控制单位的玩家
由c++实现的api
- 返回
- player (player) - 控制单位的玩家
local player = unit:get_owner()
get_point
获取位置
由c++实现的api
- 返回
- point (point) - 位置
local point = unit:get_point()
get_resource
获取能量
- 参数
- type (stirng) - [能量类型][能量]
- 返回
- value (number) - 数值
local value = unit:get_resource '怒气'
get_resource_type
获取能量类型
- 返回
- type (string) - [能量类型][能量]
local type = unit:get_resource_type()
get_mark
获取行为限制计数
由c++实现的api
- 参数
- type (string) - [行为限制]
- 返回
- count (integer) - 计数
local count = unit:get_mark(type)
get_restriction
老api,和get_mark效果一样。(单位标记以前叫行为限制)
由c++实现 的api
- 参数
- type (string) - [行为限制]
- 返回
- count (integer) - 计数
local count = unit:get_restriction(type)
get_attackable_radius
获取选取半径
由c++实现的api
- 返回
- radius (number) - 选取半径
local radius = unit:get_attackable_radius()
get_team_id
获取队伍ID
由c++实现的api
- 返回
- team (integer) - 队伍ID
local team = unit:get_team_id()
get_tag
获取单位类型
由c++实现的api
- 返回
- type (string) - [单位类型]
local type = unit:get_tag()
get_walk_command
获取移动命令
由c++实现的api
- 返回
- command (string) - 命令
- target - 目标
可以通过该方法了解单位为什么在移动,返回walk
表示只是在移动,attack
表示是为了进行攻击,技能名表示是为了使用技能,target
为移动目标(如果有的话)。如果不在移动则返回nil
。
local command, target = unit:get_walk_command()
get_xy
获取坐标
由c++实现的api
- 返回
- x (number) - X坐标
- y (number) - Y坐标
local x, y = unit:get_xy()
give_item
把物品交给另一个单位
- 参数
- item (item) - 物品
- target (unit) - 另一个单位
- 返回
- result (boolean) - 是否成功
如果物品不自己身上满则会失败。单位会发动“.丢弃物品”技能来尝试靠近对方并把物品交给对方。如果交给对方时对方物品栏已满,则物品会丢弃到对方所在的位置。
local suc = unit:give_item(item, target)
has_mark
是否存在标记
由c++实现的api
- 参数
- type (string) - [行为限制]
- 返回
- result (boolean) - 结果
local result = unit:has_mark(type)
has_restriction
老api,和has_mark效果一样。(单位标记以前叫行为限制)
由c++实现的api
- 参数
- type (string) - [行为限制]
- 返回
- result (boolean) - 结果
local result = unit:has_restriction(type)
is_alive
是否存活
由c++实现的api
- 返回
- result (boolean) - 是否存活
local result = unit:is_alive()
is_ally
是否是友方
- 参数
- dest (unit/player) - 目标单位/目标玩家
- 返回
- result (boolean) - 是否是友方
local result = unit:is_ally(dest)
is_enemy
是否是敌人
- 参数
- dest (unit/player) - 目标单位/目标玩家
- 返回
- result (boolean) - 是否是敌人
local result = unit:is_enemy(dest)