找回密码
 立即注册

QQ登录

只需一步,快速开始

游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
广告位招租 联系QQ51605539 今日新开 进入游戏
非官方wiki 芙蕾雅NPC-技能-道具数据库 永久可用 血玫瑰社区 进入游戏
天堂2协议 天堂2客户端协议附带英文客户端下载 不定期更新 L2FATER 进入游戏
Close
查看: 9|回复: 1

[俄端] 寻宝猎人活动:Lucera 2 - [天堂2六章可用]

[复制链接]
  • 打卡总天数:1225
  • 打卡总奖励:6320
发表于 昨天 11:51 | 显示全部楼层 |阅读模式
Treasure Hunter Event: Lucera 2 (Interlude)
  • 不得商业✓仅供单机 ✓备份下载
  • 提取码: 隐藏内容
  • 支援版本:铁幕降临 
  • 资源评分:8分
  • 资源大小:60KB
  • 更新时间:2026-08-16
L2Fater.CN - 天堂2开源中文社区 - 温馨提示:
玩家被传送到一个封闭的竞技场,里面满是宝箱。每个打开的宝箱都有可配置的概率奖励或爆炸并杀死打开者。到回合结束时积分最多的人获胜。
详情介绍
寻宝猎人活动:Lucera 2(铁幕降临)
作者:Kelvin
原文简译版:
注意:我不是程序员、开发者、编码员或其他任何东西。我在用Claude尝试移植并为Lucera带来一些额外模组,让它作为PVP基地更好用,我收到了太多关于这个的信息。
我没有在游戏中运行测试过,我没有Windows系统,希望接下来的我能做到。因此,如果有人使用、测试并在本帖报告是否有效或是否有bug,我将不胜感激。
欢迎改进,如果你是开发者并想帮忙,可以给出反馈或分享修正。
给大家一个飞吻,请阅读:

寻宝活动。玩家被传送到一个封闭的竞技场,里面满是宝箱。每个打开的宝箱都有可配置的概率奖励或爆炸并杀死打开者。到回合结束时积分最多的人获胜。
以.ext.jar形式分发:不修改server.jar,也不需要核心补丁。
拿去你要的东西:https://drive.google.com/file/d/1dWF4GntbTRNi0nu32MlvrkBkwL7mfGE_/view?usp=drive_link附件中也有。
来源与致谢
可以随意使用、修改和再分发。如果转发,请保留原始帖子的署名。

下载➜ 下载完整包(.zip)压缩包包含编译好的.ext.jar、带注释的配置文件和完整源代码。
此模组及其他模组的仓库:github.com/kelvinmath/Lucera-Interlude-Mods
要求
  • Lucera 2 / Interlude服务器(.ext.jar是针对Lucera的server.jar编译的;其他核心不会加载)。
  • Java 17,与服务器相同。
  • 数据包中的竞技场实例。默认是804(PvP Coliseum),已经准备好。
注意:​ .ext.jar是针对特定构建版本的Lucera编译的。如果在其他构建版本中因签名不兼容而无法加载,只需从fonte/文件夹重新编译即可(说明见帖子末尾)。

安装(3步)
  • 将 treasurehunter.ext.jar 复制到服务器根目录,即与 server.jar 相同的文件夹。
  • 将 config/treasurehunter.properties 复制到服务器的 config/ 文件夹。
  • 重启GameServer。
不需要编辑 StartGameServer.bat 或任何其他文件。但有两个规则不是可选的
  • 文件名必须以 .ext.jar 结尾。如果重命名为 treasurehunter.jar,模组根本不会启动。
  • 必须放在根目录,紧挨着 server.jar。子文件夹无效。
原因见帖子末尾的“服务器如何加载扩展”部分,如果某些内容未加载,值得一读。

确认已加载在GameServer启动时,日志中应出现以下两行:
TreasureHunter: config carregada (arena=804, pvp=false, baus=40+6).TreasureHunter: carregado. Horarios: 15:00, 20:00, 23:00
如果没有出现,请参见帖子末尾的“常见问题”。

立即测试以GM身份登录并运行 //th_start 来立即开启报名,无需等待预定时间。

包内容treasurehunter.ext.jar             -> 复制到服务器根目录config/treasurehunter.properties   -> 复制到 <服务器>/config/fonte/src/...                      -> 源代码(可选,仅用于修改)fonte/build.sh                     -> 编译脚本LEIA-ME.md                         -> 说明
运行活动只需要前两个文件。fonte/文件夹是为想要修改代码的人准备的。

命令玩家
命令
作用
.th
报名参加活动
.th sair
取消报名
.th ranking
显示当前回合前十名
.th stats
显示个人累计统计


GM
命令
作用
//th_start
立即开启报名
//th_stop
取消正在进行的活动
//th_info
显示状态、参与者和当前配置
//th_reload
重新加载.properties(仅在活动停止时)
//th_rescue
将被困在竞技场的玩家移出


GM命令需要在访问级别拥有 IsEventGm 权限。

活动如何运作五个阶段:

