- ◆ 支持核心
- Arclight
- ◆ 插件前置
- 无
- ◆ 游戏版本
- 1.21.1
CobblemonUltraBattle
购买后联系作者QQ:1109132获取授权
项目定位
CobblemonUltraBattle 是一个面向 Cobblemon 混合端服务器的对战扩展项目。本模组和插件纯服务端,客户端无需任何修改
本模组和插件纯服务端,客户端无需任何修改
本模组和插件纯服务端,客户端无需任何修改
它的核心目标很直接:
- 让服主和开发者不改源码也能快速制作新的对战效果(甚至无需重启服务器)
- 用 JavaScript 为宝可梦对战添加自定义机制(甚至提供编辑器,通过点击积木块的方式一键生成)
- 同时支持“对战效果”和“自定义携带物”两类脚本扩展
- 通过可视化编辑器降低脚本配置门槛


核心亮点
1. JavaScript 驱动的对战扩展
项目支持直接使用 JS 编写战斗逻辑。你可以在不同战斗事件中执行自定义效果,例如:
- 战斗开始时触发
- 每回合开始或结束时触发
- 使用伤害类招式时触发
- 额外出招或追击时触发
- 携带物持续生效、残留结算、招式后生效
2. 双扩展体系:对战效果 + 自定义携带物
项目提供两套独立但风格统一的脚本体系:- UltraBuff:给宝可梦挂载额外的对战效果
- Held Item:制作拥有自定义脚本逻辑的携带物
- UltraBuff 更适合做天赋、符文、称号效果、羁绊效果、专属战斗被动
- Held Item 更适合做赛季道具、活动限定道具、职业装备、特殊战斗饰品
3. 丰富的脚本 API
脚本内可直接调用多类函数:- Action.*:执行动作,例如治疗、伤害、发消息、额外使用招式
- Placeholder.*:读取生命、伤害、个体值、努力值、能力值、世界信息等
- Global.*:读取当前回合、事件、招式信息
- Player.*:获取宝可梦所属玩家
- Counter.*:管理临时计数器、long 计数器、NBT 持久计数器
4. 三种计数器体系
项目内置了非常适合复杂战斗机制的计数器系统:- tempValue
只在当前战斗内有效,战斗结束后清空 - longValue
保存在内存中,适合跨战斗累计,但服务器关闭后会清空 - persistentValue
持久化写入 Pokemon.persistentData,服务器重启后仍然保留
- 连击计数
- 回合累计触发
- 宝可梦成长记录
- 挑战进度
- 赛季收集数值
- 个体专属成就标签
5. PlaceholderAPI 联动
项目支持在脚本中直接调用:Placeholder.papiParse(playerOrPokemon, "%playerpoints_points%")
它可以:
- 直接解析玩家对象上的 PlaceholderAPI 变量
- 如果传入的是 pokemon,会自动通过宝可梦主人解析
- 当对象为空时安全返回空字符串
6. 本地可视化编辑器
项目自带本地编辑器,可用于:- 新建对战效果脚本
- 新建自定义携带物脚本
- 可视化拼装常见逻辑块
- 快捷插入动作函数与计数器操作
- 自动生成 JS 脚本
- 查看函数说明与参数示例
7. 热重载与管理支持
项目支持重载脚本与配置,便于开发和活动期间快速调整。这意味着你可以:
- 快速迭代平衡
- 在线修正脚本逻辑
- 临时上线节日活动内容
- 为赛事服快速切换规则
适合做什么
你可以用 CobblemonUltraBattle 做出很多“有服务器特色”的内容,例如:- 专属宝可梦被动
- 职业流派效果
- 道馆馆主技能机制
- 赛季限定战斗词条
- 带成长记录的培养系统
- 根据玩家积分动态变化的技能效果
- 绑定玩家经济或任务进度的奖励技能
- BOSS 战多阶段机制
- 活动副本里的特殊战斗道具
JS 示例(就算不会写js,也可以用编辑器直接生成,可以无脑制作任何携带物)
示例 1:低血线触发斩杀
({id: "executioner",
name: "处刑者",
onUseDamagingMove(pokemon, opponents, allies, battle) {
const target = opponents[0];
if (!target) return;
const hp = Placeholder.getHealth(target);
const maxHp = Placeholder.getMaxHealth(target);
if (maxHp <= 0) return;
if (hp / maxHp <= 0.15) {
Action.damagePokemon(target, maxHp);
Action.sendBattleMessage(`${pokemon.displayName} 触发了处刑者,一击带走了 ${target.displayName}!`);
}
}
})
示例 2:回合累计恢复
({id: "guardian_pulse",
name: "守护脉冲",
onTurnEnd(pokemon, opponents, allies, battle) {
const triggers = Counter.addLongValue("guardian_pulse_count", 1, pokemon);
if (triggers % 2 === 0) {
Action.healPokemonPercent(pokemon, 10);
Action.sendBattleMessage(`${pokemon.displayName} 的守护脉冲生效,恢复了生命值。`);
}
}
})
示例 3:写入宝可梦 NBT 的永久成长记录
({id: "veteran_mark",
name: "百战印记",
onBattleEnd(pokemon, opponents, allies, battle) {
const total = Counter.addPersistentValue("battle_finish_count", 1, pokemon);
if (total === 100) {
Action.sendBattleMessage(`${pokemon.displayName} 达成了 100 场战斗记录!`);
}
}
})
示例 4:联动 PlaceholderAPI 的积分增伤
({id: "rank_power",
name: "段位之力",
onUseDamagingMove(pokemon, opponents, allies, battle) {
const pointsText = Placeholder.papiParse(pokemon, "%playerpoints_points%");
const points = Number(pointsText || 0);
const bonus = Math.min(30, Math.floor(points / 100));
if (bonus > 0) {
Action.setFinalDamage(Placeholder.getCurrentDamage() + bonus);
Action.sendBattleMessage(`${pokemon.displayName} 获得了 ${bonus} 点段位增伤。`);
}
}
})
示例 5:自定义携带物
({name: "Vital Berry",
spritenum: 1,
consumed: true,
num: -1,
gen: 9,
isNonstandard: "Past",
onUpdate(pokemon, source, effect) {
const hp = Placeholder.getHealth(pokemon);
const maxHp = Placeholder.getMaxHealth(pokemon);
if (maxHp <= 0) return;
if (hp / maxHp <= 0.25) {
Action.healPokemonPercent(pokemon, 20);
Action.consumeHeldItem(pokemon);
Action.sendBattleMessage(`${pokemon.displayName} 吃下了 Vital Berry!`);
}
}
})
为什么适合你的服务器
- 它不是单纯“加几个配置项”,而是提供了一整套可编程战斗扩展框架
- 它兼顾了脚本开发者和普通服主,可写代码,也可走编辑器
- 它既能做轻量平衡,也能做重度特色玩法
- 它可以与 PlaceholderAPI 等生态联动,方便接入现有服务器系统
- 它天然适合做“本服专属内容”,不容易和其他服务器同质化
- 高自由度
- 脚本化战斗扩展
- 可视化编辑
- 可做服务器专属机制
项目介绍
欢迎使用本模组
- 用脚本重塑 Cobblemon 对战体验
- 给你的 Cobblemon 服务器加入真正的专属战斗机制
- 不止是配置文件,而是一整套可编程战斗系统
- UltraBuff + 自定义携带物 + 可视化编辑器,一站式扩展 Cobblemon 战斗