# 商城 NPC 商店(203 服务端) 40250 系统菜单里的「商城」按钮发 `/in_game_mall`,服务端回 `mall `,客户端用网页窗口打开这个地址。203 没有网页商城, URL 指向 google.com,所以窗口是空的。这里的做法是:把商城物品放进一个普通 NPC 商店,按金币卖。 - 商店 vnum 14(`shop` / `shop_item` 表),挂在 NPC 9010「百店老板娘」上(客户端模型 goods_02)。 - 9010 放在三个村(a1 / b1 / c1)的杂货店 9003 旁边,位置写在 `install.sh` 的 `VILLAGES` 里。 - 9010 在 mob_proto 里的 `on_click` 原本是 2,点击后没有任何处理。脚本把它改成 1(ON_CLICK_SHOP,见 game `trigger.cpp`), 点击才会打开商店。`item_mall.quest` 只在测试服下给 9010 加对话选项,正式服不影响。 - 售价写在 item_proto 的 `gold` 列(`item_proto.txt` 第 10 列 / DB `item_proto.gold`)。这 40 件物品的 `shop_buy_price`(卖给 NPC 的价格)是 0,所以不能低买高卖。 - `items.tsv`:vnum、数量、价格、名称,一行一件,最多 40 件(`SHOP_HOST_ITEM_MAX_NUM`,5×8 格)。 ## 定价 | 物品 | 价格(金币) | |---|---| | 红龙 / 蓝龙的祝福(全部 8 种) | 1 | | 经验戒指、小偷的手套、幸运金币 30 分 / 3 小时 / 10 小时 | 5 万 / 25 万 / 70 万 | | 丝绸包囊 30 分 / 3 小时 / 10 小时 | 3 万 / 15 万 / 40 万 | | 第三只手、兵法六统 15 分 / 30 分 / 3 小时 | 2 万 / 4 万 / 20 万 | | 仓库扩张卷 15 分 / 30 分 / 3 小时 | 1 万 / 2 万 / 10 万 | | 龙神的攻击 / 防御 / 生命 / 智力 | 各 10 万 | | 双倍伤害丸、无视防御丸 | 各 15 万 | | 经验药水、夺宝手套 | 各 20 万 | | 物品属性转换秘籍 | 50 万 | | 追加物品属性秘籍、龙神的祝福书 | 各 100 万 | 价格按时长大致线性递增,长时长的略有折扣。改价格时编辑 `items.tsv`,然后重新安装。 ## 安装 ```sh scp -r tools/server/item-mall-shop root@:/root/ ssh root@ 'sh /root/item-mall-shop/install.sh' ssh root@ 'cd /usr/metin2/server && sh close.sh; sleep 8; echo 1 | sh start.sh' ``` db 只在启动时读取 item_proto、mob_proto 和商店表,game 只在启动时读取 npc.txt,所以装完必须重启。脚本可以重复运行: 价格和商店每次都按 `items.tsv` 重写;某个村如果已经有 9010,就不会再加一个。 ## 回滚 每次运行都会备份到 `/root/backup-itemmall/<时间>/`: ```sh B=/root/backup-itemmall/<时间> cp $B/item_proto.txt $B/mob_proto.txt /usr/metin2/server/share/conf/ for m in metin2_map_a1 metin2_map_b1 metin2_map_c1; do cp $B/$m.npc.txt /usr/metin2/server/share/locale/newcibn/map/$m/npc.txt done mysql -uroot player < $B/player-shop.sql ``` 回滚后同样要重启。203 上最早的备份(改动之前)在 `/root/backup-itemmall/20260929-162714`,但这份备份里还没有 mob_proto; 9010 原来的 on_click 是 2。