👾
DungeonPlus
  • DungeonPlus
  • 插件命令
    • 组队命令
  • 插件配置
    • 地牢配置
  • 地牢
    • 地牢介绍(基础)
      • 变量
      • 启动参数
    • 地牢占位符
      • Placeholder ( SELF )
      • Self ( SELF )
      • Random ( ALL )
      • Dungeon ( ALL )
      • Data ( ALL )
      • If ( ALL )
      • Item ( ! INIT )
      • Mob ( ! INIT )
      • Area ( ! INIT )
    • 地牢任务
    • 地牢怪物
    • 地牢区域
    • 地牢脚本
      • 脚本类型
      • 脚本列表
        • 初始类
          • SetSpawn
          • SetMap
          • Revive-Setting
          • Setting
        • 任务类
          • TaskContain
          • Task
        • 障碍组类
          • Obstacle
          • Block
        • 怪物组类
          • MonsterGroup
          • Remove-MonsterGroup
          • Mob
        • 条件判断类
          • Js-Condition
          • Team-Condition
          • Data-Condition
          • Kill
          • Kill-Any
        • Npc
        • Command
        • Teleport
        • Message
        • Script
        • End
        • Data
        • Interact
        • Sound
        • Kether
      • 区域限制
      • 脚本组
      • Kether
    • 地牢交互
      • Kill
      • Break
      • Place
      • Walk
      • Area
      • Entity_Area
      • Command
      • Block_Interact
      • Entity_Death
      • Player_Drop
      • Player_Death
    • 地牢编辑
      • 快捷选择工具
    • 常见问题
      • 为什么怪物组不刷新怪物?
      • 障碍组怎么触发?
    • 教程&小知识
      • 导入新建地牢教程
      • 副本挑战限制小知识
  • 开发赞助计划
    • 计划内容
    • 计划扩展功能
      • 地牢全息交互
        • Hologram 脚本
      • BC 跨服兼容
        • 配置&命令
      • UI 组队界面
  • 更新记录
    • 发布版
      • 1.4.2
      • 1.4.0~1.4.1
      • 1.3.9
      • 1.3.8
      • 1.3.7
      • 1.3.4
      • 1.3.2~1.3.3
      • 1.3.1
      • 1.2.8
      • 1.2.7
      • 1.2.6
      • 1.2.5
      • 1.2.4
      • 1.2.3
      • 1.2.2
      • 1.2.1
      • 1.2.0
      • 1.1.9
      • 1.1.8
      • 1.1.7
      • 1.1.6
      • 1.1.5
      • 1.1.4
      • 1.1.3
      • 1.1.2
      • 1.1.1
      • 1.1.0
      • 1.0.9
      • 1.0.8
      • 1.0.7
      • 1.0.6
      • 1.0.5
      • 1.0.4
      • 1.0.2 / 1.0.3
      • 1.0.1
      • 1.0.0
    • 内测版
  • 开发者
    • 事件
      • DungeonEvent
      • DungeonTeamEvent
      • DungeonContentEvent
    • ############
由 GitBook 提供支持
在本页
  • 地牢占位符是干什么的?
  • 地牢占位符格式
  • @SELF 注意
  • 开发者-怎么注册地牢占位符?
  1. 地牢

地牢占位符

该功能从 1.0.8 版本开始

上一页启动参数下一页Placeholder ( SELF )

最后更新于3年前

地牢占位符是干什么的?

类似 PlaceholderAPI 的占位符功能,但不同的是 PlaceholderAPI 只能在 部分脚本上使用 而 地牢占位符 可以在每一行脚本上使用,例如 <mob:kill-amount *小白> 可以获取当前地牢内玩家已击杀小白怪物的数量,这是 PlaceholderAPI 无法做到的

地牢占位符格式

占位符的格式为 <头:参数1 *参数2 *...> 参数之间的间隔用 ' *' 这个空格一定要加不可忽略

@SELF 注意

一般支持 @SELF 类型的占位符,如果用 @SELF 通常数据来源于触发者自身,例如 用 @SELF 时是检测触发者背包的物品,用 @SYSTEM 时是检测整个地牢内的玩家背包

开发者-怎么注册地牢占位符?

实现 DungeonPlaceholder 接口即可注册

interface DungeonPlaceholder : DungeonComponent {

    /**
     * 占位符头
     */
    val head: String

    /**
     * 所属插件
     */
    val plugin: String

    /**
     * 例子
     */
    val example: String

    /**
     * 支持的脚本类型列表,空则全部类型支持
     */
    fun getSupportType(): Array<ScriptType>? {
        return null
    }

    /**
     * [dungeon] 地牢对应地牢
     * [params] 参数,即 'hand:params' 某个 [ *值] 都为一参数值
     */
    fun onRequest(dungeon: Dungeon, params: Array<String>): String? {
        return null
    }

    /**
     * [dungeon] 地牢对应地牢
     * [params] 参数,即 'hand:params' 某个 [ *值] 都为一参数值
     * [trigger] 触发者
     */
    fun onRequest(dungeon: Dungeon, params: Array<String>, trigger: Entity?): String? {
        return this.onRequest(dungeon, params)
    }
}
package org.serverct.ersha.dungeon.internal.dungeon.placeholder

import org.serverct.ersha.dungeon.common.api.annotation.AutoRegister
import org.serverct.ersha.dungeon.common.api.component.placeholder.DungeonPlaceholder
import org.serverct.ersha.dungeon.common.api.component.script.type.ScriptType
import org.serverct.ersha.dungeon.internal.dungeon.Dungeon

@AutoRegister(registerMessage = false)
class DungeonMobPlaceholder : DungeonPlaceholder {

    override val head: String = "mob"

    override val example: String = "<mob:kill-amount/kill-contain *怪物名>"

    override val plugin: String = "DungeonPlus"

    override fun getSupportType(): Array<ScriptType> {
        return arrayOf(ScriptType.SYSTEM, ScriptType.DUNGEON, ScriptType.PLAYER, ScriptType.TRIGGER_SELF)
    }

    override fun onRequest(dungeon: Dungeon, params: Array<String>): String? {
        val name = params[1]
        val monsterAnnal = dungeon.dungeonMeta.getOrDefault("monster-annal") {
            mutableMapOf<String, Int>()
        }

        return when (params[0]) {
            "kill-amount" -> (monsterAnnal[name] ?: 0).toString()
            "kill-contain" -> monsterAnnal.containsKey(name).toString()
            else -> null
        }
    }
}
Item