跳到主要内容

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
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()

传送

由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) - 幻象

镜像复制目标默认为对象自己。复制单位的流程如下:

  1. 触发[单位-初始化]事件
  2. 复制技能
  3. 复制单位属性
  4. 触发[单位-创建]事件

也可以用create_unit实现。

local illusion = unit:create_illusion(where, face, dest)

create_item

创建物品

  • 参数
    • name (string) - 物品名
    • target (point/unit/nil) - 创建位置
  • 返回
    • item (item)

创建出来的物品所有者为unit。当target为点,物品会创建在地上;当target为单位,物品会创建在单位身上,但如果该单位的[物品栏]已满则会创建在单位所在的位置上;当targetnil时,物品会创建在自己身上。

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)

is_illusion

是否是幻象

由c++实现的api

  • 返回
    • result (boolean) - 是否是幻象
local result = unit:is_illusion()

is_in_range

是否在范围内

  • 参数
    • target (point/unit) - 目标位置
    • radius (number) - 范围
  • 返回
    • result (boolean) - 结果

会算上自己的[选取半径]。

local result = unit:is_in_range(target, radius)

is_visible

是否可见

由c++实现的api

  • 参数
    • dest (unit/player) - 单位/玩家
  • 结果
    • result (boolean) - 结果

判断单位能否被dest看到。如果dest是单位,则会使用控制dest的玩家来计算[视野]。

local result = unit:is_visible(dest)

is_walking

是否在移动

由c++实现的api

  • 返回
    • result (boolean) - 结果
local result = unit:is_walking()

add_z_speed

跳到空中,即给z轴速度增加一个值。仅3d模式下有效。到空中后,会受到重力加速度的影响。没有返回值。

由c++实现的api

unit:add_z_speed(3000)

set_z_speed

给z轴速度设置一个值。仅3d模式下有效。会受到重力加速度的影响。没有返回值。

由c++实现的api

unit:set_z_speed(3000)

get_z_speed

获取z轴的当前速度

由c++实现的api

local speed = unit:get_z_speed()

kill

杀死

由c++实现的api

  • 参数
    • killer (unit) - 凶手
  • 返回
    • result (boolean) - 是否成功

没有凶手时,凶手视为自己。

local result = unit:kill(killer)

learn_skill

学技能

由c++实现的api

  • 参数
    • name (string) - 技能名

触发[单位-学习技能]事件。

unit:learn_skill(name)

lightning

创建闪电

由c++实现的api

  • 参数
    • data (table) - [闪电属性]
  • 返回
    • lightning (lightning) - 闪电

闪电相关的描述见[这里][闪电]。

local lightning = unit:lightning
{
model = '闪电名称',
source = {unit, 'socket_hit'},
target = {point, 100},
}

loop

启动循环计时器

  • 参数
    • timeout (integer) - 周期(毫秒)
    • on_timer (function) - 回调函数
  • 返回
    • timer (timer) - 计时器
  • 回调参数
    • timer (timer) - 计时器

等价于unit:timer(timeout, 0, on_timer)。只要有可能,就应该使用此方法来启动计时器,而不是使用base.loop

local timer = unit:loop(1000, function (timer)
-- 每1000毫秒执行一次,直到手动移除触发器或单位被移除
end)

pick_item

拾取物品

  • 参数
    • item (item) - 物品
  • 返回
    • result (boolean) - 是否成功

如果物品不在地上,或单位的物品栏已满,则会失败。单位会发动“.拾取物品”技能来尝试靠近然后拾取物品。

local suc = unit:pick_item(item)

reborn

复活

由c++实现的api

  • 参数
    • where (point) - 复活位置

触发[单位-复活]事件。

unit:reborn(where)

remove

移除

由c++实现的api

unit:remove()

remove_animation

移除动画

由c++实现的api

  • 参数
    • name (string) - 动画名称
unit:remove_animation '动画名称'

remove_buff

移除状态

  • 参数
    • name (string) - 状态名称

会移除所有该名称的状态。

unit:remove_buff(name)

remove_provide_sight

