From e5a821aabb3359c1892fdc606c9da4a979f8b63f Mon Sep 17 00:00:00 2001 From: quankong1551 <96553536+quankong1551@users.noreply.github.com> Date: Sat, 15 Aug 2026 01:08:18 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat(island):=20=E6=96=B0=E5=A2=9E=E8=BE=BE?= =?UTF-8?q?=E8=8A=AC=E5=A5=87=E6=B4=BE=E9=81=A3=E8=A7=92=E8=89=B2=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=86=9C=E7=94=B0=E6=97=A5=E5=BF=97=E4=B8=AD?= =?UTF-8?q?=E6=96=87=E6=98=BE=E7=A4=BA=20(#765)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(island): 新增岛屿可派遣角色达芬奇 - 新增模板 assets/cn/island_select_character/TEMPLATE_DAVINCI.png - 注册 character_templates 映射 DaVinci,识别阈值 0.8 回测通过,无跨格误匹配 - 经营模块角色下拉 _IslandBusinessChar 追加 DaVinci,config_updater 重生成 args.json/config_generated.py - 五语言 i18n 同步角色列表 help 文案与下拉选项翻译 * feat(island/farm): 仓库库存日志改为输出中文作物名 - 为农场/果园/苗圃共 26 种作物配置补充 cn_name 中文名 - warehouse_inventory() 库存日志由英文作物名改为中文显示 * feat(island): 岛屿仓库库存与餐品日志统一输出中文名 - 新增 ISLAND_ITEM_CN_NAMES 统一映射(121 项,来源为 i18n zh-CN、既有 cn_name 与注释) - 基类新增 _item_cn/_inv_cn/_products_cn 日志翻译助手,未知名兜底不报错 - 农田/渔场/矿山林场/牧场库存统计与补种日志改为中文 - 店铺调试信息(仓库/生产中/总库存/备餐计划)与餐品、原材料、蜂蜜/牛奶/芝士限制日志全部中文输出 - 制造业工坊产品日志(文件柜/净水滤芯/刀叉餐具/荠菜干/花束等)同步中文化 --- .../TEMPLATE_DAVINCI.png | Bin 0 -> 6291 bytes module/config/argument/args.json | 30 +++-- module/config/argument/argument.yaml | 1 + module/config/config_generated.py | 20 +-- module/config/i18n/en-US.json | 62 +++++---- module/config/i18n/ja-JP.json | 62 +++++---- module/config/i18n/zh-CN.json | 62 +++++---- module/config/i18n/zh-MIAO.json | 62 +++++---- module/config/i18n/zh-TW.json | 62 +++++---- module/island/island.py | 87 ++++++++++++- module/island/island_business.py | 10 +- module/island/island_farm.py | 70 +++++------ module/island/island_fishery.py | 32 ++--- module/island/island_juu_coffee.py | 28 ++--- module/island/island_juu_eatery.py | 14 +-- module/island/island_manufacture.py | 14 +-- module/island/island_mine_forest.py | 19 +-- module/island/island_rancher.py | 38 +++--- module/island/island_restaurant.py | 44 +++---- module/island/island_select_character.py | 1 + module/island/island_shop_base.py | 118 +++++++++--------- module/island/island_teahouse.py | 52 ++++---- module/island_select_character/assets.py | 1 + 23 files changed, 516 insertions(+), 373 deletions(-) create mode 100644 assets/cn/island_select_character/TEMPLATE_DAVINCI.png diff --git a/assets/cn/island_select_character/TEMPLATE_DAVINCI.png b/assets/cn/island_select_character/TEMPLATE_DAVINCI.png new file mode 100644 index 0000000000000000000000000000000000000000..5e5f04b4940fa7dcdcd68a6165875a3d6fd7ad72 GIT binary patch literal 6291 zcmV;E7;NW>P)$flWj5b%n!z~^1GRMBTLg@$ySAWDlswO8KbIWjz#M=w5pvmkI@iL)90ZEwLNa)0}!?bz#wOI*pP8crsY z*L3swXMblql*32`r0F^WNT!m(kYCr$D|*%*eBiG6nfbm?`daKtG~g9^;&PHl^bmqA z%Pf`hif%bBwGBlzER2u{NYkyNW>QKqb9K{+)MMejd(H^#sb zJh!O7HB`N!C%tV=Z8#pq2m=C>lV;|ZpZmw(=az~AnRh8O9oIy_^StZ2MBwY{lL$aj zwcGExW!H6Ai;{T0?}OP-27Lh0XoPSa073x3T*sld<2ttLxU{O8YN@Q~1^_DSWiFnm zuL=7+!Y6&>d-tvP`Q?9j@(m6X^x+RbFJPQ6>OXq@OqB-T`nvK}F)lH{T&T*b7Fy@+y;5eFTXNoHG$}O!m|MKFoP&mMG1fBfH zN0v(3_h0TCzfk=2*#`{UvTRr7WuE6Q%w=DB{bPiIaD*qs)?5I{6sw&pld9=_&^M6? zdBT3Vu{OM-u~uWAWH{uL#gkLxKAB(HTpI-?zg)}~)k0aPjtdC!JjYe%{W21HtZ23i zoZ<+I>y@RT>spfNi3CaS`PnPG(2bpT7M4mrkA-&ECDc^Zq@Zx@Gem(LH{i zColc-ow?jHCL|UQRx3I)5zmpJNBVejrX!uWc1wF>%tr{yEUP1P#j@oI2mMu53)Of7 zKH0Y2++wCsENg}ZuFI+g+p+cTyaVT0(cwQ~d+;#P;Ks;P5 zD1NU8J^erK{LZ1{`!=P2{`Gycgj*V(cWw9BsmUw0uYTjzBURffSJky^+s8-ef`XR; zcqQS6y&bjDfMMApLD_u8>k)zh>En^vOr9;5VY#|YDHTP&y*VBU$WkC=m=*@taUD}L zDka^p9K*D1-F6&T)2(p87mKF-qLm2Ho}FvOaM-R^GsBY@6V%$&($iW0qc2<;i1^M` z%$9Wgg`d6i(fg+!ee9l}{O~uO>)XaA=I_3H@8J(lRZ7M~H*NQNrKZl9ZJ3JXE*BK) z+9C!OaJnT*HLau=#|BCRWAmzRVMlcw8vrDM_xU`CV8^l*iwu=@s4Vx_4` zHJin}U>O!V{*wn|^>wDAR22Q)-szF43_&PY(Qdo3=YtQ=?Ax=pe{lBRd#@SlpW3x! zRWudV%35JQ@9}vi&yUHWAVbh`{jHOS-{M@I@H_y>elEFnk6kX9^CNOido?@b`cizj zh2uD2F5z`BE9DC#xa`EQ*pch&HOnPmQ(9Zh)bHA3F3nWu=ahwoL|e<^%mwuEkM65& zYoV_D%A38%h8CK_Ue&NNMdjfBZDuwz``*%-HE?#rZ8q7fQNpl0U;aGTjaNHO4 z74pk#ZohZt(<64Z?3H-{5JSP_x(&+g7P2O7jPQ~# z(P5VrN7Dd7=J?SSciu-GTb~~@ibdD9gYj5yE`#2E{QeC$uRq>5e)N;U+1YH=@5Kl$ zBHG*#+rFVSSr;u$&u!hYkr2X=l$n|fM1o_d2K|xn@`cRCoA(taC-h=b^m)Oy!dTnmQj!QbV(H)6`Jq z=5A|g-p(&NoaAd=!yIdQsL#@MTh};IYTC7zxo%l=;wy}UoXpcbyZvTJ^^_|1oIEGvd2asXtwcPN=o%?(d-f+$F$FC20W zh2weGapXY2XZE*ynRoNB?T<}oJ`U)auPfH6Li;v)6M{v*_JG)+U8Gpdz_ zD|$SM+QRvMTdf-9sy`Yc1eeRzNV)@^dG_J2|I^!EudsK0+u>7ViI8_mvF_WuD(sc6 zxbezDc3JlO2*&}y{NVUvb~zaGQ^%=I*O&4I*(158B?bJvBQ& zHzbejnwIGG5P_$T>yJkGP#BAnQ!X&qW{gpXVo~OOK_rN3E^AfFwyHReBYWj)xhjZ+ z2x6#n9i_~i9MLLeN@=(z;h2^$9vhv^rZ=ubJ6AVx1c!a{in?gAs>TD}yLYa(Mclfv ztB}dXo9Zc}u4Pa3pDz?uNfKhQFvbWIOkFDbyo3+{kb-_W8eW;3 zSz2~<-J#4V7BDZ!0e`tr_6EGJYkN~oVklaj8gVt<)HGixEc?CX3yU?YJIBT{QZ$No zuWJDSo+F(N35?*@Z5^V(rPsF!9?7*FIp7C`mSz{`$EIrPYjxe=IG*PT03re>3Ib!) z8;$tlakE-wloHtkfEi=dGR#teQ3?z!!%&MQZ#>5NLYeW&L|rtOS*}~z>Pxp526`RS za&;3E9I2_%DpgA}JdvOsj1BjlM+dfbEm!oGx@aQg-_+4u8)2b_nuf;O{9>+cRlBC@ zh>)?9=hSkQ6U9g(;@FPN3zlwqqkf=nC{@FWqEW44%n^aN4HF^eI*y@em>~ctFXb)U zY1q`Im8)Z)p4)i+))OC|-?e`u$cgOGh;8VWqEO38wKX`Fot@5v+E*3_2h%rQ|A(g! zp@Tct*p8bB`3=i?^p4%GWQ9}7kXJAbGhP#SDHy6g@Nu6%6!eGvw&idf0h3ArnNb$5 zPjUk9m?kGl%%w(Eu?@pAEys2UN2uvk^M$(hW=;}E&kZw|c3ib#W@vUrccX2&YRRxQ z%~DlhkgQJ-LM}`$Ak6vG>EiHE+nu)^dhAKGb8XA&=Gx41^|8CJDXVTQ9jIB+Y-AT| z8|wgo2;$7p_+oUq5$2BxvDONll zxwf^jxR_g-x!|dZ)vio03{Ez#YOzg+QfgInOH~2D8wy3D{)O>*+q9%m7;~Hu2q>7J z{csHZ*8|%!1!dQ!l@Hx{_3uACy=mL(sO%{(&&L~63;-PK)REJ!?+}NU*JWc3`yUw(DQ}(TnXpJJG{;?VisrKl{!5A_32_ z)1#f+uBa?rh=q~l^>93|mdhs(pN!Q-L(!nF=+vc=x>zU}EEmhRZSx2NFiM&0I7(3| zmn)X#5CJmti*r-6Ro&qwY1`f_JJxm1PfWLVHtU-16Fh~5EC5)#=?(gW$>`F|LbXs5 zBvB6fT~S^bne4gkx|jd=FAjY5n`ldS^S8fv)7tiinrN_4s^E0j;@FX<#%AieoWSR1 zE)4b#uH4YBtA?o>(NvretgAXN@TP8Bx}j7R$8ib9A}0g`K7>$3R{+2?On<5_*^qkv zZ=anUn)u5fd@a4AVQz9ku$ZNrT15%O!?9FyVRYIuOd@aq5KPAA=dv}ejfSe{=d5ja zd>(yySJ$Io{hY{i;hK1MsVK*4E7_^qRDw||$nxor`Vc{(Xuz@Euq0xRXu7GJuC5u5 zLlLGJBd^5EqF|baY3icrUCukYqOac3I(c%&G|aAR*LXv|xziJar_Zn2u!>o(<2beH zIzx4exvc9rjDqCz%3j&j?W$vTuS&oEi}&|@;gL`(g$_M>^QNs`zJM>9O6Wp7H+)hI zgkw<;T*TmwLvJ;#NQDzYU;w5|88a=1Q6L11A}8^fQrEOxm%6sDmdaICH3XFKg=Aed z8&|~>Z3)+Qm0Sh8R4FU2>-qwIuisnB6*Wa=pP{1Uqb?I9L9J-9bjY=wQ%A;b{?^|R z+eL3aac^BJ7Ei?^HF2S}=lrYB`;!gvWB>su#q!CcXNOKrY`tznG!YC7;^Vji9sj6Vt@yMZYIO#f-NNpfe8{h*%C0Egk3Zsk=5JUkJOdVFr6$sB^ zge}Vu1=)37LH3xsI3f^6sjeyn69!1&Wu_E zo&ehdM$sEz+ZSu7ORZiVtZyvkmrBzkoG3T7r75LOcImzM$3ls8|68w=OXdF2MF2?D zHTnf!3^rn3np;|^Yp7Y--qg9O@lWSZ?7d=TGU6+$wj}ZZfQZ0=GU_<4V_6g~F-ops zRZLq6NHIzD>uSNVj8vp$I=h@+Crr+miN^M>?Kc9|04N&x)i?5!)-k5_Y$pZ!p&QKfzb2+=dU)^rs_zcYCA26GoZCuxS{kuGzNfx?t)+UDxOJh69a`YZmgOj;;Fxwc%j> z?96<}7GEY`89O(5`(Hi-7f}s>qK}_@)XrUKSidg4Wn1qrpAEHi*h;mrwVC%wbLU1> z)GGTThaS8Cs=FWV-hSubf9t=8Vu@6KVpcOT5%frXK`~}#E=0n98$+xiaB%-RTemB! z!4aH{HVUGjV3`P_=pzU?0NX4qE)|9tK-gOs3e^Y0P1Q=SsE!B$HZ-}ke)GO+aVeCj zuV1~9V=kKeu?Z$9p`pMhwI{2-} zH{W{C&23E^;yyba3}0AYPw<7Vt`7+p&19VZfk}`Y%DPvsxw12U)xGx`sya1%+;((? z5aC7JGF{tbjL9gFT(L4#oAQNXqSvn!md?KO&ns8Aj*m@yqjeoS4h)~{d*@e&B6Z>Y z4?T)1Gsmf8&73~fx^>G(zj>x-bNABBqU871Hm6R!b)@~kBk>h0esbS~n-AR5xOwM8 zSM_XM)3W~Rw)QuAJ^MEKg6Z*dqi=rrVYaMwf9{d7@w4Tzv)}&V6BE6?d%pA~=JNp| z)OBn_2bUp21j&nB6E1TYwVglx`X4-g9}pv3(D!}u8yF~D^5Lt$Idk|Ow0!Pe-tSu+ z9Zs~jo_XuVjqBUyM`kh4rP^9Pdil+rUwsOA?!>FV7d?JH+5G*xZr#_}c=P6TX=wIm zwtMB&T<6-gZ!ayCW&gJS^w^eNyPtmi5o2-gv8TT~_UWfxH|=K_!$k~$GPr~%2rhHj z=&^U_22c8=j^$_sa}J@%+(rdvfyZ9O0lY=>Owe zCk}l32RwtSQtdr)I@Y%0j_Ypu!2?(BsgLxY92xk^U3*_0f|=RmO?UYB-^)}bcVWrn z^Sp5Xt^eh@zZd;JPLw!7fX^U62rfYw!zELFpNt=SJCth9PMqKK&F3V$0RI+(i%@Ce z=$T*suIu1+%Tu$0GuN;(G150fILZM!-aB^i8&AlFMFmnRmM3*fIsCJrPi!IFl4T#0 z#9fQn&gObgj`S+RQy(9uE?rt!bW5XiXZm~Y`5bd80tA;K43}X701M|%jeq(+5hP9! z*WCJ`hiCBbFbV)DclMogFa4om`$jdF7r9*P+WLw9dB$wa;P{#8yZ++qqG5sKj1~%Y z>()H=(0%vp?o6)hpvTS{lISdBbz=S({e`Y8x8L*E-vR*BFh#yJ-FvcW^G2Wy82l@Q z;UdO>aGAlgQ^$`Wfs3|wrF(YU)soL6z`wy5L%;w46^7nF|Ju7PyLxitQ)+H}&5riv zg=MX*U_?&zPu=<8mqo`0fTE)1CE+LE|K9(+eT{d`Dth!Z+uVVstbFglQ!gL?`b#gS z+R^|Bm;*Eqmr?ltFkuK8jy-eqgY58t;PrJ}f159v0svbrdn5raV+?>X1^^5IkW)O< z_wt+TZrMA1qJM5+Xw9}-L3A<$Sve3oad!NsyB?5D3m5~$z|y|^^M6@E`mft{V{q*b zZE8Tq+$%qSYsn5j{L^Pa1V9+{91sSVFpL4gMU>LXf&Rkm4B`3u&aPO?3WN~0Ed-Y! z1Uv_qSvFkaQpx}jRnCtb{v=QvH!IbJfyK7fS|A*lJvAr$gJ(t-uHAo|>{4J1TnDHL z0A)ohY0B9@{E}{Sq!j!rg6O0j~ z6aaWe3!~G^qcf&uqt-@m!0QkCG*vB>%Ij8lx&VwZWaUqpnwA-w;CUhfqI5h~lbr6G zkbHr`$^4G%ZuFWKAOzF}YQkkPFLl|%xMIzpE<`tMzG?>`7oZBZ0)%HAMhF2Qh7lkH z01Uta1eah0m+_41iltNb>hr%EADJuWij1*POYM$z>!fsW`;HzSA;dEMK+y2H!9*VCBs{noK$1fat`cTj@%PvPnPe2d?tt&7_E4sR`*x0sV{|;nMpAbCK%*3=nZ~(*X z;E|TKO`2|JM#?q8pn<)0wGH4>xCk@23?aZ6Faiv~5g;589(W!IVH^gG5W;W~#_%6u z_>3I<@$H}27iQM4s69HHo2?IUS!ZFYz&PHvtQ~u=m2&e9%?)Vj^xM(eWTjNTFg05r z7N^gh>ey0ODB5b(j8XronZniEw}IurMTi1Ia1la)F<=B3fad{YAUqHbcmfD9o&cbW z82SwSI~V|y%2MUYn{MrFj&TGxCPU8<8zyq{r1rmFeP=nhbl2XUw{P2W=eHk0m7&9g zAt4k}FDxR$^&fw4eRoYoqu32v*5dH2yLHW4zefgO;M#BzMu0FN1Ox#=KsX>A5Do|d zjsQlC5QGq1gb{oO!Jjb(jsXZgd&5nkecL=3d-}(`9*@SP<#l@+x;x{s287Ylg@s># z^)Kq`;z-M!Mw*TgHj8E5LDNG=JDX!RmBN9><0sDwk{k_3nrf547`PT-1b_e|z!(q$ z0zfz*91so&0gfW~#gG|Ju$SXJ-o)hV~rn z+_AH^wqbE*CfQK`m5u8gQ&IHpum5iA_8kHS*K)XAaXfRbSjyKY!wt3TDRa*ZPGt+F z4IL|z;Sewz7y!Wl2rvSIfDph02mwrh5fFk9f{QSMKVuXa14_ZQsx!k_pY%%H z=}hH=zOnz--Fo`%p`X5S?2A8p;i~Iy%+1fsKJVjKZHtFJ{|~ij)a_h9l-&RT002ov JPDHLkV1nC@To?cV literal 0 HcmV?d00001 diff --git a/module/config/argument/args.json b/module/config/argument/args.json index 0950693e0..d8f08a3eb 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -14405,7 +14405,8 @@ "Belfast", "ChangFeng", "Mogador", - "RoyalFortune" + "RoyalFortune", + "DaVinci" ] }, "Char2": { @@ -14445,7 +14446,8 @@ "Belfast", "ChangFeng", "Mogador", - "RoyalFortune" + "RoyalFortune", + "DaVinci" ] }, "Product1": { @@ -14581,7 +14583,8 @@ "Belfast", "ChangFeng", "Mogador", - "RoyalFortune" + "RoyalFortune", + "DaVinci" ] }, "Char2": { @@ -14621,7 +14624,8 @@ "Belfast", "ChangFeng", "Mogador", - "RoyalFortune" + "RoyalFortune", + "DaVinci" ] }, "Product1": { @@ -14769,7 +14773,8 @@ "Belfast", "ChangFeng", "Mogador", - "RoyalFortune" + "RoyalFortune", + "DaVinci" ] }, "Char2": { @@ -14809,7 +14814,8 @@ "Belfast", "ChangFeng", "Mogador", - "RoyalFortune" + "RoyalFortune", + "DaVinci" ] }, "Product1": { @@ -14915,7 +14921,8 @@ "Belfast", "ChangFeng", "Mogador", - "RoyalFortune" + "RoyalFortune", + "DaVinci" ] }, "Char2": { @@ -14955,7 +14962,8 @@ "Belfast", "ChangFeng", "Mogador", - "RoyalFortune" + "RoyalFortune", + "DaVinci" ] }, "Product1": { @@ -15066,7 +15074,8 @@ "Belfast", "ChangFeng", "Mogador", - "RoyalFortune" + "RoyalFortune", + "DaVinci" ] }, "Char2": { @@ -15106,7 +15115,8 @@ "Belfast", "ChangFeng", "Mogador", - "RoyalFortune" + "RoyalFortune", + "DaVinci" ] }, "Product1": { diff --git a/module/config/argument/argument.yaml b/module/config/argument/argument.yaml index 9d8ef086a..34b91ae27 100644 --- a/module/config/argument/argument.yaml +++ b/module/config/argument/argument.yaml @@ -1675,6 +1675,7 @@ _IslandBusinessChar: &IslandBusinessChar - ChangFeng - Mogador - RoyalFortune + - DaVinci _IslandBusinessProduct1: &IslandBusinessProduct1 type: select diff --git a/module/config/config_generated.py b/module/config/config_generated.py index 4ed4b5b34..613eb6bdb 100644 --- a/module/config/config_generated.py +++ b/module/config/config_generated.py @@ -913,8 +913,8 @@ class GeneratedConfig: IslandBusiness_SeasonalThreshold = 7 # 配置组 `IslandBusinessShop1` - IslandBusinessShop1_Char1 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune - IslandBusinessShop1_Char2 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune + IslandBusinessShop1_Char1 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune, DaVinci + IslandBusinessShop1_Char2 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune, DaVinci IslandBusinessShop1_Product1 = 'None' # None, double_bamboo_shoots, tofu_meat, tofu_combo, hearty_meal, fo_tiao, amaranth_rice_ball, matsutake_chicken_soup, persimmon_cake IslandBusinessShop1_Product2 = 'None' # None, double_bamboo_shoots, tofu_meat, tofu_combo, hearty_meal, fo_tiao, amaranth_rice_ball, matsutake_chicken_soup, persimmon_cake IslandBusinessShop1_Product3 = 'None' # None, double_bamboo_shoots, tofu_meat, tofu_combo, hearty_meal, fo_tiao, amaranth_rice_ball, matsutake_chicken_soup, persimmon_cake @@ -924,8 +924,8 @@ class GeneratedConfig: IslandBusinessShop1_BoostReplaceFilter = '30 > 20 > 10' # 配置组 `IslandBusinessShop2` - IslandBusinessShop2_Char1 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune - IslandBusinessShop2_Char2 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune + IslandBusinessShop2_Char1 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune, DaVinci + IslandBusinessShop2_Char2 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune, DaVinci IslandBusinessShop2_Product1 = 'None' # None, spring_flower_tea, strawberry_lemon, strawberry_honey, floral_fruity, fruit_paradise, lavender_tea, sunny_honey, watermelon_juice, chrysanthemum_tea, carrot_pear_juice IslandBusinessShop2_Product2 = 'None' # None, spring_flower_tea, strawberry_lemon, strawberry_honey, floral_fruity, fruit_paradise, lavender_tea, sunny_honey, watermelon_juice, chrysanthemum_tea, carrot_pear_juice IslandBusinessShop2_Product3 = 'None' # None, spring_flower_tea, strawberry_lemon, strawberry_honey, floral_fruity, fruit_paradise, lavender_tea, sunny_honey, watermelon_juice, chrysanthemum_tea, carrot_pear_juice @@ -935,8 +935,8 @@ class GeneratedConfig: IslandBusinessShop2_BoostReplaceFilter = '30 > 20 > strawberry_honey > fruit_paradise > 10' # 配置组 `IslandBusinessShop3` - IslandBusinessShop3_Char1 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune - IslandBusinessShop3_Char2 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune + IslandBusinessShop3_Char1 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune, DaVinci + IslandBusinessShop3_Char2 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune, DaVinci IslandBusinessShop3_Product1 = 'None' # None, orchard_duo, succulently_sweet, berry_orange, strawberry_charlotte, seafood_rice IslandBusinessShop3_Product2 = 'None' # None, orchard_duo, succulently_sweet, berry_orange, strawberry_charlotte, seafood_rice IslandBusinessShop3_Product3 = 'None' # None, orchard_duo, succulently_sweet, berry_orange, strawberry_charlotte, seafood_rice @@ -945,8 +945,8 @@ class GeneratedConfig: IslandBusinessShop3_BoostReplaceFilter = '30 > 20 > succulently_sweet > 10' # 配置组 `IslandBusinessShop4` - IslandBusinessShop4_Char1 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune - IslandBusinessShop4_Char2 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune + IslandBusinessShop4_Char1 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune, DaVinci + IslandBusinessShop4_Char2 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune, DaVinci IslandBusinessShop4_Product1 = 'None' # None, roasted_skewer, stir_fried_chicken, steak_bowl, crayfish_stir_fry, carnival, double_energy IslandBusinessShop4_Product2 = 'None' # None, roasted_skewer, stir_fried_chicken, steak_bowl, crayfish_stir_fry, carnival, double_energy IslandBusinessShop4_Product3 = 'None' # None, roasted_skewer, stir_fried_chicken, steak_bowl, crayfish_stir_fry, carnival, double_energy @@ -955,8 +955,8 @@ class GeneratedConfig: IslandBusinessShop4_BoostReplaceFilter = '30 > 20 > 10' # 配置组 `IslandBusinessShop5` - IslandBusinessShop5_Char1 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune - IslandBusinessShop5_Char2 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune + IslandBusinessShop5_Char1 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune, DaVinci + IslandBusinessShop5_Char2 = 'None' # None, WorkerJuu, Cheshire, YingSwei, Saratoga, Akashi, NewJersey, Tashkent, LeMalin, Shimakaze, Amagi_chan, Unicorn, ChaoHo, ChenHai, WilliamDPorter, Helena, Friedrich, Atago, Yixian, August, Eugen, Hood, Javelin, Laffey, Explorer, Navigator, OceanCrosser, FeiYun, Takao, Anchorage, Belfast, ChangFeng, Mogador, RoyalFortune, DaVinci IslandBusinessShop5_Product1 = 'None' # None, cheese, citrus_coffee, strawberry_milkshake, morning_light, wake_up_call, fruity_fruitier IslandBusinessShop5_Product2 = 'None' # None, cheese, citrus_coffee, strawberry_milkshake, morning_light, wake_up_call, fruity_fruitier IslandBusinessShop5_Product3 = 'None' # None, cheese, citrus_coffee, strawberry_milkshake, morning_light, wake_up_call, fruity_fruitier diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 1d72c146f..4da6f0d99 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -3582,7 +3582,7 @@ }, "WorkerFilter": { "name": "Farm Worker Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." }, "MinFarm": { "name": "Crop Stock Threshold", @@ -3613,7 +3613,7 @@ }, "WorkerFilter": { "name": "Orchard Worker Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." }, "MinOrchard": { "name": "Fruit Stock Threshold", @@ -3650,7 +3650,7 @@ }, "WorkerFilter": { "name": "Nursery Worker Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." }, "MinNursery": { "name": "Nursery Crop Stock Threshold", @@ -3679,7 +3679,7 @@ }, "ChickenFilter": { "name": "Chicken Worker Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." }, "MinPork": { "name": "Pork Stock Threshold", @@ -3687,7 +3687,7 @@ }, "PigFilter": { "name": "Pig Worker Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." }, "Milk": { "name": "Raise Cattle", @@ -3695,7 +3695,7 @@ }, "RancherFilter": { "name": "Character Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." }, "Wool": { "name": "Raise Sheep", @@ -3703,7 +3703,7 @@ }, "WoolWorkerFilter": { "name": "Sheep Worker Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." } }, "IslandFishery": { @@ -3760,7 +3760,7 @@ }, "RancherFilter": { "name": "Character Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." } }, "IslandMine": { @@ -3787,7 +3787,7 @@ }, "WorkerFilter": { "name": "Mine Worker Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." }, "MinCopper": { "name": "Copper Ore Min Stock", @@ -3834,7 +3834,7 @@ }, "WorkerFilter": { "name": "Forest Worker Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." }, "MinElegant": { "name": "Elegant Wood Min Stock", @@ -3856,7 +3856,7 @@ }, "WorkerFilter": { "name": "Gathering Worker Filter", - "help": "Connect with >. Up to 3 characters, mapped to gathering slots 1-3.\nConnect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nDaily gathering cannot use WorkerJuu; it will be ignored if entered.\nOnly recognizes the first two rows in default order. If the specified character is unavailable, that slot falls back to the existing gathering logic." + "help": "Connect with >. Up to 3 characters, mapped to gathering slots 1-3.\nConnect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nDaily gathering cannot use WorkerJuu; it will be ignored if entered.\nOnly recognizes the first two rows in default order. If the specified character is unavailable, that slot falls back to the existing gathering logic." } }, "IslandRestaurant": { @@ -3872,7 +3872,7 @@ }, "ChefFilter": { "name": "Chef Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." }, "DoubleBambooShoots": { "name": "Prioritize Seasonal Dish", @@ -4101,7 +4101,7 @@ }, "ChefFilter": { "name": "Chef Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." }, "Seasonal": { "name": "Prioritize Seasonal Drink", @@ -4312,7 +4312,7 @@ }, "ChefFilter": { "name": "Chef Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." }, "Meal1": { "name": "Meal 1", @@ -4483,7 +4483,7 @@ }, "ChefFilter": { "name": "Chef Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." }, "Meal1": { "name": "Meal 1", @@ -4672,7 +4672,7 @@ }, "ChefFilter": { "name": "Chef Filter", - "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." + "help": "Connect with >, e.g. ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nOnly recognizes the first two rows in default order. If the specified character is unavailable, falls back to WorkerJuu." }, "Friedrich": { "name": "Friedrich", @@ -5056,7 +5056,8 @@ "Belfast": "Belfast", "ChangFeng": "Chang Feng", "Mogador": "Mogador", - "RoyalFortune": "Royal Fortune" + "RoyalFortune": "Royal Fortune", + "DaVinci": "Da Vinci" }, "Char2": { "name": "Character 2", @@ -5094,7 +5095,8 @@ "Belfast": "Belfast", "ChangFeng": "Chang Feng", "Mogador": "Mogador", - "RoyalFortune": "Royal Fortune" + "RoyalFortune": "Royal Fortune", + "DaVinci": "Da Vinci" }, "Product1": { "name": "Product 1", @@ -5220,7 +5222,8 @@ "Belfast": "Belfast", "ChangFeng": "Chang Feng", "Mogador": "Mogador", - "RoyalFortune": "Royal Fortune" + "RoyalFortune": "Royal Fortune", + "DaVinci": "Da Vinci" }, "Char2": { "name": "Character 2", @@ -5258,7 +5261,8 @@ "Belfast": "Belfast", "ChangFeng": "Chang Feng", "Mogador": "Mogador", - "RoyalFortune": "Royal Fortune" + "RoyalFortune": "Royal Fortune", + "DaVinci": "Da Vinci" }, "Product1": { "name": "Product 1", @@ -5396,7 +5400,8 @@ "Belfast": "Belfast", "ChangFeng": "Chang Feng", "Mogador": "Mogador", - "RoyalFortune": "Royal Fortune" + "RoyalFortune": "Royal Fortune", + "DaVinci": "Da Vinci" }, "Char2": { "name": "Character 2", @@ -5434,7 +5439,8 @@ "Belfast": "Belfast", "ChangFeng": "Chang Feng", "Mogador": "Mogador", - "RoyalFortune": "Royal Fortune" + "RoyalFortune": "Royal Fortune", + "DaVinci": "Da Vinci" }, "Product1": { "name": "Product 1", @@ -5532,7 +5538,8 @@ "Belfast": "Belfast", "ChangFeng": "Chang Feng", "Mogador": "Mogador", - "RoyalFortune": "Royal Fortune" + "RoyalFortune": "Royal Fortune", + "DaVinci": "Da Vinci" }, "Char2": { "name": "Character 2", @@ -5570,7 +5577,8 @@ "Belfast": "Belfast", "ChangFeng": "Chang Feng", "Mogador": "Mogador", - "RoyalFortune": "Royal Fortune" + "RoyalFortune": "Royal Fortune", + "DaVinci": "Da Vinci" }, "Product1": { "name": "Product 1", @@ -5673,7 +5681,8 @@ "Belfast": "Belfast", "ChangFeng": "Chang Feng", "Mogador": "Mogador", - "RoyalFortune": "Royal Fortune" + "RoyalFortune": "Royal Fortune", + "DaVinci": "Da Vinci" }, "Char2": { "name": "Character 2", @@ -5711,7 +5720,8 @@ "Belfast": "Belfast", "ChangFeng": "Chang Feng", "Mogador": "Mogador", - "RoyalFortune": "Royal Fortune" + "RoyalFortune": "Royal Fortune", + "DaVinci": "Da Vinci" }, "Product1": { "name": "Product 1", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index 0f385ead8..fcb890076 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -3582,7 +3582,7 @@ }, "WorkerFilter": { "name": "農場作業員フィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" }, "MinFarm": { "name": "作物在庫閾値", @@ -3613,7 +3613,7 @@ }, "WorkerFilter": { "name": "果樹園作業員フィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" }, "MinOrchard": { "name": "果物在庫閾値", @@ -3650,7 +3650,7 @@ }, "WorkerFilter": { "name": "苗床作業員フィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" }, "MinNursery": { "name": "苗床作物在庫閾値", @@ -3679,7 +3679,7 @@ }, "ChickenFilter": { "name": "鶏作業員フィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" }, "MinPork": { "name": "豚肉在庫閾値", @@ -3687,7 +3687,7 @@ }, "PigFilter": { "name": "豚作業員フィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" }, "Milk": { "name": "牛を飼育", @@ -3695,7 +3695,7 @@ }, "RancherFilter": { "name": "キャラクターフィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" }, "Wool": { "name": "羊を飼育", @@ -3703,7 +3703,7 @@ }, "WoolWorkerFilter": { "name": "羊作業員フィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" } }, "IslandFishery": { @@ -3760,7 +3760,7 @@ }, "RancherFilter": { "name": "キャラクターフィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" } }, "IslandMine": { @@ -3787,7 +3787,7 @@ }, "WorkerFilter": { "name": "鉱山作業員フィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" }, "MinCopper": { "name": "銅鉱石最低在庫", @@ -3834,7 +3834,7 @@ }, "WorkerFilter": { "name": "林場作業員フィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" }, "MinElegant": { "name": "エレガント木材最低在庫", @@ -3856,7 +3856,7 @@ }, "WorkerFilter": { "name": "採集キャラクターフィルター", - "help": ">で接続。最大3人まで指定でき、採集スロット1~3に対応します。\n>で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデイリー採集では WorkerJuu を選択できません。入力されている場合は自動で無視します。\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合、そのスロットは既存の採集ロジックにフォールバックします。" + "help": ">で接続。最大3人まで指定でき、採集スロット1~3に対応します。\n>で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデイリー採集では WorkerJuu を選択できません。入力されている場合は自動で無視します。\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合、そのスロットは既存の採集ロジックにフォールバックします。" } }, "IslandRestaurant": { @@ -3872,7 +3872,7 @@ }, "ChefFilter": { "name": "シェフフィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" }, "DoubleBambooShoots": { "name": "季節料理を優先生産", @@ -4101,7 +4101,7 @@ }, "ChefFilter": { "name": "シェフフィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" }, "Seasonal": { "name": "季節ドリンクを優先生産", @@ -4312,7 +4312,7 @@ }, "ChefFilter": { "name": "シェフフィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" }, "Meal1": { "name": "メニュー1", @@ -4483,7 +4483,7 @@ }, "ChefFilter": { "name": "シェフフィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" }, "Meal1": { "name": "メニュー1", @@ -4672,7 +4672,7 @@ }, "ChefFilter": { "name": "シェフフィルター", - "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" + "help": ">で接続。例:ChaoHo > NewJersey > Amagi_chan\nSaratoga > Akashi > Tashkent > YingSwei\nLeMalin > Unicorn > Shimakaze > Cheshire\nChenHai > WilliamDPorter\nHelena > Friedrich > Atago\nYixian > August > Eugen > Hood > Javelin > Laffey > Explorer > Navigator > OceanCrosser > FeiYun > Takao > Anchorage > Belfast > ChangFeng > Mogador > RoyalFortune > DaVinci\nデフォルト順の先頭2行のみ認識します。指定キャラクターが使用できない場合は WorkerJuu にフォールバックします。" }, "Friedrich": { "name": "フリードリヒ", @@ -5056,7 +5056,8 @@ "Belfast": "Belfast", "ChangFeng": "ChangFeng", "Mogador": "Mogador", - "RoyalFortune": "RoyalFortune" + "RoyalFortune": "RoyalFortune", + "DaVinci": "DaVinci" }, "Char2": { "name": "キャラクター2", @@ -5094,7 +5095,8 @@ "Belfast": "Belfast", "ChangFeng": "ChangFeng", "Mogador": "Mogador", - "RoyalFortune": "RoyalFortune" + "RoyalFortune": "RoyalFortune", + "DaVinci": "DaVinci" }, "Product1": { "name": "メニュー1", @@ -5220,7 +5222,8 @@ "Belfast": "Belfast", "ChangFeng": "ChangFeng", "Mogador": "Mogador", - "RoyalFortune": "RoyalFortune" + "RoyalFortune": "RoyalFortune", + "DaVinci": "DaVinci" }, "Char2": { "name": "キャラクター2", @@ -5258,7 +5261,8 @@ "Belfast": "Belfast", "ChangFeng": "ChangFeng", "Mogador": "Mogador", - "RoyalFortune": "RoyalFortune" + "RoyalFortune": "RoyalFortune", + "DaVinci": "DaVinci" }, "Product1": { "name": "メニュー1", @@ -5396,7 +5400,8 @@ "Belfast": "Belfast", "ChangFeng": "ChangFeng", "Mogador": "Mogador", - "RoyalFortune": "RoyalFortune" + "RoyalFortune": "RoyalFortune", + "DaVinci": "DaVinci" }, "Char2": { "name": "キャラクター2", @@ -5434,7 +5439,8 @@ "Belfast": "Belfast", "ChangFeng": "ChangFeng", "Mogador": "Mogador", - "RoyalFortune": "RoyalFortune" + "RoyalFortune": "RoyalFortune", + "DaVinci": "DaVinci" }, "Product1": { "name": "メニュー1", @@ -5532,7 +5538,8 @@ "Belfast": "Belfast", "ChangFeng": "ChangFeng", "Mogador": "Mogador", - "RoyalFortune": "RoyalFortune" + "RoyalFortune": "RoyalFortune", + "DaVinci": "DaVinci" }, "Char2": { "name": "キャラクター2", @@ -5570,7 +5577,8 @@ "Belfast": "Belfast", "ChangFeng": "ChangFeng", "Mogador": "Mogador", - "RoyalFortune": "RoyalFortune" + "RoyalFortune": "RoyalFortune", + "DaVinci": "DaVinci" }, "Product1": { "name": "商品1", @@ -5673,7 +5681,8 @@ "Belfast": "Belfast", "ChangFeng": "ChangFeng", "Mogador": "Mogador", - "RoyalFortune": "RoyalFortune" + "RoyalFortune": "RoyalFortune", + "DaVinci": "DaVinci" }, "Char2": { "name": "キャラクター2", @@ -5711,7 +5720,8 @@ "Belfast": "Belfast", "ChangFeng": "ChangFeng", "Mogador": "Mogador", - "RoyalFortune": "RoyalFortune" + "RoyalFortune": "RoyalFortune", + "DaVinci": "DaVinci" }, "Product1": { "name": "商品1", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 7febf8f48..3c18f44cb 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -3582,7 +3582,7 @@ }, "WorkerFilter": { "name": "农田使用角色", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "MinFarm": { "name": "农田作物底线", @@ -3613,7 +3613,7 @@ }, "WorkerFilter": { "name": "果园使用角色", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "MinOrchard": { "name": "水果底线", @@ -3650,7 +3650,7 @@ }, "WorkerFilter": { "name": "苗圃使用角色", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "MinNursery": { "name": "苗圃作物底线", @@ -3679,7 +3679,7 @@ }, "ChickenFilter": { "name": "养鸡使用角色", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "MinPork": { "name": "猪肉底线", @@ -3687,7 +3687,7 @@ }, "PigFilter": { "name": "养猪使用角色", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "Milk": { "name": "养牛", @@ -3695,7 +3695,7 @@ }, "RancherFilter": { "name": "使用角色", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "Wool": { "name": "养羊", @@ -3703,7 +3703,7 @@ }, "WoolWorkerFilter": { "name": "养羊使用角色", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" } }, "IslandFishery": { @@ -3760,7 +3760,7 @@ }, "RancherFilter": { "name": "使用角色", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" } }, "IslandMine": { @@ -3787,7 +3787,7 @@ }, "WorkerFilter": { "name": "矿山使用角色", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "MinCopper": { "name": "铜矿最低库存", @@ -3834,7 +3834,7 @@ }, "WorkerFilter": { "name": "林场使用角色", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "MinElegant": { "name": "优雅木材最低库存", @@ -3856,7 +3856,7 @@ }, "WorkerFilter": { "name": "采集角色", - "help": "以>连接,最多填写3个角色,分别对应第1~3个采集槽位。\n以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n每日采集不能选择 WorkerJuu,填写后会自动忽略。\n仅识别默认排序前两排;指定角色不可用时该槽位回退现有采集逻辑。" + "help": "以>连接,最多填写3个角色,分别对应第1~3个采集槽位。\n以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n每日采集不能选择 WorkerJuu,填写后会自动忽略。\n仅识别默认排序前两排;指定角色不可用时该槽位回退现有采集逻辑。" } }, "IslandRestaurant": { @@ -3872,7 +3872,7 @@ }, "ChefFilter": { "name": "厨师", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "DoubleBambooShoots": { "name": "季节餐优先制作", @@ -4101,7 +4101,7 @@ }, "ChefFilter": { "name": "厨师", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "Seasonal": { "name": "季节饮品优先制作", @@ -4312,7 +4312,7 @@ }, "ChefFilter": { "name": "厨师", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "Meal1": { "name": "餐品1", @@ -4483,7 +4483,7 @@ }, "ChefFilter": { "name": "厨师", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "Meal1": { "name": "餐品1", @@ -4672,7 +4672,7 @@ }, "ChefFilter": { "name": "厨师", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei\n恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire\n镇海:ChenHai > 威廉D波特:WilliamDPorter\n海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci\n仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "Friedrich": { "name": "大帝", @@ -5056,7 +5056,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Char2": { "name": "角色2", @@ -5094,7 +5095,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Product1": { "name": "餐品1", @@ -5220,7 +5222,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Char2": { "name": "角色2", @@ -5258,7 +5261,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Product1": { "name": "餐品1", @@ -5396,7 +5400,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Char2": { "name": "角色2", @@ -5434,7 +5439,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Product1": { "name": "餐品1", @@ -5532,7 +5538,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Char2": { "name": "角色2", @@ -5570,7 +5577,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Product1": { "name": "餐品1", @@ -5673,7 +5681,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Char2": { "name": "角色2", @@ -5711,7 +5720,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Product1": { "name": "餐品1", diff --git a/module/config/i18n/zh-MIAO.json b/module/config/i18n/zh-MIAO.json index 1aa44be85..54065c8cb 100644 --- a/module/config/i18n/zh-MIAO.json +++ b/module/config/i18n/zh-MIAO.json @@ -3582,7 +3582,7 @@ }, "WorkerFilter": { "name": "农田使用角色喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "MinFarm": { "name": "田里庄稼底线喵", @@ -3613,7 +3613,7 @@ }, "WorkerFilter": { "name": "果园使用角色喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "MinOrchard": { "name": "水果收割线喵", @@ -3650,7 +3650,7 @@ }, "WorkerFilter": { "name": "苗圃使用角色喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "MinNursery": { "name": "苗圃作物底线喵", @@ -3679,7 +3679,7 @@ }, "ChickenFilter": { "name": "养鸡使用角色喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "MinPork": { "name": "猪肉底线喵", @@ -3687,7 +3687,7 @@ }, "PigFilter": { "name": "养猪使用角色喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "Milk": { "name": "养牛喵", @@ -3695,7 +3695,7 @@ }, "RancherFilter": { "name": "使用角色喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "Wool": { "name": "养羊喵", @@ -3703,7 +3703,7 @@ }, "WoolWorkerFilter": { "name": "养羊使用角色喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" } }, "IslandFishery": { @@ -3760,7 +3760,7 @@ }, "RancherFilter": { "name": "使用角色喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" } }, "IslandMine": { @@ -3787,7 +3787,7 @@ }, "WorkerFilter": { "name": "矿山使用角色喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "MinCopper": { "name": "铜矿底线喵", @@ -3834,7 +3834,7 @@ }, "WorkerFilter": { "name": "林场使用角色喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "MinElegant": { "name": "优雅木材底线喵", @@ -3856,7 +3856,7 @@ }, "WorkerFilter": { "name": "采集角色喵", - "help": "以>连接,最多填写3个角色,分别对应第1~3个采集槽位。 以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 每日采集不能选择 WorkerJuu,填写后会自动忽略。 仅识别默认排序前两排;指定角色不可用时该槽位回退现有采集逻辑。" + "help": "以>连接,最多填写3个角色,分别对应第1~3个采集槽位。 以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 每日采集不能选择 WorkerJuu,填写后会自动忽略。 仅识别默认排序前两排;指定角色不可用时该槽位回退现有采集逻辑。" } }, "IslandRestaurant": { @@ -3872,7 +3872,7 @@ }, "ChefFilter": { "name": "厨师喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "DoubleBambooShoots": { "name": "季节餐优先制作喵", @@ -4101,7 +4101,7 @@ }, "ChefFilter": { "name": "厨师喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "Seasonal": { "name": "季节饮品优先制作喵", @@ -4312,7 +4312,7 @@ }, "ChefFilter": { "name": "厨师喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "Meal1": { "name": "餐品1喵", @@ -4483,7 +4483,7 @@ }, "ChefFilter": { "name": "厨师喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "Meal1": { "name": "餐品1喵", @@ -4672,7 +4672,7 @@ }, "ChefFilter": { "name": "厨师喵", - "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" + "help": "以>连接,例如肇和 新泽西 小天城:ChaoHo > NewJersey > Amagi_chan 小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 应瑞:YingSwei 恶毒:LeMalin > 独角兽:Unicorn > 岛风:Shimakaze > 柴郡:Cheshire 镇海:ChenHai > 威廉D波特:WilliamDPorter 海伦娜:Helena > 大帝:Friedrich > 愛宕:Atago 逸仙:Yixian > 奥古斯特:August > 欧根亲王:Eugen > 胡德:Hood > 标枪:Javelin > 拉菲:Laffey > 探索者:Explorer > 领航员:Navigator > 领洋者:OceanCrosser > 飞云:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 贝尔法斯特:Belfast > 长风:ChangFeng > 莫加多尔:Mogador > 皇家财富号:RoyalFortune > 达芬奇:DaVinci 仅识别默认排序前两排;指定舰娘不可用时回退 WorkerJuu。" }, "Friedrich": { "name": "大帝", @@ -5056,7 +5056,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Char2": { "name": "角色2喵", @@ -5094,7 +5095,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Product1": { "name": "餐品1喵", @@ -5220,7 +5222,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Char2": { "name": "角色2喵", @@ -5258,7 +5261,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Product1": { "name": "餐品1喵", @@ -5396,7 +5400,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Char2": { "name": "角色2喵", @@ -5434,7 +5439,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Product1": { "name": "餐品1喵", @@ -5532,7 +5538,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Char2": { "name": "角色2喵", @@ -5570,7 +5577,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Product1": { "name": "餐品1喵", @@ -5673,7 +5681,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Char2": { "name": "角色2喵", @@ -5711,7 +5720,8 @@ "Belfast": "贝尔法斯特", "ChangFeng": "长风", "Mogador": "莫加多尔", - "RoyalFortune": "皇家财富号" + "RoyalFortune": "皇家财富号", + "DaVinci": "达芬奇" }, "Product1": { "name": "餐品1喵", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 4143dd061..4877bc34e 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -3582,7 +3582,7 @@ }, "WorkerFilter": { "name": "農田使用角色", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" }, "MinFarm": { "name": "農田作物底線", @@ -3613,7 +3613,7 @@ }, "WorkerFilter": { "name": "果園使用角色", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" }, "MinOrchard": { "name": "水果底線", @@ -3650,7 +3650,7 @@ }, "WorkerFilter": { "name": "苗圃使用角色", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" }, "MinNursery": { "name": "苗圃作物底線", @@ -3679,7 +3679,7 @@ }, "ChickenFilter": { "name": "養雞使用角色", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" }, "MinPork": { "name": "豬肉底線", @@ -3687,7 +3687,7 @@ }, "PigFilter": { "name": "養豬使用角色", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" }, "Milk": { "name": "養牛", @@ -3695,7 +3695,7 @@ }, "RancherFilter": { "name": "使用角色", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" }, "Wool": { "name": "養羊", @@ -3703,7 +3703,7 @@ }, "WoolWorkerFilter": { "name": "養羊使用角色", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" } }, "IslandFishery": { @@ -3760,7 +3760,7 @@ }, "RancherFilter": { "name": "使用角色", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" } }, "IslandMine": { @@ -3787,7 +3787,7 @@ }, "WorkerFilter": { "name": "礦山使用角色", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" }, "MinCopper": { "name": "銅礦最低庫存", @@ -3834,7 +3834,7 @@ }, "WorkerFilter": { "name": "林場使用角色", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" }, "MinElegant": { "name": "優雅木材最低庫存", @@ -3856,7 +3856,7 @@ }, "WorkerFilter": { "name": "採集角色", - "help": "以>連接,最多填寫3個角色,分別對應第1~3個採集槽位。\n以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n每日採集不能選擇 WorkerJuu,填寫後會自動忽略。\n僅識別預設排序前兩排;指定角色不可用時該槽位回退現有採集邏輯。" + "help": "以>連接,最多填寫3個角色,分別對應第1~3個採集槽位。\n以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n每日採集不能選擇 WorkerJuu,填寫後會自動忽略。\n僅識別預設排序前兩排;指定角色不可用時該槽位回退現有採集邏輯。" } }, "IslandRestaurant": { @@ -3872,7 +3872,7 @@ }, "ChefFilter": { "name": "廚師", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" }, "DoubleBambooShoots": { "name": "季節餐優先製作", @@ -4101,7 +4101,7 @@ }, "ChefFilter": { "name": "廚師", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" }, "Seasonal": { "name": "季節飲品優先製作", @@ -4312,7 +4312,7 @@ }, "ChefFilter": { "name": "廚師", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" }, "Meal1": { "name": "餐品1", @@ -4483,7 +4483,7 @@ }, "ChefFilter": { "name": "廚師", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" }, "Meal1": { "name": "餐品1", @@ -4672,7 +4672,7 @@ }, "ChefFilter": { "name": "廚師", - "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" + "help": "以>連接,例如肇和 新澤西 小天城:ChaoHo > NewJersey > Amagi_chan\n小加加:Saratoga > 明石:Akashi > 塔什干:Tashkent > 應瑞:YingSwei\n惡毒:LeMalin > 獨角獸:Unicorn > 島風:Shimakaze > 柴郡:Cheshire\n鎮海:ChenHai > 威廉D波特:WilliamDPorter\n海倫娜:Helena > 大帝:Friedrich > 愛宕:Atago\n逸仙:Yixian > 奧古斯特:August > 歐根親王:Eugen > 胡德:Hood > 標槍:Javelin > 拉菲:Laffey > 探索者:Explorer > 領航員:Navigator > 領洋者:OceanCrosser > 飛雲:FeiYun > 高雄:Takao > 安克雷奇:Anchorage > 貝爾法斯特:Belfast > 長風:ChangFeng > 莫加多爾:Mogador > 皇家財富號:RoyalFortune > 達芬奇:DaVinci\n僅識別預設排序前兩排;指定艦娘不可用時回退 WorkerJuu。" }, "Friedrich": { "name": "大帝", @@ -5056,7 +5056,8 @@ "Belfast": "貝爾法斯特", "ChangFeng": "長風", "Mogador": "莫加多爾", - "RoyalFortune": "皇家財富號" + "RoyalFortune": "皇家財富號", + "DaVinci": "達芬奇" }, "Char2": { "name": "角色2", @@ -5094,7 +5095,8 @@ "Belfast": "貝爾法斯特", "ChangFeng": "長風", "Mogador": "莫加多爾", - "RoyalFortune": "皇家財富號" + "RoyalFortune": "皇家財富號", + "DaVinci": "達芬奇" }, "Product1": { "name": "餐品1", @@ -5220,7 +5222,8 @@ "Belfast": "貝爾法斯特", "ChangFeng": "長風", "Mogador": "莫加多爾", - "RoyalFortune": "皇家財富號" + "RoyalFortune": "皇家財富號", + "DaVinci": "達芬奇" }, "Char2": { "name": "角色2", @@ -5258,7 +5261,8 @@ "Belfast": "貝爾法斯特", "ChangFeng": "長風", "Mogador": "莫加多爾", - "RoyalFortune": "皇家財富號" + "RoyalFortune": "皇家財富號", + "DaVinci": "達芬奇" }, "Product1": { "name": "餐品1", @@ -5396,7 +5400,8 @@ "Belfast": "貝爾法斯特", "ChangFeng": "長風", "Mogador": "莫加多爾", - "RoyalFortune": "皇家財富號" + "RoyalFortune": "皇家財富號", + "DaVinci": "達芬奇" }, "Char2": { "name": "角色2", @@ -5434,7 +5439,8 @@ "Belfast": "貝爾法斯特", "ChangFeng": "長風", "Mogador": "莫加多爾", - "RoyalFortune": "皇家財富號" + "RoyalFortune": "皇家財富號", + "DaVinci": "達芬奇" }, "Product1": { "name": "餐品1", @@ -5532,7 +5538,8 @@ "Belfast": "貝爾法斯特", "ChangFeng": "長風", "Mogador": "莫加多爾", - "RoyalFortune": "皇家財富號" + "RoyalFortune": "皇家財富號", + "DaVinci": "達芬奇" }, "Char2": { "name": "角色2", @@ -5570,7 +5577,8 @@ "Belfast": "貝爾法斯特", "ChangFeng": "長風", "Mogador": "莫加多爾", - "RoyalFortune": "皇家財富號" + "RoyalFortune": "皇家財富號", + "DaVinci": "達芬奇" }, "Product1": { "name": "餐品1", @@ -5673,7 +5681,8 @@ "Belfast": "貝爾法斯特", "ChangFeng": "長風", "Mogador": "莫加多爾", - "RoyalFortune": "皇家財富號" + "RoyalFortune": "皇家財富號", + "DaVinci": "達芬奇" }, "Char2": { "name": "角色2", @@ -5711,7 +5720,8 @@ "Belfast": "貝爾法斯特", "ChangFeng": "長風", "Mogador": "莫加多爾", - "RoyalFortune": "皇家財富號" + "RoyalFortune": "皇家財富號", + "DaVinci": "達芬奇" }, "Product1": { "name": "餐品1", diff --git a/module/island/island.py b/module/island/island.py index 2e52b3d1b..ed1c97719 100644 --- a/module/island/island.py +++ b/module/island/island.py @@ -56,6 +56,66 @@ # select_product 最大滑动尝试次数,覆盖列表底部产品(海参等位于列表末尾) _SELECT_PRODUCT_MAX_SWIPES = 8 +# 岛屿物品英文 key -> 中文名映射,仅用于日志输出本地化。 +# 名称来源:module/config/i18n/zh-CN.json 的餐品选项、各模块配置中的 cn_name 与既有中文注释。 +ISLAND_ITEM_CN_NAMES = { + # 农田作物 + 'wheat': '小麦', 'corn': '玉米', 'rice': '水稻', 'chinese_cabbage': '白菜', + 'potato': '土豆', 'soybean': '大豆', 'pasture': '牧草', 'coffee_bean': '咖啡豆', + 'apple': '苹果', 'citrus': '柑橘', 'banana': '香蕉', 'mango': '芒果', + 'lemon': '柠檬', 'avocado': '牛油果', 'rubber': '橡胶', 'pear': '秋月梨', + 'persimmon': '柿子', 'carrot': '胡萝卜', 'onion': '洋葱', 'flax': '亚麻', + 'strawberry': '草莓', 'cotton': '棉花', 'tea': '茶叶', 'lavender': '薰衣草', + 'pineapple': '菠萝', 'asparagus': '芦笋', + # 渔场 + 'bass': '鲈鱼', 'yellowfin_tuna': '黄鳍金枪鱼', 'shell': '贝壳', 'shrimp': '小河虾', + 'crayfish': '小龙虾', 'crab': '螃蟹', 'squid': '鱿鱼', 'sea_cucumber': '海参', + # 矿山/林场 + 'Copper': '铜矿', 'Aluminium': '铝矿', 'Iron': '铁矿', 'Sulphur': '硫磺', + 'Silver': '银矿', 'Elegant': '典雅之木', 'Practical': '实用之木', 'Selected': '精选之木', + # 牧场/磨坊 + 'chicken_feed': '鸡饲料', 'pig_feed': '猪饲料', 'cattle_feed': '牛饲料', + 'sheep_feed': '羊饲料', 'wheat_flour': '面粉', 'chicken': '鸡肉', 'pork': '猪肉', + # 原材料 + 'milk': '牛奶', 'cheese': '芝士', 'tofu': '豆腐', 'fresh_honey': '蜂蜜', + # 烧烤店 + 'roasted_skewer': '碳烤肉串', 'chicken_potato': '禽肉土豆拼盘', + 'carrot_omelette': '胡萝卜厚蛋烧', 'stir_fried_chicken': '爆炒禽肉', + 'steak_bowl': '汉堡肉饭', 'crayfish_stir_fry': '爆炒小龙虾', + 'carnival': '烤肉狂欢', 'double_energy': '能量双拼套餐', + # 有鱼餐馆(常规菜品 + 季节菜品) + 'omurice': '蛋包饭', 'cabbage_tofu': '白菜豆腐汤', 'salad': '蔬菜沙拉', + 'tofu_meat': '肉末烧豆腐', 'tofu_combo': '经典豆腐套餐', 'hearty_meal': '绵玉定食', + 'fish_chip': '炸鱼薯条', 'fo_tiao': '佛跳墙', 'onion_fish': '洋葱蒸鱼', + 'double_bamboo_shoots': '凉拌双笋', 'asparagus_shrimp': '芦笋炒虾仁', + 'amaranth_rice_ball': '苋菜饭团', 'tomato_egg': '番茄炒蛋', + 'matsutake_chicken_soup': '松茸鸡汤', 'persimmon_cake': '柿子饼', + # 白熊饮品(季节饮品 + 常规饮品) + 'spring_flower_tea': '迎春花茶', 'carrot_pear_juice': '胡萝卜秋梨汁', + 'chrysanthemum_tea': '菊花茶', 'watermelon_juice': '西瓜汁', + 'cucumber_juice': '黄瓜汁', 'pineapple_juice': '鲜榨菠萝汁', + 'apple_juice': '苹果汁', 'banana_mango': '香蕉芒果汁', 'honey_lemon': '蜂蜜柠檬水', + 'strawberry_lemon': '草莓蜜沁', 'strawberry_honey': '草莓蜂蜜冰沙', + 'floral_fruity': '花香果韵', 'fruit_paradise': '缤纷果乐园', + 'lavender_tea': '薰衣草茶', 'sunny_honey': '阳光蜜水', + # 啾咖啡 + 'iced_coffee': '冰咖啡', 'omelette': '欧姆蛋', 'latte': '拿铁', + 'citrus_coffee': '柑橘咖啡', 'strawberry_milkshake': '草莓奶绿', + 'morning_light': '晨光活力组合', 'wake_up_call': '醒神套餐', + 'fruity_fruitier': '果香双杯乐', + # 啾啾简餐 + 'apple_pie': '苹果派', 'corn_cup': '玉米杯', 'orange_pie': '香橙派', + 'banana_crepe': '香蕉可丽饼', 'orchard_duo': '果园二重奏', + 'rice_mango': '芒果糯米饭', 'succulently_sweet': '香甜组合', + 'berry_orange': '莓果香橙甜点组', 'strawberry_charlotte': '草莓夏洛特', + 'seafood_rice': '海鲜饭', + # 制造业(工坊) + 'file_cabinet': '文件柜', 'filter_element': '净水滤芯', 'iron_nail': '铁钉', + 'cutlery': '刀叉餐具', 'leather': '皮革', 'boot': '靴子', 'peanut_oil': '花生油', + 'shepherd_purse': '荠菜干', 'spring_bouquet': '春季花束', 'summer_bouquet': '夏季花束', + 'autumn_bouquet': '秋季花束', 'jasmine_oil': '茉莉精油', +} + class Island(SelectCharacter): def __init__(self, *args, **kwargs): # 调用两个父类的初始化 @@ -81,6 +141,25 @@ def __init__(self, *args, **kwargs): self.post_open_retry_swipe_limit = 1 self.post_open_full_retry_limit = 1 + def _item_cn(self, name): + """返回岛屿物品英文 key 对应的中文名;无映射时原样返回。""" + if not isinstance(name, str): + return name + if name in ISLAND_ITEM_CN_NAMES: + return ISLAND_ITEM_CN_NAMES[name] + config = getattr(self, 'name_to_config', {}).get(name) + if config and config.get('cn_name'): + return config['cn_name'] + return name + + def _inv_cn(self, mapping): + """将库存字典的键翻译为中文,仅用于日志输出,不修改原字典。""" + return {self._item_cn(key): value for key, value in mapping.items()} + + def _products_cn(self, products): + """将 (名称, 数量) 配置列表翻译为中文,仅用于日志输出,不修改原列表。""" + return [(self._item_cn(name), number) for name, number in products] + def post_add_one(self, count, interval=0): """按 A/B/C 轮转点击生产数量 +1 按钮。""" buttons = (POST_ADD_ONE_A, POST_ADD_ONE_B, POST_ADD_ONE_C) @@ -465,7 +544,7 @@ def select_product(self, product_selection, product_selection_check): def _handle_select_product_failure(self, product): """select_product 失败时的统一处理:记录警告、关闭岗位面板、返回 False""" - logger.warning(f"[岛屿] select_product 失败:未能找到产品 {product} 的选择项") + logger.warning(f"[岛屿] select_product 失败:未能找到产品 {self._item_cn(product)} 的选择项") self.device.click(POST_CLOSE) return False @@ -871,7 +950,7 @@ def buy_shop_item(self, item_button, quantity, shop_check, item_name=None, return False if item_name: - logger.info(f"[岛屿] 购买 {item_name} x{quantity}") + logger.info(f"[岛屿] 购买 {self._item_cn(item_name)} x{quantity}") for _ in self.loop(timeout=10, skip_first=False): if self.appear(ISLAND_SHOPPING_CHECK): @@ -1143,13 +1222,13 @@ def ensure_select_product_material(self, item_button, required_quantity, shop_ch required_quantity = max(1, int(required_quantity)) current_quantity, counter_text = self.ocr_select_product_material_detail(expected_quantity=required_quantity) display_name = item_name or getattr(item_button, 'name', '材料') - logger.info(f"[岛屿] {display_name}页面材料: {counter_text},当前库存: {current_quantity},目标库存: {required_quantity}") + logger.info(f"[岛屿] {self._item_cn(display_name)}页面材料: {counter_text},当前库存: {current_quantity},目标库存: {required_quantity}") if current_quantity >= required_quantity: return False buy_quantity = required_quantity - current_quantity - logger.info(f"[岛屿] {display_name}数量不足,进入商店补买 {buy_quantity} 个") + logger.info(f"[岛屿] {self._item_cn(display_name)}数量不足,进入商店补买 {buy_quantity} 个") if not self.goto_shop_from_select_product( shop_check=shop_check, tab_check=tab_check, diff --git a/module/island/island_business.py b/module/island/island_business.py index 726e9371e..75341d14b 100644 --- a/module/island/island_business.py +++ b/module/island/island_business.py @@ -332,11 +332,11 @@ def _check_seasonal_product_quantity_and_replace(self, shop_name, seasonal_map, fallback_name = getattr(self.config, fallback_config_key, None) fallback_product = self._find_product_by_name(shop_name, fallback_name) if not fallback_product: - logger.warning(f"[岛屿-经营] 备用商品 '{fallback_name}' 未找到,无法替换") + logger.warning(f"[岛屿-经营] 备用商品 '{self._item_cn(fallback_name)}' 未找到,无法替换") return False logger.info(f"[岛屿-经营] 季节商品 '{seasonal_info['display']}' 库存不足 ({count} < {self.seasonal_threshold})," - f"替换为 '{fallback_name}'") + f"替换为 '{self._item_cn(fallback_name)}'") # 在 active_products 中替换 new_products = [] @@ -350,7 +350,7 @@ def _check_seasonal_product_quantity_and_replace(self, shop_name, seasonal_map, if replaced: self.active_products[shop_name] = new_products - logger.info(f"[岛屿-经营] {shop_name}商品已替换: {seasonal_product_name} → {fallback_name}") + logger.info(f"[岛屿-经营] {shop_name}商品已替换: {self._item_cn(seasonal_product_name)} → {self._item_cn(fallback_name)}") return True return False @@ -596,14 +596,14 @@ def _detect_boosted_products(self, shop_name, skip_names=None): for product_name in candidates: p = products.get(product_name) if p is None: - logger.warning(f"[岛屿-经营] {shop_name}: 加成替换配置中的餐品 {product_name} 没有对应识别模板") + logger.warning(f"[岛屿-经营] {shop_name}: 加成替换配置中的餐品 {self._item_cn(product_name)} 没有对应识别模板") continue template = p.get('template') if template is None: continue sim, _ = template.match_result(area_img) if sim >= 0.7: - logger.info(f"[岛屿-经营] {shop_name}: 检测到配置内加成餐品 {product_name} ({boost_percent}%, sim={sim:.2f})") + logger.info(f"[岛屿-经营] {shop_name}: 检测到配置内加成餐品 {self._item_cn(product_name)} ({boost_percent}%, sim={sim:.2f})") boosted.append((product_name, boost_percent)) return boosted diff --git a/module/island/island_farm.py b/module/island/island_farm.py index 0f8749d76..7621b9527 100644 --- a/module/island/island_farm.py +++ b/module/island/island_farm.py @@ -101,35 +101,35 @@ def __init__(self, *args, **kwargs): 'filter': 'farm', 'threshold': self.farm_threshold, 'items': [ - {'name': 'wheat', 'template': TEMPLATE_WHEAT, 'var_name': 'wheat', + {'cn_name': '小麦', 'name': 'wheat', 'template': TEMPLATE_WHEAT, 'var_name': 'wheat', 'selection': SELECT_WHEAT, 'selection_check': SELECT_WHEAT_CHECK, 'post_action': POST_WHEAT, 'category': 'farm', 'seed_number': 99, 'shop': SHOP_SEED_WHEAT}, - {'name': 'corn', 'template': TEMPLATE_CORN, 'var_name': 'corn', + {'cn_name': '玉米', 'name': 'corn', 'template': TEMPLATE_CORN, 'var_name': 'corn', 'selection': SELECT_CORN, 'selection_check': SELECT_CORN_CHECK, 'post_action': POST_CORN, 'category': 'farm', 'seed_number': 99, 'shop': SHOP_SEED_CORN}, - {'name': 'rice', 'template': TEMPLATE_RICE, 'var_name': 'rice', + {'cn_name': '水稻', 'name': 'rice', 'template': TEMPLATE_RICE, 'var_name': 'rice', 'selection': SELECT_RICE, 'selection_check': SELECT_RICE_CHECK, 'post_action': POST_RICE, 'category': 'farm', 'seed_number': 45, 'shop': SHOP_SEED_RICE}, - {'name': 'chinese_cabbage', 'template': TEMPLATE_CHINESE_CABBAGE, 'var_name': 'chinese_cabbage', + {'cn_name': '白菜', 'name': 'chinese_cabbage', 'template': TEMPLATE_CHINESE_CABBAGE, 'var_name': 'chinese_cabbage', 'selection': SELECT_CHINESE_CABBAGE, 'selection_check': SELECT_CHINESE_CABBAGE_CHECK, 'post_action': POST_CHINESE_CABBAGE, 'category': 'farm', 'seed_number': 99, 'shop': SHOP_SEED_CHINESE_CABBAGE}, - {'name': 'potato', 'template': TEMPLATE_POTATO, 'var_name': 'potato', + {'cn_name': '土豆', 'name': 'potato', 'template': TEMPLATE_POTATO, 'var_name': 'potato', 'selection': SELECT_POTATO, 'selection_check': SELECT_POTATO_CHECK, 'post_action': POST_POTATO, 'category': 'farm', 'seed_number': 36, 'shop': SHOP_SEED_POTATO}, - {'name': 'soybean', 'template': TEMPLATE_SOYBEAN, 'var_name': 'soybean', + {'cn_name': '大豆', 'name': 'soybean', 'template': TEMPLATE_SOYBEAN, 'var_name': 'soybean', 'selection': SELECT_SOYBEAN, 'selection_check': SELECT_SOYBEAN_CHECK, 'post_action': POST_SOYBEAN, 'category': 'farm', 'seed_number': 45, 'shop': SHOP_SEED_SOYBEAN}, - {'name': 'pasture', 'template': TEMPLATE_PASTURE, 'var_name': 'pasture', + {'cn_name': '牧草', 'name': 'pasture', 'template': TEMPLATE_PASTURE, 'var_name': 'pasture', 'selection': SELECT_PASTURE, 'selection_check': SELECT_PASTURE_CHECK, 'post_action': POST_PASTURE, 'category': 'farm', 'seed_number': 99, 'shop': SHOP_SEED_PASTURE}, - {'name': 'coffee_bean', 'template': TEMPLATE_COFFEE_BEAN, 'var_name': 'coffee_bean', + {'cn_name': '咖啡豆', 'name': 'coffee_bean', 'template': TEMPLATE_COFFEE_BEAN, 'var_name': 'coffee_bean', 'selection': SELECT_COFFEE_BEAN, 'selection_check': SELECT_COFFEE_BEAN_CHECK, 'post_action': POST_COFFEE_BEAN, 'category': 'farm', 'seed_number': 36, 'shop': SHOP_SEED_COFFEE_BEAN}, @@ -139,41 +139,41 @@ def __init__(self, *args, **kwargs): 'filter': 'orchard', 'threshold': self.orchard_threshold, 'items': [ - {'name': 'apple', 'template': TEMPLATE_APPLE, 'var_name': 'apple', + {'cn_name': '苹果', 'name': 'apple', 'template': TEMPLATE_APPLE, 'var_name': 'apple', 'selection': SELECT_APPLE, 'selection_check': SELECT_APPLE_CHECK, 'post_action': POST_APPLE, 'category': 'orchard', 'seed_number': 20, 'shop': SHOP_SEED_APPLE}, - {'name': 'citrus', 'template': TEMPLATE_CITRUS, 'var_name': 'citrus', + {'cn_name': '柑橘', 'name': 'citrus', 'template': TEMPLATE_CITRUS, 'var_name': 'citrus', 'selection': SELECT_CITRUS, 'selection_check': SELECT_CITRUS_CHECK, 'post_action': POST_CITRUS, 'category': 'orchard', 'seed_number': 20, 'shop': SHOP_SEED_CITRUS}, - {'name': 'banana', 'template': TEMPLATE_BANANA, 'var_name': 'banana', + {'cn_name': '香蕉', 'name': 'banana', 'template': TEMPLATE_BANANA, 'var_name': 'banana', 'selection': SELECT_BANANA, 'selection_check': SELECT_BANANA_CHECK, 'post_action': POST_BANANA, 'category': 'orchard', 'seed_number': 16, 'shop': SHOP_SEED_BANANA}, - {'name': 'mango', 'template': TEMPLATE_MANGO, 'var_name': 'mango', + {'cn_name': '芒果', 'name': 'mango', 'template': TEMPLATE_MANGO, 'var_name': 'mango', 'selection': SELECT_MANGO, 'selection_check': SELECT_MANGO_CHECK, 'post_action': POST_MANGO, 'category': 'orchard', 'seed_number': 16, 'shop': SHOP_SEED_MANGO}, - {'name': 'lemon', 'template': TEMPLATE_LEMON, 'var_name': 'lemon', + {'cn_name': '柠檬', 'name': 'lemon', 'template': TEMPLATE_LEMON, 'var_name': 'lemon', 'selection': SELECT_LEMON, 'selection_check': SELECT_LEMON_CHECK, 'post_action': POST_LEMON, 'category': 'orchard', 'seed_number': 28, 'shop': SHOP_SEED_LEMON}, - {'name': 'avocado', 'template': TEMPLATE_AVOCADO, 'var_name': 'avocado', + {'cn_name': '牛油果', 'name': 'avocado', 'template': TEMPLATE_AVOCADO, 'var_name': 'avocado', 'selection': SELECT_AVOCADO, 'selection_check': SELECT_AVOCADO_CHECK, 'post_action': POST_AVOCADO, 'category': 'orchard', 'seed_number': 16, 'shop': SHOP_SEED_AVOCADO}, - {'name': 'rubber', 'template': TEMPLATE_RUBBER, 'var_name': 'rubber', + {'cn_name': '橡胶', 'name': 'rubber', 'template': TEMPLATE_RUBBER, 'var_name': 'rubber', 'selection': SELECT_RUBBER, 'selection_check': SELECT_RUBBER_CHECK, 'post_action': POST_RUBBER, 'category': 'orchard', 'seed_number': 16, 'shop': SHOP_SEED_RUBBER}, # 秋季限定(坠香果园):秋月梨、柿子 # 4x1 种植:每次派遣只消耗 4 颗种子(果园其他作物每单至少 4x4=16 颗) - {'name': 'pear', 'template': TEMPLATE_PEAR, 'var_name': 'pear', + {'cn_name': '秋月梨', 'name': 'pear', 'template': TEMPLATE_PEAR, 'var_name': 'pear', 'selection': SELECT_PEAR, 'selection_check': SELECT_PEAR_CHECK, 'post_action': POST_PEAR, 'category': 'orchard', 'seed_number': 4, 'batch_4x1': True, 'shop': SHOP_SEED_PEAR}, - {'name': 'persimmon', 'template': TEMPLATE_PERSIMMON, 'var_name': 'persimmon', + {'cn_name': '柿子', 'name': 'persimmon', 'template': TEMPLATE_PERSIMMON, 'var_name': 'persimmon', 'selection': SELECT_PERSIMMON, 'selection_check': SELECT_PERSIMMON_CHECK, 'post_action': POST_PERSIMMON, 'category': 'orchard', 'seed_number': 4, 'batch_4x1': True, 'shop': SHOP_SEED_PERSIMMON}, @@ -183,39 +183,39 @@ def __init__(self, *args, **kwargs): 'filter': 'nursery', 'threshold': self.nursery_threshold, 'items': [ - {'name': 'carrot', 'template': TEMPLATE_CARROT, 'var_name': 'carrot', + {'cn_name': '胡萝卜', 'name': 'carrot', 'template': TEMPLATE_CARROT, 'var_name': 'carrot', 'selection': SELECT_CARROT, 'selection_check': SELECT_CARROT_CHECK, 'post_action': POST_CARROT, 'category': 'nursery', 'seed_number': 33, 'shop': SHOP_SEED_CARROT}, - {'name': 'onion', 'template': TEMPLATE_ONION, 'var_name': 'onion', + {'cn_name': '洋葱', 'name': 'onion', 'template': TEMPLATE_ONION, 'var_name': 'onion', 'selection': SELECT_ONION, 'selection_check': SELECT_ONION_CHECK, 'post_action': POST_ONION, 'category': 'nursery', 'seed_number': 12, 'shop': SHOP_SEED_ONION}, - {'name': 'flax', 'template': TEMPLATE_FLAX, 'var_name': 'flax', + {'cn_name': '亚麻', 'name': 'flax', 'template': TEMPLATE_FLAX, 'var_name': 'flax', 'selection': SELECT_FLAX, 'selection_check': SELECT_FLAX_CHECK, 'post_action': POST_FLAX, 'category': 'nursery', 'seed_number': 33, 'shop': SHOP_SEED_FLAX}, - {'name': 'strawberry', 'template': TEMPLATE_STRAWBERRY, 'var_name': 'strawberry', + {'cn_name': '草莓', 'name': 'strawberry', 'template': TEMPLATE_STRAWBERRY, 'var_name': 'strawberry', 'selection': SELECT_STRAWBERRY, 'selection_check': SELECT_STRAWBERRY_CHECK, 'post_action': POST_STRAWBERRY, 'category': 'nursery', 'seed_number': 12, 'shop': SHOP_SEED_STRAWBERRY}, - {'name': 'cotton', 'template': TEMPLATE_COTTON, 'var_name': 'cotton', + {'cn_name': '棉花', 'name': 'cotton', 'template': TEMPLATE_COTTON, 'var_name': 'cotton', 'selection': SELECT_COTTON, 'selection_check': SELECT_COTTON_CHECK, 'post_action': POST_COTTON, 'category': 'nursery', 'seed_number': 21, 'shop': SHOP_SEED_COTTON}, - {'name': 'tea', 'template': TEMPLATE_TEA, 'var_name': 'tea', + {'cn_name': '茶叶', 'name': 'tea', 'template': TEMPLATE_TEA, 'var_name': 'tea', 'selection': SELECT_TEA, 'selection_check': SELECT_TEA_CHECK, 'post_action': POST_TEA, 'category': 'nursery', 'seed_number': 12, 'shop': SHOP_SEED_TEA}, - {'name': 'lavender', 'template': TEMPLATE_LAVENDER, 'var_name': 'lavender', + {'cn_name': '薰衣草', 'name': 'lavender', 'template': TEMPLATE_LAVENDER, 'var_name': 'lavender', 'selection': SELECT_LAVENDER, 'selection_check': SELECT_LAVENDER_CHECK, 'post_action': POST_LAVENDER, 'category': 'nursery', 'seed_number': 12, 'shop': SHOP_SEED_LAVENDER}, - {'name': 'pineapple', 'template': TEMPLATE_PINEAPPLE, 'var_name': 'pineapple', + {'cn_name': '菠萝', 'name': 'pineapple', 'template': TEMPLATE_PINEAPPLE, 'var_name': 'pineapple', 'selection': SELECT_PINEAPPLE, 'selection_check': SELECT_PINEAPPLE_CHECK, 'post_action': POST_PINEAPPLE, 'category': 'nursery', 'seed_number': 12, 'shop': SHOP_SEED_PINEAPPLE}, - {'name': 'asparagus', 'template': TEMPLATE_ASPARAGUS, 'var_name': 'asparagus', + {'cn_name': '芦笋', 'name': 'asparagus', 'template': TEMPLATE_ASPARAGUS, 'var_name': 'asparagus', 'selection': SELECT_ASPARAGUS, 'selection_check': SELECT_ASPARAGUS_CHECK, 'post_action': POST_ASPARAGUS, 'category': 'nursery', 'seed_number': 12, 'shop': SHOP_SEED_ASPARAGUS}, @@ -269,12 +269,12 @@ def check_inventory_and_prepare_lists(self): # === 季节限定:不在当季的果园作物(如秋季的秋月梨/柿子)不列入补种计划 === if category == 'orchard' and hasattr(self, 'season_config'): if not self._is_orchard_crop_in_season(item_name): - logger.info(f"[岛屿-农田] 跳过非当季果园作物: {item_name}") + logger.info(f"[岛屿-农田] 跳过非当季果园作物: {self._item_cn(item_name)}") continue # === 季节限定:不在当季的作物不列入补种计划 === if category == 'nursery' and hasattr(self, 'season_config'): if not self._is_nursery_crop_in_season(item_name): - logger.info(f"[岛屿-农田] 跳过非当季苗圃作物: {item_name}") + logger.info(f"[岛屿-农田] 跳过非当季苗圃作物: {self._item_cn(item_name)}") continue if count < threshold: self.to_plant_lists[category].append(item_name) @@ -341,7 +341,7 @@ def warehouse_inventory(self, category): count = self.ocr_item_quantity(image, item_config['template']) results[item_config['name']] = count setattr(self, item_config['var_name'], count) - logger.info(f"{item_config['name']}: {count}") + logger.info(f"{item_config.get('cn_name', item_config['name'])}: {count}") return results def post_plant_check(self, category): @@ -459,7 +459,7 @@ def post_plant(self, post_button, product, category, time_var_name): self.back_to_postmanage_from_dispatch() return False else: - logger.warning(f"[岛屿-农田] {product}种植派遣无可用角色: {character_filter}") + logger.warning(f"[岛屿-农田] {self._item_cn(product)}种植派遣无可用角色: {character_filter}") self.back_to_postmanage_from_dispatch() return False continue @@ -469,7 +469,7 @@ def post_plant(self, post_button, product, category, time_var_name): item_button=seed_config['shop'], required_quantity=seed_config['seed_number'], shop_check=ISLAND_SHOP_SEED_TAB_CHECK, - item_name=f"{product}种子", + item_name=f"{self._item_cn(product)}种子", ): continue self.device.sleep(0.3) @@ -480,7 +480,7 @@ def post_plant(self, post_button, product, category, time_var_name): else: return self._handle_select_product_failure(product) else: - logger.warning(f"[岛屿-农田] {product}种植派遣超时") + logger.warning(f"[岛屿-农田] {self._item_cn(product)}种植派遣超时") self.back_to_postmanage_from_dispatch() return False @@ -507,9 +507,9 @@ def run(self): self.check_inventory_and_prepare_lists() logger.info("[岛屿-农田] \n当前库存统计:") - logger.info(f"[岛屿-农田] 农场库存: {self.inventory_counts['farm']}") - logger.info(f"[岛屿-农田] 果园库存: {self.inventory_counts['orchard']}") - logger.info(f"[岛屿-农田] 苗圃库存: {self.inventory_counts['nursery']}") + logger.info(f"[岛屿-农田] 农场库存: {self._inv_cn(self.inventory_counts['farm'])}") + logger.info(f"[岛屿-农田] 果园库存: {self._inv_cn(self.inventory_counts['orchard'])}") + logger.info(f"[岛屿-农田] 苗圃库存: {self._inv_cn(self.inventory_counts['nursery'])}") self.goto_postmanage() self.post_manage_mode(POST_MANAGE_PRODUCTION) diff --git a/module/island/island_fishery.py b/module/island/island_fishery.py index c7fd3e955..eea42375a 100644 --- a/module/island/island_fishery.py +++ b/module/island/island_fishery.py @@ -58,35 +58,35 @@ def __init__(self, *args, **kwargs): # 产品配置 self.FISHERY_ITEMS = [ - {'name': 'bass', 'template': TEMPLATE_BASS, 'var_name': 'bass', + {'cn_name': '鲈鱼', 'name': 'bass', 'template': TEMPLATE_BASS, 'var_name': 'bass', 'selection': SELECT_BASS, 'selection_check': SELECT_BASS_CHECK, 'post_action': POST_BASS, 'category': 'fishery', 'shop': SHOP_FRY_BASS, 'tab': 'freshwater', 'yield': 6, 'buy_max': 4}, - {'name': 'yellowfin_tuna', 'template': TEMPLATE_YELLOWFIN_TUNA, 'var_name': 'yellowfin_tuna', + {'cn_name': '黄鳍金枪鱼', 'name': 'yellowfin_tuna', 'template': TEMPLATE_YELLOWFIN_TUNA, 'var_name': 'yellowfin_tuna', 'selection': SELECT_YELLOWFIN_TUNA, 'selection_check': SELECT_YELLOWFIN_TUNA_CHECK, 'post_action': POST_YELLOWFIN_TUNA, 'category': 'fishery', 'shop': SHOP_FRY_YELLOWFIN_TUNA, 'tab': 'seawater', 'yield': 2, 'buy_max': 4}, - {'name': 'shell', 'template': TEMPLATE_SHELL, 'var_name': 'shell', + {'cn_name': '贝壳', 'name': 'shell', 'template': TEMPLATE_SHELL, 'var_name': 'shell', 'selection': SELECT_SHELL, 'selection_check': SELECT_SHELL_CHECK, 'post_action': POST_SHELL, 'category': 'fishery', 'shop': SHOP_FRY_SHELL, 'tab': 'other', 'yield': 10, 'buy_max': 4}, - {'name': 'shrimp', 'template': TEMPLATE_SHRIMP, 'var_name': 'shrimp', + {'cn_name': '小河虾', 'name': 'shrimp', 'template': TEMPLATE_SHRIMP, 'var_name': 'shrimp', 'selection': SELECT_SHRIMP, 'selection_check': SELECT_SHRIMP_CHECK, 'post_action': POST_SHRIMP, 'category': 'fishery', 'shop': SHOP_FRY_SHRIMP, 'tab': 'other', 'yield': 12, 'buy_max': 7}, - {'name': 'crayfish', 'template': TEMPLATE_CRAYFISH, 'var_name': 'crayfish', + {'cn_name': '小龙虾', 'name': 'crayfish', 'template': TEMPLATE_CRAYFISH, 'var_name': 'crayfish', 'selection': SELECT_CRAYFISH, 'selection_check': SELECT_CRAYFISH_CHECK, 'post_action': POST_CRAYFISH, 'category': 'fishery', 'shop': SHOP_FRY_CRAYFISH, 'tab': 'other', 'yield': 8, 'buy_max': 4}, - {'name': 'crab', 'template': TEMPLATE_CRAB, 'var_name': 'crab', + {'cn_name': '螃蟹', 'name': 'crab', 'template': TEMPLATE_CRAB, 'var_name': 'crab', 'selection': SELECT_CRAB, 'selection_check': SELECT_CRAB_CHECK, 'post_action': POST_CRAB, 'category': 'fishery', 'shop': SHOP_FRY_CRAB, 'tab': 'other', 'yield': 4, 'buy_max': 4}, - {'name': 'squid', 'template': TEMPLATE_SQUID, 'var_name': 'squid', + {'cn_name': '鱿鱼', 'name': 'squid', 'template': TEMPLATE_SQUID, 'var_name': 'squid', 'selection': SELECT_SQUID, 'selection_check': SELECT_SQUID_CHECK, 'post_action': POST_SQUID, 'category': 'fishery', 'shop': SHOP_FRY_SQUID, 'tab': 'other', 'yield': 4, 'buy_max': 4}, - {'name': 'sea_cucumber', 'template': TEMPLATE_SEA_CUCUMBER, 'var_name': 'sea_cucumber', + {'cn_name': '海参', 'name': 'sea_cucumber', 'template': TEMPLATE_SEA_CUCUMBER, 'var_name': 'sea_cucumber', 'selection': SELECT_SEA_CUCUMBER, 'selection_check': SELECT_SEA_CUCUMBER_CHECK, 'post_action': POST_SEA_CUCUMBER, 'category': 'fishery', 'shop': SHOP_FRY_SEA_CUCUMBER, 'tab': 'other', 'yield': 2, 'buy_max': 4}, @@ -121,7 +121,7 @@ def check_inventory_and_prepare_list(self): if count < threshold: deficit = threshold - count fry_needed = (deficit + yield_amount - 1) // yield_amount # 向上取整 - logger.info(f"[岛屿-渔场] {item_name}: 库存{count}<阈值{threshold}, 缺{deficit}, " + logger.info(f"[岛屿-渔场] {self._item_cn(item_name)}: 库存{count}<阈值{threshold}, 缺{deficit}, " f"每苗产{yield_amount}, 需购买{fry_needed}个鱼苗") for _ in range(fry_needed): self.to_plant_list.append(item_name) @@ -152,7 +152,7 @@ def _build_supply_plant_products(self, idle_count): stock = self.inventory_counts.get(product, 0) demand.append((product, post_needed, stock)) logger.info( - f"{product}: 需养殖{fry_needed}个鱼苗,每岗容量{post_capacity}," + f"{self._item_cn(product)}: 需养殖{fry_needed}个鱼苗,每岗容量{post_capacity}," f"库存{stock},需要{post_needed}个岗位" ) @@ -184,7 +184,7 @@ def _remove_working_fishery_demand(self): post_number = post_info.get('runs') or 1 removed = self._remove_plant_demand(product_name, post_number) if removed: - logger.info(f"[岛屿-渔场] 已在养殖中的{product_name}扣除补种需求: {removed}/{post_number} ({post_id})") + logger.info(f"[岛屿-渔场] 已在养殖中的{self._item_cn(product_name)}扣除补种需求: {removed}/{post_number} ({post_id})") @staticmethod def _post_available_for_dispatch(post_info): @@ -213,7 +213,7 @@ def warehouse_inventory(self): count = self.ocr_item_quantity(image, item_config['template']) results[item_config['name']] = count setattr(self, item_config['var_name'], count) - logger.info(f"{item_config['name']}: {count}") + logger.info(f"{item_config.get('cn_name', item_config['name'])}: {count}") return results def post_plant_check(self): @@ -302,7 +302,7 @@ def post_plant(self, post_button, product, post_index, required_quantity=1): self.back_to_postmanage_from_dispatch() return False else: - logger.warning(f"[岛屿-渔场] {product}养殖派遣无可用角色: {self.rancher_filter}") + logger.warning(f"[岛屿-渔场] {self._item_cn(product)}养殖派遣无可用角色: {self.rancher_filter}") self.back_to_postmanage_from_dispatch() return False continue @@ -312,7 +312,7 @@ def post_plant(self, post_button, product, post_index, required_quantity=1): item_button=item_config['shop'], required_quantity=required_quantity, shop_check=ISLAND_FRY_SHOP_CHECK, - item_name=f"{product}鱼苗", + item_name=f"{self._item_cn(product)}鱼苗", tab_check=tab_check, tab_button=tab_button, ): @@ -347,7 +347,7 @@ def post_plant(self, post_button, product, post_index, required_quantity=1): break if product in self.to_plant_list: removed = self._remove_plant_demand(product, post_number) - logger.info(f"[岛屿-渔场] 已安排养殖{product}扣除补种需求: {removed}/{post_number}") + logger.info(f"[岛屿-渔场] 已安排养殖{self._item_cn(product)}扣除补种需求: {removed}/{post_number}") # 关闭详情弹窗,防止后续操作被弹窗遮挡 self.post_close() @@ -435,7 +435,7 @@ def run(self, ranch_finish_times=None): self._remove_working_fishery_demand() logger.info("[岛屿-渔场] \n当前库存统计:") - logger.info(f"[岛屿-渔场] 渔场库存: {self.inventory_counts}") + logger.info(f"[岛屿-渔场] 渔场库存: {self._inv_cn(self.inventory_counts)}") self.goto_postmanage() self.post_manage_mode(POST_MANAGE_PRODUCTION) diff --git a/module/island/island_juu_coffee.py b/module/island/island_juu_coffee.py index 3e4abde69..fe35bfff2 100644 --- a/module/island/island_juu_coffee.py +++ b/module/island/island_juu_coffee.py @@ -123,7 +123,7 @@ def check_special_materials(self, product, batch_size): milk_available = self.milk_stock max_by_milk = milk_available // milk_needed_per_batch batch_size = min(batch_size, max_by_milk) - logger.info(f"[岛屿-啾咖啡] {product} 牛奶限制: 可用{milk_available}, 每批{milk_needed_per_batch}, 最大{max_by_milk}") + logger.info(f"[岛屿-啾咖啡] {self._item_cn(product)} 牛奶限制: 可用{milk_available}, 每批{milk_needed_per_batch}, 最大{max_by_milk}") # strawberry_milkshake需要1个牛奶 elif product == 'strawberry_milkshake': @@ -131,7 +131,7 @@ def check_special_materials(self, product, batch_size): milk_available = self.milk_stock max_by_milk = milk_available // milk_needed_per_batch batch_size = min(batch_size, max_by_milk) - logger.info(f"[岛屿-啾咖啡] {product} 牛奶限制: 可用{milk_available}, 每批{milk_needed_per_batch}, 最大{max_by_milk}") + logger.info(f"[岛屿-啾咖啡] {self._item_cn(product)} 牛奶限制: 可用{milk_available}, 每批{milk_needed_per_batch}, 最大{max_by_milk}") # cheese需要8个牛奶 if product == 'cheese': @@ -139,7 +139,7 @@ def check_special_materials(self, product, batch_size): milk_available = self.milk_stock max_by_milk = milk_available // milk_needed_per_batch batch_size = min(batch_size, max_by_milk) - logger.info(f"[岛屿-啾咖啡] {product} 牛奶限制: 可用{milk_available}, 每批{milk_needed_per_batch}, 最大{max_by_milk}") + logger.info(f"[岛屿-啾咖啡] {self._item_cn(product)} 牛奶限制: 可用{milk_available}, 每批{milk_needed_per_batch}, 最大{max_by_milk}") return batch_size def select_special_character(self,product): @@ -173,7 +173,7 @@ def deduct_materials(self, product, number): self.special_materials['milk'] = self.milk_stock if 'milk' in self.warehouse_counts: self.warehouse_counts['milk'] = self.milk_stock - logger.info(f"[岛屿-啾咖啡] 扣除牛奶:milk -{milk_needed} (用于制作 {product})") + logger.info(f"[岛屿-啾咖啡] 扣除牛奶:{self._item_cn('milk')} -{milk_needed} (用于制作 {self._item_cn(product)})") # strawberry_milkshake需要扣除牛奶 elif product == 'strawberry_milkshake': @@ -182,7 +182,7 @@ def deduct_materials(self, product, number): self.special_materials['milk'] = self.milk_stock if 'milk' in self.warehouse_counts: self.warehouse_counts['milk'] = self.milk_stock - logger.info(f"[岛屿-啾咖啡] 扣除牛奶:milk -{milk_needed} (用于制作 {product})") + logger.info(f"[岛屿-啾咖啡] 扣除牛奶:{self._item_cn('milk')} -{milk_needed} (用于制作 {self._item_cn(product)})") # cheese需要扣除牛奶 elif product == 'cheese': milk_needed = number * 8 @@ -190,7 +190,7 @@ def deduct_materials(self, product, number): self.special_materials['milk'] = self.milk_stock if 'milk' in self.warehouse_counts: self.warehouse_counts['milk'] = self.milk_stock - logger.info(f"[岛屿-啾咖啡] 扣除牛奶:milk -{milk_needed} (用于制作 {product})") + logger.info(f"[岛屿-啾咖啡] 扣除牛奶:{self._item_cn('milk')} -{milk_needed} (用于制作 {self._item_cn(product)})") def apply_special_material_constraints(self, requirements): """覆盖:根据牛奶库存调整需求""" @@ -229,11 +229,11 @@ def apply_special_material_constraints(self, requirements): if remaining_milk < milk_for_latte: max_latte = remaining_milk // 2 result['latte'] = max_latte - logger.info(f"[岛屿-啾咖啡] 牛奶不足完成latte,需求从{latte_needed}调整为{max_latte},剩余牛奶{remaining_milk}调整为{remaining_milk - max_latte * 2}") + logger.info(f"[岛屿-啾咖啡] 牛奶不足完成{self._item_cn('latte')},需求从{latte_needed}调整为{max_latte},剩余牛奶{remaining_milk}调整为{remaining_milk - max_latte * 2}") remaining_milk -= max_latte * 2 else: remaining_milk -= milk_for_latte - logger.info(f"[岛屿-啾咖啡] 牛奶足够完成latte,扣除{milk_for_latte},剩余牛奶{remaining_milk}") + logger.info(f"[岛屿-啾咖啡] 牛奶足够完成{self._item_cn('latte')},扣除{milk_for_latte},剩余牛奶{remaining_milk}") # 调整strawberry_milkshake需求 @@ -244,11 +244,11 @@ def apply_special_material_constraints(self, requirements): if remaining_milk < milk_for_milkshake: max_milkshake = remaining_milk // 1 result['strawberry_milkshake'] = max_milkshake - logger.info(f"[岛屿-啾咖啡] 牛奶不足完成strawberry_milkshake,需求从{milkshake_needed}调整为{max_milkshake},剩余牛奶{remaining_milk}调整为{remaining_milk - max_milkshake * 1}") + logger.info(f"[岛屿-啾咖啡] 牛奶不足完成{self._item_cn('strawberry_milkshake')},需求从{milkshake_needed}调整为{max_milkshake},剩余牛奶{remaining_milk}调整为{remaining_milk - max_milkshake * 1}") remaining_milk -= max_milkshake * 1 else: remaining_milk -= milk_for_milkshake - logger.info(f"[岛屿-啾咖啡] 牛奶足够完成strawberry_milkshake,扣除{milk_for_milkshake},剩余牛奶{remaining_milk}") + logger.info(f"[岛屿-啾咖啡] 牛奶足够完成{self._item_cn('strawberry_milkshake')},扣除{milk_for_milkshake},剩余牛奶{remaining_milk}") # 调整cheese需求 if 'cheese' in result and result['cheese'] > 0: @@ -258,23 +258,23 @@ def apply_special_material_constraints(self, requirements): if remaining_milk < milk_for_cheese: max_cheese = remaining_milk // 8 result['cheese'] = max_cheese - logger.info(f"[岛屿-啾咖啡] 牛奶不足完成cheese,需求从{cheese_needed}调整为{max_cheese},剩余牛奶{remaining_milk}调整为{remaining_milk - max_cheese * 8}") + logger.info(f"[岛屿-啾咖啡] 牛奶不足完成{self._item_cn('cheese')},需求从{cheese_needed}调整为{max_cheese},剩余牛奶{remaining_milk}调整为{remaining_milk - max_cheese * 8}") remaining_milk -= max_cheese * 8 else: remaining_milk -= milk_for_cheese - logger.info(f"[岛屿-啾咖啡] 牛奶足够完成cheese,扣除{milk_for_cheese},剩余牛奶{remaining_milk}") + logger.info(f"[岛屿-啾咖啡] 牛奶足够完成{self._item_cn('cheese')},扣除{milk_for_cheese},剩余牛奶{remaining_milk}") return result def process_meal_requirements(self, source_products): """覆盖:处理套餐需求,添加调试信息""" logger.info(f"=== IslandJuuCoffee.process_meal_requirements ===") - logger.info(f"[岛屿-啾咖啡] 传入的需求: {source_products}") + logger.info(f"[岛屿-啾咖啡] 传入的需求: {self._inv_cn(source_products)}") # 调用父类方法 result = super().process_meal_requirements(source_products) - logger.info(f"[岛屿-啾咖啡] 返回结果: {result}") + logger.info(f"[岛屿-啾咖啡] 返回结果: {self._inv_cn(result)}") logger.info(f"[岛屿-啾咖啡] === 结束IslandJuuCoffee.process_meal_requirements ===") return result diff --git a/module/island/island_juu_eatery.py b/module/island/island_juu_eatery.py index 697a74c83..f861b0a0f 100644 --- a/module/island/island_juu_eatery.py +++ b/module/island/island_juu_eatery.py @@ -139,7 +139,7 @@ def check_special_materials(self, product, batch_size): max_by_cheese = cheese_available // cheese_needed_per_batch batch_size = min(batch_size, max_by_cheese) logger.info( - f" {product} 芝士限制: 可用{cheese_available}, 每批{cheese_needed_per_batch}, 最大{max_by_cheese}") + f" {self._item_cn(product)} 芝士限制: 可用{cheese_available}, 每批{cheese_needed_per_batch}, 最大{max_by_cheese}") # corn_cup需要1个牛奶 elif product == 'corn_cup': @@ -147,7 +147,7 @@ def check_special_materials(self, product, batch_size): milk_available = self.milk_stock max_by_milk = milk_available // milk_needed_per_batch batch_size = min(batch_size, max_by_milk) - logger.info(f"[岛屿-啾啾简餐] {product} 牛奶限制: 可用{milk_available}, 每批{milk_needed_per_batch}, 最大{max_by_milk}") + logger.info(f"[岛屿-啾啾简餐] {self._item_cn(product)} 牛奶限制: 可用{milk_available}, 每批{milk_needed_per_batch}, 最大{max_by_milk}") return batch_size @@ -163,7 +163,7 @@ def deduct_materials(self, product, number): self.special_materials['cheese'] = self.cheese_stock if 'cheese' in self.warehouse_counts: self.warehouse_counts['cheese'] = self.cheese_stock - logger.info(f"[岛屿-啾啾简餐] 扣除芝士:cheese -{cheese_needed} (用于制作 {product})") + logger.info(f"[岛屿-啾啾简餐] 扣除芝士:{self._item_cn('cheese')} -{cheese_needed} (用于制作 {self._item_cn(product)})") # corn_cup需要扣除牛奶 elif product == 'corn_cup': @@ -172,7 +172,7 @@ def deduct_materials(self, product, number): self.special_materials['milk'] = self.milk_stock if 'milk' in self.warehouse_counts: self.warehouse_counts['milk'] = self.milk_stock - logger.info(f"[岛屿-啾啾简餐] 扣除牛奶:milk -{milk_needed} (用于制作 {product})") + logger.info(f"[岛屿-啾啾简餐] 扣除牛奶:{self._item_cn('milk')} -{milk_needed} (用于制作 {self._item_cn(product)})") def apply_special_material_constraints(self, requirements): """覆盖:根据芝士和牛奶库存调整需求""" @@ -188,7 +188,7 @@ def apply_special_material_constraints(self, requirements): # 调整需求 max_strawberry = cheese_available // 2 result['strawberry_charlotte'] = max_strawberry - logger.info(f"[岛屿-啾啾简餐] 芝士不足:strawberry_charlotte需求从{strawberry_needed}调整为{max_strawberry}") + logger.info(f"[岛屿-啾啾简餐] 芝士不足:{self._item_cn('strawberry_charlotte')}需求从{strawberry_needed}调整为{max_strawberry}") # 处理corn_cup的牛奶限制 if 'corn_cup' in result and result['corn_cup'] > 0: @@ -200,7 +200,7 @@ def apply_special_material_constraints(self, requirements): # 调整需求 max_corn_cup = milk_available // 1 result['corn_cup'] = max_corn_cup - logger.info(f"[岛屿-啾啾简餐] 牛奶不足:corn_cup需求从{corn_cup_needed}调整为{max_corn_cup}") + logger.info(f"[岛屿-啾啾简餐] 牛奶不足:{self._item_cn('corn_cup')}需求从{corn_cup_needed}调整为{max_corn_cup}") return result @@ -215,4 +215,4 @@ def process_special_task(self): if __name__ == "__main__": az = IslandJuuEatery('alas', task='Alas') az.device.screenshot() - az.run() \ No newline at end of file + az.run() diff --git a/module/island/island_manufacture.py b/module/island/island_manufacture.py index 909ab37d7..e753ffd4f 100644 --- a/module/island/island_manufacture.py +++ b/module/island/island_manufacture.py @@ -108,7 +108,7 @@ def __init__(self, *args, **kwargs): # 花生油等基础产品已常驻,无需重复添加 continue self.manufacture['handmade']['items'].append(item_config.copy()) - logger.info(f"[岛屿-制造业] 季节限定:{item_name} 已添加到手工产品列表") + logger.info(f"[岛屿-制造业] 季节限定:{self._item_cn(item_name)} 已添加到手工产品列表") # 根据配置初始化岗位按钮 self.post_buttons = self._init_post_buttons() @@ -208,7 +208,7 @@ def select_product_with_material_check(self, post_id, product_list): # 同一批内前面岗位已确认材料不足的物品,直接跳过 if product_name in self.unavailable_products: - logger.info(f"[岛屿-制造业] {product_name} 本批已确认材料不足,直接跳过") + logger.info(f"[岛屿-制造业] {self._item_cn(product_name)} 本批已确认材料不足,直接跳过") continue # 每个产品:进入岗位搜索并选择;找不到则退出岗位重进重试 @@ -236,7 +236,7 @@ def select_product_with_material_check(self, post_id, product_list): continue if self.appear(ISLAND_SELECT_PRODUCT_CHECK, offset=1): entered_product_page = True - logger.info(f"[岛屿-制造业] 尝试选择产品: {product_name}") + logger.info(f"[岛屿-制造业] 尝试选择产品: {self._item_cn(product_name)}") selected = self.select_product(selection, selection_check) self.device.sleep(0.5) break @@ -247,7 +247,7 @@ def select_product_with_material_check(self, post_id, product_list): if not selected: # 搜索失败:退出岗位重新进入(重置列表滚动进度),重试同一产品 logger.warning( - f"[岛屿-制造业] 未能识别到产品选择项: {product_name}," + f"[岛屿-制造业] 未能识别到产品选择项: {self._item_cn(product_name)}," f"退出岗位重进重试 ({attempt + 1}/{self.PRODUCT_SELECT_RETRY_LIMIT})" ) self.device.click(SELECT_UI_BACK) @@ -267,7 +267,7 @@ def select_product_with_material_check(self, post_id, product_list): if color_similar(color, (153, 156, 156), 80): # 记忆本批材料不足的物品,后续岗位不再重复尝试 self.unavailable_products.add(product_name) - logger.info(f"[岛屿-制造业] 材料不足,跳过产品: {product_name}") + logger.info(f"[岛屿-制造业] 材料不足,跳过产品: {self._item_cn(product_name)}") # 退出岗位,下一个产品重新进入时列表滚动进度已重置 self.device.click(SELECT_UI_BACK) self.device.sleep(0.3) @@ -281,7 +281,7 @@ def select_product_with_material_check(self, post_id, product_list): # 材料充足,派遣生产 self.appear_then_click(POST_MAX) self.device.click(POST_ADD_ORDER) - logger.info(f"[岛屿-制造业] 选择产品成功: {product_name}") + logger.info(f"[岛屿-制造业] 选择产品成功: {self._item_cn(product_name)}") self.wait_until_appear(ISLAND_POSTMANAGE_CHECK) self.device.sleep(0.5) self.post_close() @@ -307,7 +307,7 @@ def select_product_with_material_check(self, post_id, product_list): setattr(self, time_var_name, finish_time) self.posts[post_id]['status'] = 'working' - logger.info(f"[岛屿-制造业] 已安排生产:{product_name} x{actual_number}") + logger.info(f"[岛屿-制造业] 已安排生产:{self._item_cn(product_name)} x{actual_number}") self.post_close() return product_info diff --git a/module/island/island_mine_forest.py b/module/island/island_mine_forest.py index de4779be0..204ec0c24 100644 --- a/module/island/island_mine_forest.py +++ b/module/island/island_mine_forest.py @@ -167,7 +167,7 @@ def warehouse_inventory(self, category): digit = Digit(num_btn, letter=(255, 255, 255), threshold=200, alphabet='0123456789') count = digit.ocr(image) results[matched_name] = count if count else 0 - logger.info(f" pos{idx}: {matched_name}({text.strip()}) = {results[matched_name]}") + logger.info(f" pos{idx}: {self._item_cn(matched_name)}({text.strip()}) = {results[matched_name]}") return results @@ -200,13 +200,14 @@ def check_inventory_and_prepare_lists(self): needs[category].append(name) need_count = threshold - effective_count self.needs_count[(category, name)] = need_count - logger.info(f"[岛屿-矿山林场] {name}: 仓库{warehouse_count}+生产中{in_production}={effective_count} < {threshold} → 缺 {need_count}") + logger.info(f"[岛屿-矿山林场] {self._item_cn(name)}: 仓库{warehouse_count}+生产中{in_production}={effective_count} < {threshold} → 缺 {need_count}") else: - logger.info(f"[岛屿-矿山林场] {name}: 仓库{warehouse_count}+生产中{in_production}={effective_count} ≥ {threshold} → 不缺") + logger.info(f"[岛屿-矿山林场] {self._item_cn(name)}: 仓库{warehouse_count}+生产中{in_production}={effective_count} ≥ {threshold} → 不缺") # 库存最少的产物排最前,轮转分配时优先补足 needs[category].sort(key=lambda name: inventory.get(name, 0)) - logger.info(f"[岛屿-矿山林场] 需要生产的产物: {needs}") + needs_cn = {cat: [self._item_cn(x) for x in names] for cat, names in needs.items()} + logger.info(f"[岛屿-矿山林场] 需要生产的产物: {needs_cn}") return needs # ==================== 岗位检测(模仿农田 decided_lists) ==================== @@ -322,7 +323,7 @@ def post_plant(self, post_button, product, category, time_var_name, need_count=N else: runs = max_runs target_units = max_units # 默认满产 - logger.info(f"[岛屿-矿山林场] {product}: 缺 {need_count or '满产'} 单位,安排 {runs}/{max_runs} 次生产 ({target_units} 单位)") + logger.info(f"[岛屿-矿山林场] {self._item_cn(product)}: 缺 {need_count or '满产'} 单位,安排 {runs}/{max_runs} 次生产 ({target_units} 单位)") while 1: self.device.screenshot() @@ -337,7 +338,7 @@ def post_plant(self, post_button, product, category, time_var_name, need_count=N self.back_to_postmanage_from_dispatch() return False else: - logger.warning(f"[岛屿-矿山林场] {product}生产派遣无可用角色: {character_filter}") + logger.warning(f"[岛屿-矿山林场] {self._item_cn(product)}生产派遣无可用角色: {character_filter}") self.back_to_postmanage_from_dispatch() return False continue @@ -351,7 +352,7 @@ def post_plant(self, post_button, product, category, time_var_name, need_count=N if selection_check is not None: self.device.screenshot() if not self.match_template_color(selection_check, offset=20, similarity=0.85, threshold=10): - logger.warning(f"[岛屿-矿山林场] 产物 {product} 选择未被确认,可能需要滑动查找") + logger.warning(f"[岛屿-矿山林场] 产物 {self._item_cn(product)} 选择未被确认,可能需要滑动查找") self.device.swipe_vector(vector=(0, -200), box=(333, 142, 431, 602), name="SelectionUpSwipe") self.device.sleep(0.3) self.device.click(SELECT_PRODUCT_INERTIA_STOP) @@ -541,7 +542,7 @@ def run(self): break product, need_count = all_to_plant['mine'][i] time_var = f'time_{pid}' - logger.info(f"[岛屿-矿山林场] 种植矿山 {pid}: {product}") + logger.info(f"[岛屿-矿山林场] 种植矿山 {pid}: {self._item_cn(product)}") self.post_plant(self.posts[pid]['button'], product, 'mine', time_var, need_count=need_count) # 滑动到林场 @@ -555,7 +556,7 @@ def run(self): break product, need_count = all_to_plant['forest'][i] time_var = f'time_{pid}' - logger.info(f"[岛屿-矿山林场] 种植林场 {pid}: {product}") + logger.info(f"[岛屿-矿山林场] 种植林场 {pid}: {self._item_cn(product)}") self.post_plant(self.posts[pid]['button'], product, 'forest', time_var, need_count=need_count) # ===== 收集完成时间 ===== diff --git a/module/island/island_rancher.py b/module/island/island_rancher.py index 5c3d52e9d..610629821 100644 --- a/module/island/island_rancher.py +++ b/module/island/island_rancher.py @@ -93,14 +93,14 @@ def process_mill_item(self, mill_item, quantity=None): mill_button = mill_config['mill'] target = mill_config['number'] if quantity is None else max(1, int(quantity)) - logger.info(f"[岛屿-牧场] 加工 {mill_item} x{target}") + logger.info(f"[岛屿-牧场] 加工 {self._item_cn(mill_item)} x{target}") for _ in self.loop(timeout=10, skip_first=False): if self.appear(ISLAND_SHOPPING_CHECK): break if self.appear_then_click(mill_button, interval=0.3): continue else: - logger.warning(f"[岛屿-牧场] 打开磨坊加工弹窗超时: {mill_item}") + logger.warning(f"[岛屿-牧场] 打开磨坊加工弹窗超时: {self._item_cn(mill_item)}") return False if self.appear(ISLAND_SHOPPING_CHECK): @@ -118,7 +118,7 @@ def process_mill_item(self, mill_item, quantity=None): self.device.click(ISLAND_SHOP_CONFIRM) continue else: - logger.warning(f"[岛屿-牧场] 确认磨坊加工超时: {mill_item}") + logger.warning(f"[岛屿-牧场] 确认磨坊加工超时: {self._item_cn(mill_item)}") return False if self.appear(ISLAND_SHOP_GET): @@ -130,7 +130,7 @@ def check_feed_needs(self, target_quantity=50): for post_id, feed_item in self.ranch_feed_map.items(): current_quantity = self.inventory_counts['mill'].get(feed_item, 0) if current_quantity < target_quantity: - logger.info(f"[岛屿-牧场] {feed_item}库存不足: {current_quantity}/{target_quantity}") + logger.info(f"[岛屿-牧场] {self._item_cn(feed_item)}库存不足: {current_quantity}/{target_quantity}") feed_needs.append((post_id, feed_item)) return feed_needs @@ -153,14 +153,14 @@ def check_mill_supplement_needs(self, feed_target_quantity=50): if wheat_flour_count < 150: target = 200 - wheat_flour_count mill_needs.append(('wheat_flour', target)) - logger.info(f"[岛屿-牧场] wheat_flour库存不足: {wheat_flour_count}/150,需加工 {target} 个补到 200") + logger.info(f"[岛屿-牧场] {self._item_cn('wheat_flour')}库存不足: {wheat_flour_count}/150,需加工 {target} 个补到 200") for _, feed_item in self.ranch_feed_map.items(): current_quantity = self.inventory_counts['mill'].get(feed_item, 0) if current_quantity < feed_target_quantity: target = self.name_to_config[feed_item]['number'] mill_needs.append((feed_item, target)) - logger.info(f"[岛屿-牧场] {feed_item}库存不足: {current_quantity}/{feed_target_quantity},固定加工 {target} 组") + logger.info(f"[岛屿-牧场] {self._item_cn(feed_item)}库存不足: {current_quantity}/{feed_target_quantity},固定加工 {target} 组") return mill_needs @@ -170,7 +170,7 @@ def process_mill_supplements(self, feed_target_quantity=50): logger.info("[岛屿-牧场] 牧场饲料和面粉库存充足") return [] - logger.info(f"[岛屿-牧场] 需要补充的磨坊项目: {mill_needs}") + logger.info(f"[岛屿-牧场] 需要补充的磨坊项目: {[(self._item_cn(name), target) for name, target in mill_needs]}") self.goto_postmanage() self.post_manage_mode(POST_MANAGE_PRODUCTION) self.post_close() @@ -185,7 +185,7 @@ def process_mill_supplements(self, feed_target_quantity=50): if self.process_mill_item_with_inventory(mill_item, quantity): processed_items.append(mill_item) continue - logger.warning(f"[岛屿-牧场] {mill_item}补充失败,跳过") + logger.warning(f"[岛屿-牧场] {self._item_cn(mill_item)}补充失败,跳过") if not self.back_to_postmanage_after_mill_purchase(): logger.warning("[岛屿-牧场] 磨坊补充后返回岗位管理页失败") @@ -200,7 +200,7 @@ def process_mill_item_with_inventory(self, mill_item, quantity): if current_material is not None and current_material < material_needed: logger.info( - f"{required_material}不足,无法加工{mill_item}: {current_material}/{material_needed}" + f"{self._item_cn(required_material)}不足,无法加工{self._item_cn(mill_item)}: {current_material}/{material_needed}" ) return False @@ -211,12 +211,12 @@ def process_mill_item_with_inventory(self, mill_item, quantity): 0, self.inventory_counts['farm'][required_material] - material_needed, ) - logger.info(f"[岛屿-牧场] 扣除原材料{required_material} {material_needed}单位") + logger.info(f"[岛屿-牧场] 扣除原材料{self._item_cn(required_material)} {material_needed}单位") self.inventory_counts['mill'][mill_item] = ( self.inventory_counts['mill'].get(mill_item, 0) + self.mill_output_quantity(mill_item, quantity) ) - logger.info(f"[岛屿-牧场] 加工完成:{mill_item} +{self.mill_output_quantity(mill_item, quantity)}") + logger.info(f"[岛屿-牧场] 加工完成:{self._item_cn(mill_item)} +{self.mill_output_quantity(mill_item, quantity)}") return True def back_to_postmanage_after_mill_purchase(self): @@ -370,7 +370,7 @@ def ranch_post_get_and_add(self, post_id, character='WorkerJuu'): if self.appear(ISLAND_SELECT_PRODUCT_CHECK, offset=1): feed_item = self.ranch_feed_map.get(post_id) if feed_item and self.inventory_counts['mill'].get(feed_item, 0) < 50: - logger.info(f"[岛屿-牧场] {feed_item}仓库库存仍不足 50,跳过牧场岗位{post_id}") + logger.info(f"[岛屿-牧场] {self._item_cn(feed_item)}仓库库存仍不足 50,跳过牧场岗位{post_id}") self.back_to_postmanage_after_feed_purchase() return True self.device.sleep(0.3) @@ -517,7 +517,7 @@ def warehouse_mill_ranch(self): for item_config in self.INVENTORY_CONFIG['mill']['items']: count = self.ocr_item_quantity(image, item_config['template']) self.inventory_counts['mill'][item_config['name']] = count - logger.info(f"{item_config['name']}: {count}") + logger.info(f"{self._item_cn(item_config['name'])}: {count}") self.warehouse_filter('ranch') image = self.device.screenshot() @@ -525,7 +525,7 @@ def warehouse_mill_ranch(self): for item_config in self.INVENTORY_CONFIG['ranch']['items']: count = self.ocr_item_quantity(image, item_config['template']) self.inventory_counts['ranch'][item_config['name']] = count - logger.info(f"{item_config['name']}: {count}") + logger.info(f"{self._item_cn(item_config['name'])}: {count}") self.warehouse_filter('farm') image = self.device.screenshot() @@ -533,7 +533,7 @@ def warehouse_mill_ranch(self): for item_config in self.INVENTORY_CONFIG['farm']['items']: count = self.ocr_item_quantity(image, item_config['template']) self.inventory_counts['farm'][item_config['name']] = count - logger.info(f"{item_config['name']}: {count}") + logger.info(f"{self._item_cn(item_config['name'])}: {count}") def check_ranch_needs(self): ranch_needs = [] @@ -569,15 +569,15 @@ def run(self): setattr(self, var, None) self.warehouse_mill_ranch() logger.info("[岛屿-牧场] \n当前库存统计:") - logger.info(f"[岛屿-牧场] 农场库存: {self.inventory_counts['farm']}") - logger.info(f"[岛屿-牧场] 磨坊库存: {self.inventory_counts['mill']}") - logger.info(f"[岛屿-牧场] 牧场库存: {self.inventory_counts['ranch']}") + logger.info(f"[岛屿-牧场] 农场库存: {self._inv_cn(self.inventory_counts['farm'])}") + logger.info(f"[岛屿-牧场] 磨坊库存: {self._inv_cn(self.inventory_counts['mill'])}") + logger.info(f"[岛屿-牧场] 牧场库存: {self._inv_cn(self.inventory_counts['ranch'])}") logger.info("[岛屿-牧场] \n[3/5] 检查并补充牧场饲料和面粉...") processed_mill_items = self.process_mill_supplements(feed_target_quantity=50) self.raise_if_island_error() if processed_mill_items: - logger.info(f"[岛屿-牧场] 本次运行补充了 {len(processed_mill_items)} 个磨坊项目: {processed_mill_items}") + logger.info(f"[岛屿-牧场] 本次运行补充了 {len(processed_mill_items)} 个磨坊项目: {[self._item_cn(item) for item in processed_mill_items]}") else: logger.info("[岛屿-牧场] 本次运行未补充磨坊项目") diff --git a/module/island/island_restaurant.py b/module/island/island_restaurant.py index e897a53bc..4185809f3 100644 --- a/module/island/island_restaurant.py +++ b/module/island/island_restaurant.py @@ -223,7 +223,7 @@ def _auto_switch_seasonal_meals(self): for name, target in self.post_products ] logger.info( - f"季节餐品自动切换: {spring_item}({spring_name}) -> {seasonal_item}" + f"季节餐品自动切换: {self._item_cn(spring_item)}({spring_name}) -> {self._item_cn(seasonal_item)}" f"(当前季节: {self.season_config.season_name})" ) else: @@ -232,7 +232,7 @@ def _auto_switch_seasonal_meals(self): if name != spring_item ] logger.info( - f"季节餐品自动移除: {spring_item}({spring_name})" + f"季节餐品自动移除: {self._item_cn(spring_item)}({spring_name})" f"({self.season_config.season_name} 无对应槽位的季节餐品)" ) @@ -283,14 +283,14 @@ def deduct_materials(self, product, number): tofu_needed = number * 1 if 'tofu' in self.warehouse_counts: self.warehouse_counts['tofu'] -= tofu_needed - logger.info(f"[岛屿-有鱼餐馆] 扣除豆腐:tofu -{tofu_needed} (用于制作 {product})") + logger.info(f"[岛屿-有鱼餐馆] 扣除豆腐:{self._item_cn('tofu')} -{tofu_needed} (用于制作 {self._item_cn(product)})") # tofu_meat需要扣除豆腐 if product == 'tofu_meat': tofu_needed = number * 2 if 'tofu' in self.warehouse_counts: self.warehouse_counts['tofu'] -= tofu_needed - logger.info(f"[岛屿-有鱼餐馆] 扣除豆腐:tofu -{tofu_needed} (用于制作 {product})") + logger.info(f"[岛屿-有鱼餐馆] 扣除豆腐:{self._item_cn('tofu')} -{tofu_needed} (用于制作 {self._item_cn(product)})") def apply_special_material_constraints(self, requirements): """覆盖:根据豆腐库存调整需求,豆腐不足时自动补入生产计划""" @@ -311,7 +311,7 @@ def apply_special_material_constraints(self, requirements): # 豆腐本店可生产,限产的同时补入豆腐需求 if 'tofu' in self.name_to_config: result['tofu'] = result.get('tofu', 0) + deficit - logger.info(f"[岛屿-有鱼餐馆] 豆腐不足:cabbage_tofu {cabbage_needed}→{max_cabbage},补入 tofu x{deficit}") + logger.info(f"[岛屿-有鱼餐馆] 豆腐不足:{self._item_cn('cabbage_tofu')} {cabbage_needed}→{max_cabbage},补入 {self._item_cn('tofu')} x{deficit}") tofu_stock -= max_cabbage # 处理tofu_meat的需求 @@ -325,7 +325,7 @@ def apply_special_material_constraints(self, requirements): result['tofu_meat'] = max_tofu_meat if 'tofu' in self.name_to_config: result['tofu'] = result.get('tofu', 0) + deficit * 2 - logger.info(f"[岛屿-有鱼餐馆] 豆腐不足:tofu_meat {tofu_meat_needed}→{max_tofu_meat},补入 tofu x{deficit * 2}") + logger.info(f"[岛屿-有鱼餐馆] 豆腐不足:{self._item_cn('tofu_meat')} {tofu_meat_needed}→{max_tofu_meat},补入 {self._item_cn('tofu')} x{deficit * 2}") tofu_stock -= max_tofu_meat * 2 return result @@ -371,23 +371,23 @@ def run(self): # ============ 调试信息 ============ logger.info(f"[岛屿-有鱼餐馆] === 调试信息 ===") - logger.info(f"[岛屿-有鱼餐馆] 仓库库存: {self.warehouse_counts}") - logger.info(f"[岛屿-有鱼餐馆] 生产中库存: {self.post_check_meal}") - logger.info(f"[岛屿-有鱼餐馆] 当前总库存: {self.current_totals}") - logger.info(f"[岛屿-有鱼餐馆] 基础需求配置(共{len(self.post_products)}个槽位): {self.post_products}") + logger.info(f"[岛屿-有鱼餐馆] 仓库库存: {self._inv_cn(self.warehouse_counts)}") + logger.info(f"[岛屿-有鱼餐馆] 生产中库存: {self._inv_cn(self.post_check_meal)}") + logger.info(f"[岛屿-有鱼餐馆] 当前总库存: {self._inv_cn(self.current_totals)}") + logger.info(f"[岛屿-有鱼餐馆] 基础需求配置(共{len(self.post_products)}个槽位): {self._products_cn(self.post_products)}") logger.info("===============") # 保存原始库存,retry 时恢复(避免 max_targets 清零影响重算) _orig_totals = dict(self.current_totals) self._compute_base_demands() - logger.info(f"[岛屿-有鱼餐馆] 待完成备餐: {self.to_post_products}") - logger.info(f"[岛屿-有鱼餐馆] 当前剩余库存: {self.current_totals}") + logger.info(f"[岛屿-有鱼餐馆] 待完成备餐: {self._inv_cn(self.to_post_products)}") + logger.info(f"[岛屿-有鱼餐馆] 当前剩余库存: {self._inv_cn(self.current_totals)}") # ============ 处理套餐分解 ============ if self.to_post_products: self.to_post_products = self.process_meal_requirements(self.to_post_products) - logger.info(f"[岛屿-有鱼餐馆] 基础需求生产计划: {self.to_post_products}") + logger.info(f"[岛屿-有鱼餐馆] 基础需求生产计划: {self._inv_cn(self.to_post_products)}") # ================================================================ # 高优先级季节菜品 @@ -406,13 +406,13 @@ def run(self): # 临时只安排位置1的生产 temp_products = self.to_post_products.copy() self.to_post_products = {dish_name: slot1_qty} - logger.info(f"[岛屿-有鱼餐馆] 单独安排{dish_cn}生产: {self.to_post_products}") + logger.info(f"[岛屿-有鱼餐馆] 单独安排{dish_cn}生产: {self._inv_cn(self.to_post_products)}") self.schedule_production() # 恢复剩余的基础需求生产计划 self.to_post_products = temp_products - logger.info(f"[岛屿-有鱼餐馆] 剩余基础需求生产计划: {self.to_post_products}") + logger.info(f"[岛屿-有鱼餐馆] 剩余基础需求生产计划: {self._inv_cn(self.to_post_products)}") # ============ 安排基础需求生产(循环直到无空岗或无缺口) ============ _produced_pass = {} @@ -436,7 +436,7 @@ def run(self): break self.to_post_products = self.process_meal_requirements(self.to_post_products) - logger.info(f"[岛屿-有鱼餐馆] 基础需求生产计划: {self.to_post_products}") + logger.info(f"[岛屿-有鱼餐馆] 基础需求生产计划: {self._inv_cn(self.to_post_products)}") prev_pass_total = sum(_produced_pass.values()) self._schedule_and_track(_produced_pass) @@ -451,14 +451,14 @@ def run(self): if not self.to_post_products: break self.to_post_products = self.process_meal_requirements(self.to_post_products) - logger.info(f"[岛屿-有鱼餐馆] 基础需求生产计划(严格模式): {self.to_post_products}") + logger.info(f"[岛屿-有鱼餐馆] 基础需求生产计划(严格模式): {self._inv_cn(self.to_post_products)}") strict_prev_total = sum(_produced_pass.values()) self._schedule_and_track(_produced_pass) if sum(_produced_pass.values()) == strict_prev_total and self.to_post_products: stuck_now = set(self.to_post_products.keys()) - logger.info(f"[岛屿-有鱼餐馆] [循环] 严格模式也无产出,强制跳过: {stuck_now}") + logger.info(f"[岛屿-有鱼餐馆] [循环] 严格模式也无产出,强制跳过: {sorted(self._item_cn(k) for k in stuck_now)}") _force_skip_run.update(stuck_now) self.to_post_products = {} continue @@ -480,7 +480,7 @@ def run(self): post_num = post_id[-1] time_var_name = f'{self.time_prefix}{post_num}' - logger.info(f"[岛屿-有鱼餐馆] 尝试生产常驻餐品 {away_cook}") + logger.info(f"[岛屿-有鱼餐馆] 尝试生产常驻餐品 {self._item_cn(away_cook)}") # 检查材料限制 batch_size = self.POST_PRODUCE_LIMIT @@ -495,12 +495,12 @@ def run(self): ) if result == 0: - logger.info(f"[岛屿-有鱼餐馆] 常驻餐品 {away_cook} 原料不足,保持岗位空闲") + logger.info(f"[岛屿-有鱼餐馆] 常驻餐品 {self._item_cn(away_cook)} 原料不足,保持岗位空闲") break else: - logger.info(f"[岛屿-有鱼餐馆] 已为岗位 {post_id} 安排常驻餐品 {away_cook} x{batch_size}") + logger.info(f"[岛屿-有鱼餐馆] 已为岗位 {post_id} 安排常驻餐品 {self._item_cn(away_cook)} x{batch_size}") else: - logger.info(f"[岛屿-有鱼餐馆] 生产 {away_cook} 的材料不足,跳过岗位 {post_id}") + logger.info(f"[岛屿-有鱼餐馆] 生产 {self._item_cn(away_cook)} 的材料不足,跳过岗位 {post_id}") break elif idle_posts_after_basic: diff --git a/module/island/island_select_character.py b/module/island/island_select_character.py index a5c3208bb..ebbe24e28 100644 --- a/module/island/island_select_character.py +++ b/module/island/island_select_character.py @@ -73,6 +73,7 @@ def __init__(self, *args, **kwargs): "ChangFeng": TEMPLATE_CHANG_FENG, "Mogador": TEMPLATE_MOGADOR, "RoyalFortune": TEMPLATE_ROYAL_FORTUNE, + "DaVinci": TEMPLATE_DAVINCI, } def recognize_all_characters(self, screenshot): diff --git a/module/island/island_shop_base.py b/module/island/island_shop_base.py index c7efe7d36..6f9360f75 100644 --- a/module/island/island_shop_base.py +++ b/module/island/island_shop_base.py @@ -104,7 +104,7 @@ def is_seasonal_item_enabled(self, item_name): from module.island.island_season import SEASONAL_ITEMS other_items = SEASONAL_ITEMS.get(season_key, {}).get(self.shop_type, []) if item_name in other_items: - logger.info(f"[岛屿] 物品 [{item_name}] 是 {season_key} 的限定品,当前 {self.season_name} 不可用") + logger.info(f"[岛屿] 物品 [{self._item_cn(item_name)}] 是 {season_key} 的限定品,当前 {self.season_name} 不可用") return False return True def produce_check(self): @@ -192,7 +192,7 @@ def get_warehouse_counts(self): for dish in self.shop_items: self.warehouse_counts[dish['name']] = self.ocr_item_quantity(image, dish['template']) if self.warehouse_counts[dish['name']]: - logger.info(f"{dish['name']}: {self.warehouse_counts[dish['name']]}") + logger.info(f"{self._item_cn(dish['name'])}: {self.warehouse_counts[dish['name']]}") return self.warehouse_counts def select_special_character(self,product): return self.select_character(character_list=self.chef_config) @@ -203,20 +203,20 @@ def retry_product_selection_from_postmanage(self, post_button, product, failed_p """餐品选择失败后退出岗位,重新进入同一岗位走完整派遣流程。""" if failed_count >= self.PRODUCT_SELECT_RETRY_LIMIT: raise GameStuckError( - f"{product}生产选择餐品时连续{failed_count}次未识别到 {failed_product}" + f"{self._item_cn(product)}生产选择餐品时连续{failed_count}次未识别到 {self._item_cn(failed_product)}" ) logger.warning( - f"{product}生产选择餐品时未识别到 {failed_product}," + f"{self._item_cn(product)}生产选择餐品时未识别到 {self._item_cn(failed_product)}," f"退出岗位后重新进入 ({failed_count}/{self.PRODUCT_SELECT_RETRY_LIMIT})" ) if not self.back_to_postmanage_from_dispatch(): - raise GameStuckError(f"{product}生产选择餐品失败后无法返回岗位管理页") + raise GameStuckError(f"{self._item_cn(product)}生产选择餐品失败后无法返回岗位管理页") self.post_manage_mode(POST_MANAGE_PRODUCTION) self.post_manage_swipe(self.post_manage_swipe_count) if not self.post_open(post_button): - raise GameStuckError(f"{product}生产选择餐品失败后无法重新打开岗位") + raise GameStuckError(f"{self._item_cn(product)}生产选择餐品失败后无法重新打开岗位") self.device.sleep(0.5) def increase_product_selection_failure(self, product_select_failures, failed_product): @@ -247,11 +247,11 @@ def post_produce(self, post_id, product, number, time_var_name,product2=None): selected = self.select_character(character_list=self.chef_config) character_filter = self.chef_config if selected: - if not self.confirm_selected_character(f"{product}生产派遣"): + if not self.confirm_selected_character(f"{self._item_cn(product)}生产派遣"): self.back_to_postmanage_from_dispatch() return 0 else: - logger.warning(f"[岛屿] {product}生产派遣无可用角色: {character_filter}") + logger.warning(f"[岛屿] {self._item_cn(product)}生产派遣无可用角色: {character_filter}") self.chef_unavailable_products.add(product) self.back_to_postmanage_from_dispatch() return 0 @@ -260,7 +260,7 @@ def post_produce(self, post_id, product, number, time_var_name,product2=None): if self.select_product(selection, selection_check): self.device.sleep(0.5) if self.produce_check(): - logger.warning(f"[岛屿] 原料不足,无法生产 {product}") + logger.warning(f"[岛屿] 原料不足,无法生产 {self._item_cn(product)}") self.device.sleep(0.5) if product == self.special_food: if product2: @@ -276,7 +276,7 @@ def post_produce(self, post_id, product, number, time_var_name,product2=None): continue self.device.sleep(0.5) if self.produce_check(): - logger.warning(f"[岛屿] 原料不足,无法生产 {product2}") + logger.warning(f"[岛屿] 原料不足,无法生产 {self._item_cn(product2)}") self.device.click(ISLAND_BACK) self.device.sleep(0.5) return 0 # 返回0表示原料不足 @@ -312,7 +312,7 @@ def post_produce(self, post_id, product, number, time_var_name,product2=None): ) continue else: - raise GameStuckError(f"{product}生产派遣流程超时") + raise GameStuckError(f"{self._item_cn(product)}生产派遣流程超时") self.wait_until_appear(ISLAND_POSTMANAGE_CHECK) self.device.sleep(0.5) self.post_manage_swipe(self.post_manage_swipe_count) @@ -329,7 +329,7 @@ def post_produce(self, post_id, product, number, time_var_name,product2=None): self.posts[post_id]['status'] = 'working' # 扣除前置材料(子类可覆盖) self.deduct_materials(product, actual_number) - logger.info(f"[岛屿] 已安排生产:{product} x{actual_number}") + logger.info(f"[岛屿] 已安排生产:{self._item_cn(product)} x{actual_number}") self.post_close() # 返回实际生产数量 return actual_number @@ -344,7 +344,7 @@ def deduct_materials(self, product, number): material_needed = number * quantity_per if material in self.warehouse_counts: self.warehouse_counts[material] -= material_needed - logger.info(f"[岛屿] 扣除原材料:{material} -{material_needed} (用于制作 {product})") + logger.info(f"[岛屿] 扣除原材料:{self._item_cn(material)} -{material_needed} (用于制作 {self._item_cn(product)})") def get_idle_posts(self): """获取空闲的岗位ID列表(通用)""" @@ -396,17 +396,17 @@ def _compute_base_demands(self, check_materials=False, force_skip=None): current = virtual_totals.get(name, 0) if current < target: if name in force_skip: - logger.info(f"[岛屿] 槽位{idx + 1} {name} 本轮已尝试失败,强制跳过") + logger.info(f"[岛屿] 槽位{idx + 1} {self._item_cn(name)} 本轮已尝试失败,强制跳过") continue if name in self.chef_unavailable_products: - logger.info(f"[岛屿] 槽位{idx + 1} {name} 无可用角色,本轮跳过") + logger.info(f"[岛屿] 槽位{idx + 1} {self._item_cn(name)} 无可用角色,本轮跳过") continue deficit = target - current # check_materials=True 时严格检查零库存,用于跳过无法生产的缺口 if self.get_max_producible( name, min(self.POST_PRODUCE_LIMIT, deficit), skip_zero_materials=not check_materials) <= 0: - logger.info(f"[岛屿] 槽位{idx + 1} {name} 材料完全不足,本轮跳过") + logger.info(f"[岛屿] 槽位{idx + 1} {self._item_cn(name)} 材料完全不足,本轮跳过") continue self.to_post_products[name] = deficit virtual_totals[name] = target @@ -462,22 +462,22 @@ def run(self): # ============ 调试信息 ============ logger.info(f"[岛屿] === 调试信息 ===") - logger.info(f"[岛屿] 仓库库存: {self.warehouse_counts}") - logger.info(f"[岛屿] 生产中库存: {self.post_check_meal}") - logger.info(f"[岛屿] 当前总库存: {self.current_totals}") - logger.info(f"[岛屿] 基础需求配置(共{len(self.post_products)}个槽位): {self.post_products}") + logger.info(f"[岛屿] 仓库库存: {self._inv_cn(self.warehouse_counts)}") + logger.info(f"[岛屿] 生产中库存: {self._inv_cn(self.post_check_meal)}") + logger.info(f"[岛屿] 当前总库存: {self._inv_cn(self.current_totals)}") + logger.info(f"[岛屿] 基础需求配置(共{len(self.post_products)}个槽位): {self._products_cn(self.post_products)}") logger.info("===============") # 保存原始库存,retry 时恢复 _orig_totals = dict(self.current_totals) self._compute_base_demands() - logger.info(f"[岛屿] 待完成备餐: {self.to_post_products}") - logger.info(f"[岛屿] 当前剩余库存: {self.current_totals}") + logger.info(f"[岛屿] 待完成备餐: {self._inv_cn(self.to_post_products)}") + logger.info(f"[岛屿] 当前剩余库存: {self._inv_cn(self.current_totals)}") # ============ 处理套餐分解 ============ if self.to_post_products: self.to_post_products = self.process_meal_requirements(self.to_post_products) - logger.info(f"[岛屿] 基础需求生产计划: {self.to_post_products}") + logger.info(f"[岛屿] 基础需求生产计划: {self._inv_cn(self.to_post_products)}") # ============ 安排基础需求生产(循环直到无空岗或无缺口) ============ _produced_pass = {} # 本次 run() 调用中已生产的累计 @@ -501,7 +501,7 @@ def run(self): break self.to_post_products = self.process_meal_requirements(self.to_post_products) - logger.info(f"[岛屿] 基础需求生产计划: {self.to_post_products}") + logger.info(f"[岛屿] 基础需求生产计划: {self._inv_cn(self.to_post_products)}") prev_pass_total = sum(_produced_pass.values()) self._schedule_and_track(_produced_pass) @@ -517,7 +517,7 @@ def run(self): if not self.to_post_products: break self.to_post_products = self.process_meal_requirements(self.to_post_products) - logger.info(f"[岛屿] 基础需求生产计划(严格模式): {self.to_post_products}") + logger.info(f"[岛屿] 基础需求生产计划(严格模式): {self._inv_cn(self.to_post_products)}") strict_prev_total = sum(_produced_pass.values()) self._schedule_and_track(_produced_pass) @@ -556,7 +556,7 @@ def run(self): if has_special_food and has_away_cook: # 情况1:既有特殊餐品又有常驻餐品 - logger.info(f"[岛屿] 同时有特殊餐品 {special_food} 和常驻餐品 {away_cook}") + logger.info(f"[岛屿] 同时有特殊餐品 {self._item_cn(special_food)} 和常驻餐品 {self._item_cn(away_cook)}") logger.info(f"[岛屿] 优先尝试生产特殊餐品,如果原料不足则生产常驻餐品") # 尝试生产特殊餐品(如果原料不足会自动尝试常驻餐品) @@ -570,14 +570,14 @@ def run(self): if result == 0: # 特殊餐品和常驻餐品都原料不足 - logger.info(f"[岛屿] 特殊餐品 {special_food} 和常驻餐品 {away_cook} 都原料不足,保持岗位空闲") + logger.info(f"[岛屿] 特殊餐品 {self._item_cn(special_food)} 和常驻餐品 {self._item_cn(away_cook)} 都原料不足,保持岗位空闲") break else: logger.info(f"[岛屿] 已为岗位 {post_id} 安排生产") elif has_special_food and not has_away_cook: # 情况2:只有特殊餐品,没有常驻餐品 - logger.info(f"[岛屿] 只有特殊餐品 {special_food},没有常驻餐品") + logger.info(f"[岛屿] 只有特殊餐品 {self._item_cn(special_food)},没有常驻餐品") result = self.post_produce( post_id, @@ -588,14 +588,14 @@ def run(self): if result == 0: # 特殊餐品原料不足 - logger.info(f"[岛屿] 特殊餐品 {special_food} 原料不足,保持岗位空闲") + logger.info(f"[岛屿] 特殊餐品 {self._item_cn(special_food)} 原料不足,保持岗位空闲") break else: logger.info(f"[岛屿] 已为岗位 {post_id} 安排生产特殊餐品") elif not has_special_food and has_away_cook: # 情况3:只有常驻餐品,没有特殊餐品 - logger.info(f"[岛屿] 只有常驻餐品 {away_cook},没有特殊餐品") + logger.info(f"[岛屿] 只有常驻餐品 {self._item_cn(away_cook)},没有特殊餐品") # 检查材料限制 batch_size = self.POST_PRODUCE_LIMIT @@ -610,12 +610,12 @@ def run(self): ) if result == 0: - logger.info(f"[岛屿] 常驻餐品 {away_cook} 原料不足,保持岗位空闲") + logger.info(f"[岛屿] 常驻餐品 {self._item_cn(away_cook)} 原料不足,保持岗位空闲") break else: - logger.info(f"[岛屿] 已为岗位 {post_id} 安排常驻餐品 {away_cook} x{batch_size}") + logger.info(f"[岛屿] 已为岗位 {post_id} 安排常驻餐品 {self._item_cn(away_cook)} x{batch_size}") else: - logger.info(f"[岛屿] 生产 {away_cook} 的材料不足,跳过岗位 {post_id}") + logger.info(f"[岛屿] 生产 {self._item_cn(away_cook)} 的材料不足,跳过岗位 {post_id}") break else: @@ -644,7 +644,7 @@ def run(self): def process_meal_requirements(self, source_products): """处理套餐需求(修正版)""" logger.info(f"[岛屿] === 进入process_meal_requirements ===") - logger.info(f"[岛屿] 传入的需求: {source_products}") + logger.info(f"[岛屿] 传入的需求: {self._inv_cn(source_products)}") result = {} @@ -657,20 +657,20 @@ def process_meal_requirements(self, source_products): continue if product in self.meal_compositions: meal_demands[product] = quantity - logger.info(f"[岛屿] 识别为套餐: {product} x{quantity}") + logger.info(f"[岛屿] 识别为套餐: {self._item_cn(product)} x{quantity}") else: base_demands[product] = quantity - logger.info(f"[岛屿] 识别为基础餐品: {product} x{quantity}") + logger.info(f"[岛屿] 识别为基础餐品: {self._item_cn(product)} x{quantity}") - logger.info(f"[岛屿] 套餐需求: {meal_demands}") - logger.info(f"[岛屿] 基础需求: {base_demands}") + logger.info(f"[岛屿] 套餐需求: {self._inv_cn(meal_demands)}") + logger.info(f"[岛屿] 基础需求: {self._inv_cn(base_demands)}") # 2. 处理套餐需求 - 直接加入结果(套餐可以直接生产) # 注意:这里传入的已经是净需求,不需要再扣除库存 for meal, meal_quantity in meal_demands.items(): if meal_quantity > 0: result[meal] = meal_quantity - logger.info(f"[岛屿] 套餐直接生产: {meal} x{meal_quantity}") + logger.info(f"[岛屿] 套餐直接生产: {self._item_cn(meal)} x{meal_quantity}") # 3. 处理基础需求(这些可能是套餐的原材料) material_needs = {} @@ -682,13 +682,13 @@ def process_meal_requirements(self, source_products): for material in composition['required']: needed = meal_quantity * composition.get('quantity_per', 1) material_needs[material] = material_needs.get(material, 0) + needed - logger.info(f"[岛屿] 套餐 {meal} 需要原材料: {material} x{needed}") + logger.info(f"[岛屿] 套餐 {self._item_cn(meal)} 需要原材料: {self._item_cn(material)} x{needed}") - logger.info(f"[岛屿] 原材料总需求: {material_needs}") + logger.info(f"[岛屿] 原材料总需求: {self._inv_cn(material_needs)}") # 4. 处理基础需求,并考虑原材料需求 for base_product, base_quantity in base_demands.items(): - logger.info(f"[岛屿] 处理基础餐品 {base_product}: 基础需求={base_quantity}") + logger.info(f"[岛屿] 处理基础餐品 {self._item_cn(base_product)}: 基础需求={base_quantity}") # 总需求 = 基础需求(已经是净需求) + 套餐原材料需求 total_needed = base_quantity @@ -716,13 +716,13 @@ def process_meal_requirements(self, source_products): if total_needed > 0: result[base_product] = total_needed - logger.info(f"[岛屿] 添加到生产计划: {base_product} x{total_needed}") + logger.info(f"[岛屿] 添加到生产计划: {self._item_cn(base_product)} x{total_needed}") else: logger.info(f"[岛屿] 不需要生产") # 5. 处理剩余的原材料需求(这些基础餐品不在基础需求列表中) for material, material_quantity in material_needs.items(): - logger.info(f"[岛屿] 处理剩余原材料 {material}: 需求={material_quantity}") + logger.info(f"[岛屿] 处理剩余原材料 {self._item_cn(material)}: 需求={material_quantity}") current_stock = self.current_totals.get(material, 0) logger.info(f"[岛屿] 当前总库存: {current_stock}") @@ -730,15 +730,15 @@ def process_meal_requirements(self, source_products): net_needed = max(0, material_quantity - current_stock) if net_needed > 0: result[material] = net_needed - logger.info(f"[岛屿] 添加到生产计划: {material} x{net_needed}") + logger.info(f"[岛屿] 添加到生产计划: {self._item_cn(material)} x{net_needed}") else: logger.info(f"[岛屿] 库存充足,不需要生产") - logger.info(f"[岛屿] 无特殊材料限制下的生产计划: {result}") + logger.info(f"[岛屿] 无特殊材料限制下的生产计划: {self._inv_cn(result)}") # 6. 考虑特殊材料限制 result = self.apply_special_material_constraints(result) - logger.info(f"[岛屿] 最终生产计划: {result}") + logger.info(f"[岛屿] 最终生产计划: {self._inv_cn(result)}") logger.info(f"[岛屿] === 离开process_meal_requirements ===") return result @@ -754,7 +754,7 @@ def get_max_producible(self, product, requested_quantity, skip_zero_materials=Fa 排产阶段为 False,严格检查避免游戏层拒绝导致 stalled。 """ max_producible = requested_quantity - logger.info(f"[岛屿] 检查 {product} 的最大可生产数量,需求: {requested_quantity}") + logger.info(f"[岛屿] 检查 {self._item_cn(product)} 的最大可生产数量,需求: {requested_quantity}") # 1. 如果是套餐,检查原材料库存 if product in self.meal_compositions: @@ -769,14 +769,14 @@ def get_max_producible(self, product, requested_quantity, skip_zero_materials=Fa if max_by_material <= 0: if skip_zero_materials and material_stock == 0: # 需求计算阶段且真零库存:不阻断,留给 process_meal_requirements 分解 - logger.info(f"[岛屿] {product} 原材料 {material} 库存为 0,需求计算阶段跳过此原料限制") + logger.info(f"[岛屿] {self._item_cn(product)} 原材料 {self._item_cn(material)} 库存为 0,需求计算阶段跳过此原料限制") continue else: # 排产阶段 或 有但不满足一批:严格处理 - logger.info(f"[岛屿] {product} 缺少原材料: {material} (库存: {material_stock})") + logger.info(f"[岛屿] {self._item_cn(product)} 缺少原材料: {self._item_cn(material)} (库存: {material_stock})") return 0 max_producible = min(max_producible, max_by_material) - logger.info(f"[岛屿] {product} 原材料 {material}: 库存 {material_stock},每个需要 {quantity_per},最大生产 {max_by_material}") + logger.info(f"[岛屿] {self._item_cn(product)} 原材料 {self._item_cn(material)}: 库存 {material_stock},每个需要 {quantity_per},最大生产 {max_by_material}") # 2. 检查岗位数量限制 max_producible = min(max_producible, self.POST_PRODUCE_LIMIT) @@ -806,13 +806,13 @@ def process_away_cook(self): # 检查 away_cook 是否有效 if away_cook and away_cook != "None" and away_cook in self.name_to_config: self.to_post_products = {away_cook: 9999} - logger.info(f"[岛屿] 常驻餐品模式:生产 {away_cook}") + logger.info(f"[岛屿] 常驻餐品模式:生产 {self._item_cn(away_cook)}") else: self.to_post_products = {} if away_cook is None or away_cook == "None": logger.info("[岛屿] 未设置常驻餐品,保持空闲") elif away_cook not in self.name_to_config: - logger.info(f"[岛屿] 常驻餐品 '{away_cook}' 不在商品列表中,保持空闲") + logger.info(f"[岛屿] 常驻餐品 '{self._item_cn(away_cook)}' 不在商品列表中,保持空闲") def schedule_production(self): """安排生产,利用所有空闲岗位""" @@ -836,7 +836,7 @@ def schedule_production(self): break if is_away_cook_mode: - logger.info(f"[岛屿] 常驻餐品模式:为所有空闲岗位安排生产 {away_cook_product}") + logger.info(f"[岛屿] 常驻餐品模式:为所有空闲岗位安排生产 {self._item_cn(away_cook_product)}") # 为每个空闲岗位安排生产 for post_id in idle_posts: # 检查材料限制 @@ -844,7 +844,7 @@ def schedule_production(self): batch_size = self.get_max_producible(away_cook_product, batch_size) if batch_size <= 0: - logger.info(f"[岛屿] 生产 {away_cook_product} 的前置材料不足,跳过岗位 {post_id}") + logger.info(f"[岛屿] 生产 {self._item_cn(away_cook_product)} 的前置材料不足,跳过岗位 {post_id}") continue # 分配生产 @@ -907,7 +907,7 @@ def slot_priority(item): if remaining_need <= 0: continue - logger.info(f"[岛屿] 尝试安排生产 {product},需求: {remaining_need}") + logger.info(f"[岛屿] 尝试安排生产 {self._item_cn(product)},需求: {remaining_need}") # 为每个空闲岗位分配生产(直到需求满足或没有空闲岗位) while remaining_need > 0 and post_index < total_idle_posts: @@ -918,7 +918,7 @@ def slot_priority(item): product, min(self.POST_PRODUCE_LIMIT, remaining_need)) if max_producible <= 0: - logger.info(f"[岛屿] 生产 {product} 的材料暂时不足,保留在计划中等待下一轮") + logger.info(f"[岛屿] 生产 {self._item_cn(product)} 的材料暂时不足,保留在计划中等待下一轮") break # 跳过当前产品,但保留在 to_post_products 中 # 分配生产 @@ -930,7 +930,7 @@ def slot_priority(item): # 如果实际生产数量为0,说明原料不足 if actual_number == 0: - logger.info(f"[岛屿] 生产 {product} 时检测到原料不足,保留在计划中等待下一轮") + logger.info(f"[岛屿] 生产 {self._item_cn(product)} 时检测到原料不足,保留在计划中等待下一轮") break # 跳过当前产品,但保留在 to_post_products 中 # 记录已产出(部分生产不算停滞) @@ -952,7 +952,7 @@ def slot_priority(item): break if self.to_post_products: - logger.info(f"[岛屿] 生产安排完成,剩余需求: {self.to_post_products}") + logger.info(f"[岛屿] 生产安排完成,剩余需求: {self._inv_cn(self.to_post_products)}") else: logger.info("[岛屿] 所有可安排的产品已安排生产") diff --git a/module/island/island_teahouse.py b/module/island/island_teahouse.py index 8b26d41fa..c982b89eb 100644 --- a/module/island/island_teahouse.py +++ b/module/island/island_teahouse.py @@ -243,7 +243,7 @@ def _auto_switch_seasonal_meals(self): for name, target in self.post_products ] logger.info( - f"季节餐品自动切换: {spring_item}({cn_name}) -> {seasonal_item}" + f"季节餐品自动切换: {self._item_cn(spring_item)}({cn_name}) -> {self._item_cn(seasonal_item)}" f"(当前季节: {self.season_config.season_name})" ) else: @@ -252,7 +252,7 @@ def _auto_switch_seasonal_meals(self): if name != spring_item ] logger.info( - f"季节餐品自动移除: {spring_item}({cn_name})" + f"季节餐品自动移除: {self._item_cn(spring_item)}({cn_name})" f"({self.season_config.season_name} 无对应槽位的季节餐品)" ) @@ -318,7 +318,7 @@ def post_produce(self, post_id, product, number, time_var_name, product2=None): self.back_to_postmanage_from_dispatch() return 0 else: - logger.warning(f"[岛屿-白熊饮品] {product}生产派遣无可用角色: {self.chef_config}") + logger.warning(f"[岛屿-白熊饮品] {self._item_cn(product)}生产派遣无可用角色: {self.chef_config}") self.back_to_postmanage_from_dispatch() return 0 continue @@ -334,7 +334,7 @@ def post_produce(self, post_id, product, number, time_var_name, product2=None): self.device.sleep(0.3) # 检查材料并下单 if self.produce_check(): - logger.warning(f"[岛屿-白熊饮品] 原料不足,无法生产 spring_flower_tea") + logger.warning(f"[岛屿-白熊饮品] 原料不足,无法生产 {self._item_cn('spring_flower_tea')}") self.device.click(ISLAND_BACK) self.device.sleep(0.5) return 0 @@ -357,7 +357,7 @@ def post_produce(self, post_id, product, number, time_var_name, product2=None): setattr(self, time_var_name, finish_time) self.posts[post_id]['status'] = 'working' self.deduct_materials(product, actual_number) - logger.info(f"[岛屿-白熊饮品] 已安排生产:{product} x{actual_number}") + logger.info(f"[岛屿-白熊饮品] 已安排生产:{self._item_cn(product)} x{actual_number}") self.post_close() return actual_number @@ -404,23 +404,23 @@ def run(self): # ============ 调试信息 ============ logger.info(f"[岛屿-白熊饮品] === 调试信息 ===") - logger.info(f"[岛屿-白熊饮品] 仓库库存: {self.warehouse_counts}") - logger.info(f"[岛屿-白熊饮品] 生产中库存: {self.post_check_meal}") - logger.info(f"[岛屿-白熊饮品] 当前总库存: {self.current_totals}") - logger.info(f"[岛屿-白熊饮品] 基础需求配置(共{len(self.post_products)}个槽位): {self.post_products}") + logger.info(f"[岛屿-白熊饮品] 仓库库存: {self._inv_cn(self.warehouse_counts)}") + logger.info(f"[岛屿-白熊饮品] 生产中库存: {self._inv_cn(self.post_check_meal)}") + logger.info(f"[岛屿-白熊饮品] 当前总库存: {self._inv_cn(self.current_totals)}") + logger.info(f"[岛屿-白熊饮品] 基础需求配置(共{len(self.post_products)}个槽位): {self._products_cn(self.post_products)}") logger.info("===============") # 保存原始库存,retry 时恢复 _orig_totals = dict(self.current_totals) self._compute_base_demands() - logger.info(f"[岛屿-白熊饮品] 待完成备餐: {self.to_post_products}") - logger.info(f"[岛屿-白熊饮品] 当前剩余库存: {self.current_totals}") + logger.info(f"[岛屿-白熊饮品] 待完成备餐: {self._inv_cn(self.to_post_products)}") + logger.info(f"[岛屿-白熊饮品] 当前剩余库存: {self._inv_cn(self.current_totals)}") # ============ 处理套餐分解 ============ if self.to_post_products: self.to_post_products = self.process_meal_requirements(self.to_post_products) - logger.info(f"[岛屿-白熊饮品] 基础需求生产计划: {self.to_post_products}") + logger.info(f"[岛屿-白熊饮品] 基础需求生产计划: {self._inv_cn(self.to_post_products)}") # ================================================================ # 阶段:高优先级季节饮品(受「迎春花茶」开关控制) @@ -433,13 +433,13 @@ def run(self): logger.info(f"[岛屿-白熊饮品] 阶段:高优先级季节饮品 — {drink_cn}") temp_products = self.to_post_products.copy() self.to_post_products = {drink_name: self.POST_PRODUCE_LIMIT} - logger.info(f"[岛屿-白熊饮品] 单独安排{drink_cn}生产: {self.to_post_products}") + logger.info(f"[岛屿-白熊饮品] 单独安排{drink_cn}生产: {self._inv_cn(self.to_post_products)}") self.schedule_production() # 恢复剩余的基础需求生产计划 self.to_post_products = temp_products - logger.info(f"[岛屿-白熊饮品] 剩余基础需求生产计划: {self.to_post_products}") + logger.info(f"[岛屿-白熊饮品] 剩余基础需求生产计划: {self._inv_cn(self.to_post_products)}") else: logger.info("[岛屿-白熊饮品] 迎春花茶优先生产已关闭,直接处理基础需求") @@ -465,7 +465,7 @@ def run(self): break self.to_post_products = self.process_meal_requirements(self.to_post_products) - logger.info(f"[岛屿-白熊饮品] 基础需求生产计划: {self.to_post_products}") + logger.info(f"[岛屿-白熊饮品] 基础需求生产计划: {self._inv_cn(self.to_post_products)}") prev_pass_total = sum(_produced_pass.values()) self._schedule_and_track(_produced_pass) @@ -481,14 +481,14 @@ def run(self): if not self.to_post_products: break self.to_post_products = self.process_meal_requirements(self.to_post_products) - logger.info(f"[岛屿-白熊饮品] 基础需求生产计划(严格模式): {self.to_post_products}") + logger.info(f"[岛屿-白熊饮品] 基础需求生产计划(严格模式): {self._inv_cn(self.to_post_products)}") strict_prev_total = sum(_produced_pass.values()) self._schedule_and_track(_produced_pass) if sum(_produced_pass.values()) == strict_prev_total and self.to_post_products: stuck_now = set(self.to_post_products.keys()) - logger.info(f"[岛屿-白熊饮品] [循环] 严格模式也无产出,强制跳过: {stuck_now}") + logger.info(f"[岛屿-白熊饮品] [循环] 严格模式也无产出,强制跳过: {sorted(self._item_cn(k) for k in stuck_now)}") _force_skip_run.update(stuck_now) self.to_post_products = {} continue @@ -504,7 +504,7 @@ def run(self): for post_id in idle_posts_after_basic: post_num = post_id[-1] time_var_name = f'{self.time_prefix}{post_num}' - logger.info(f"[岛屿-白熊饮品] 尝试生产常驻餐品 {away_cook}") + logger.info(f"[岛屿-白熊饮品] 尝试生产常驻餐品 {self._item_cn(away_cook)}") batch_size = self.POST_PRODUCE_LIMIT batch_size = self.get_max_producible(away_cook, batch_size) if batch_size > 0: @@ -513,12 +513,12 @@ def run(self): time_var_name=time_var_name ) if result == 0: - logger.info(f"[岛屿-白熊饮品] 常驻餐品 {away_cook} 原料不足,保持岗位空闲") + logger.info(f"[岛屿-白熊饮品] 常驻餐品 {self._item_cn(away_cook)} 原料不足,保持岗位空闲") break else: - logger.info(f"[岛屿-白熊饮品] 已为岗位 {post_id} 安排常驻餐品 {away_cook} x{batch_size}") + logger.info(f"[岛屿-白熊饮品] 已为岗位 {post_id} 安排常驻餐品 {self._item_cn(away_cook)} x{batch_size}") else: - logger.info(f"[岛屿-白熊饮品] 生产 {away_cook} 的材料不足,跳过岗位 {post_id}") + logger.info(f"[岛屿-白熊饮品] 生产 {self._item_cn(away_cook)} 的材料不足,跳过岗位 {post_id}") break elif idle_posts_after_basic: logger.info(f"[岛屿-白熊饮品] 有 {len(idle_posts_after_basic)} 个空闲岗位,但未设置常驻餐品,保持空闲") @@ -553,12 +553,12 @@ def deduct_materials(self, product, number): # 优先扣除蜂蜜 if self.fresh_honey >= honey_needed: self.fresh_honey -= honey_needed - logger.info(f"[岛屿-白熊饮品] 扣除蜂蜜:fresh_honey -{honey_needed} (用于制作sunny_honey)") + logger.info(f"[岛屿-白熊饮品] 扣除蜂蜜:{self._item_cn('fresh_honey')} -{honey_needed} (用于制作{self._item_cn('sunny_honey')})") else: # 蜂蜜不足,扣除honey_lemon remaining_needed = honey_needed - self.fresh_honey if self.fresh_honey > 0: - logger.info(f"[岛屿-白熊饮品] 扣除蜂蜜:fresh_honey -{self.fresh_honey} (用于制作sunny_honey)") + logger.info(f"[岛屿-白熊饮品] 扣除蜂蜜:{self._item_cn('fresh_honey')} -{self.fresh_honey} (用于制作{self._item_cn('sunny_honey')})") self.fresh_honey = 0 # 扣除honey_lemon库存 @@ -566,7 +566,7 @@ def deduct_materials(self, product, number): available_honey_lemon = min(remaining_needed, self.warehouse_counts['honey_lemon']) if available_honey_lemon > 0: self.warehouse_counts['honey_lemon'] -= available_honey_lemon - logger.info(f"[岛屿-白熊饮品] 扣除honey_lemon:honey_lemon -{available_honey_lemon} (用于制作sunny_honey)") + logger.info(f"[岛屿-白熊饮品] 扣除{self._item_cn('honey_lemon')}:{self._item_cn('honey_lemon')} -{available_honey_lemon} (用于制作{self._item_cn('sunny_honey')})") def apply_special_material_constraints(self, requirements): """覆盖:根据蜂蜜库存调整需求""" @@ -578,7 +578,7 @@ def apply_special_material_constraints(self, requirements): max_honey_lemon = min(honey_lemon_needed, self.fresh_honey) if max_honey_lemon < honey_lemon_needed: - logger.info(f"[岛屿-白熊饮品] 蜂蜜不足:honey_lemon需求从{honey_lemon_needed}调整为{max_honey_lemon}") + logger.info(f"[岛屿-白熊饮品] 蜂蜜不足:{self._item_cn('honey_lemon')}需求从{honey_lemon_needed}调整为{max_honey_lemon}") result['honey_lemon'] = max_honey_lemon @@ -598,7 +598,7 @@ def apply_special_material_constraints(self, requirements): max_sunny_honey = min(sunny_honey_needed, honey_remaining) if max_sunny_honey < sunny_honey_needed: - logger.info(f"[岛屿-白熊饮品] 蜂蜜不足:sunny_honey需求从{sunny_honey_needed}调整为{max_sunny_honey}") + logger.info(f"[岛屿-白熊饮品] 蜂蜜不足:{self._item_cn('sunny_honey')}需求从{sunny_honey_needed}调整为{max_sunny_honey}") result['sunny_honey'] = max_sunny_honey diff --git a/module/island_select_character/assets.py b/module/island_select_character/assets.py index 70c0a2116..ce641f2e5 100644 --- a/module/island_select_character/assets.py +++ b/module/island_select_character/assets.py @@ -18,6 +18,7 @@ TEMPLATE_CHARACTER_WORKING = Template(file={'cn': './assets/cn/island_select_character/TEMPLATE_CHARACTER_WORKING.png', 'en': './assets/cn/island_select_character/TEMPLATE_CHARACTER_WORKING.png', 'jp': './assets/cn/island_select_character/TEMPLATE_CHARACTER_WORKING.png', 'tw': './assets/cn/island_select_character/TEMPLATE_CHARACTER_WORKING.png'}) TEMPLATE_CHEN_HAI = Template(file={'cn': './assets/cn/island_select_character/TEMPLATE_CHEN_HAI.png', 'en': './assets/cn/island_select_character/TEMPLATE_CHEN_HAI.png', 'jp': './assets/cn/island_select_character/TEMPLATE_CHEN_HAI.png', 'tw': './assets/cn/island_select_character/TEMPLATE_CHEN_HAI.png'}) TEMPLATE_CHESHIRE = Template(file={'cn': './assets/cn/island_select_character/TEMPLATE_CHESHIRE.png', 'en': './assets/cn/island_select_character/TEMPLATE_CHESHIRE.png', 'jp': './assets/cn/island_select_character/TEMPLATE_CHESHIRE.png', 'tw': './assets/cn/island_select_character/TEMPLATE_CHESHIRE.png'}) +TEMPLATE_DAVINCI = Template(file={'cn': './assets/cn/island_select_character/TEMPLATE_DAVINCI.png', 'en': './assets/cn/island_select_character/TEMPLATE_DAVINCI.png', 'jp': './assets/cn/island_select_character/TEMPLATE_DAVINCI.png', 'tw': './assets/cn/island_select_character/TEMPLATE_DAVINCI.png'}) TEMPLATE_EUGEN = Template(file={'cn': './assets/cn/island_select_character/TEMPLATE_EUGEN.png', 'en': './assets/cn/island_select_character/TEMPLATE_EUGEN.png', 'jp': './assets/cn/island_select_character/TEMPLATE_EUGEN.png', 'tw': './assets/cn/island_select_character/TEMPLATE_EUGEN.png'}) TEMPLATE_EXPLORER = Template(file={'cn': './assets/cn/island_select_character/TEMPLATE_EXPLORER.png', 'en': './assets/cn/island_select_character/TEMPLATE_EXPLORER.png', 'jp': './assets/cn/island_select_character/TEMPLATE_EXPLORER.png', 'tw': './assets/cn/island_select_character/TEMPLATE_EXPLORER.png'}) TEMPLATE_FEI_YUN = Template(file={'cn': './assets/cn/island_select_character/TEMPLATE_FEI_YUN.png', 'en': './assets/cn/island_select_character/TEMPLATE_FEI_YUN.png', 'jp': './assets/cn/island_select_character/TEMPLATE_FEI_YUN.png', 'tw': './assets/cn/island_select_character/TEMPLATE_FEI_YUN.png'}) From 6cd6ca7dca6871d30b73591cb027912bd2cb85e9 Mon Sep 17 00:00:00 2001 From: quankong1551 <96553536+quankong1551@users.noreply.github.com> Date: Sun, 16 Aug 2026 00:22:59 +0800 Subject: [PATCH 2/6] =?UTF-8?q?fix(island):=20=E4=BF=AE=E6=AD=A3=E7=99=BD?= =?UTF-8?q?=E7=86=8A=E9=A5=AE=E5=93=81=E8=9C=82=E8=9C=9C=E5=A5=97=E9=A4=90?= =?UTF-8?q?=E6=8E=92=E4=BA=A7=E4=B8=8E=E5=9F=BA=E7=B1=BB=E5=8E=9F=E6=96=99?= =?UTF-8?q?=E8=B4=A6=E7=9B=AE=20(#773)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 阳光蜜水按真实配方(草莓蜜沁+蜂蜜柠檬水)统一排产、需求、扣账口径,蜂蜜仅作为蜂蜜柠檬水原料并同步扣减 - 基类排产循环改用当前仓库账重建库存,同轮套餐消耗的原料不再误判为可用,原料槽位目标不再漏排 - 季节高优先级饮品改为带超时循环,移除循环内固定等待,超时抛异常 - 迎春花茶、西瓜汁改用各自专属图标,不再复用苹果汁 - 更新白熊饮品帮助文案,蜂蜜制品支持自动生产 --- module/config/i18n/en-US.json | 2 +- module/config/i18n/ja-JP.json | 2 +- module/config/i18n/zh-CN.json | 2 +- module/config/i18n/zh-TW.json | 2 +- module/island/island_shop_base.py | 32 ++++--- module/island/island_teahouse.py | 141 ++++++++++++------------------ 6 files changed, 79 insertions(+), 102 deletions(-) diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 4da6f0d99..1a7dcb5da 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -4091,7 +4091,7 @@ "IslandTeahouse": { "_info": { "name": "Polar Bear Drinks", - "help": "Meals are produced sequentially from 1 to 8. The production target is the Meal X quantity option. The next item is only executed after the previous one is fully satisfied. Later items will not affect the completion of earlier items during runtime.\nPlease craft honey products manually.\nSpring Flower Tea and Fresh Pineapple Juice in meals will automatically switch to corresponding seasonal meals based on the current season." + "help": "Meals are produced sequentially from 1 to 8. The production target is the Meal X quantity option. The next item is only executed after the previous one is fully satisfied. Later items will not affect the completion of earlier items during runtime.\nHoney drinks support automatic production; make sure honey stock is sufficient.\nSpring Flower Tea and Fresh Pineapple Juice in meals will automatically switch to corresponding seasonal meals based on the current season." }, "PostNumber": { "name": "Assign X Bartender Positions", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index fcb890076..4c6294adf 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -4091,7 +4091,7 @@ "IslandTeahouse": { "_info": { "name": "白熊ドリンク", - "help": "メニューは1~8の順に生産されます。生産目標はメニューX数量オプションで、前の項目が完全に満たされてから次の項目が実行されます。後続の項目は実行時にそれ以前の項目の達成に影響しません。\nハニー製品は手動で作成してください。\nメニューの春花茶とフレッシュパイナップルジュースは現在の季節に応じて対応する季節メニューに自動切替されます。" + "help": "メニューは1~8の順に生産されます。生産目標はメニューX数量オプションで、前の項目が完全に満たされてから次の項目が実行されます。後続の項目は実行時にそれ以前の項目の達成に影響しません。\nハニー製品は自動生産に対応しています。蜂蜜の在庫が十分であることを確認してください。\nメニューの春花茶とフレッシュパイナップルジュースは現在の季節に応じて対応する季節メニューに自動切替されます。" }, "PostNumber": { "name": "バーテンダーをX人配置", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 3c18f44cb..575587bb8 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -4091,7 +4091,7 @@ "IslandTeahouse": { "_info": { "name": "白熊饮品", - "help": "餐品会按从1~8的顺序依次生产,生产目标为餐品X数量选项,完全满足前一项后才会执行下一项,后一项在运行时不会影响之前几项任务的达成\n请手动制作蜂蜜制品\n餐品中的迎春花茶和鲜榨菠萝汁会根据当前季节自动切换为对应季节餐品" + "help": "餐品会按从1~8的顺序依次生产,生产目标为餐品X数量选项,完全满足前一项后才会执行下一项,后一项在运行时不会影响之前几项任务的达成\n蜂蜜制品支持自动生产,需保证蜂蜜库存充足\n餐品中的迎春花茶和鲜榨菠萝汁会根据当前季节自动切换为对应季节餐品" }, "PostNumber": { "name": "安排 X 个调饮师岗位", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 4877bc34e..ad18bff44 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -4091,7 +4091,7 @@ "IslandTeahouse": { "_info": { "name": "白熊飲品", - "help": "餐品會按從1~8的順序依次生產,生產目標為餐品X數量選項,完全滿足前一項後才會執行下一項,後一項在運行時不會影響之前幾項任務的達成\n請手動製作蜂蜜製品\n餐品中的迎春花茶和鮮榨鳳梨汁會根據當前季節自動切換為對應季節餐品" + "help": "餐品會按從1~8的順序依次生產,生產目標為餐品X數量選項,完全滿足前一項後才會執行下一項,後一項在運行時不會影響之前幾項任務的達成\n蜂蜜製品支援自動生產,需保證蜂蜜庫存充足\n餐品中的迎春花茶和鮮榨鳳梨汁會根據當前季節自動切換為對應季節餐品" }, "PostNumber": { "name": "安排 X 個調飲師崗位", diff --git a/module/island/island_shop_base.py b/module/island/island_shop_base.py index 6f9360f75..1a2d496f2 100644 --- a/module/island/island_shop_base.py +++ b/module/island/island_shop_base.py @@ -368,6 +368,22 @@ def _schedule_and_track(self, produced_pass): if produced_qty > 0: produced_pass[name] = produced_pass.get(name, 0) + produced_qty + def _rebuild_current_totals(self, produced_pass): + """重建当前总库存:仓库 + 在制品 + 本轮已下单未收获。 + + 必须使用"当前"仓库账(套餐下单时 deduct_materials 已实时扣减原料), + 而不是开跑前的库存快照,否则同一轮内被套餐消耗的原料 + 会在下一轮被误判为仍然可用,导致原料槽位目标漏排。 + """ + totals = {} + all_product_names = set(name for name, _ in self.post_products) + for item in all_product_names | set(self.post_check_meal.keys()) | set( + self.warehouse_counts.keys()): + totals[item] = self.post_check_meal.get(item, 0) + self.warehouse_counts.get(item, 0) + for name, qty in produced_pass.items(): + totals[name] = totals.get(name, 0) + qty + return totals + def _compute_base_demands(self, check_materials=False, force_skip=None): """计算基础需求:严格按槽位顺序处理,找到第一个有缺口的槽位 即停止,后续槽位本轮不处理。 @@ -454,11 +470,7 @@ def run(self): self.post_manage_swipe(self.post_manage_swipe_count) # 计算当前总库存 - self.current_totals = {} - all_product_names = set(name for name, _ in self.post_products) - for item in all_product_names | set(self.post_check_meal.keys()) | set( - self.warehouse_counts.keys()): - self.current_totals[item] = self.post_check_meal.get(item, 0) + self.warehouse_counts.get(item, 0) + self.current_totals = self._rebuild_current_totals({}) # ============ 调试信息 ============ logger.info(f"[岛屿] === 调试信息 ===") @@ -468,8 +480,6 @@ def run(self): logger.info(f"[岛屿] 基础需求配置(共{len(self.post_products)}个槽位): {self._products_cn(self.post_products)}") logger.info("===============") - # 保存原始库存,retry 时恢复 - _orig_totals = dict(self.current_totals) self._compute_base_demands() logger.info(f"[岛屿] 待完成备餐: {self._inv_cn(self.to_post_products)}") @@ -491,9 +501,7 @@ def run(self): if _loop_count > self._MAX_FILL_LOOP: logger.warning(f"[岛屿] [循环] 已达最大迭代次数 {self._MAX_FILL_LOOP},强制退出") break - self.current_totals = dict(_orig_totals) - for name, qty in _produced_pass.items(): - self.current_totals[name] = self.current_totals.get(name, 0) + qty + self.current_totals = self._rebuild_current_totals(_produced_pass) self._compute_base_demands(force_skip=_force_skip_run) if not self.to_post_products: @@ -510,9 +518,7 @@ def run(self): # 先切严格模式(绕"原料真没有"的坎儿) logger.info("[岛屿] [循环] 当前缺口排产失败,切换严格模式扫描") self.to_post_products = {} - self.current_totals = dict(_orig_totals) - for name, qty in _produced_pass.items(): - self.current_totals[name] = self.current_totals.get(name, 0) + qty + self.current_totals = self._rebuild_current_totals(_produced_pass) self._compute_base_demands(check_materials=True) if not self.to_post_products: break diff --git a/module/island/island_teahouse.py b/module/island/island_teahouse.py index c982b89eb..8140f1c1f 100644 --- a/module/island/island_teahouse.py +++ b/module/island/island_teahouse.py @@ -13,6 +13,7 @@ from module.config.time_source import now as current_time from module.logger import logger from module.base.button import Button +from module.exception import GameStuckError from module.island.island_season import SEASONAL_ITEMS from module.ocr.ocr import Duration, Digit @@ -36,7 +37,7 @@ SEASONAL_DRINK_CONFIG = { 'spring_flower_tea': { 'name': 'spring_flower_tea', 'cn_name': '迎春花茶', - 'template': TEMPLATE_APPLE_JUICE, 'post_action': POST_APPLE_JUICE, + 'template': TEMPLATE_WINTER_JASMINE_TEA, 'post_action': POST_WINTER_JASMINE_TEA, 'selection': FIXED_SELECT_SPRING_FLOWER_TEA, 'selection_check': FIXED_SELECT_SPRING_FLOWER_TEA, }, 'carrot_pear_juice': { @@ -86,13 +87,13 @@ def __init__(self, config, device=None, task=None): if 'spring_flower_tea' in seasonal_items: self.seasonal_high_priority_drink = { 'name': 'spring_flower_tea', 'cn_name': '迎春花茶', - 'template': TEMPLATE_APPLE_JUICE, 'post_action': POST_APPLE_JUICE, + 'template': TEMPLATE_WINTER_JASMINE_TEA, 'post_action': POST_WINTER_JASMINE_TEA, 'selection': FIXED_SELECT_SPRING_FLOWER_TEA, 'selection_check': FIXED_SELECT_SPRING_FLOWER_TEA, } elif 'watermelon_juice' in seasonal_items: self.seasonal_high_priority_drink = { 'name': 'watermelon_juice', 'cn_name': '西瓜汁', - 'template': TEMPLATE_APPLE_JUICE, 'post_action': POST_APPLE_JUICE, + 'template': TEMPLATE_WATERMELON_JUICE, 'post_action': POST_WATERMELON_JUICE, 'selection': FIXED_SELECT_SPRING_FLOWER_TEA, 'selection_check': FIXED_SELECT_SPRING_FLOWER_TEA, } elif 'chrysanthemum_tea' in seasonal_items: @@ -273,25 +274,24 @@ def get_warehouse_counts(self): return self.warehouse_counts def check_special_materials(self, product, batch_size): - """覆盖:检查特殊材料(蜂蜜)限制""" + """覆盖:检查特殊材料(蜂蜜)限制。 + + 蜂蜜只用于制作蜂蜜柠檬水(每 1 个)与草莓蜂蜜冰沙(每 4 个), + 不直接参与阳光蜜水等套餐;套餐原料由父类按套餐组成检查。 + """ if batch_size <= 0: return 0 - # sunny_honey需要honey_lemon或蜂蜜 - if product == 'sunny_honey': - # 计算可用原材料:蜂蜜 + honey_lemon库存 - honey_available = self.fresh_honey - honey_lemon_available = self.warehouse_counts.get('honey_lemon', 0) - total_available = honey_available + honey_lemon_available - - max_by_material = min(batch_size, total_available) - return max_by_material - - # honey_lemon需要蜂蜜 + # 蜂蜜柠檬水需要 1 个蜂蜜 if product == 'honey_lemon': max_by_honey = min(batch_size, self.fresh_honey) return max_by_honey + # 草莓蜂蜜冰沙需要 4 个蜂蜜 + if product == 'strawberry_honey': + max_by_honey = min(batch_size, self.fresh_honey // 4) + return max_by_honey + return batch_size def post_produce(self, post_id, product, number, time_var_name, product2=None): @@ -309,8 +309,7 @@ def post_produce(self, post_id, product, number, time_var_name, product2=None): self.device.sleep(0.5) time_work = Duration(ISLAND_WORKING_TIME) # 进入商品选择界面(处理选人 + 选商品) - while 1: - self.device.screenshot() + for _ in self.loop(timeout=120, skip_first=False): if self.appear(ISLAND_SELECT_CHARACTER_CHECK, offset=1): # 选择厨师 if self.select_character(character_list=self.chef_config): @@ -325,16 +324,15 @@ def post_produce(self, post_id, product, number, time_var_name, product2=None): if self.appear(ISLAND_SELECT_PRODUCT_CHECK, offset=1): # 在商品列表界面,点击固定位置,不检测图标 self.device.click(self.seasonal_high_priority_drink['selection']) - self.device.sleep(0.5) break # 点击进入选择 if self.appear_then_click(ISLAND_POST_SELECT, offset=1): - self.device.sleep(0.3) continue - self.device.sleep(0.3) + else: + raise GameStuckError(f"{self._item_cn(product)}生产派遣流程超时") # 检查材料并下单 if self.produce_check(): - logger.warning(f"[岛屿-白熊饮品] 原料不足,无法生产 {self._item_cn('spring_flower_tea')}") + logger.warning(f"[岛屿-白熊饮品] 原料不足,无法生产 {self._item_cn(product)}") self.device.click(ISLAND_BACK) self.device.sleep(0.5) return 0 @@ -396,11 +394,7 @@ def run(self): self.post_manage_swipe(self.post_manage_swipe_count) # 计算当前总库存 - self.current_totals = {} - all_product_names = set(name for name, _ in self.post_products) - for item in all_product_names | set(self.post_check_meal.keys()) | set( - self.warehouse_counts.keys()): - self.current_totals[item] = self.post_check_meal.get(item, 0) + self.warehouse_counts.get(item, 0) + self.current_totals = self._rebuild_current_totals({}) # ============ 调试信息 ============ logger.info(f"[岛屿-白熊饮品] === 调试信息 ===") @@ -410,8 +404,6 @@ def run(self): logger.info(f"[岛屿-白熊饮品] 基础需求配置(共{len(self.post_products)}个槽位): {self._products_cn(self.post_products)}") logger.info("===============") - # 保存原始库存,retry 时恢复 - _orig_totals = dict(self.current_totals) self._compute_base_demands() logger.info(f"[岛屿-白熊饮品] 待完成备餐: {self._inv_cn(self.to_post_products)}") @@ -455,9 +447,7 @@ def run(self): if _loop_count > self._MAX_FILL_LOOP: logger.warning(f"[岛屿-白熊饮品] [循环] 已达最大迭代次数 {self._MAX_FILL_LOOP},强制退出") break - self.current_totals = dict(_orig_totals) - for name, qty in _produced_pass.items(): - self.current_totals[name] = self.current_totals.get(name, 0) + qty + self.current_totals = self._rebuild_current_totals(_produced_pass) self._compute_base_demands(force_skip=_force_skip_run) if not self.to_post_products: @@ -474,9 +464,7 @@ def run(self): logger.info("[岛屿-白熊饮品] [循环] 当前缺口排产失败,切换严格模式扫描") self.to_post_products = {} - self.current_totals = dict(_orig_totals) - for name, qty in _produced_pass.items(): - self.current_totals[name] = self.current_totals.get(name, 0) + qty + self.current_totals = self._rebuild_current_totals(_produced_pass) self._compute_base_demands(check_materials=True) if not self.to_post_products: break @@ -538,69 +526,52 @@ def run(self): raise GameBugError("检测到岛屿ERROR1,需要重启") def deduct_materials(self, product, number): - """覆盖:扣除前置材料,包括蜂蜜和套餐原材料""" + """覆盖:扣除前置材料(蜂蜜柠檬水与草莓蜂蜜冰沙消耗蜂蜜)""" # 先调用父类方法扣除套餐原材料 super().deduct_materials(product, number) - # sunny_honey套餐需要扣除原材料 - if product == 'sunny_honey': - # sunny_honey需要honey_lemon和strawberry_lemon各1个 - # honey_lemon可以通过蜂蜜制作,所以优先扣除蜂蜜,不够再扣除honey_lemon - - honey_needed = number - honey_lemon_needed = number - - # 优先扣除蜂蜜 - if self.fresh_honey >= honey_needed: - self.fresh_honey -= honey_needed - logger.info(f"[岛屿-白熊饮品] 扣除蜂蜜:{self._item_cn('fresh_honey')} -{honey_needed} (用于制作{self._item_cn('sunny_honey')})") - else: - # 蜂蜜不足,扣除honey_lemon - remaining_needed = honey_needed - self.fresh_honey - if self.fresh_honey > 0: - logger.info(f"[岛屿-白熊饮品] 扣除蜂蜜:{self._item_cn('fresh_honey')} -{self.fresh_honey} (用于制作{self._item_cn('sunny_honey')})") - self.fresh_honey = 0 - - # 扣除honey_lemon库存 - if 'honey_lemon' in self.warehouse_counts: - available_honey_lemon = min(remaining_needed, self.warehouse_counts['honey_lemon']) - if available_honey_lemon > 0: - self.warehouse_counts['honey_lemon'] -= available_honey_lemon - logger.info(f"[岛屿-白熊饮品] 扣除{self._item_cn('honey_lemon')}:{self._item_cn('honey_lemon')} -{available_honey_lemon} (用于制作{self._item_cn('sunny_honey')})") + # 蜂蜜柠檬水需要 1 个蜂蜜 + if product == 'honey_lemon': + deducted = min(number, self.fresh_honey) + self.fresh_honey = max(0, self.fresh_honey - number) + if 'fresh_honey' in self.warehouse_counts: + self.warehouse_counts['fresh_honey'] = self.fresh_honey + logger.info(f"[岛屿-白熊饮品] 扣除蜂蜜:{self._item_cn('fresh_honey')} -{deducted} (用于制作{self._item_cn('honey_lemon')})") + + # 草莓蜂蜜冰沙需要 4 个蜂蜜 + if product == 'strawberry_honey': + deducted = min(number * 4, self.fresh_honey) + self.fresh_honey = max(0, self.fresh_honey - number * 4) + if 'fresh_honey' in self.warehouse_counts: + self.warehouse_counts['fresh_honey'] = self.fresh_honey + logger.info(f"[岛屿-白熊饮品] 扣除蜂蜜:{self._item_cn('fresh_honey')} -{deducted} (用于制作{self._item_cn('strawberry_honey')})") def apply_special_material_constraints(self, requirements): - """覆盖:根据蜂蜜库存调整需求""" + """覆盖:根据蜂蜜库存调整需求。 + + 蜂蜜只用于蜂蜜柠檬水(每 1 个)与草莓蜂蜜冰沙(每 4 个); + 两者按顺序共享蜂蜜:先满足蜂蜜柠檬水,剩余蜂蜜再分配给草莓蜂蜜冰沙。 + 阳光蜜水的原料(草莓蜜沁 + 蜂蜜柠檬水)由基类套餐需求分解处理。 + """ result = requirements.copy() + remaining_honey = self.fresh_honey - # 首先处理honey_lemon的需求 + # 处理蜂蜜柠檬水的需求(每 1 个蜂蜜) if 'honey_lemon' in result and result['honey_lemon'] > 0: honey_lemon_needed = result['honey_lemon'] - max_honey_lemon = min(honey_lemon_needed, self.fresh_honey) - + max_honey_lemon = min(honey_lemon_needed, remaining_honey) if max_honey_lemon < honey_lemon_needed: logger.info(f"[岛屿-白熊饮品] 蜂蜜不足:{self._item_cn('honey_lemon')}需求从{honey_lemon_needed}调整为{max_honey_lemon}") - result['honey_lemon'] = max_honey_lemon - - # 处理sunny_honey的需求 - if 'sunny_honey' in result and result['sunny_honey'] > 0: - sunny_honey_needed = result['sunny_honey'] - - # sunny_honey需要honey_lemon,每个需要1个蜂蜜 - # 但honey_lemon的需求可能已经在上面调整过 - honey_lemon_for_sunny = sunny_honey_needed - - # 计算可用于sunny_honey的蜂蜜 - # 减去已经分配给honey_lemon的蜂蜜 - honey_allocated = result.get('honey_lemon', 0) - honey_remaining = max(0, self.fresh_honey - honey_allocated) - - max_sunny_honey = min(sunny_honey_needed, honey_remaining) - - if max_sunny_honey < sunny_honey_needed: - logger.info(f"[岛屿-白熊饮品] 蜂蜜不足:{self._item_cn('sunny_honey')}需求从{sunny_honey_needed}调整为{max_sunny_honey}") - - result['sunny_honey'] = max_sunny_honey + remaining_honey -= max_honey_lemon + + # 处理草莓蜂蜜冰沙的需求(每 4 个蜂蜜) + if 'strawberry_honey' in result and result['strawberry_honey'] > 0: + strawberry_honey_needed = result['strawberry_honey'] + max_strawberry_honey = min(strawberry_honey_needed, remaining_honey // 4) + if max_strawberry_honey < strawberry_honey_needed: + logger.info(f"[岛屿-白熊饮品] 蜂蜜不足:{self._item_cn('strawberry_honey')}需求从{strawberry_honey_needed}调整为{max_strawberry_honey}") + result['strawberry_honey'] = max_strawberry_honey return result From c61581ee2565524097bcfac2e4fe3cff77c4cbb8 Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 13 Aug 2026 18:41:00 +0800 Subject: [PATCH 3/6] Add: Event entrance of Depths of the Astrarium (event_20260813_cn) --- campaign/Readme.md | 5 +-- module/config/argument/args.json | 52 ++++++++++++++------------------ module/config/i18n/en-US.json | 2 +- module/config/i18n/ja-JP.json | 2 +- module/config/i18n/zh-CN.json | 2 +- module/config/i18n/zh-MIAO.json | 2 +- module/config/i18n/zh-TW.json | 4 +-- 7 files changed, 32 insertions(+), 37 deletions(-) diff --git a/campaign/Readme.md b/campaign/Readme.md index 0124d60d8..c4700378e 100644 --- a/campaign/Readme.md +++ b/campaign/Readme.md @@ -306,5 +306,6 @@ To add a new event, add a new row in here, and run `python -m module.config.conf | 20260625 | event 20260625 cn | Miracle by Midnight | 美梦巡演奇妙夜 | Miracle by Midnight | 幻夢のカヴァルカード | - | | 20260703 | coalition 20230323 | Frostfall | - | - | - | 極地風暴 | | 20260709 | event 20260625 cn | Miracle by Midnight | - | - | - | 美夢巡演奇秒夜 | -| 20260723 | coalition 20260723 | Authentic Horror Story | 怪谈纪实:逃离白夜山庄 | Authentic Horror Story | 怪談実録 | - | -| 20260813 | event 20260813 cn | 沉溺于星光之城 | 沉溺于星光之城 | - | - | - | +| 20260723 | coalition 20260723 | Authentic Horror Story | 怪谈纪实 | Authentic Horror Story | 怪談実録 | - | +| 20260806 | coalition 20260723 | Authentic Horror Story | - | - | - | 怪談紀實 | +| 20260813 | event 20260813 cn | Depths of the Astrarium | 沉溺于星光之城 | Depths of the Astrarium | 星の導く街 | - | diff --git a/module/config/argument/args.json b/module/config/argument/args.json index d8f08a3eb..01e5e1558 100644 --- a/module/config/argument/args.json +++ b/module/config/argument/args.json @@ -2406,10 +2406,10 @@ "event_20260813_cn" ], "option_en": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_jp": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_tw": [ "event_20260625_cn" @@ -2926,10 +2926,10 @@ "event_20260813_cn" ], "option_en": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_jp": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_tw": [ "event_20260625_cn" @@ -3878,10 +3878,10 @@ "event_20260813_cn" ], "option_en": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_jp": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_tw": [ "event_20260625_cn" @@ -4321,10 +4321,10 @@ "event_20260813_cn" ], "option_en": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_jp": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_tw": [ "event_20260625_cn" @@ -4764,10 +4764,10 @@ "event_20260813_cn" ], "option_en": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_jp": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_tw": [ "event_20260625_cn" @@ -6112,7 +6112,6 @@ "type": "state", "value": "campaign_main", "option": [ - "coalition_20230323", "coalition_20260723" ], "option_cn": [ @@ -6125,10 +6124,9 @@ "coalition_20260723" ], "option_tw": [ - "coalition_20230323" + "coalition_20260723" ], "option_bold": [ - "coalition_20230323", "coalition_20260723" ] }, @@ -6413,7 +6411,6 @@ "type": "state", "value": "campaign_main", "option": [ - "coalition_20230323", "coalition_20260723" ], "option_cn": [ @@ -6426,10 +6423,9 @@ "coalition_20260723" ], "option_tw": [ - "coalition_20230323" + "coalition_20260723" ], "option_bold": [ - "coalition_20230323", "coalition_20260723" ] }, @@ -7617,10 +7613,10 @@ "event_20260813_cn" ], "option_en": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_jp": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_tw": [ "event_20260625_cn" @@ -8077,10 +8073,10 @@ "event_20260813_cn" ], "option_en": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_jp": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_tw": [ "event_20260625_cn" @@ -8537,10 +8533,10 @@ "event_20260813_cn" ], "option_en": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_jp": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_tw": [ "event_20260625_cn" @@ -8997,10 +8993,10 @@ "event_20260813_cn" ], "option_en": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_jp": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_tw": [ "event_20260625_cn" @@ -9447,10 +9443,10 @@ "event_20260813_cn" ], "option_en": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_jp": [ - "event_20260625_cn" + "event_20260813_cn" ], "option_tw": [ "event_20260625_cn" @@ -10167,7 +10163,6 @@ "type": "select", "value": "campaign_main", "option": [ - "coalition_20230323", "coalition_20260723" ], "option_cn": [ @@ -10180,10 +10175,9 @@ "coalition_20260723" ], "option_tw": [ - "coalition_20230323" + "coalition_20260723" ], "option_bold": [ - "coalition_20230323", "coalition_20260723" ] }, diff --git a/module/config/i18n/en-US.json b/module/config/i18n/en-US.json index 4da6f0d99..dc2a2a284 100644 --- a/module/config/i18n/en-US.json +++ b/module/config/i18n/en-US.json @@ -1181,7 +1181,7 @@ "event_20260417_cn": "Vacation Lane – Beachside Brilliance", "event_20260520_cn": "Alliance Before the Hagiobull", "event_20260625_cn": "Miracle by Midnight", - "event_20260813_cn": "沉溺于星光之城", + "event_20260813_cn": "Depths of the Astrarium", "raid_20200624": "Air Raid Drills with Essex Rerun", "raid_20210708": "Cross Wave rerun", "raid_20220127": "Mystery Investigation", diff --git a/module/config/i18n/ja-JP.json b/module/config/i18n/ja-JP.json index fcb890076..5dab2e8c6 100644 --- a/module/config/i18n/ja-JP.json +++ b/module/config/i18n/ja-JP.json @@ -1181,7 +1181,7 @@ "event_20260417_cn": "バケーションレーン・きらめく砂浜", "event_20260520_cn": "聖印前の同盟", "event_20260625_cn": "幻夢のカヴァルカード", - "event_20260813_cn": "沉溺于星光之城", + "event_20260813_cn": "星の導く街", "raid_20200624": "特別演習超空強襲波(復刻)", "raid_20210708": "交錯する新たな波 (復刻)", "raid_20220127": "秘密事件調査", diff --git a/module/config/i18n/zh-CN.json b/module/config/i18n/zh-CN.json index 3c18f44cb..b7d48cbbd 100644 --- a/module/config/i18n/zh-CN.json +++ b/module/config/i18n/zh-CN.json @@ -1095,7 +1095,7 @@ "coalition_20250626": "迷彩都市的寻踪者", "coalition_20251120": "DATE A LANE", "coalition_20260122": "光影风尚-拍摄进行时", - "coalition_20260723": "怪谈纪实:逃离白夜山庄", + "coalition_20260723": "怪谈纪实", "event_20200227_cn": "北境序曲", "event_20200312_cn": "复刻斯图尔特的硝烟", "event_20200326_cn": "微层混合", diff --git a/module/config/i18n/zh-MIAO.json b/module/config/i18n/zh-MIAO.json index 54065c8cb..929fc9c72 100644 --- a/module/config/i18n/zh-MIAO.json +++ b/module/config/i18n/zh-MIAO.json @@ -1181,7 +1181,7 @@ "event_20260417_cn": "Vacation Lane – Beachside Brilliance", "event_20260520_cn": "Alliance Before the Hagiobull", "event_20260625_cn": "Miracle by Midnight", - "event_20260813_cn": "沉溺于星光之城", + "event_20260813_cn": "Depths of the Astrarium", "raid_20200624": "Air Raid Drills with Essex Rerun", "raid_20210708": "Cross Wave rerun", "raid_20220127": "Mystery Investigation", diff --git a/module/config/i18n/zh-TW.json b/module/config/i18n/zh-TW.json index 4877bc34e..26b9afc91 100644 --- a/module/config/i18n/zh-TW.json +++ b/module/config/i18n/zh-TW.json @@ -1095,7 +1095,7 @@ "coalition_20250626": "迷彩都市的尋蹤者", "coalition_20251120": "DATE A LANE", "coalition_20260122": "光影風尚-拍攝進行時", - "coalition_20260723": "Authentic Horror Story", + "coalition_20260723": "怪談紀實", "event_20200227_cn": "Northern Overture", "event_20200312_cn": "斯圖爾特的硝煙", "event_20200326_cn": "Microlayer Medley", @@ -1181,7 +1181,7 @@ "event_20260417_cn": "假日航線閃耀海濱", "event_20260520_cn": "聖印前的同盟", "event_20260625_cn": "美夢巡演奇秒夜", - "event_20260813_cn": "沉溺于星光之城", + "event_20260813_cn": "Depths of the Astrarium", "raid_20200624": "特別演習埃塞克斯級(復刻)", "raid_20210708": "復刻穿越彼方的水線", "raid_20220127": "演習神秘事件調查", From a2d5bce7c22f2b656f2a31e41cab5fc65184795b Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 13 Aug 2026 19:18:47 +0800 Subject: [PATCH 4/6] Add: chapter AC --- campaign/event_20260813_cn/a1.py | 22 +++++++++++++++++++--- campaign/event_20260813_cn/a2.py | 7 +------ campaign/event_20260813_cn/a3.py | 13 ++++++------- campaign/event_20260813_cn/c1.py | 22 +++++++++++++++++++--- campaign/event_20260813_cn/c2.py | 7 +------ campaign/event_20260813_cn/c3.py | 13 ++++++------- 6 files changed, 52 insertions(+), 32 deletions(-) diff --git a/campaign/event_20260813_cn/a1.py b/campaign/event_20260813_cn/a1.py index a99d6477f..96b97f890 100644 --- a/campaign/event_20260813_cn/a1.py +++ b/campaign/event_20260813_cn/a1.py @@ -44,7 +44,7 @@ class Config: # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['emotion_qz'] + MAP_SIREN_TEMPLATE = [] MOVABLE_ENEMY_TURN = (2,) MAP_HAS_SIREN = True MAP_HAS_MOVABLE_ENEMY = True @@ -52,12 +52,28 @@ class Config: MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + MAP_CHAPTER_SWITCH_20241219 = True STAGE_ENTRANCE = ['half', '20240725'] MAP_HAS_MODE_SWITCH = True STAGE_INCREASE_AB = True - MAP_WALK_USE_CURRENT_FLEET = True - # ===== End of generated config ===== + MAP_SIREN_HAS_BOSS_ICON_SMALL = True + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 17), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 17, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + MAP_SWIPE_MULTIPLY = (1.207, 1.229) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.167, 1.189) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.133, 1.153) class Campaign(CampaignBase): diff --git a/campaign/event_20260813_cn/a2.py b/campaign/event_20260813_cn/a2.py index d9b7fbea8..93031e569 100644 --- a/campaign/event_20260813_cn/a2.py +++ b/campaign/event_20260813_cn/a2.py @@ -45,7 +45,7 @@ class Config(ConfigBase): # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['emotion_qz'] + MAP_SIREN_TEMPLATE = [] MOVABLE_ENEMY_TURN = (2,) MAP_HAS_SIREN = True MAP_HAS_MOVABLE_ENEMY = True @@ -53,11 +53,6 @@ class Config(ConfigBase): MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False - MAP_CHAPTER_SWITCH_20241219 = True - STAGE_ENTRANCE = ['half', '20240725'] - MAP_HAS_MODE_SWITCH = True - STAGE_INCREASE_AB = True - MAP_WALK_USE_CURRENT_FLEET = True # ===== End of generated config ===== diff --git a/campaign/event_20260813_cn/a3.py b/campaign/event_20260813_cn/a3.py index ddf64f97c..6777b3ad7 100644 --- a/campaign/event_20260813_cn/a3.py +++ b/campaign/event_20260813_cn/a3.py @@ -6,7 +6,7 @@ MAP = CampaignMap('A3') MAP.shape = 'G9' -MAP.camera_data = ['D2', 'D6', 'D7'] +MAP.camera_data = ['D2', 'D4', 'D7'] MAP.camera_data_spawn_point = ['D7'] MAP.map_data = """ -- ME ++ ++ ++ ME -- @@ -51,7 +51,7 @@ class Config(ConfigBase): # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['emotion_qz'] + MAP_SIREN_TEMPLATE = [] MOVABLE_ENEMY_TURN = (2,) MAP_HAS_SIREN = True MAP_HAS_MOVABLE_ENEMY = True @@ -59,13 +59,12 @@ class Config(ConfigBase): MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False - MAP_CHAPTER_SWITCH_20241219 = True - STAGE_ENTRANCE = ['half', '20240725'] - MAP_HAS_MODE_SWITCH = True - STAGE_INCREASE_AB = True - MAP_WALK_USE_CURRENT_FLEET = True # ===== End of generated config ===== + MAP_SWIPE_MULTIPLY = (1.007, 1.026) + MAP_SWIPE_MULTIPLY_MINITOUCH = (0.974, 0.992) + MAP_SWIPE_MULTIPLY_MAATOUCH = (0.946, 0.963) + class Campaign(CampaignBase): MAP = MAP diff --git a/campaign/event_20260813_cn/c1.py b/campaign/event_20260813_cn/c1.py index a254a0943..ec3cb78c6 100644 --- a/campaign/event_20260813_cn/c1.py +++ b/campaign/event_20260813_cn/c1.py @@ -44,7 +44,7 @@ class Config: # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['emotion_qz'] + MAP_SIREN_TEMPLATE = [] MOVABLE_ENEMY_TURN = (2,) MAP_HAS_SIREN = True MAP_HAS_MOVABLE_ENEMY = True @@ -52,12 +52,28 @@ class Config: MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + MAP_CHAPTER_SWITCH_20241219 = True STAGE_ENTRANCE = ['half', '20240725'] MAP_HAS_MODE_SWITCH = True STAGE_INCREASE_AB = True - MAP_WALK_USE_CURRENT_FLEET = True - # ===== End of generated config ===== + MAP_SIREN_HAS_BOSS_ICON_SMALL = True + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 17), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 17, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + MAP_SWIPE_MULTIPLY = (1.207, 1.229) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.167, 1.189) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.133, 1.153) class Campaign(CampaignBase): diff --git a/campaign/event_20260813_cn/c2.py b/campaign/event_20260813_cn/c2.py index 3cd3afd64..7dcea24b9 100644 --- a/campaign/event_20260813_cn/c2.py +++ b/campaign/event_20260813_cn/c2.py @@ -45,7 +45,7 @@ class Config(ConfigBase): # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['emotion_qz'] + MAP_SIREN_TEMPLATE = [] MOVABLE_ENEMY_TURN = (2,) MAP_HAS_SIREN = True MAP_HAS_MOVABLE_ENEMY = True @@ -53,11 +53,6 @@ class Config(ConfigBase): MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False - MAP_CHAPTER_SWITCH_20241219 = True - STAGE_ENTRANCE = ['half', '20240725'] - MAP_HAS_MODE_SWITCH = True - STAGE_INCREASE_AB = True - MAP_WALK_USE_CURRENT_FLEET = True # ===== End of generated config ===== diff --git a/campaign/event_20260813_cn/c3.py b/campaign/event_20260813_cn/c3.py index aa3539669..5f7bb4772 100644 --- a/campaign/event_20260813_cn/c3.py +++ b/campaign/event_20260813_cn/c3.py @@ -6,7 +6,7 @@ MAP = CampaignMap('C3') MAP.shape = 'G9' -MAP.camera_data = ['D2', 'D6', 'D7'] +MAP.camera_data = ['D2', 'D4', 'D7'] MAP.camera_data_spawn_point = ['D7'] MAP.map_data = """ -- ME ++ ++ ++ ME -- @@ -52,7 +52,7 @@ class Config(ConfigBase): # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['emotion_qz'] + MAP_SIREN_TEMPLATE = [] MOVABLE_ENEMY_TURN = (2,) MAP_HAS_SIREN = True MAP_HAS_MOVABLE_ENEMY = True @@ -60,13 +60,12 @@ class Config(ConfigBase): MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False - MAP_CHAPTER_SWITCH_20241219 = True - STAGE_ENTRANCE = ['half', '20240725'] - MAP_HAS_MODE_SWITCH = True - STAGE_INCREASE_AB = True - MAP_WALK_USE_CURRENT_FLEET = True # ===== End of generated config ===== + MAP_SWIPE_MULTIPLY = (1.007, 1.026) + MAP_SWIPE_MULTIPLY_MINITOUCH = (0.974, 0.992) + MAP_SWIPE_MULTIPLY_MAATOUCH = (0.946, 0.963) + class Campaign(CampaignBase): MAP = MAP From ca98915807edd1875c833d7cb867edba8b1cda9a Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 13 Aug 2026 19:48:08 +0800 Subject: [PATCH 5/6] Add: chapter BD --- .../TEMPLATE_SIREN_BonhommeRichard_BB.gif | Bin 0 -> 2205 bytes .../TEMPLATE_SIREN_BonhommeRichard_CV.gif | Bin 0 -> 3276 bytes .../TEMPLATE_SIREN_BonhommeRichard_BB.gif | Bin 0 -> 2205 bytes .../TEMPLATE_SIREN_BonhommeRichard_CV.gif | Bin 0 -> 3276 bytes .../TEMPLATE_SIREN_BonhommeRichard_BB.gif | Bin 0 -> 2205 bytes .../TEMPLATE_SIREN_BonhommeRichard_CV.gif | Bin 0 -> 3276 bytes .../TEMPLATE_SIREN_BonhommeRichard_BB.gif | Bin 0 -> 2205 bytes .../TEMPLATE_SIREN_BonhommeRichard_CV.gif | Bin 0 -> 3276 bytes campaign/event_20260813_cn/b1.py | 23 +++++++++++++++--- campaign/event_20260813_cn/b2.py | 11 +++------ campaign/event_20260813_cn/b3.py | 9 ++----- campaign/event_20260813_cn/d1.py | 23 +++++++++++++++--- campaign/event_20260813_cn/d2.py | 11 +++------ campaign/event_20260813_cn/d3.py | 9 ++----- dev_tools/map_extractor.py | 5 ++++ module/template/assets.py | 2 ++ 16 files changed, 57 insertions(+), 36 deletions(-) create mode 100644 assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif create mode 100644 assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif diff --git a/assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif b/assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif new file mode 100644 index 0000000000000000000000000000000000000000..05d155559295e7e43c240ee75645e0f8604d2f65 GIT binary patch literal 2205 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 AtN;K2 literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif b/assets/en/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif new file mode 100644 index 0000000000000000000000000000000000000000..05d155559295e7e43c240ee75645e0f8604d2f65 GIT binary patch literal 2205 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 AtN;K2 literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif b/assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif new file mode 100644 index 0000000000000000000000000000000000000000..05d155559295e7e43c240ee75645e0f8604d2f65 GIT binary patch literal 2205 zcmeIz|4-6+90%}^fr)8F_$4fl6c91L3w}2P1wlha^iYOvqD_ZH9xnkxIXdbavX5|lBCiiY`?sj*(pWE(Uf5CIl?fG~yA|nC< z(^1f2NCH7dqj6_v=j+$6+uPfpKY!lb+}zmM`1tYT`uh6X+S=Q>}92gi- zC=~tu{kL!5zIE%CTrThJ?Ul)7-QC??U0od=9XD>=Xm4+CYinz5ZIw!;EiElgO-;46 zwKX+0)z#Hvu~;M$35CL|SFcu7R9v}orL3&1w6yf{<;#~YT`DXrEGQ_rc=2L>etuqF zUT$t~PEO8+3m3Apv$L|YGBYy;0s)`T&&bF~PfzFZcxh>ADJdyjE;l(jIWaLYAt50? zK0Yokj?HGr#>U3P#6(9&vskRCsHn)uNG6j>r_*UPT3A>Zg+e)f`t+$&r$RzPf`Wnq z0|NsB0{s2`{rvoVeSOJfvX76Cx3{;KmzSrfr-z4!ySuxao13ev>&cTRi9{lSKyY$$ z!sGE+EY`un0fWKV+uI*Ib`1LezJmrFjTSNVg!phOo9^S`1v4=kA;&E^!VyGs`xfup zOdy02D($}JgR82=p&^JD*N3?2E6|W1v2in)(28-bL20sIxZitHyR|~7wD!q<4qv9? zSvEv#YYs2Y?6)e%$R(u`5~&Y*rVc^1(A1O}8OJtEDMgjyqsd+5yZg*y51S$!R7lP~ zTHVnTODyUDQBTuDwfbJk$!b;%YB(qD173gqWIZ^ z#+#wX$;zn`Ggdn>vQ@?%uDQ$iKTcp9IC_hA98;nB>63o=6%3Ad^Ctanj>2W>wbEY* zhwLB14tU9m=`1NOL6={9A9on-(`f1d-S4sFItfdCU#>Rj< z0G*+spf#bKuk$V2~eiExVWgO2v`G@0mJ}b{t=h+=g*%zckb-jvp|{D)YLs_l9G}DG#n0R zPZ>bWnKNhhlwmL!5fKppn(**&U=5W@1>A&&h5~DXgM$G#f3b!{BK-?DE-o%W9A{@| z0L`v4Xf)c^))s|AA(6=MU~d1#2tbcYr9)T-3~qB260A!Fk2}fPtA^wcSk_Hf26%&W z(8DUb*foWV6+w**EZER;R|rvuz=L2@92o~sm?f!ncSK>oA~3m{Z7sy3)L?~C8iQjM z41VN?26l0;)2tN&hLIybz^eCSut?Si4(*YRU-`}ePex%Nt$fk)vVE@~N%4HGjEiF; z-~>ER6|n4luno_UO{K#g0zIRXzJXugsaN@)XHk+NFpP!ePmy?r| zot@2Mv5p@gww3>`b9h$YipUlar&PqrJU7i9{k2 ziFiET&d$!p#>U#(+S1a}#KZ)H!9YLHCvyS9_TD6VT54oOGTqCassr2Jh6wNA`UJ3` z>kmu*@FtM{Hngu}g<45N7@!PH^m#o-wp2=sU`Do z%ssBBqrS^&ub~k-ii5!r#jS2fu9r?ODq@?+LGCzwI7^u6lpau_8h!Ebnt!mLH3Y%p zQ2VTPYnb(yE~9<8945rV^O0yH=IB^p_XG2gykn4L1{ybUI#j;FB(okfg-&wSZ2B0TLM~WmRH-35WmmdY1t)z?b#)bs)=| zH*a3OdIfMz-4S~4EQoKG6G})tN>GP z+_(W)>F@9F?d=7!?3e;5X>4rNY9f(Hc0dt{L_(oZAQ15Re89?u3m49xKVMN%aqir? z^73*nmkXdNDJl66%H-ze?uO>rv13P$965aWu-2O0&}fxOOiWBjNYE-19Uc8Yf(9t# z;NSqD(JG@Q#>&bHhr^kfnVFiJ0&B2X>?iYR|G$d>Jq*jF(vC{LE&?Kt)A}Bn8U_>$ zaU!sEq%mH-`u*E{v0W&4?c1;UjCd1r!P?4L$#RWl2uH=tF3HnFyXH*EitAx=0gj>O zP&#!)%^rEiv^@etbT_qdws)@>f)TSeF(e*}5?z7%N$Ha0f2Q3B|A{rdIt^0GEccF>ranb~nesZ?s+0BC57WO#TO&~fL^ouQ$j z!NI{>w{8JIfF7Vr03bV2vQs3@&CP%jP$c#B^}87XQ352XtgHlvT)cR(tgP(p*|Q)} z03D}KpVrn%VPWBq0%bQHzzq;6yWIeF0@7rsO8^@2@$tZo*w|PQC_8lgyFdvJ4*sti z#l^+tN137pMB6B~wzi;AfF3_L%BMgTK*M`fE#<-Z2tA0bk?Yp&({m0lSW#6f;QCk- z-U~%v0w(DEhGw$sZ%J)b*6QXv1;XgJ!M~any&%$KKeu73Who8(OL}Gri)wC;;IhPn zrD`dz=Z*3$jj1YTl|2$i&6AalgXEH^UbN5SI3vO{g;;-HJm%0_g$^j`a+y zvj4l6u=dwvLw1&WrZ=_`AJIWh+^d&>@;}`zz#40mIA7&cY5ixpMiyj-5XD_&*RH>! zJWF^={7%{G&*70s8K21?m^#dMeVf_PV`v*#s8UgBJxU3_Xig?$p AtN;K2 literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif b/assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif new file mode 100644 index 0000000000000000000000000000000000000000..05d155559295e7e43c240ee75645e0f8604d2f65 GIT binary patch literal 2205 zcmeIz|4-6+90%}^fr)8F_$4fl6c91L3w}2P1wlha^iYOvqD_ZH9xnkxIXdbavX5|lBCiiY`?sj*(pWE(Uf5CIl?fG~yA|nC< z(^1f2NCH7dqj6_v=j+$6+uPfpKY!lb+}zmM`1tYT`uh6X+S=Q>}92gi- zC=~tu{kL!5zIE%CTrThJ?Ul)7-QC??U0od=9XD>=Xm4+CYinz5ZIw!;EiElgO-;46 zwKX+0)z#Hvu~;M$35CL|SFcu7R9v}orL3&1w6yf{<;#~YT`DXrEGQ_rc=2L>etuqF zUT$t~PEO8+3m3Apv$L|YGBYy;0s)`T&&bF~PfzFZcxh>ADJdyjE;l(jIWaLYAt50? zK0Yokj?HGr#>U3P#6(9&vskRCsHn)uNG6j>r_*UPT3A>Zg+e)f`t+$&r$RzPf`Wnq z0|NsB0{s2`{rvoVeSOJfvX76Cx3{;KmzSrfr-z4!ySuxao13ev>&cTRi9{lSKyY$$ z!sGE+EY`un0fWKV+uI*Ib`1LezJmrFjTSNVg!phOo9^S`1v4=kA;&E^!VyGs`xfup zOdy02D($}JgR82=p&^JD*N3?2E6|W1v2in)(28-bL20sIxZitHyR|~7wD!q<4qv9? zSvEv#YYs2Y?6)e%$R(u`5~&Y*rVc^1(A1O}8OJtEDMgjyqsd+5yZg*y51S$!R7lP~ zTHVnTODyUDQBTuDwfbJk$!b;%YB(qD173gqWIZ^ z#+#wX$;zn`Ggdn>vQ@?%uDQ$iKTcp9IC_hA98;nB>63o=6%3Ad^Ctanj>2W>wbEY* zhwLB14tU9m=`1NOL6={9A9on-(`f1d-S4sFItfdCU#>Rj< z0G*+spf#bKuk$V2~eiExVWgO2v`G@0mJ}b{t=h+=g*%zckb-jvp|{D)YLs_l9G}DG#n0R zPZ>bWnKNhhlwmL!5fKppn(**&U=5W@1>A&&h5~DXgM$G#f3b!{BK-?DE-o%W9A{@| z0L`v4Xf)c^))s|AA(6=MU~d1#2tbcYr9)T-3~qB260A!Fk2}fPtA^wcSk_Hf26%&W z(8DUb*foWV6+w**EZER;R|rvuz=L2@92o~sm?f!ncSK>oA~3m{Z7sy3)L?~C8iQjM z41VN?26l0;)2tN&hLIybz^eCSut?Si4(*YRU-`}ePex%Nt$fk)vVE@~N%4HGjEiF; z-~>ER6|n4luno_UO{K#g0zIRXzJXugsaN@)XHk+NFpP!ePmy?r| zot@2Mv5p@gww3>`b9h$YipUlar&PqrJU7i9{k2 ziFiET&d$!p#>U#(+S1a}#KZ)H!9YLHCvyS9_TD6VT54oOGTqCassr2Jh6wNA`UJ3` z>kmu*@FtM{Hngu}g<45N7@!PH^m#o-wp2=sU`Do z%ssBBqrS^&ub~k-ii5!r#jS2fu9r?ODq@?+LGCzwI7^u6lpau_8h!Ebnt!mLH3Y%p zQ2VTPYnb(yE~9<8945rV^O0yH=IB^p_XG2gykn4L1{ybUI#j;FB(okfg-&wSZ2B0TLM~WmRH-35WmmdY1t)z?b#)bs)=| zH*a3OdIfMz-4S~4EQoKG6G})tN>GP z+_(W)>F@9F?d=7!?3e;5X>4rNY9f(Hc0dt{L_(oZAQ15Re89?u3m49xKVMN%aqir? z^73*nmkXdNDJl66%H-ze?uO>rv13P$965aWu-2O0&}fxOOiWBjNYE-19Uc8Yf(9t# z;NSqD(JG@Q#>&bHhr^kfnVFiJ0&B2X>?iYR|G$d>Jq*jF(vC{LE&?Kt)A}Bn8U_>$ zaU!sEq%mH-`u*E{v0W&4?c1;UjCd1r!P?4L$#RWl2uH=tF3HnFyXH*EitAx=0gj>O zP&#!)%^rEiv^@etbT_qdws)@>f)TSeF(e*}5?z7%N$Ha0f2Q3B|A{rdIt^0GEccF>ranb~nesZ?s+0BC57WO#TO&~fL^ouQ$j z!NI{>w{8JIfF7Vr03bV2vQs3@&CP%jP$c#B^}87XQ352XtgHlvT)cR(tgP(p*|Q)} z03D}KpVrn%VPWBq0%bQHzzq;6yWIeF0@7rsO8^@2@$tZo*w|PQC_8lgyFdvJ4*sti z#l^+tN137pMB6B~wzi;AfF3_L%BMgTK*M`fE#<-Z2tA0bk?Yp&({m0lSW#6f;QCk- z-U~%v0w(DEhGw$sZ%J)b*6QXv1;XgJ!M~any&%$KKeu73Who8(OL}Gri)wC;;IhPn zrD`dz=Z*3$jj1YTl|2$i&6AalgXEH^UbN5SI3vO{g;;-HJm%0_g$^j`a+y zvj4l6u=dwvLw1&WrZ=_`AJIWh+^d&>@;}`zz#40mIA7&cY5ixpMiyj-5XD_&*RH>! zJWF^={7%{G&*70s8K21?m^#dMeVf_PV`v*#s8UgBJxU3_Xig?$p AtN;K2 literal 0 HcmV?d00001 diff --git a/campaign/event_20260813_cn/b1.py b/campaign/event_20260813_cn/b1.py index 180574964..36b385e4c 100644 --- a/campaign/event_20260813_cn/b1.py +++ b/campaign/event_20260813_cn/b1.py @@ -6,7 +6,7 @@ MAP = CampaignMap('B1') MAP.shape = 'I7' MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] -MAP.camera_data_spawn_point = ['D2', 'F2'] +MAP.camera_data_spawn_point = ['F2', 'D2'] MAP.map_data = """ ME ++ -- SP -- SP -- ++ ++ -- -- -- -- -- -- -- ME ++ @@ -45,7 +45,7 @@ class Config: # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['haorenlichade_m_zhanlie'] + MAP_SIREN_TEMPLATE = ['BonhommeRichard_BB', 'BonhommeRichard_CV'] MOVABLE_ENEMY_TURN = (2,) MAP_HAS_SIREN = True MAP_HAS_MOVABLE_ENEMY = True @@ -53,12 +53,29 @@ class Config: MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + MAP_CHAPTER_SWITCH_20241219 = True STAGE_ENTRANCE = ['half', '20240725'] MAP_HAS_MODE_SWITCH = True STAGE_INCREASE_AB = True + MAP_SIREN_HAS_BOSS_ICON_SMALL = True MAP_WALK_USE_CURRENT_FLEET = True - # ===== End of generated config ===== + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 17), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 17, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + MAP_SWIPE_MULTIPLY = (1.136, 1.158) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.099, 1.119) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.067, 1.086) class Campaign(CampaignBase): diff --git a/campaign/event_20260813_cn/b2.py b/campaign/event_20260813_cn/b2.py index 7245473c4..f8df2cecb 100644 --- a/campaign/event_20260813_cn/b2.py +++ b/campaign/event_20260813_cn/b2.py @@ -6,8 +6,8 @@ MAP = CampaignMap('B2') MAP.shape = 'J8' -MAP.camera_data = ['D2', 'D6', 'G2', 'G6'] -MAP.camera_data_spawn_point = ['D2'] +MAP.camera_data = ['D3', 'D6', 'G2', 'G5'] +MAP.camera_data_spawn_point = ['D3'] MAP.map_data = """ ++ ++ ++ -- Me ++ Me ++ ME -- ++ -- SP -- -- -- -- -- -- ME @@ -49,7 +49,7 @@ class Config(ConfigBase): # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['haorenlichade_m_zhanlie'] + MAP_SIREN_TEMPLATE = ['BonhommeRichard_BB', 'BonhommeRichard_CV'] MOVABLE_ENEMY_TURN = (2,) MAP_HAS_SIREN = True MAP_HAS_MOVABLE_ENEMY = True @@ -57,11 +57,6 @@ class Config(ConfigBase): MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False - MAP_CHAPTER_SWITCH_20241219 = True - STAGE_ENTRANCE = ['half', '20240725'] - MAP_HAS_MODE_SWITCH = True - STAGE_INCREASE_AB = True - MAP_WALK_USE_CURRENT_FLEET = True # ===== End of generated config ===== diff --git a/campaign/event_20260813_cn/b3.py b/campaign/event_20260813_cn/b3.py index e1ac8bc99..5dcf4157f 100644 --- a/campaign/event_20260813_cn/b3.py +++ b/campaign/event_20260813_cn/b3.py @@ -7,7 +7,7 @@ MAP = CampaignMap('B3') MAP.shape = 'I9' MAP.camera_data = ['D4', 'D6', 'F4', 'F6'] -MAP.camera_data_spawn_point = ['F4', 'D4'] +MAP.camera_data_spawn_point = ['D4'] MAP.map_data = """ ++ ++ ++ -- ++ -- ++ ++ ++ -- ++ -- ++ ++ ++ -- ++ -- @@ -52,7 +52,7 @@ class Config(ConfigBase): # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['haorenlichade_m_zhanlie'] + MAP_SIREN_TEMPLATE = ['BonhommeRichard_BB', 'BonhommeRichard_CV'] MOVABLE_ENEMY_TURN = (2,) MAP_HAS_SIREN = True MAP_HAS_MOVABLE_ENEMY = True @@ -60,11 +60,6 @@ class Config(ConfigBase): MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False - MAP_CHAPTER_SWITCH_20241219 = True - STAGE_ENTRANCE = ['half', '20240725'] - MAP_HAS_MODE_SWITCH = True - STAGE_INCREASE_AB = True - MAP_WALK_USE_CURRENT_FLEET = True # ===== End of generated config ===== diff --git a/campaign/event_20260813_cn/d1.py b/campaign/event_20260813_cn/d1.py index bbf908f5b..6439e8fe1 100644 --- a/campaign/event_20260813_cn/d1.py +++ b/campaign/event_20260813_cn/d1.py @@ -6,7 +6,7 @@ MAP = CampaignMap('D1') MAP.shape = 'I7' MAP.camera_data = ['D2', 'D5', 'F2', 'F5'] -MAP.camera_data_spawn_point = ['D2', 'F2'] +MAP.camera_data_spawn_point = ['F2', 'D2'] MAP.map_data = """ ME ++ -- SP -- SP -- ++ ++ -- -- -- -- -- -- -- ME ++ @@ -45,7 +45,7 @@ class Config: # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['haorenlichade_m_zhanlie'] + MAP_SIREN_TEMPLATE = ['BonhommeRichard_BB', 'BonhommeRichard_CV'] MOVABLE_ENEMY_TURN = (2,) MAP_HAS_SIREN = True MAP_HAS_MOVABLE_ENEMY = True @@ -53,12 +53,29 @@ class Config: MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False + # ===== End of generated config ===== + MAP_CHAPTER_SWITCH_20241219 = True STAGE_ENTRANCE = ['half', '20240725'] MAP_HAS_MODE_SWITCH = True STAGE_INCREASE_AB = True + MAP_SIREN_HAS_BOSS_ICON_SMALL = True MAP_WALK_USE_CURRENT_FLEET = True - # ===== End of generated config ===== + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 17), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 17, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + MAP_SWIPE_MULTIPLY = (1.136, 1.158) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.099, 1.119) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.067, 1.086) class Campaign(CampaignBase): diff --git a/campaign/event_20260813_cn/d2.py b/campaign/event_20260813_cn/d2.py index c8053201c..18c58eda7 100644 --- a/campaign/event_20260813_cn/d2.py +++ b/campaign/event_20260813_cn/d2.py @@ -6,8 +6,8 @@ MAP = CampaignMap('D2') MAP.shape = 'J8' -MAP.camera_data = ['D2', 'D6', 'G2', 'G6'] -MAP.camera_data_spawn_point = ['D2'] +MAP.camera_data = ['D3', 'D6', 'G2', 'G5'] +MAP.camera_data_spawn_point = ['D3'] MAP.map_data = """ ++ ++ ++ -- Me ++ Me ++ ME -- ++ -- SP -- -- -- -- -- -- ME @@ -50,7 +50,7 @@ class Config(ConfigBase): # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['haorenlichade_m_zhanlie'] + MAP_SIREN_TEMPLATE = ['BonhommeRichard_BB', 'BonhommeRichard_CV'] MOVABLE_ENEMY_TURN = (2,) MAP_HAS_SIREN = True MAP_HAS_MOVABLE_ENEMY = True @@ -58,11 +58,6 @@ class Config(ConfigBase): MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False - MAP_CHAPTER_SWITCH_20241219 = True - STAGE_ENTRANCE = ['half', '20240725'] - MAP_HAS_MODE_SWITCH = True - STAGE_INCREASE_AB = True - MAP_WALK_USE_CURRENT_FLEET = True # ===== End of generated config ===== diff --git a/campaign/event_20260813_cn/d3.py b/campaign/event_20260813_cn/d3.py index ffbfa3232..8cbb15e20 100644 --- a/campaign/event_20260813_cn/d3.py +++ b/campaign/event_20260813_cn/d3.py @@ -7,7 +7,7 @@ MAP = CampaignMap('D3') MAP.shape = 'I9' MAP.camera_data = ['D4', 'D6', 'F4', 'F6'] -MAP.camera_data_spawn_point = ['F4', 'D4'] +MAP.camera_data_spawn_point = ['D4'] MAP.map_data = """ ++ ++ ++ -- ++ -- ++ ++ ++ -- ++ -- ++ ++ ++ -- ++ -- @@ -53,7 +53,7 @@ class Config(ConfigBase): # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['haorenlichade_m_zhanlie'] + MAP_SIREN_TEMPLATE = ['BonhommeRichard_BB', 'BonhommeRichard_CV'] MOVABLE_ENEMY_TURN = (2,) MAP_HAS_SIREN = True MAP_HAS_MOVABLE_ENEMY = True @@ -61,11 +61,6 @@ class Config(ConfigBase): MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False - MAP_CHAPTER_SWITCH_20241219 = True - STAGE_ENTRANCE = ['half', '20240725'] - MAP_HAS_MODE_SWITCH = True - STAGE_INCREASE_AB = True - MAP_WALK_USE_CURRENT_FLEET = True # ===== End of generated config ===== diff --git a/dev_tools/map_extractor.py b/dev_tools/map_extractor.py index 824f40cc3..df5b137ef 100644 --- a/dev_tools/map_extractor.py +++ b/dev_tools/map_extractor.py @@ -332,6 +332,11 @@ 'youeryuan_boss03': 'MeowfficerBust_Playtime', 'youeryuan_boss04': 'MeowfficerBust_Hobbies', 'youeryuan_boss05': 'MeowfficerBust_Studying', + + # Depths of the Astrarium + 'haorenlichade_m_zhanlie': 'BonhommeRichard_BB', + 'haorenlichade_m_hangmu': 'BonhommeRichard_CV', + 'haorenlichade_m_qianting': 'BonhommeRichard_SS', } diff --git a/module/template/assets.py b/module/template/assets.py index 9411d6156..a392b2668 100644 --- a/module/template/assets.py +++ b/module/template/assets.py @@ -70,6 +70,8 @@ TEMPLATE_SIREN_BlackDragonBoss01 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BlackDragonBoss01.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BlackDragonBoss01.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BlackDragonBoss01.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BlackDragonBoss01.gif'}) TEMPLATE_SIREN_BlackDragonBoss02 = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BlackDragonBoss02.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BlackDragonBoss02.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BlackDragonBoss02.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BlackDragonBoss02.gif'}) TEMPLATE_SIREN_BolzanoAlter = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BolzanoAlter.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BolzanoAlter.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BolzanoAlter.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BolzanoAlter.gif'}) +TEMPLATE_SIREN_BonhommeRichard_BB = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif'}) +TEMPLATE_SIREN_BonhommeRichard_CV = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif'}) TEMPLATE_SIREN_Bremerton = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Bremerton.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Bremerton.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Bremerton.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Bremerton.gif'}) TEMPLATE_SIREN_CA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CA.gif'}) TEMPLATE_SIREN_CAalchemist = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CAalchemist.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CAalchemist.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CAalchemist.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CAalchemist.gif'}) From 61f823164103af1e59822e093e7dc0a47d52f22d Mon Sep 17 00:00:00 2001 From: LmeSzinc <37934724+LmeSzinc@users.noreply.github.com> Date: Thu, 13 Aug 2026 20:18:09 +0800 Subject: [PATCH 6/6] Add: chapter SP --- .../TEMPLATE_SIREN_BonhommeRichard_SS.gif | Bin 0 -> 6554 bytes .../TEMPLATE_SIREN_BonhommeRichard_SS.gif | Bin 0 -> 6554 bytes .../TEMPLATE_SIREN_BonhommeRichard_SS.gif | Bin 0 -> 6554 bytes .../TEMPLATE_SIREN_BonhommeRichard_SS.gif | Bin 0 -> 6554 bytes campaign/event_20260813_cn/b1.py | 1 - campaign/event_20260813_cn/d1.py | 1 - campaign/event_20260813_cn/sp.py | 28 +++++++++++++----- module/template/assets.py | 1 + 8 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif create mode 100644 assets/en/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif create mode 100644 assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif create mode 100644 assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif diff --git a/assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif b/assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif new file mode 100644 index 0000000000000000000000000000000000000000..6873088f8ea0f42a9d5bbf975b014c9bdbc28b5c GIT binary patch literal 6554 zcmeI$X;4%58prVy2pAwN2?0VtNCY7uJBsWi5H?w4b4O(n0YwEt1*Mt*VUaBXL{QM6 zh-j%ruokUjSt5&~g~GIAUDztPUch~+-ly}QNpscSxpz9gGp~3uZ1{{8#6Z{NOo^XAp7S1(__eDUJN)2B~oW@a8edi3z&!-L^3JUh_-J6$}my?r|ot@3+^Ru$D zcsw4L%iXieadB~Wc6M@da&&Zb zaB#4^oGQRiQ6oMFi`~Z|?%a$!&x)hm$KtYapdwWY9VYAsliJP07L=y=m;K+gn3nY|STU%RM zS%D@JO283gV`HEM95FC3K$Og$JsT*|(b3V;($dt_1W-T|5{U$$sH&d z10PXhW_Muq!iX6WF4{+}#&yTt7T19+peEnZ8PSZqc*R;`&`E_ zMTabOSmFpw)GknVn7V#Cc|xU#=r=lfVr#7jPp0(IIAehBQ)Lr7Ue@0pJ7Fb;ph!tF5ht zP60kplAs=e7?DOqk|bb<1P)LG#YkFO8uSP%k>uoLfFmg>3G9&c2(m-EL?m{sUcDM( zWW|aV&?CTybdLlE2LAURkw)a>B$1{B96@37F(s%ysH@&wuh z59)vUe6}Y5eDJfZo8<)}*KC!0(;o5xRZd<-J|?nEp(4c+Udqs80hp3iXMO*Gr;-Yr zPbBS(%EU0OO=6;NvbUd(UG%k=J?<`CP$_XsdBU_%J zsD`yn#YF0`*A_jk8S_%swg@7=>JODysWEEzOo5FV&KAUx2FLDd0E1|^3y9%#%+ssoZ^)x;;LaG140b zg$ID~@r*(FA#H~An1TGz(9n=f8Wj~4VB<@Ed^R%v`eMLipL2~&&QE%7nS@6@p`FBo z4y;oGlhEU8#hRSuH+fGk_39}sPp@r@p7d2!U;p}{FxtbLhnaLHkZj}w%UyS4uS^EB zTDh{Td*jY^7i1myf>&_ur z71YOjbX}v!nWfa*^G0Q|l^xIe_uKlkWzucEQs;>xBeJL#i|Xp*+lM`ghW0kg<7A9_ z$wp2M*98o|$1KXymPjv+l1#U;UYPYJb(WD@#Dv6xZJ;gANc`z02`1Xzy_)i zG+&S$s6t@Az;Hpg5p);qqI(EH0u=(5z~gx?1ii zL&12Z6TuWyr*fjBIM!EH2HVgOnS883$6~KaKnY%f$iwNK9PTH3D;HC}X{p>Kacc%K zL0377;?b6^O|=LUaoY=O+3Anzw5?GEI`i1;Dtyl5s)`(z-5k^LgA%`umi5ni|TrJeH)3fgj;uPFI%O%90plA52;OU!Lll1yWA{XYOtP|>l zK8l8%3|)_7gd;m9-Drtak5$Nb+w@F8WoIcKFrHN)UkqD>{IH9dK7g zcMlNchaY}`>jyf0NMBdclz|!nM9_QzL8RvkvI8AJkQ&e-00(pk*nzGe5FsDT7r3RO z{MfQ(3xWe3QY9x;M255%uv%cRfDv#x{ojrFyVdf+_2c8of)1(D1p)^U!~_~EG#U+V zAV>H+EOC z%4$RFb(apKtJN;M?t~8sGjg-=26c(PnX&(>c3ooAkjQq&97w5W~x(x!LrJhH)HX+wFHZjk DK-hV> literal 0 HcmV?d00001 diff --git a/assets/en/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif b/assets/en/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif new file mode 100644 index 0000000000000000000000000000000000000000..6873088f8ea0f42a9d5bbf975b014c9bdbc28b5c GIT binary patch literal 6554 zcmeI$X;4%58prVy2pAwN2?0VtNCY7uJBsWi5H?w4b4O(n0YwEt1*Mt*VUaBXL{QM6 zh-j%ruokUjSt5&~g~GIAUDztPUch~+-ly}QNpscSxpz9gGp~3uZ1{{8#6Z{NOo^XAp7S1(__eDUJN)2B~oW@a8edi3z&!-L^3JUh_-J6$}my?r|ot@3+^Ru$D zcsw4L%iXieadB~Wc6M@da&&Zb zaB#4^oGQRiQ6oMFi`~Z|?%a$!&x)hm$KtYapdwWY9VYAsliJP07L=y=m;K+gn3nY|STU%RM zS%D@JO283gV`HEM95FC3K$Og$JsT*|(b3V;($dt_1W-T|5{U$$sH&d z10PXhW_Muq!iX6WF4{+}#&yTt7T19+peEnZ8PSZqc*R;`&`E_ zMTabOSmFpw)GknVn7V#Cc|xU#=r=lfVr#7jPp0(IIAehBQ)Lr7Ue@0pJ7Fb;ph!tF5ht zP60kplAs=e7?DOqk|bb<1P)LG#YkFO8uSP%k>uoLfFmg>3G9&c2(m-EL?m{sUcDM( zWW|aV&?CTybdLlE2LAURkw)a>B$1{B96@37F(s%ysH@&wuh z59)vUe6}Y5eDJfZo8<)}*KC!0(;o5xRZd<-J|?nEp(4c+Udqs80hp3iXMO*Gr;-Yr zPbBS(%EU0OO=6;NvbUd(UG%k=J?<`CP$_XsdBU_%J zsD`yn#YF0`*A_jk8S_%swg@7=>JODysWEEzOo5FV&KAUx2FLDd0E1|^3y9%#%+ssoZ^)x;;LaG140b zg$ID~@r*(FA#H~An1TGz(9n=f8Wj~4VB<@Ed^R%v`eMLipL2~&&QE%7nS@6@p`FBo z4y;oGlhEU8#hRSuH+fGk_39}sPp@r@p7d2!U;p}{FxtbLhnaLHkZj}w%UyS4uS^EB zTDh{Td*jY^7i1myf>&_ur z71YOjbX}v!nWfa*^G0Q|l^xIe_uKlkWzucEQs;>xBeJL#i|Xp*+lM`ghW0kg<7A9_ z$wp2M*98o|$1KXymPjv+l1#U;UYPYJb(WD@#Dv6xZJ;gANc`z02`1Xzy_)i zG+&S$s6t@Az;Hpg5p);qqI(EH0u=(5z~gx?1ii zL&12Z6TuWyr*fjBIM!EH2HVgOnS883$6~KaKnY%f$iwNK9PTH3D;HC}X{p>Kacc%K zL0377;?b6^O|=LUaoY=O+3Anzw5?GEI`i1;Dtyl5s)`(z-5k^LgA%`umi5ni|TrJeH)3fgj;uPFI%O%90plA52;OU!Lll1yWA{XYOtP|>l zK8l8%3|)_7gd;m9-Drtak5$Nb+w@F8WoIcKFrHN)UkqD>{IH9dK7g zcMlNchaY}`>jyf0NMBdclz|!nM9_QzL8RvkvI8AJkQ&e-00(pk*nzGe5FsDT7r3RO z{MfQ(3xWe3QY9x;M255%uv%cRfDv#x{ojrFyVdf+_2c8of)1(D1p)^U!~_~EG#U+V zAV>H+EOC z%4$RFb(apKtJN;M?t~8sGjg-=26c(PnX&(>c3ooAkjQq&97w5W~x(x!LrJhH)HX+wFHZjk DK-hV> literal 0 HcmV?d00001 diff --git a/assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif b/assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif new file mode 100644 index 0000000000000000000000000000000000000000..6873088f8ea0f42a9d5bbf975b014c9bdbc28b5c GIT binary patch literal 6554 zcmeI$X;4%58prVy2pAwN2?0VtNCY7uJBsWi5H?w4b4O(n0YwEt1*Mt*VUaBXL{QM6 zh-j%ruokUjSt5&~g~GIAUDztPUch~+-ly}QNpscSxpz9gGp~3uZ1{{8#6Z{NOo^XAp7S1(__eDUJN)2B~oW@a8edi3z&!-L^3JUh_-J6$}my?r|ot@3+^Ru$D zcsw4L%iXieadB~Wc6M@da&&Zb zaB#4^oGQRiQ6oMFi`~Z|?%a$!&x)hm$KtYapdwWY9VYAsliJP07L=y=m;K+gn3nY|STU%RM zS%D@JO283gV`HEM95FC3K$Og$JsT*|(b3V;($dt_1W-T|5{U$$sH&d z10PXhW_Muq!iX6WF4{+}#&yTt7T19+peEnZ8PSZqc*R;`&`E_ zMTabOSmFpw)GknVn7V#Cc|xU#=r=lfVr#7jPp0(IIAehBQ)Lr7Ue@0pJ7Fb;ph!tF5ht zP60kplAs=e7?DOqk|bb<1P)LG#YkFO8uSP%k>uoLfFmg>3G9&c2(m-EL?m{sUcDM( zWW|aV&?CTybdLlE2LAURkw)a>B$1{B96@37F(s%ysH@&wuh z59)vUe6}Y5eDJfZo8<)}*KC!0(;o5xRZd<-J|?nEp(4c+Udqs80hp3iXMO*Gr;-Yr zPbBS(%EU0OO=6;NvbUd(UG%k=J?<`CP$_XsdBU_%J zsD`yn#YF0`*A_jk8S_%swg@7=>JODysWEEzOo5FV&KAUx2FLDd0E1|^3y9%#%+ssoZ^)x;;LaG140b zg$ID~@r*(FA#H~An1TGz(9n=f8Wj~4VB<@Ed^R%v`eMLipL2~&&QE%7nS@6@p`FBo z4y;oGlhEU8#hRSuH+fGk_39}sPp@r@p7d2!U;p}{FxtbLhnaLHkZj}w%UyS4uS^EB zTDh{Td*jY^7i1myf>&_ur z71YOjbX}v!nWfa*^G0Q|l^xIe_uKlkWzucEQs;>xBeJL#i|Xp*+lM`ghW0kg<7A9_ z$wp2M*98o|$1KXymPjv+l1#U;UYPYJb(WD@#Dv6xZJ;gANc`z02`1Xzy_)i zG+&S$s6t@Az;Hpg5p);qqI(EH0u=(5z~gx?1ii zL&12Z6TuWyr*fjBIM!EH2HVgOnS883$6~KaKnY%f$iwNK9PTH3D;HC}X{p>Kacc%K zL0377;?b6^O|=LUaoY=O+3Anzw5?GEI`i1;Dtyl5s)`(z-5k^LgA%`umi5ni|TrJeH)3fgj;uPFI%O%90plA52;OU!Lll1yWA{XYOtP|>l zK8l8%3|)_7gd;m9-Drtak5$Nb+w@F8WoIcKFrHN)UkqD>{IH9dK7g zcMlNchaY}`>jyf0NMBdclz|!nM9_QzL8RvkvI8AJkQ&e-00(pk*nzGe5FsDT7r3RO z{MfQ(3xWe3QY9x;M255%uv%cRfDv#x{ojrFyVdf+_2c8of)1(D1p)^U!~_~EG#U+V zAV>H+EOC z%4$RFb(apKtJN;M?t~8sGjg-=26c(PnX&(>c3ooAkjQq&97w5W~x(x!LrJhH)HX+wFHZjk DK-hV> literal 0 HcmV?d00001 diff --git a/assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif b/assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif new file mode 100644 index 0000000000000000000000000000000000000000..6873088f8ea0f42a9d5bbf975b014c9bdbc28b5c GIT binary patch literal 6554 zcmeI$X;4%58prVy2pAwN2?0VtNCY7uJBsWi5H?w4b4O(n0YwEt1*Mt*VUaBXL{QM6 zh-j%ruokUjSt5&~g~GIAUDztPUch~+-ly}QNpscSxpz9gGp~3uZ1{{8#6Z{NOo^XAp7S1(__eDUJN)2B~oW@a8edi3z&!-L^3JUh_-J6$}my?r|ot@3+^Ru$D zcsw4L%iXieadB~Wc6M@da&&Zb zaB#4^oGQRiQ6oMFi`~Z|?%a$!&x)hm$KtYapdwWY9VYAsliJP07L=y=m;K+gn3nY|STU%RM zS%D@JO283gV`HEM95FC3K$Og$JsT*|(b3V;($dt_1W-T|5{U$$sH&d z10PXhW_Muq!iX6WF4{+}#&yTt7T19+peEnZ8PSZqc*R;`&`E_ zMTabOSmFpw)GknVn7V#Cc|xU#=r=lfVr#7jPp0(IIAehBQ)Lr7Ue@0pJ7Fb;ph!tF5ht zP60kplAs=e7?DOqk|bb<1P)LG#YkFO8uSP%k>uoLfFmg>3G9&c2(m-EL?m{sUcDM( zWW|aV&?CTybdLlE2LAURkw)a>B$1{B96@37F(s%ysH@&wuh z59)vUe6}Y5eDJfZo8<)}*KC!0(;o5xRZd<-J|?nEp(4c+Udqs80hp3iXMO*Gr;-Yr zPbBS(%EU0OO=6;NvbUd(UG%k=J?<`CP$_XsdBU_%J zsD`yn#YF0`*A_jk8S_%swg@7=>JODysWEEzOo5FV&KAUx2FLDd0E1|^3y9%#%+ssoZ^)x;;LaG140b zg$ID~@r*(FA#H~An1TGz(9n=f8Wj~4VB<@Ed^R%v`eMLipL2~&&QE%7nS@6@p`FBo z4y;oGlhEU8#hRSuH+fGk_39}sPp@r@p7d2!U;p}{FxtbLhnaLHkZj}w%UyS4uS^EB zTDh{Td*jY^7i1myf>&_ur z71YOjbX}v!nWfa*^G0Q|l^xIe_uKlkWzucEQs;>xBeJL#i|Xp*+lM`ghW0kg<7A9_ z$wp2M*98o|$1KXymPjv+l1#U;UYPYJb(WD@#Dv6xZJ;gANc`z02`1Xzy_)i zG+&S$s6t@Az;Hpg5p);qqI(EH0u=(5z~gx?1ii zL&12Z6TuWyr*fjBIM!EH2HVgOnS883$6~KaKnY%f$iwNK9PTH3D;HC}X{p>Kacc%K zL0377;?b6^O|=LUaoY=O+3Anzw5?GEI`i1;Dtyl5s)`(z-5k^LgA%`umi5ni|TrJeH)3fgj;uPFI%O%90plA52;OU!Lll1yWA{XYOtP|>l zK8l8%3|)_7gd;m9-Drtak5$Nb+w@F8WoIcKFrHN)UkqD>{IH9dK7g zcMlNchaY}`>jyf0NMBdclz|!nM9_QzL8RvkvI8AJkQ&e-00(pk*nzGe5FsDT7r3RO z{MfQ(3xWe3QY9x;M255%uv%cRfDv#x{ojrFyVdf+_2c8of)1(D1p)^U!~_~EG#U+V zAV>H+EOC z%4$RFb(apKtJN;M?t~8sGjg-=26c(PnX&(>c3ooAkjQq&97w5W~x(x!LrJhH)HX+wFHZjk DK-hV> literal 0 HcmV?d00001 diff --git a/campaign/event_20260813_cn/b1.py b/campaign/event_20260813_cn/b1.py index 36b385e4c..382f0ba92 100644 --- a/campaign/event_20260813_cn/b1.py +++ b/campaign/event_20260813_cn/b1.py @@ -59,7 +59,6 @@ class Config: STAGE_ENTRANCE = ['half', '20240725'] MAP_HAS_MODE_SWITCH = True STAGE_INCREASE_AB = True - MAP_SIREN_HAS_BOSS_ICON_SMALL = True MAP_WALK_USE_CURRENT_FLEET = True INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { 'height': (80, 255 - 17), diff --git a/campaign/event_20260813_cn/d1.py b/campaign/event_20260813_cn/d1.py index 6439e8fe1..cca2982a8 100644 --- a/campaign/event_20260813_cn/d1.py +++ b/campaign/event_20260813_cn/d1.py @@ -59,7 +59,6 @@ class Config: STAGE_ENTRANCE = ['half', '20240725'] MAP_HAS_MODE_SWITCH = True STAGE_INCREASE_AB = True - MAP_SIREN_HAS_BOSS_ICON_SMALL = True MAP_WALK_USE_CURRENT_FLEET = True INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { 'height': (80, 255 - 17), diff --git a/campaign/event_20260813_cn/sp.py b/campaign/event_20260813_cn/sp.py index 22472a987..03d3c1931 100644 --- a/campaign/event_20260813_cn/sp.py +++ b/campaign/event_20260813_cn/sp.py @@ -6,7 +6,7 @@ MAP = CampaignMap('SP') MAP.shape = 'I9' MAP.camera_data = ['D4', 'D6', 'F4', 'F6'] -MAP.camera_data_spawn_point = ['F4', 'D4'] +MAP.camera_data_spawn_point = ['D4', 'F4'] MAP.map_data = """ ++ ++ ++ -- ++ -- ++ ++ ++ -- ++ -- ++ ++ ++ -- ++ -- @@ -53,7 +53,7 @@ class Config: # ===== Start of generated config ===== - MAP_SIREN_TEMPLATE = ['haorenlichade_m_qianting'] + MAP_SIREN_TEMPLATE = ['BonhommeRichard_SS'] MOVABLE_ENEMY_TURN = (2,) MAP_HAS_SIREN = True MAP_HAS_MOVABLE_ENEMY = True @@ -61,17 +61,31 @@ class Config: MAP_HAS_FLEET_STEP = True MAP_HAS_AMBUSH = False MAP_HAS_MYSTERY = False - MAP_CHAPTER_SWITCH_20241219 = True - STAGE_ENTRANCE = ['half', '20240725'] - MAP_HAS_MODE_SWITCH = False - STAGE_INCREASE_AB = True - MAP_WALK_USE_CURRENT_FLEET = True STAR_REQUIRE_1 = 0 STAR_REQUIRE_2 = 0 STAR_REQUIRE_3 = 0 # ===== End of generated config ===== + MAP_CHAPTER_SWITCH_20241219 = True + STAGE_ENTRANCE = ['half', '20240725'] + STAGE_INCREASE_AB = True + INTERNAL_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (80, 255 - 17), + 'width': (0.9, 10), + 'prominence': 10, + 'distance': 35, + } + EDGE_LINES_FIND_PEAKS_PARAMETERS = { + 'height': (255 - 17, 255), + 'prominence': 10, + 'distance': 50, + 'wlen': 1000 + } + MAP_ENSURE_EDGE_INSIGHT_CORNER = 'bottom' MAP_IS_ONE_TIME_STAGE = True + MAP_SWIPE_MULTIPLY = (1.149, 1.170) + MAP_SWIPE_MULTIPLY_MINITOUCH = (1.111, 1.132) + MAP_SWIPE_MULTIPLY_MAATOUCH = (1.079, 1.098) class Campaign(CampaignBase): diff --git a/module/template/assets.py b/module/template/assets.py index a392b2668..7f2609496 100644 --- a/module/template/assets.py +++ b/module/template/assets.py @@ -72,6 +72,7 @@ TEMPLATE_SIREN_BolzanoAlter = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BolzanoAlter.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BolzanoAlter.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BolzanoAlter.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BolzanoAlter.gif'}) TEMPLATE_SIREN_BonhommeRichard_BB = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_BB.gif'}) TEMPLATE_SIREN_BonhommeRichard_CV = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_CV.gif'}) +TEMPLATE_SIREN_BonhommeRichard_SS = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif', 'en': './assets/en/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_BonhommeRichard_SS.gif'}) TEMPLATE_SIREN_Bremerton = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_Bremerton.gif', 'en': './assets/en/template/TEMPLATE_SIREN_Bremerton.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_Bremerton.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_Bremerton.gif'}) TEMPLATE_SIREN_CA = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CA.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CA.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CA.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CA.gif'}) TEMPLATE_SIREN_CAalchemist = Template(file={'cn': './assets/cn/template/TEMPLATE_SIREN_CAalchemist.gif', 'en': './assets/en/template/TEMPLATE_SIREN_CAalchemist.gif', 'jp': './assets/jp/template/TEMPLATE_SIREN_CAalchemist.gif', 'tw': './assets/tw/template/TEMPLATE_SIREN_CAalchemist.gif'})