组队、每周 dungeon 和英文版
为 beta 做了三件事:进房间之前可以先组队,dungeon 每周会有不同的修饰效果,整个游戏也可以用英文玩了。
为什么
到目前为止,两个想一起玩的人,只能各自进传送门,然后祈祷分到同一个房间。修饰效果从设计一开始就有,为的是让同一个 dungeon 不会每周都一样。设计文档从第一行就要求四种语言,而翻译加入得越晚,成本越高。
怎么运作
要组队,在城镇里点一下某个人,选“邀请入队”。最多 4 人。队长进传送门时,在城镇里的队员会一起进同一个房间,之后单独进来的人会落到队伍已经在的那个房间。队伍聊天是 /p。没有队伍时,游戏会先找等级相近的人所在的房间(每 10 级一档),然后才去填最满的那一个。
每周有一个修饰效果,所有 dungeon 通用:Fúria(敌人打得重 25%)、Fortificados(生命多 35%)、Pressa(速度快 30%)、Fortuna(生命略多,金币翻倍)和元素风暴。它显示在房间顶部,也出现在团队突袭的信息里。
菜单里有“Idioma / Language”选项,第一次进入时游戏会根据设备的语言来选。整个界面都迁到了一张有五百多条的文本表里。内容名称(物品、技能、职业、怪物、房间、食谱、外观)也有英文版。俄语和中文以后会作为新的列加进同一张表。服务器自己拼出来的一些消息,比如战利品的描述和公告,目前还是葡萄牙语。
下一步
界面阶段:进入流程、新的栏,以及手册。
变更
- feat(rooms): parties, level-band matchmaking and weekly dungeon modifiers
Parties of up to four: invite by tapping a player in the city, accept from a popup, party chat with /p. When the leader takes a portal, the members who are in the city go into the same instance; a member taking the portal alone joins the instance where the party already is. Solo matchmaking prefers an instance in the same level band (tens of levels), then the fullest one; a party prefers an empty room of its own. A weekly modifier from data/modifiers.json (Furia, Fortificados, Pressa, Fortuna, Tempestade elemental) changes enemy health, damage, speed or gold in every dungeon and shows in the room header and the Incursao info. Protocol 17.
- feat(client): Portuguese and English UI (i18n)
All client UI text now goes through a string table: i18n/strings.csv (columns keys,pt_BR,en; 501 snake-case keys, RU/ZH later are new columns), registered in project.godot with pt_BR as fallback. Server notice codes, account errors, rejected-command reasons and food buffs map to key families (notice_*, acc_err_*, reason_*, buff_*). Content names stay Portuguese in data/*.json; data/i18n/en.json holds the English names (items, skills, classes, jobs, mobs and their attacks, rooms and hints, dungeon/incursion layouts, legend phases, portals, buildings, recipes, cosmetics and banners, elements, reactions, chests, grades, affixes, equipment bases, slots, region, farm zones and nodes, hair colors and styles). client/loc.gd (Loc) picks the name for the current locale, falls back to the data name, and can translate a PT text that arrived without an id (room name in the sim meta, layout titles, legend phase texts) by reverse lookup. The main menu has an "Idioma / Language" picker saved to user://settings.cfg ([ui] locale); default is pt_BR when the OS locale starts with "pt", else en. Changing it reloads the scene so HUD, chat and panels rebuild in the new language. --lang=xx forces a locale without saving (screenshots, tests). Chat also accepts /report. tests/test_i18n.gd checks that every key the client uses exists, that no CSV key is unused, that both columns are filled with matching placeholders, and that en.json covers every id of each category. The generated .translation files are gitignored (rebuilt by --import). Pending (still Portuguese in EN): - text formatted by the server: loot_rpc lines, announcements, market sale notices, incursion chest name and drop preview, chest names in the Bag (view has no chest id), legend/explore texts built server-side - gear stat strings (Gear.describe in core) and gear names in market listings, trade and storage views that come without the base id - market search matches the Portuguese item names on the server - guild log dates use day/month in both languages - the report reason sent from the town menu stays PT (it is moderation data)