Skip to content

实体 Handle

网络池 ID 可以复用,因此插件通过以下完整身份识别实体:

text
sessionId + entityType + entityId + streamGeneration

不能缓存 Native 指针,也不能假设相同 ID 以后仍代表同一个实体。

lua
local function inspect_entity(event)
    local entity = samp.entity.get(
        event.entityType,
        event.entityId,
        event.streamGeneration
    )

    if entity == nil or not entity:is_valid() then
        return
    end

    local position = entity:position()
    samp.log.info(
        entity.type .. "#" ..
        samp.format.number(entity.poolId, 0) ..
        " at " ..
        samp.format.number(position.x, 1) .. ", " ..
        samp.format.number(position.y, 1) .. ", " ..
        samp.format.number(position.z, 1)
    )
end

samp.events.on("entity.streamed_in", inspect_entity)

实体类型

类型主要方法
playername()npc()state()health()armor()vehicle_id()
vehiclemodel()health()velocity()heading()
objectmodel()rotation()moving()attachment()
actormodel()health()invulnerable()heading()
pickupmodel()pickup_type()
text_labeltext()color()draw_distance()test_los()attachment()

所有 Handle 都有身份字段、is_valid()position()。附着文本标签的坐标是服务器配置的偏移。

运行中启用插件时,应使用 samp.entity.list(type, startId, limit) 分页建立当前实体基线。分页结果使用前仍要检查 is_valid()