跳到主要内容

场景

通过配置id(scene_cs.xlsx id)(副本场景,一个场景配置id可能对应多个场景对象) get_by_id

  • args:
名字类型说明、描述
idnumber配置id
---
  • ret: table 场景列表

  • 示例:

function isc_test_scene:get_by_id()
local obj = edi.player:owner(module.player)
local scene_id = edi.object:get_scene_id(obj)
local scenes = edi.scene:get_by_id(scene_id)
for _, scene in pairs(scenes) do
LOGI("isc test: " .. edi.scene:get_name(scene))
end
end

通过配置id获得其中一个场景对象 get_one

  • args:
名字类型说明、描述
idnumber配置id
---
  • ret: userdata? 场景对象

通过唯一id获得场景 get_by_uuid

  • args:
名字类型说明、描述
uidnumber唯一id
---
  • ret: userdata 场景

  • 示例:

function isc_test_scene:get_by_uuid()
local obj = edi.player:owner(module.player)
local scene_uuid = edi.object:get_scene_uuid(obj)
local scene = edi.scene:get_by_uuid(scene_uuid)
LOGI("isc test: " .. edi.scene:get_name(scene))
end

获得场景配置名(scene_cs.xlsx name) get_name

  • args:
名字类型说明、描述
sceneuserdata场景
---
  • ret: string 名字

  • 示例:

function isc_test_scene:get_name()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
LOGI("isc test: " .. edi.scene:get_name(scene))
end

获得场景配置id get_id

  • args:
名字类型说明、描述
sceneuserdata场景
---
  • ret: number 配置id(scene_cs.xlsx id)

  • 示例:

function isc_test_scene:get_id()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
LOGI("isc test: " .. edi.scene:get_id(scene))
end

获得场景唯一id get_uuid

  • args:
名字类型说明、描述
sceneuserdata场景
---
  • ret: number 唯一id

  • 示例:

function isc_test_scene:get_uuid()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
LOGI("isc test: " .. edi.scene:get_uuid(scene))
end

是否是副本场景 is_dg

  • args:
名字类型说明、描述
sceneuserdata场景
---
  • ret: boolean 是否

  • 示例:

function isc_test_scene:is_dg()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
LOGI("isc test: " .. tostring(edi.scene:is_dg(scene)))
end

副本唯一id get_dg_uuid

  • args:
名字类型说明、描述
sceneuserdata场景对象
---
  • ret: number 副本唯一id 未获取到副本时返回0

  • 示例:

function isc_test_scene:get_dg_uuid()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
LOGI("isc test: " .. edi.scene:get_dg_uuid(scene))
end

获得场景出生点 get_born_pos

  • args:
名字类型说明、描述
sceneuserdata场景
---
  • ret: pos_info 出生点

  • 示例:

function isc_test_scene:get_born_pos()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local pos = edi.scene:get_born_pos(scene)
LOGI("isc test: " .. pos.x .. ":" .. pos.y)
end

设置场景出生点 set_born_pos

  • args:
名字类型说明、描述
sceneuserdata场景
xnumberx
ynumbery
---
  • ret: 无

  • 示例:

function isc_test_scene:set_born_pos()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local bak_pos = edi.scene:get_born_pos(scene)
edi.scene:set_born_pos(scene, bak_pos.x + 1, bak_pos.y + 1)
local pos = edi.scene:get_born_pos(scene)
LOGI("isc test: " .. pos.x .. ":" .. pos.y)
edi.scene:set_born_pos(scene, bak_pos.x, bak_pos.y)
end

随机一个坐标点 get_random_pos

  • args:
名字类型说明、描述
sceneuserdata场景
objuserdata对象(需要产生随机点的目标对象)
---
  • ret: pos_info 坐标点

  • 示例:

function isc_test_scene:get_random_pos()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local pos = edi.scene:get_random_pos(scene, obj)
LOGI("isc test: " .. pos.x .. ":" .. pos.y)
end

是否是非阻挡点(只检查了物理阻挡) is_empty_pos

  • args:
名字类型说明、描述
sceneuserdata场景
xnumberx
ynumbery
---
  • ret: boolean 是否

  • 示例:

function isc_test_scene:is_empty_pos()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local pos = edi.scene:get_random_pos(scene, obj)
LOGI("isc test: " .. tostring(edi.scene:is_empty_pos(scene, pos.x, pos.y)))
end

对指定对象是否是非阻挡点 is_object_empty_pos

  • args:
名字类型说明、描述
sceneuserdata场景
objuserdata对象
xnumberx
ynumbery
---
  • ret: boolean 是否

  • 示例:

function isc_test_scene:is_object_empty_pos()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local pos = edi.scene:get_random_pos(scene, obj)
LOGI("isc test: " .. tostring(edi.scene:is_object_empty_pos(scene, obj, pos.x, pos.y)))
end

是否是安全区点 is_safe_pos

  • args:
名字类型说明、描述
sceneuserdata场景
xnumberx
ynumbery
---
  • ret: boolean 是否

  • 示例:

function isc_test_scene:is_safe_pos()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local pos = edi.scene:get_random_pos(scene, obj)
LOGI("isc test: " .. tostring(edi.scene:is_safe_pos(scene, pos.x, pos.y)))
end

跳转指定配置id场景(确认 scene_cs.xlsx scene_type 是静态场景,否则可能会是错误的传送) transfer_id

  • args:
名字类型说明、描述
playeruserdata指定玩家
idnumber目的场景id
xnumber目的坐标x
ynumber目的坐标y
radiusnumber?随机范围,默认范围5,超过5则全图随机, 0:表示定点传送
---
  • ret: boolean 是否成功

  • 示例:

function isc_test_scene:transfer_id()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local born_pos = edi.scene:get_born_pos(scene)
edi.scene:transfer_id(module.player, 2, born_pos.x, born_pos.y)
end

跳转指定唯一id场景(副本场景,一个场景配置id对应多个场景实例,也就是多个唯一id) transfer_uuid

  • args:
名字类型说明、描述
playeruserdata指定玩家
uidnumber目的场景唯一id
xnumber目的坐标x
ynumber目的坐标y
radiusnumber?随机范围,默认范围5,超过5则全图随机, 0:表示定点传送
---
  • ret: boolean 是否成功

  • 示例:

function isc_test_scene:transfer_uuid()
local scenes = edi.scene:get_by_id(1)
for _, scene in pairs(scenes) do
edi.scene:transfer_uuid(module.player, edi.scene:get_uuid(scene), -1, -1)
return
end
end

直接传送到指定npc位置(默认在npc 3格访问内) transfer2npc

  • args:
名字类型说明、描述
playeruserdata玩家对象
npcuserdatanpc对象
---
  • ret: 无

  • 示例:

function isc_test_scene:transfer2npc()
local npc_id = 201
local npc = edi.npc:get_by_id(npc_id)
if npc then
edi.scene:transfer2npc(module.player, npc)
end
end

寻路到指定位置(这里只能针对非副本(镜像)地图) route2pos

  • args:
名字类型说明、描述
playeruserdata玩家对象
scene_idinteger场景ID
dest_xintegernpc对象
dest_yintegernpc对象
task_idinteger
---
  • ret: 无

寻路到指定npc位置(默认在npc 20格访问外则自动给传送) route2npc

  • args:
名字类型说明、描述
playeruserdata玩家对象
npcuserdatanpc对象
task_idinteger
---
  • ret: 无

  • 示例:

function isc_test_scene:route2npc()
local task_id = 10001
local npc = util.get_task_npc(task_id)
if npc then
edi.scene:route2npc(module.player, npc, task_id)
end
end

移动到当前场景指定位置 move_to

  • args:
名字类型说明、描述
playeruserdata指定玩家
xnumber目的坐标x
ynumber目的坐标y
radiusnumber随机范围,默认范围5,超过5则全图随机, 0:表示定点传送
---
  • ret: boolean 是否成功

  • 示例:

function isc_test_scene:move_to()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local pos = edi.scene:get_random_pos(scene, obj)
edi.scene:move_to(module.player, pos.x, pos.y)
end

场景内所有对象 get_all_objects

  • args:
名字类型说明、描述
sceneuserdata场景
bits_filternumber过滤器
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

  • 示例:

function isc_test_scene:get_all_objects()
local bit_player = 1
local bit_monster = 1 << 1
local bit_npc = 1 << 2
local bit_pet = 1 << 3
local bit_scene_item = 1 << 4