不提供视野

  • 参数
    • team (integer) - 队伍ID

令单位的视野不提供给指定队伍。视野的说明见[这里][视野]。

unit:remove_provide_sight(1)

remove_restriction

老api,和remove_mark效果一样。(单位标记以前叫行为限制)

由c++实现的api

  • 参数
    • type (string) - [单位标记]
unit:remove_restriction '无敌'

remove_mark

移除单位标记

由c++实现的api

  • 参数
    • type (string) - [单位标记]
unit:remove_mark '无敌'

replace_attack

切换攻击技能

由c++实现的api

  • 参数
    • name (string) - [攻击技能]名称
unit:replace_attack(name)

replace_skill

切换技能

由c++实现的api

  • 参数
    • old (string) - 旧技能
    • new (string) - 新技能
  • 返回
    • result (boolean) - 是否成功

旧技能不能是隐藏类型,如果新技能还没在单位上,则会先添加为隐藏类型,再替换。

unit:replace_skill(old, new)

set

设置属性

由c++实现的api

  • 参数
    • state (string) - [单位属性]
    • value (number/string/table) - 数值或字符串 表(内置属性只能为number)

会清除属性的百分比部分。

单位属性涉及到底层同步属性值大小存在上限,当序列化后的属性大小超过 1300 * 256 - 50 时会抛出异常提示大小受限, 所以不要一次性设置过大的表属性

unit:set('生命', 100)

set_ex

设置数值属性的特定值

由c++实现的api

  • 参数
    • state (string) - [单位属性]
    • value (number) - 数值或字符串(内置属性只能为number)
    • value_type (integer) - [单位数值属性类型]
unit:set_ex('生命', 100, 0)

set_attribute_max

设置属性上限

由c++实现的api

  • 参数
    • state (string) - [单位属性]
    • value (number) - 上限值
unit:set_attribute_max('攻击速度', 10.0)

set_attribute_min

设置属性下限

由c++实现的api

  • 参数
    • state (string) - [单位属性]
    • value (number) - 下限值
unit:set_attribute_min('攻击速度', 1.0)

set_attribute_sync

设置属性同步方式

由c++实现的api

  • 参数
    • name (string) - [单位属性]
    • sync (string) - [同步方式]

默认同步方式为none

unit:set_attribute_sync('攻击速度', 'all')

set_facing

设置朝向

由c++实现的api

  • 参数
    • angle (number) - 朝向
    • time (integer) - 转身时间(毫秒)

若不填time则按照单位转身速度转身,否则按照time指定的时间转身,若time为0则立即转身。

unit:set_facing(90.0, 0)

set_height

设置高度

由c++实现的api

  • 参数
    • height (number) - 高度
unit:set_height(100)

set_level

设置等级

  • 参数
    • level (interger) - 等级

用于[英雄升级]库。等级不能降低。

unit:set_level(2)

set_model

设置模型

由c++实现的api

  • 参数
    • name (string) - 单位名称

修改为指定单位的模型。

set_asset

设置模型

由c++实现的api

  • 参数
    • name (string) - 模型表ActorModelData里对应的资源名,对应物编里的模型节点名

修改单位模型为指定资源。

unit:set_model(name)

set_resource

设置能量

  • 参数
    • type (string) - [能量类型][能量]
    • value (number) - 数值
unit:set_resource('怒气', 100)

set_attackable_radius

设置选取半径

由c++实现的api

  • 参数
    • radius (numnber) - 选取半径

在使用[选取器]/[搜敌器]/计算施法距离等操作时会考虑选取半径。

unit:set_attackable_radius(radius)

stop

打断

由c++实现的api

打断攻击,施法和移动。

unit:stop()

stop_attack

打断攻击

unit:stop_attack()

stop_cast

打断攻击和施法

unit:stop_cast()

stop_skill

打断施法

unit:stop_skill()

texttag

漂浮文字(跳字)

