Office Life

Office Life

Not enough ratings
CE脚本和工具类Mod
By Violet
Mod( 项目主页[github.com])依赖BepInEx[github.com]
其他内容详见正文。
---
关于修改的问题问过制作人了。
他说:
无所谓,mod里还有官方mod
单机游戏开心就好
所以分享下。
大多数内容都是盲改的,不过应该没问题。
目前确定支持版本:
  • 1.0.0
  • 1.0.1
复制Part.1、Part.2、Part.3的内容到记事本,再整体贴到CE即可。

   
Award
Favorite
Favorited
Unfavorite
Part.1
<?xml version="1.0" encoding="utf-8"?> <CheatTable CheatEngineTableVersion="45"> <CheatEntries> <CheatEntry> <ID>7</ID> <Description>"初始化"</Description> <Options moHideChildren="1" moManualExpandCollapse="1" moDeactivateChildrenAsWell="1"/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end if (LaunchMonoDataCollector()==0) then error("No Mono") end {$asm} [DISABLE] {$lua} if not syntaxcheck and monopipe then monopipe = nil,monopipe.Destroy()end {$asm} </AssemblerScript> <CheatEntries> <CheatEntry> <ID>50</ID> <Description>"作弊功能"</Description> <Options moHideChildren="1" moManualExpandCollapse="1" moDeactivateChildrenAsWell="1"/> <GroupHeader>1</GroupHeader> <CheatEntries> <CheatEntry> <ID>5</ID> <Description>"精力"</Description> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] aobscanregion(codeUpdateEnergy,CardEventImpl:UpdateEnergy,CardEventImpl:UpdateEnergy+FFFF,48 63 80 A8 00 00 00 85 C0 7D 17 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00 C7 80 A8 00 00 00 00 00 00 00) registersymbol(codeUpdateEnergy) codeUpdateEnergy: db 48 63 88 A4 00 00 00 //movsxd rcx,dword ptr [rax+000000A4] db 89 88 A8 00 00 00 //mov [rax+000000A8],ecx nop 15 aobscanregion(codeUpdateEnergyBfb,CardEventImpl:UpdateEnergyBfb,CardEventImpl:UpdateEnergyBfb+FFFF,48 63 80 A8 00 00 00 85 C0 0F 8D 17 00 00 00 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00 C7 80 A8 00 00 00 00 00 00 00) registersymbol(codeUpdateEnergyBfb) codeUpdateEnergyBfb: db 48 63 88 A4 00 00 00 //movsxd rcx,dword ptr [rax+000000A4] db 89 88 A8 00 00 00 //mov [rax+000000A8],ecx NOP 19 [DISABLE] unregistersymbol(*) codeUpdateEnergy: db 48 63 80 A8 00 00 00 85 C0 7D 17 48 B8 20 08 96 54 7A 02 00 00 48 8B 00 C7 80 A8 00 00 00 00 00 00 00 //movsxd rax,dword ptr [rax+000000A8] //test eax,eax //jnl CardEventImpl:UpdateEnergy+146 //mov rax,0000027A54960820 //mov rax,[rax] //mov [rax+000000A8],00000000 codeUpdateEnergyBfb: db 48 63 80 A8 00 00 00 85 C0 0F 8D 17 00 00 00 48 B8 20 08 96 54 7A 02 00 00 48 8B 00 C7 80 A8 00 00 00 00 00 00 00 // movsxd rax,dword ptr [rax+000000A8] // test eax,eax // jnl 27A5FD78DEB // mov rax,0000027A54960820 // mov rax,[rax] // mov [rax+000000A8],00000000 </AssemblerScript> </CheatEntry> <CheatEntry> <ID>9</ID> <Description>"出牌次数"</Description> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] aobscanregion(codeUpdateOutCardCurrent,CardEventImpl:UpdateOutCardCurrent,CardEventImpl:UpdateOutCardCurrent+FFFF,7E 27 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00 48) registersymbol(codeUpdateOutCardCurrent) codeUpdateOutCardCurrent: NOP 2 aobscanregion(codeUpdateOutCardCurrentBfb,CardEventImpl:UpdateOutCardCurrentBfb,CardEventImpl:UpdateOutCardCurrentBfb+FFFF,7E 27 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00 48) registersymbol(codeUpdateOutCardCurrentBfb) codeUpdateOutCardCurrentBfb: NOP 2 aobscanregion(codeOnBoard,CardGame.CardGameManager:OnBoard,CardGame.CardGameManager:OnBoard+FFFF,FF C9 89 88 E0 00 00 00) registersymbol(codeOnBoard) codeOnBoard: nop 2 [DISABLE] unregistersymbol(*) codeUpdateOutCardCurrent: db 7E 27 //CardEventImpl:UpdateOutCardCurrent+238 - jle CardEventImpl:UpdateOutCardCurrent+261 codeUpdateOutCardCurrentBfb: db 7E 27 //jle CardEventImpl:UpdateOutCardCurrentBfb+11e codeOnBoard: db FF C9 //dec ecx </AssemblerScript> </CheatEntry> <CheatEntry> <ID>45</ID> <Description>"绩效"</Description> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] aobscanregion(codeUpdateJix1,CardEventImpl:UpdateJix,CardEventImpl:UpdateJix+FFFF,48 63 80 94 00 00 00 83 F8 08 0F 8E) registersymbol(codeUpdateJix1) codeUpdateJix1+9: db 00 aobscanregion(codeUpdateJix2,CardEventImpl:UpdateJix,CardEventImpl:UpdateJix+FFFF,48 63 80 94 00 00 00 83 F8 08 7E) registersymbol(codeUpdateJix2) codeUpdateJix2+9: db 00 [DISABLE] unregistersymbol(*) codeUpdateJix1+9: db 08 codeUpdateJix2+9: db 08 </AssemblerScript> </CheatEntry> <CheatEntry> <ID>36</ID> <Description>"进度"</Description> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] aobscanregion(codeUpdateJindB,CardEventImpl:UpdateJindB,CardEventImpl:UpdateJindB+FFFF,7E 27 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00) registersymbol(codeUpdateJindB) codeUpdateJindB: nop 2 aobscanregion(codeUpdateJindByEnergy,CardEventImpl:UpdateJindByEnergy,CardEventImpl:UpdateJindByEnergy+FFFF,7E 27 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00) registersymbol(codeUpdateJindByEnergy) codeUpdateJindByEnergy: nop 2 aobscanregion(codeUpdateJindByJind,CardEventImpl:UpdateJindByJind,CardEventImpl:UpdateJindByJind+FFFF,7E 27 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00) registersymbol(codeUpdateJindByJind) codeUpdateJindByJind: nop 2 aobscanregion(codeUpdateJindByOutCards,CardEventImpl:UpdateJindByOutCards,CardEventImpl:UpdateJindByOutCards+FFFF,7E 27 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00) registersymbol(codeUpdateJindByOutCards) codeUpdateJindByOutCards: nop 2 aobscanregion(codeUpdateJindByRes,CardEventImpl:UpdateJindByRes,CardEventImpl:UpdateJindByRes+FFFF,7E 27 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00) registersymbol(codeUpdateJindByRes) codeUpdateJindByRes: nop 2 aobscanregion(codeUpdateJindByYal,CardEventImpl:UpdateJindByYal,CardEventImpl:UpdateJindByYal+FFFF,7E 27 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00) registersymbol(codeUpdateJindByYal) codeUpdateJindByYal: nop 2 aobscanregion(codeUpdateJindV,CardEventImpl:UpdateJindV,CardEventImpl:UpdateJindV+FFFF,7E 27 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00) registersymbol(codeUpdateJindV) codeUpdateJindV: nop 2 aobscanregion(codeUpdateJindVRandom,CardEventImpl:UpdateJindVRandom,CardEventImpl:UpdateJindVRandom+FFFF,7E 27 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00) registersymbol(codeUpdateJindVRandom) codeUpdateJindVRandom: nop 2 [DISABLE] unregistersymbol(*) codeUpdateJindB: db 7E 27 codeUpdateJindByEnergy: db 7E 27 codeUpdateJindByJind: db 7E 27 codeUpdateJindByOutCards: db 7E 27 codeUpdateJindByRes: db 7E 27 codeUpdateJindByYal: db 7E 27 codeUpdateJindV: db 7E 27 codeUpdateJindVRandom: db 7E 27 </AssemblerScript> </CheatEntry> <CheatEntry> <ID>8</ID> <Description>"压力"</Description> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] aobscanregion(codeUpdatePressure,BaseImpl:UpdatePressure,BaseImpl:UpdatePressure+FFFF,03 CF 89 88 E0 00 00 00) registersymbol(codeUpdatePressure) codeUpdatePressure: xor ecx,ecx aobscanregion(codeUpdateYal,CardEventImpl:UpdateYal,CardEventImpl:UpdateYal+FFFF,03 CF 89 88 B0 00 00 00) registersymbol(codeUpdateYal) codeUpdateYal: xor ecx,ecx aobscanregion(codeUpdateYalBfb,CardEventImpl:UpdateYalBfb,CardEventImpl:UpdateYalBfb+FFFF,7D 17 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00) registersymbol(codeUpdateYalBfb) codeUpdateYalBfb: nop 2 [DISABLE] unregistersymbol(*) codeUpdatePressure: db 03 CF //add ecx,edi codeUpdateYal: db 03 CF //add ecx,edi codeUpdateYalBfb: db 7D 17 // jnl CardEventImpl:UpdateYalBfb+11e
Part.2
</AssemblerScript> </CheatEntry> <CheatEntry> <ID>12</ID> <Description>"行动力"</Description> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] aobscanregion(codeUpdateEnergyReduceHalf,UpdateImpl:UpdateEnergyReduceHalf,UpdateImpl:UpdateEnergyReduceHalf+FFFF,48 63 46 18 85 C0 0F 8E) registersymbol(codeUpdateEnergyReduceHalf) codeUpdateEnergyReduceHalf: db 48 31 C0 90 // xor rax, rax // NOP aobscanregion(codeUpdateEnergy1,EnergyImpl:UpdateEnergy,EnergyImpl:UpdateEnergy+FFFF,48 63 48 1C 2B CF) registersymbol(codeUpdateEnergy1) codeUpdateEnergy1: mov rcx, dword ptr [rax+18] nop 2 aobscanregion(codeUpdateEnergy2,EnergyImpl:UpdateEnergy,EnergyImpl:UpdateEnergy+FFFF,48 63 48 24 2B CF) registersymbol(codeUpdateEnergy2) codeUpdateEnergy2: mov ecx,dword ptr [rax+20] nop 3 [DISABLE] unregistersymbol(*) codeUpdateEnergyReduceHalf: db 48 63 46 18 //movsxd rax,dword ptr [rsi+18] codeUpdateEnergy1: db 48 63 48 1C 2B CF //movsxd rcx,dword ptr [rax+1C] //sub ecx,edi codeUpdateEnergy2: db 48 63 48 24 2B CF //movsxd rcx,dword ptr [rax+24] //sub ecx,edi </AssemblerScript> </CheatEntry> <CheatEntry> <ID>34</ID> <Description>"好感"</Description> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] aobscanregion(codeUpdateNpcFeel,NpcImpl:UpdateNpcFeel,NpcImpl:UpdateNpcFeel+FFFF,F0 00 00 00 3B C1 7E 14 49) registersymbol(codeUpdateNpcFeel) codeUpdateNpcFeel+6: nop 2 [DISABLE] unregistersymbol(*) codeUpdateNpcFeel+6: db 7E 14 //jle NpcImpl:UpdateNpcFeel+b0 </AssemblerScript> </CheatEntry> <CheatEntry> <ID>51</ID> <Description>"开发模式(LCtrl+LAlt+1,LCtrl+LAlt+2是命令行模式)"</Description> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] aobscanregion(codeHUDPanelUpdate,HUDPanel:Update,HUDPanel:Update+FFFF,33 C0 48 0F B6 F8) registersymbol(codeHUDPanelUpdate) codeHUDPanelUpdate: db 48 31 FF 48 FF C7 //xor rdi,rdi //inc rdi aobscanregion(codePopupEditorPanelShow,PopupEditorPanel:Show,PopupEditorPanel:Show+FFFF,0F 84 60 00 00 00 45 33 ED) registersymbol(codePopupEditorPanelShow) codePopupEditorPanelShow: NOP 6 [DISABLE] unregistersymbol(*) codeHUDPanelUpdate: db 33 C0 48 0F B6 F8 //xor eax,eax //movzx rdi,al codePopupEditorPanelShow: db 0F 84 60 00 00 00 // je PopupEditorPanel:Show+2ab </AssemblerScript> </CheatEntry> </CheatEntries> </CheatEntry> <CheatEntry> <ID>17</ID> <Description>"参考"</Description> <Options moHideChildren="1" moManualExpandCollapse="1" moDeactivateChildrenAsWell="1"/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] alloc(newmem,2048) aobscanregion(codePlayerData,DataSys:get_PlayerData,DataSys:get_PlayerData+FFFF,48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00 48 85 C0) // should be unique registersymbol(codePlayerData) label(addrPlayerData) registersymbol(addrPlayerData) aobscanregion(codeCardGame,CardGame.CardGameManager:OnBoard,CardGame.CardGameManager:OnBoard+FFFF,48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00 48 8B 40 30) // should be unique registersymbol(codeCardGame) label(addrCardGame) registersymbol(addrCardGame) aobscanregion(codeMultiRuns,MultiRunsImpl:UpdateRuncoin,MultiRunsImpl:UpdateRuncoin+FFFF,48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 8B 00 48 63 48 18) // should be unique registersymbol(codeMultiRuns) label(addrMultiRuns) registersymbol(addrMultiRuns) newmem: addrPlayerData: readmem(codePlayerData+2,8) addrCardGame: readmem(codeCardGame+2,8) addrMultiRuns: readmem(codeMultiRuns+2,8) [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) unregistersymbol(*) //DataSys:get_PlayerData+8: //mov rax,0000022E7D07FC00 </AssemblerScript> <CheatEntries> <CheatEntry> <ID>48</ID> <Description>"多周目"</Description> <Options moHideChildren="1" moManualExpandCollapse="1" moDeactivateChildrenAsWell="1"/> <ShowAsSigned>0</ShowAsSigned> <GroupHeader>1</GroupHeader> <Address>addrMultiRuns</Address> <Offsets> <Offset>0</Offset> <Offset>0</Offset> </Offsets> <CheatEntries> <CheatEntry> <ID>49</ID> <Description>"钱"</Description> <ShowAsSigned>0</ShowAsSigned> <VariableType>4 Bytes</VariableType> <Address>+18</Address> </CheatEntry> </CheatEntries> </CheatEntry> <CheatEntry> <ID>19</ID> <Description>"玩家数据"</Description> <Options moHideChildren="1" moManualExpandCollapse="1" moDeactivateChildrenAsWell="1"/> <ShowAsSigned>0</ShowAsSigned> <GroupHeader>1</GroupHeader> <Address>addrPlayerData</Address> <Offsets> <Offset>0</Offset> <Offset>0</Offset> </Offsets> <CheatEntries> <CheatEntry> <ID>20</ID> <Description>"基础"</Description> <Options moHideChildren="1" moManualExpandCollapse="1" moDeactivateChildrenAsWell="1"/> <ShowAsSigned>0</ShowAsSigned> <GroupHeader>1</GroupHeader> <Address>+20</Address> <Offsets> <Offset>0</Offset> </Offsets> <CheatEntries> <CheatEntry> <ID>22</ID> <Description>"金钱"</Description> <ShowAsSigned>0</ShowAsSigned> <VariableType>Double</VariableType> <Address>+B0</Address> </CheatEntry> <CheatEntry> <ID>23</ID> <Description>"碎片"</Description> <ShowAsSigned>0</ShowAsSigned> <VariableType>4 Bytes</VariableType> <Address>+10C</Address> </CheatEntry> <CheatEntry> <ID>25</ID> <Description>"压力"</Description> <ShowAsSigned>0</ShowAsSigned> <VariableType>4 Bytes</VariableType> <Address>+90</Address> </CheatEntry> <CheatEntry> <ID>46</ID> <Description>"体重"</Description> <ShowAsSigned>0</ShowAsSigned> <VariableType>Float</VariableType> <Address>+DC</Address> </CheatEntry> </CheatEntries> </CheatEntry> <CheatEntry> <ID>21</ID> <Description>"属性"</Description> <Options moHideChildren="1" moManualExpandCollapse="1" moDeactivateChildrenAsWell="1"/> <ShowAsSigned>0</ShowAsSigned> <GroupHeader>1</GroupHeader> <Address>+28</Address> <Offsets> <Offset>0</Offset> </Offsets> <CheatEntries> <CheatEntry> <ID>26</ID> <Description>"健康"</Description> <ShowAsSigned>0</ShowAsSigned> <VariableType>Float</VariableType> <Address>+2C</Address> </CheatEntry>
Part.3
<CheatEntry> <ID>27</ID> <Description>"心情"</Description> <ShowAsSigned>1</ShowAsSigned> <VariableType>4 Bytes</VariableType> <Address>+30</Address> </CheatEntry> <CheatEntry> <ID>28</ID> <Description>"幸福"</Description> <ShowAsSigned>1</ShowAsSigned> <VariableType>Float</VariableType> <Address>+34</Address> </CheatEntry> <CheatEntry> <ID>29</ID> <Description>"颜值"</Description> <ShowAsSigned>1</ShowAsSigned> <VariableType>4 Bytes</VariableType> <Address>+38</Address> </CheatEntry> <CheatEntry> <ID>30</ID> <Description>"魅力"</Description> <ShowAsSigned>1</ShowAsSigned> <VariableType>4 Bytes</VariableType> <Address>+3C</Address> </CheatEntry> </CheatEntries> </CheatEntry> </CheatEntries> </CheatEntry> <CheatEntry> <ID>43</ID> <Description>"工作"</Description> <ShowAsSigned>0</ShowAsSigned> <GroupHeader>1</GroupHeader> <Address>addrCardGame</Address> <Offsets> <Offset>0</Offset> <Offset>0</Offset> </Offsets> </CheatEntry> <CheatEntry> <ID>47</ID> <Description>"创建人物界面LCtrl+LAlt+2:直接以特殊人物进入游戏"</Description> <GroupHeader>1</GroupHeader> </CheatEntry> </CheatEntries> </CheatEntry> </CheatEntries> </CheatEntry> </CheatEntries> <UserdefinedSymbols/> </CheatTable>
Mod说明
点击下载[github.com]
Mod有两个独立的插件。
  • NonUpgradableCardFilter 用于优化对于卡牌的排序。
  • TestSaveFolder 用于修改游戏的存档目录。
NonUpgradableCardFilter
使用此插件后,在进行卡牌排序时,总是会将不可升级的卡牌放到列表的最后面。

游戏原本的排序功能,会把不可升级的卡牌“参杂”在可升级卡牌中。

此功能主要是为了方便修改党获得大量碎片后,升级卡牌时使用自动化脚本。

TestSaveFolder

此插件用于迁移游戏存档位置。

插件会读取游戏的当前版本号,一旦发现是测试版本,

则游戏会将存档位置迁移到 C:\Users\<username>\AppData\LocalLow\XiaMenLeiYun\OfficeLife\Test_Save 目录下。

由于目前无法判断是否是测试版,所以需要手动设置游戏最新的正式版本号。

因此将此插件放入 BepInEx 目录后,需要 先运行一次游戏,以生成插件的配置文件。

BepInEx\config\YY.OfficeLifePlugin.TestSaveFolder.cfg 是此项目的配置文件。

将配置文件中的 Last_Release 字段设为当前游戏最新的正式版本号 (例如 "1.0.0"),再次运行游戏即可。

之后,一旦游戏正式版本再次更新,可以在此配置文件中更新。

此插件会将所有“不是最新的正式版本号”的游戏,一律视为测试版。