local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
-- 查找场景内的玩家和npc
local objects = edi.scene:get_all_objects(scene, bit_player | bit_npc, {min_level = 1})
for _, object in pairs(objects) do
LOGI("isc test: " .. edi.object:get_name(object))
end

local objects_count = edi.scene:get_all_objects(scene, bit_player | bit_npc, {meta_id = {1001}}, true)
LOGI("isc test count: " .. objects_count)
end

场景内所有玩家对象 get_all_players

  • args:
名字类型说明、描述
sceneuserdata场景
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

  • 示例:

function isc_test_scene:get_all_players()

local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local objects = edi.scene:get_all_players(scene)
for _, object in pairs(objects) do
LOGI("isc test: " .. edi.object:get_name(object))
end
end

场景内所有怪物对象 get_all_monsters

  • args:
名字类型说明、描述
sceneuserdata场景
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table|number 对象列表

  • 示例:

function isc_test_scene:get_all_monsters()

local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local objects = edi.scene:get_all_monsters(scene)
for _, object in pairs(objects) do
LOGI("isc test: " .. edi.object:get_name(object))
end
end

场景内所有npc对象 get_all_npcs

  • args:
名字类型说明、描述
sceneuserdata场景
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

  • 示例:

function isc_test_scene:get_all_npcs()

local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local objects = edi.scene:get_all_npcs(scene)
for _, object in pairs(objects) do
LOGI("isc test: " .. edi.object:get_name(object))
end
end

场景内所有场景道具对象 get_all_scene_items

  • args:
名字类型说明、描述
sceneuserdata场景
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

  • 示例:

function isc_test_scene:get_all_scene_items()

local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local objects = edi.scene:get_all_scene_items(scene)
for _, object in pairs(objects) do
LOGI("isc test: " .. edi.object:get_name(object))
end
end

场景内所有扩展对象(特效、传送点) get_all_exts

  • args:
名字类型说明、描述
sceneuserdata场景
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

视野内对象 get_eye_objects

  • args:
名字类型说明、描述
objuserdata指定对象
bits_filternumber过滤器
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

  • 示例:

function isc_test_scene:get_eye_objects()
local bit_player = 1
local bit_monster = 1 << 1
local bit_npc = 1 << 2
local bit_pet = 1 << 3
local bit_scene_item = 1 << 4

local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
-- 查找视野内的玩家和npc
local objects = edi.scene:get_eye_objects(obj, bit_player | bit_npc)
for _, object in pairs(objects) do
LOGI("isc test: " .. edi.object:get_name(object))
end

local objects_count = edi.scene:get_eye_objects(obj, bit_player | bit_npc, nil, true)
LOGI("isc test count: " .. objects_count)
end

视野内所有玩家对象 get_eye_players

  • args:
名字类型说明、描述
objuserdata场景
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

  • 示例:

function isc_test_scene:get_eye_players()

local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local objects = edi.scene:get_eye_players(obj)
for _, object in pairs(objects) do
LOGI("isc test: " .. edi.object:get_name(object))
end
end

视野内所有怪物对象 get_eye_monsters

  • args:
名字类型说明、描述
objuserdata场景
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

  • 示例:

function isc_test_scene:get_eye_monsters()

local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local objects = edi.scene:get_eye_monsters(obj)
for _, object in pairs(objects) do
LOGI("isc test: " .. edi.monster:get_name(object))
end
end

视野内所有npc对象 get_eye_npcs

  • args:
名字类型说明、描述
objuserdata场景
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

  • 示例:

function isc_test_scene:get_eye_npcs()

local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local objects = edi.scene:get_eye_npcs(obj)
for _, object in pairs(objects) do
LOGI("isc test: " .. edi.object:get_name(object))
end
end

视野内所有场景道具对象 get_eye_scene_items

  • args:
名字类型说明、描述
objuserdata场景
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

  • 示例:

function isc_test_scene:get_eye_scene_items()

local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local objects = edi.scene:get_eye_scene_items(obj)
for _, object in pairs(objects) do
LOGI("isc test: " .. edi.object:get_name(object))
end
end

指定半径范围内对象 get_rect_objects

  • args:
名字类型说明、描述
sceneuserdata场景
centerpos_info中心点
radiusnumber半径
bits_filternumber过滤器
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