阶段
发生什么
REGISTERING
NPC在奇岩城出生,全服公告,玩家通过.th进入
PREPARING
所有人被传送到竞技场并冻结倒计时
RUNNING
宝箱散落出生;玩家奔跑去打开它们
ENDING
公布排名,发放奖励,保存统计
INACTIVE
销毁竞技场,所有人返回原来位置



宝箱两种类型,各有自己的概率、分数和奖励:
  • 普通​ — 更常见,成功概率更高,分数少
  • 金色​ — 更稀有,概率较低,但分数高得多
宝箱在第一击时打开(NPC的HP不重要)。打开时:
  • 成功​ → 获得分数、配置的物品,连击数增加
  • 失败​ → 宝箱爆炸,杀死玩家,连击数清零
死亡的玩家会在几秒后重生在竞技场的随机点。

宝箱分布竞技场分为5个区域(北、南、东、西、中央)。每次刷新时,活动会选择最不拥挤的区域,并在其中随机选取一个空闲点——这样宝箱就不会堆在一个角落。

反蹲守每经过AntiCampSeconds秒,活动会比较玩家的当前位置与之前的位置。如果玩家没有离开配置的半径范围,就会被传送到另一个点。防止有人原地等待同一个宝箱刷新。

连击与平局决胜连击计数连续成功的开箱次数,每次死亡后重置。最终排名按以下顺序决出:积分 → 最佳连击 → 最少死亡 → 最先报名者。

配置所有配置都在 config/treasurehunter.properties 中。文件逐字段带有注释。你最可能想调整的是:
StartTimes = 15:00,20:00,23:00     # 自动开始时间(会自动重新安排)
Duration = 10                       # 每回合分钟数MinLevel = 40MaxLevel = 85NormalSuccessChance = 70            # 70%概率奖励GoldenSuccessChance = 55NormalRewardItemId = 57             # 普通宝箱奖励金币NormalRewardItemCount = 10000AllowPvP = False                    # True则允许活动期间PVP
最终排名奖励(格式:id,数量,多个物品用分号分隔):
Reward1st = 57,5000000
Reward2nd = 57,3000000Reward3rd = 57,1000000RewardParticipation = 57,100000

更换竞技场默认使用实例804(Coliseum),数据包中已有。要使用其他竞技场,更改InstanceId并调整宝箱可以出生的矩形区域:
InstanceId = 804
ArenaMin = 148300 45900 -3408ArenaMax = 150650 47550 -3408ArenaZ   = -3408
可用的现成实例:801, 802, 803, 804。
刷新网格会根据这个矩形自动生成——你不需要逐个注册宝箱坐标。

PVP当 AllowPvP = False(默认)时,玩家之间互相无敌,活动纯粹是抢宝箱竞赛——只有爆炸才会导致死亡。当 AllowPvP = True 时,他们也可以互相击杀。

更换宝箱默认ID(18265和18270)是数据包自带的宝藏箱。如果更换,NPC必须是Monster或TreasureChest类型——Folk类型的NPC无法被攻击,没人能打开宝箱。如果检测到无效的NPC,活动会在日志中警告。
宝箱的原生掉落会被抑制:只发放配置的奖励。

统计数据按角色保存,重启后仍然存在:

变量
内容
th_events
参与的活动次数
th_points
累积积分
th_best_points
单回合最高分
th_best_combo
最佳连击
th_chests / th_golden
打开普通/金色宝箱数
th_deaths
死亡次数
th_top1 / th_top2 / th_top3
领奖台次数



常见问题启动日志中没有显示TreasureHunter。
请按顺序检查:
  • 文件是否在服务器根目录,紧挨着server.jar?子文件夹不行。
  • 文件名是否仍以.ext.jar结尾?如果重命名了,加载器会忽略。
  • 你是否从服务器文件夹内通过StartGameServer.bat启动服务器?快捷方式的“起始于”指向其他地方会导致加载器在错误位置查找扩展——那样所有扩展都不会加载,包括原本正常工作的那些。
配置错误 / //th_info中显示奇怪的值。
treasurehunter.properties没有被复制到<服务器>/config/。没有该文件,活动可能会以不同的默认值启动。
宝箱无法被攻击。
配置的NormalChestNpcId / GoldenChestNpcId是Folk类型。换成Monster或TreasureChest类型的NPC。
玩家被困在竞技场。
运行//th_rescue。在竞技场内掉线的玩家也会在下次登录时自动返回。
我想在不重启的情况下更改配置。
在活动停止状态下,使用//th_reload。

