本服(v079)里「一件物品到底从哪来」一次讲清楚 —— 全部以 scripts 目录里的真实脚本为例
GM100 管理员权限。scripts 文件夹,搜物品 ID(如 2000002)或脚本名,就能定位到发放它的那个 .js(这个方法在 NPC 修改教程里也用过)。一句话:游戏里每一件能拿到的东西,都从下面 5 个渠道进背包。知道这 5 个,查任何物品出处都不迷路。
| 来源 | 怎么拿到 | 对应代码 / 文件 | 在查询器里看哪 |
|---|---|---|---|
| ① 怪物掉落 | 打怪爆出 | drop_data.sql 掉落表 | 「掉落 / 来源」列(悬停看爆物) |
| ② NPC 商店 | 点 NPC 开商店买 | cm.openShop(商店ID) ,在 scripts/npc/*.js | — |
| ③ NPC 发放 / 兑换 | 做任务、在线时长、用元宝/材料换 | cm.gainItem(...) ,在 scripts/special/*.js | — |
| ④ 活动 / 副本 | 打 BOSS、过活动 | scripts/event/*.js 、quest 脚本 | — |
| ⑤ 中枢 NPC:聚合功能 | 一个 NPC 串起上面所有来源 | scripts/special/聚合功能.js | 点它就能到 ② ③ ④ |
这是最基础的出处。本服的掉落数据在 drop_data.sql,查询器已经直接接好了:
drop_data 表,本文不展开。很多 NPC 脚本里一句 cm.openShop(数字) 就弹出一个商品列表。比如「聚合功能」里直接开商店:
// 聚合功能.js 里的一段:case 命中后打开编号 57 的商店 case 某编号: cm.dispose(); cm.openShop(57); // 57 是商店表的 ID,对应一份商品清单
商店的真正商品清单在服务端的「商店表」里(按 57 这种 ID 查),NPC 脚本只负责「把这个商店开出来」。想知道某商店卖什么,找对应 openShop 的数字、再去商店表查即可。
scripts/npc/ 下大量脚本都用到 openShop(如各职业转职官、杂货商等),它们就是「NPC 商店」这种出处。scripts/special/ 里一堆脚本靠 cm.gainItem(物品ID, 数量) 把东西放进你背包。下面全是本服真实代码。
// 在线满 60 分钟领「永久雇佣商人」 if(cm.getPlayer().getGamePoints() >= 60 && cm.getPlayer().getGamePointsPD() == 0){ cm.gainItem(5030001, 1); // 永久雇佣商人 x1 } // 在线满 120 / 180 / 240 … 分钟继续发: cm.gainItem(2000002, 100); // 红药水 x100 cm.gainItem(2000003, 100); // 蓝药水 x100 cm.gainItem(5040000, 2); // 瞬移石头 x2 cm.gainItem(5220040, 3); // 飞天猪的蛋 x3 cm.gainItem(4001197, 100); // 强化石 x100
// 先列一个「可发清单」,[物品ID, 数量] var reqlist = Array( Array(1372046,1), // 短杖 Array(1332081,1), // 短剑 Array(1402053,1), // 双手剑 ... ); // 玩家选第几个,就发那把武器 var wuqi = reqlist[selection][0]; cm.gainItem(null, wuqi, 0,0,3,3, ...);
// jmsz 数组:[物品ID, 价格(元宝), 数量, ?, 名称] var jmsz = Array( Array(5220040,1,1,"未定义","飞天猪的蛋"), Array(4002000,1,1,"未定义","绿蜗牛邮票"), Array(5200002,5,1,"未定义","金币包"), // …… );
| 脚本 | 它给什么 | 触发方式 |
|---|---|---|
| 在线奖励.js | 药水/石头/强化石等(按在线时长) | 在线满 N 分钟领 |
| 首充奖励.js | 任选一把武器 | 首次充值 |
| 元宝商城.js | 飞天猪蛋/洗蓝洗血/邮票/金币包/祝福… | 花元宝买 |
| 高级点装.js | 点装类装备 | 兑换/购买 |
| 骑宠抽奖.js | 骑宠 | 抽奖 |
| 兑换2043201.js 等一串「兑换XXXX.js」 | 用旧物品换新物品 | 拿材料/碎片去换 |
| 黄金换枫叶.js / 金杯纪念币兑换.js / 国庆币换点券.js | 货币互相兑换 | 拿对应货币换 |
| 龙魂戒指打造.js / SS级戒指.js / 钓鱼戒指升级.js | 成品装备/戒指 | 打造/升级 |
| 鉴定.js / 修复强化.js / 革命装备.js | 装备加工后的产物 | 加工行为产出 |
gainItem(物品ID 即可命中。打 BOSS、过活动给的物品,来自 scripts/event/ 和任务脚本。比如 scripts/event/bosspq.js 这种 BOSS 副本,通关后用同样的 gainItem 发奖励。要查这类出处,就去找对应的 event / quest 脚本搜物品 ID。
游戏里点「拍卖」就是打开「聚合功能」这个 NPC(聊天窗口会显示名字「聚合功能」)。它本身不囤货,而是把玩家分流到上面各种来源:
// 聚合功能.js 把不同菜单项,转交给其它 NPC / 商店 / 传送 cm.warp(910000000, 0); // 传送去某地图 openNpc(9010000, "每日白嫖"); // → 发物品的 NPC openNpc(9010000, "在线奖励"); // → 在线奖励.js openNpc(9310022, "材料盲盒"); // → 抽材料 openNpc(9010000, "一条龙"); // → 一条龙福利 cm.openShop(57); // → 直接开商店
它菜单里常见的入口:升级传送赞助每日白嫖师徒系统寄售市场每日跑环材料盲盒一条龙技能学习在线奖励元宝商城。要找某件物品的出处,从这里点进去基本都能到。
index.html,搜物品名/ID,看「掉落 / 来源」列——能直接看到怪物掉落就完事了。scripts 文件夹搜 gainItem(物品ID,命中的 special/*.js 就是出处。openShop 看哪个 NPC 开了含此物的商店,再按商店 ID 去商店表查。兑换 或物品 ID,找 兑换XXXX.js 这类脚本。scripts/event/ 和任务脚本搜物品 ID。方法跟之前 NPC 修改教程一样——用记事本打开 .js,改完 Ctrl+S 保存,进游戏重新点 NPC 就生效(没变化再重启服务端)。
// 在线奖励.js 里,把 100 改成你想要的 cm.gainItem(2000002, 100); → 改成 cm.gainItem(2000002, 300);
// 元宝商城.js 的 jmsz 数组里加一行:[物品ID, 元宝价, 数量, "未定义", "名字"] Array(2000004,2,10,"未定义","祝福"),
// 新文件 兑换9999999.js:收 A 发 B if(cm.haveItem(旧物品ID, 1)){ cm.gainItem(旧物品ID, -1); // 扣掉旧的 cm.gainItem(新物品ID, 1); // 发新的 }
openNpc 它,否则玩家点不到。改完务必先在测试服验证。gainItem(2000002, 100) 里 ID 多一位少一位都发不出,先去查询器确认正确 ID。gainItem(ID, 数量),负数表示扣除(用来收材料);别把数量写成 -1 想发东西。openShop(57) 的 57 必须在商店表里存在,否则点了没反应。getGamePointsPD()==0 防止领第二次;自己加发放一定要加领取标记,否则无限刷。