指定半径范围内玩家对象 get_rect_players

  • args:
名字类型说明、描述
sceneuserdata场景
centerpos_info中心点
radiusnumber半径
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

指定半径范围内怪物对象 get_rect_monsters

  • args:
名字类型说明、描述
sceneuserdata场景
centerpos_info中心点
radiusnumber半径
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

指定半径范围内npc对象 get_rect_npcs

  • args:
名字类型说明、描述
sceneuserdata场景
centerpos_info中心点
radiusnumber半径
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

指定半径范围内场景道具对象 get_rect_scene_items

  • args:
名字类型说明、描述
sceneuserdata场景
centerpos_info中心点
radiusnumber半径
object_filterobject_filter?对象过滤器
only_countboolean?是否是获取数量
---
  • ret: table 对象列表

  • 示例:

function isc_test_scene:get_rect_scene_items()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local pos = {x = 50, y = 50}
local radius = 5
local num = edi.scene:get_rect_scene_items(scene, pos, radius, nil, true)
LOGI("num = ".. num)
num = edi.scene:get_rect_npcs(scene, pos, radius, nil, true)
LOGI("num = ".. num)
num = edi.scene:get_rect_monsters(scene, pos, radius, nil, true)
LOGI("num = ".. num)
num = edi.scene:get_rect_players(scene, pos, radius, nil, true)
LOGI("num = ".. num)
num = edi.scene:get_rect_objects(scene, pos, radius, nil, true)
LOGI("num = ".. num)
num = edi.scene:get_all_exts(scene, pos, radius, nil, true)
LOGI("num = ".. num)
end

广播给场景玩家 broadcast

  • args:
名字类型说明、描述
sceneuserdata场景
styleNOTICE_TYPE枚举
contentstring内容
---
  • ret: 无

  • 示例:

function isc_test_scene:broadcast()
local scene = edi.player:get_scene(module.player)
edi.scene:broadcast(scene, 8, "场景的广播")
end

刷怪(x,y均传-1表示由系统随机刷怪点) summon_monster

  • args:
名字类型说明、描述
sceneuserdata场景
monster_idnumber怪物配置id
xnumberx
ynumbery
---
  • ret: userdata? 怪物对象nil表示失败

  • 示例:

function isc_test_scene:summon_monster()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local pos = edi.scene:get_random_pos(scene, obj)
edi.scene:summon_monster(scene, 1, pos.x, pos.y)

local sys_random_pos_mon = edi.scene:summon_monster(scene, 1, -1, -1)
if sys_random_pos_mon ~= nil then
local pos = edi.object:get_scene_pos(sys_random_pos_mon)
LOGI("isc test: system random pos monster's pos: " .. pos.x .. ":" .. pos.y)
end
end

刷npc summon_npc

  • args:
名字类型说明、描述
sceneuserdata场景
npc_idnumbernpc配置id
xnumberx
ynumbery
---
  • ret: userdata? npc对象nil表示失败

  • 示例:

function isc_test_scene:summon_npc()
local npc_id = 1001
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local pos = {x = 50, y = 50}
local bRet = edi.scene:summon_npc(scene, npc_id, pos.x , pos.y)
if bRet then
LOGI("isc_test_scene summon_npc")

edi.scene:del_npc(scene, npc_id)
end
end

删除npc del_npc

  • args:
名字类型说明、描述
sceneuserdata场景
npc_idnumbernpc id
---
  • ret: 无

刷传送点 summon_transport

  • args:
名字类型说明、描述
sceneuserdata场景
transport_idnumber传送点配置id (scene_delivery_point.xlsx id)
---
  • ret: boolean 是否成功

  • 示例:

function isc_test_scene:summon_transport()
local transport_id = 1
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local bRet = edi.scene:summon_transport(scene, transport_id)
if bRet then
LOGI("isc_test_scene summon_transport")
end
end

添加自定义场景传送点 add_ext_transport

  • args:
名字类型说明、描述
index_keystring标记
src_sceneuserdata添加到那个场景
src_xnumber传送点x
src_ynumber传送点y
dst_scene_idnumber传送到的目标场景id
dst_xnumber目标点x
dst_ynumber目标点y
---
  • ret: boolean 是否成功

  • 示例:

function isc_test_scene:add_ext_transport()
local index_key = "key_xxx"
local src_scene = 1001
local des_scene = 1002
local bRet = edi.scene:add_ext_transport(index_key, src_scene, 50, 50, des_scene, 50, 50)
if bRet then
LOGI("isc_test_scene add_ext_transport ")
end

local tabInfo = edi.scene:get_ext_transport(index_key)
if #tabInfo ~= 0 then
LOGI("isc_test_scene get_ext_transport end . desc scene metaid = "..tabInfo.dst_scene_id)
edi.scene:del_ext_transport(index_key)

local tabInfo1 = edi.scene:get_ext_transport(index_key)
if #tabInfo == 0 then
LOGI("isc_test_scene del_ext_transport ")
end
end
end

删除自定义场景传送点 del_ext_transport

  • args:
名字类型说明、描述
index_keystring标记
---
  • ret: 无

获取自定义场景传送点 get_ext_transport

  • args:
名字类型说明、描述
index_keystring标记
---
  • ret: ext_transport 场景传送点

指定场景添加定时器 add_timer

  • args:
名字类型说明、描述
sceneuserdata场景
index_keystring标记
uticknumber间隔时间(毫秒)
countnumber重复次数
callback_funcfunction回调函数
callback_datastring回调数据
---
  • ret: boolean 是否成功

  • 示例:

function isc_test_scene:add_timer()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local player_id = edi.player:get_uuid(module.player)
local _callback = function(uuid, timer_key, callback_params)
print("isc test:scene_timer_callback================================== ", uuid, callback_params)
local player = edi.player:get_by_uuid(callback_params)
edi.player:add_exp(player, 100)
end
local bRet = edi.scene:add_timer(scene, "scene_timer", 200, 200, _callback, tostring(player_id))
end

删除指定定时器 del_timer

  • args:
名字类型说明、描述
sceneuserdata场景
index_keystring标记
---
  • ret: 无

  • 示例:

function isc_test_scene:del_timer()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
edi.scene:del_timer(scene, "scene_timer")
end

判断是否有指定定时器 has_timer

  • args:
名字类型说明、描述
sceneuserdata场景
index_keystring标记
---
  • ret: boolean 是否成功

  • 示例:

function isc_test_scene:has_timer()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local bRet = edi.scene:has_timer(scene, "scene_timer")
end

获取场景内指定的一个npc对象 get_npc

  • args:
名字类型说明、描述
sceneuserdata场景对象
npc_idnumbernpc配置id
---
  • ret: userdata 对象实例

  • 示例:

function isc_test_scene:get_npc()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local npcid = 6000
local npc = edi.scene:get_npc(scene, npcid)
if npc then
local id = edi.npc:get_config_id(npc)
LOGI("isc_test_scene get_npc end . npc metaid = "..id)
end
end

创建一个场景范围特效(类似安全区光圈) create_range_effect

  • args:
名字类型说明、描述
sceneuserdata场景对象
center_pospos_info中心点坐标
radiusnumber半径
shapenumber形状(0:方形,1:圆形)
effect_idnumber特效id
---
  • ret: userdata 对象实例

  • 示例:

function isc_test_scene:create_range_effect()
local obj = edi.player:owner(module.player)
local scene = edi.object:get_scene(obj)
local center_pos = {x=25,y=25}
local bRet = edi.scene:create_range_effect(scene, center_pos, 5, 1,1001)
if bRet then
LOGI("创建一个场景范围特效")
end
end

场景中掉落物品 drop_item

  • args:
名字类型说明、描述
sceneuserdata场景对象
owneridnumber掉落物品拥有者ID
itemidnumber物品配置id
itemnumnumber物品数量
xnumber掉落x坐标
ynumber掉落y坐标
rangenumber掉落范围
---
  • ret: boolean 是否成功

  • 示例:

function isc_test_scene:drop_item()
local obj = edi.player:owner(module.player)
local owneruuid = edi.object:get_uuid(obj)
local scene = edi.object:get_scene(obj)
local item_id = 1001
local bRet = edi.scene:drop_item(scene, owneruuid, item_id, 1, 25, 25, 5)
if bRet then
LOGI("isc_test_scene drop_item 场景中掉落物品成功")
end
end