服务器如何加载扩展不需要在.bat中注册任何东西,但理解这个机制可以在某些内容未加载时节省时间。分为两个独立步骤。
1. Classpath。​ StartGameServer.bat这样启动服务器:
java -server ... -cp config;./* l2.gameserver.GameServer
./*是Java自身的classpath通配符:它会展开为当前文件夹中的所有.jar,包括你的。这就是为什么命令行中不需要添加任何东西——根目录下的任何新jar都会自动加入。(config排在前面是为了让treasurehunter.properties能被找到。)
重要细节:Java的通配符./*不递归。它只获取根目录下的*.jar,忽略root/mods/*.jar。
2. 扩展加载器。​ 仅仅在classpath中只是让类可见——并不会执行任何操作。真正激活模组的是核心,它在启动时执行类似于:
new File(".").listFiles(filtro)   // 文件以".ext.jar"结尾
然后对于每个找到的jar,寻找实现了ScriptFile接口的类并调用其onLoad()方法。正是这一步安排了定时任务并注册了.th和//th_*命令。
由此得出安装的两条规则:
  • 文件名以.ext.jar结尾​ —— 过滤器就是根据这个字面后缀。一个treasurehunter.jar会进入classpath但永远不会调用onLoad():模组变得不可见,日志中没有任何错误。
  • 放在根目录​ —— listFiles只列出一层,不会进入子文件夹。
一个值得了解的陷阱:那个new File(".")是进程的工作目录,而不是server.jar所在的文件夹。由于.bat是从服务器文件夹内部启动的,两者重合,没人注意到差异。但如果你创建了一个Windows快捷方式,并将“起始于”指向其他地方,服务器会正常启动,但所有扩展都不会加载——包括之前正常工作的那些。

从头编译(可选)仅当你需要修改代码,或者.ext.jar在你的构建版本中无法加载时才需要。压缩包中已经包含了编译好的jar。
cd fonteSERVER=/path/to/server ./build.sh
需要JDK 17。如果你的PATH中的javac不是17,请设置JAVA_HOME:SERVER=/path/to/server JAVA_HOME=/path/to/jdk17 ./build.sh
该脚本会将服务器根目录中的所有.jar作为classpath,并生成fonte/build/treasurehunter.ext.jar。

代码文件src/com/l2jbrasil/mods/treasurehunter/  TreasureHunterMod.java     入口点(ScriptFile),每日调度  TreasureHunterEvent.java   活动引擎:阶段、监听器、奖励  ChestManager.java          宝箱的生成/认领,原子点预留  ArenaGrid.java             生成刷新网格并按区域分类  Participant.java           每个玩家的计分板和状态  SpawnPoint.java            刷新点,包含索引和区域  THConfig.java              读取.properties  THVoicedCommand.java       .th命令  THAdminCommand.java        //th_*命令

实现细节值得记录的点,供修改者参考:
宝箱在受到伤害时打开,而非死亡时。​ 如果我们让宝箱正常死亡,核心会运行MonsterInstance.calculateRewards,原生掉落会掉在地上,绕过活动的奖励系统。取而代之的是,宝箱在第一击时就被认领:我们清空仇恨列表(使getTopDamager()返回null),然后调用doDie接着deleteMe。
打开冷却。​ 范围技能会触发每个目标的伤害监听器。如果不加限制,一次施法就会打开范围内的所有宝箱。因此设置了OpenCooldown(默认400毫秒),同时也作为得分上限。只有在宝箱被实际认领后才消耗冷却——争夺宝箱失败不会锁定玩家。
Reflection的定时器被重写。​ 实例的init()方法设置了来自XML的两个自动销毁触发器(collapseIfEmpty和timelimit)。两者都会在回合中途摧毁竞技场,因此它们被替换为基于活动实际持续时间的计算期限。
生成计数器。​ 每个计划的任务都保存了创建时的回合编号,如果编号改变就放弃执行。仅仅取消ScheduledFuture是不够的——已经出队的任务无论如何都会执行,可能会影响下一回合的状态。
解救被困玩家。​ 在竞技场内掉线的玩家会携带th_return标记。下次登录时会被送回原点(有几秒延迟,以免在EnterWorld过程中传送)。回合中途重启后同样适用。

回复

使用道具 举报

  • 打卡总天数:1225
  • 打卡总奖励:6320
 楼主| 发表于 昨天 12:27 | 显示全部楼层
作者:=*CaioxD*= 分享的acis版本
原文翻译如下
宝藏猎人活动适配 aCis 版本。感谢 Kelvin 发布并与社区分享原始活动。我在此提供适配 aCis 的修改版本,包含多项修正与改进:
• 完整的 XML 配置。
• 可选择副本活动或开放世界活动。
• 自动发送报名邀请。
• 自定义 NPC,支持报名、状态查看和排行榜。
• 外部 HTML 文件,便于自定义修改。
• 普通宝箱与黄金宝箱,其概率、积分和奖励均可配置。
• 实时排行榜,仅显示前十名。
• 玩家永久统计数据。
• 开始前的倒计时。
• 自动复活,无需点击“回村”按钮。
• 防蹲点与范围攻击宝箱的保护机制。
• 活动期间禁止登出和切换角色。
• 玩家断线后自动恢复。
• 禁止同时报名参加 TvT、CTF、DM、LM、MultiTvT、FOS 和 KTB。
• 提供报名、排行榜和统计数据的命令。
• 提供完整的 .diff 安装文件。
玩家必须摧毁散布在竞技场中的宝箱来积累积分和奖励。部分宝箱可能会爆炸并杀死参与者。活动结束时,排名靠前的玩家将获得设定的奖励。
再次感谢 Kelvin 分享原始活动。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表