由c++实现的api

  • 参数
    • target (unit) - 创建位置
    • text (string) - 文本内容
    • type (string) - [漂浮文字类型]
    • sync (string) - [同步方式]
    • data (table) - 属性
      • r (integer) - RGB的红色[0,255],只有“其他”支持。
      • g (integer) - RGB的绿色[0,255],只有“其他”支持。
      • b (integer) - RGB的蓝色[0,255],只有“其他”支持。
      • size (integer) - 漂浮文字大小,默认为10。

同步方式的参考单位为对象自己。如果看不到跳字也没有报错,可能就是同步类型不对。比如你用一个你没有视野的单位来跳字,同步类型又传了self,你就会看不到这个跳字。

unit:texttag(target, '文本内容', '其他', 'all', { size = 20 })

timer

启动计时器

  • 参数
    • timeout (integer) - 周期(毫秒)
    • count (integer) - 循环次数
    • on_timer (function) - 回调函数
  • 返回
    • timer (timer) - 计时器
  • 回调参数
    • timer (timer) - 计时器

count设置为0表示永久循环。只要有可能,就应该使用此方法来启动计时器,而不是使用base.timer


local timer = unit:timer(1000, 10, function (timer)
-- 每1000毫秒执行一次,执行10次
end)

wait

启动单次计时器

  • 参数
    • timeout (integer) - 周期(毫秒)
    • on_timer (function) - 回调函数
  • 返回
    • timer (timer) - 计时器
  • 回调参数
    • timer (timer) - 计时器

等价于unit:timer(timeout, 1, on_timer)。只要有可能,就应该使用此方法来启动计时器,而不是使用base.wait

local timer = unit:wait(1000, function (timer)
-- 在1000毫秒后执行一次
end)

walk

移动

由c++实现的api

  • 参数
    • target (point) - 目标地点
  • 返回
    • 寻路结果枚举 含义如下
      • 0 成功
      • 1 单位死亡
      • 2 不使用jps不能寻路
      • 3 定身标记
      • 4 正在释放技能且不可打断
      • 5 空单位
      • 6 单位当前正在等待(碰到别的单位)
      • 7 目标在之前的目标点附近(100距离内)
      • 8 单位不可见
      • 9 单位walkable为空

令单位移动到目标地点。

unit:walk(target)

get_scene_name

获取单位[场景]名称:

由c++实现的api

  • 返回
    • scene_name (string) - 单位所在场景
local scene_name = unit:get_scene_name()

jump_scene

单位跳转[场景],如果目标场景不存在,将返回错误

由c++实现的api

  • 参数
    • scene_name (string) - 玩家将要跳转的场景
  • 返回
    • result - 跳转成功与否
unit:jump_scene()

get_node_mark

获取默认单位的node_mark,非默认单位的node_mark会返回空字符串

由c++实现的api

  • 返回
    • node_mark(string) - 单位的node_mark
local node_mark = unit:get_node_mark()

attach_to

将单位附着在别的单位上,注意该单位的碰撞仍然在原处

  • 参数
    • target (unit) - 目标单位
    • socket (string) - 可以不填,或者填target上的socket名字
unit:attach_to(target, socket)

状态机相关

get_or_create_state_machine

创建自定义服务端状态机,如果已经存在就返回存在的状态机

  • 参数

    • name (string) - 状态机名字,同一个单位上的状态机名字不能重复。注意不要使用形如"skill"的名字,这些被默认状态机占用了
    • sync (bool) - 是否将状态机同步给客户端,不填默认false。同步给客户端的作用是让客户端的单位上创建一个同样结构的状态机来播动画。
  • 返回

    • sm (table) - 状态机lua对象
    • new (bool) - 是否是新创建的
local sm, new = unit:get_or_create_state_machine('taunt', true)

sync_state_machines

单位同步状态机到客户端。一般是服务器状态机建好之后再同步,减少通信成本。 状态机名字是唯一id。首先客户端会清理服务端没有的同步状态机(不会清理客户端独有的状态机) 然后添加服务端同步过来的新状态机,如果客户端已经有同名的,则不处理。 参见客户端 lua里base.event.on_unit_state_machine_changed的逻辑

unit:sync_state_machines()