Module: R3EXS

Defined in:
lib/R3EXS.rb,
lib/R3EXS/ast.rb,
lib/R3EXS/error.rb,
lib/R3EXS/utils.rb,
lib/R3EXS/logger.rb,
lib/R3EXS/version.rb,
lib/R3EXS/RGSS3_R3EXS.rb,
lib/R3EXS/json_rvdata2.rb,
lib/R3EXS/rvdata2_json.rb,
lib/R3EXS/inject_strings.rb,
lib/R3EXS/extract_strings.rb

Overview

R3EXS 主模块

Defined Under Namespace

Modules: Utils Classes: Actor, Animation, Armor, BaseItem, Class, CommonEvent, Enemy, EquipItem, Event, EventCommand, Item, JsonDirError, Logger, ManualTransFilePathError, Map, MapInfo, ModuleNameError, MoveCommand, MoveRoute, R3EXSJsonFileError, RGSS3AFileError, RPGJsonFileError, Rvdata2DirError, Rvdata2PathError, ScriptsInfoPathError, Skill, State, StringsExtractor, StringsInjector, System, Tileset, Troop, UsableItem, Weapon

Constant Summary collapse

VERSION =

版本号

'2.0.0'
EVENT_COMMANDS =

事件指令的命令名称

{
  0 => 'Empty',

  #     [string(Face Graphic name)]---[int(Face Graphic index)]---[int:{0:Normal Window, 1:Dim Background, 2:Transparent}]---[int:{0:Top, 1:Middle, 2:Bottom}]---END
  101 => 'ShowTextAttributes',

  #     [Array<string>(Choices Array)]---[int:{0:Disallow, 1:Choice 1, 2:Choice 2, 3:Choice 3, 4:Choice 4, 5:Branch}(When Cancel)]---END
  102 => 'ShowChoices',

  #     [int(Variable for Number)]---[int:{1~8}(Digits)]---END
  103 => 'InputNumber',

  #     [int(Variable for Item ID)]---END
  104 => 'SelectKeyItem',

  #     [int:{1~8}(Speed)]---[bool(No Fast Forward)]---END
  105 => 'ShowScrollingTextAttributes',

  #     [string]---END
  108 => 'Comment',

  #     |--[int:0(Switch)]---[int(Switch ID)]---[int{0:ON, 1:OFF}]---END
  #     |
  #     |                                          |--[int:0(Compare to Constant)]---[int(Number)]-------|
  #     |--[int:1(Variable)]---[int(Variable ID)]--|                                                     |--[int{0:==, 1:>=, 2:<=, 3:>, 4:<, 5:!=}]---END
  #     |                                          |--[int:1(Compare to Variable)]---[int(Variable ID)]--|
  #     |
  #     |--[int:2(Self Switch)]---[string{'A', 'B', 'C', 'D'}]---[int{0:ON, 1:OFF}]---END
  #     |
  #     |--[int:3(Timer)]---[int:{0~5999}(sec)]---[int{0:>=, 1:<=}]---END
  #     |
  #     |                                          |--[int:0(In the Party)]---END
  #     |                                          |
  #     |                                          |--[int:1(Name)]---[string]---END
  #     |                                          |
  #     |                                          |--[int:2(Class)]---[int(Class ID)]---END
  #     |                                          |
  #     |--[int:4(Actor)]---[int(Actor ID)]--------|--[int:3(Skill)]---[int(Skill ID)]---END
  #     |                                          |
  #     |                                          |--[int:4(Weapon)]---[int(Weapon ID)]---END
  #     |                                          |
  #     |                                          |--[int:5(Armor)]---[int(Armor ID)]---END
  #     |                                          |
  #     |                                          |--[int:6(State)]---[int(State ID)]---END
  #     |
  #     |                                          |--[int:0(Appeared)---END
  #     |--[int:5(Enemy)]---[int(Enemy ID)]--------|
  #     |                                          |--[int:1(State)]---[int(State ID)]---END
  #     |
  #     |--[int:6(Character)]---[int:{-1:Player, 0:This event, 1:EV001, ...}]---[int:{2:Down, 4:Left, 6:Right, 8:Up}]---END
  #     |
  #     |--[int:7(Gold)]---[int(Money)]---[int{0:>=, 1:<=, 2:<}]---END
  #     |
  #     |--[int:8(Item)]---[int(Item ID)]---END
  #     |
  #     |--[int:9(Weapon)]---[int(Weapon ID)]---[bool(Include Equipments)]---END
  #     |
  #     |--[int:10(Armor)]---[int(Armor ID)]---[bool(Include Equipments)]---END
  #     |
  #     |--[int:11(Button)]---[int:{2:Down, 4:Left, 6:Right, 8:Up, 11:A, 12:B, 13:C, 14:X, 15:Y, 16:Z, 17:L, 18:R}]---END
  #     |
  #     |--[int:12(Script)]---[string]---END
  #     |
  #     |--[int:13(Vehicle)]---[int:{0:Boat, 1:Ship, 2:Airship}]---END
  111 => 'ConditionalBranch',
  112 => 'Loop',
  113 => 'BreakLoop',
  115 => 'ExitEventProcessing',

  #     [int(Common Event ID)]---END
  117 => 'CallCommonEvent',

  #     [string]---END
  118 => 'Label',

  #     [string]---END
  119 => 'JumpToLabel',

  #     [int(Switch Begin ID)]---[int(Switch End ID)]---[int:{0:ON, 1:OFF}]---END
  121 => 'ControlSwitches',

  #                                                                                                           |--[int:0(Constant)]---[int(Number)]---END
  #                                                                                                           |
  #                                                                                                           |--[int:1(Variable)]---[int(Variable ID)]---END
  #                                                                                                           |
  #                                                                                                           |--[int:2(Random)]---[int(Min)]---[int(Max)]---END
  #                                                                                                           |
  #                                                                                                           |                      |--[int:{0:Item, 1:Weapon, 2:Armor}]---[int(Corresponded Item ID)]---[int:0]---END
  #                                                                                                           |                      |
  #     [int(Variable Begin ID)]---[int(Variable End ID)]---[int:{0:Set, 1:Add, 2:Sub, 3:Mul, 4:Div, 5:Mod}]--|                      |--[int:3(Actor)]---[int:(Actor ID)]---[int:{0:Level, 1:EXP, 2:HP, 3:MP, 4:MHP, 5:MMP, 6:ATK, 7:DEF, 8:MAT, 9:MDF, 10:AGI, 11:LUK}]---END
  #                                                                                                           |                      |
  #                                                                                                           |                      |--[int:4(Enemy)]---[int:(Enemy ID)]---[int:{0:HP, 1:MP, 2:MHP, 3:MMP, 4:ATK, 5:DEF, 6:MAT, 7:MDF, 8:AGI, 9:LUK}]---END
  #                                                                                                           |--[int:3(Game Data)]--|
  #                                                                                                           |                      |--[int:5(Character)]---[int:{-1:Player, 0:This Event, 1:EV001, ...}]---[int:{0:Map X, 1:Map Y, 2:Direction, 3:Screen X ,4:Screen Y}]---END
  #                                                                                                           |                      |
  #                                                                                                           |                      |--[int:6(Party)]---[int:{0~7}(Member ID)]---[int:0]---END
  #                                                                                                           |                      |
  #                                                                                                           |                      |--[int:7(Other)]---[int:{0(Map ID), 1(Party Members), 2(Gold), 3(Steps), 4(Play Time), 5(Timer), 6(Save Count), 7(Battle Count)}]---[int:0]---END
  #                                                                                                           |
  #                                                                                                           |--[int:4(Scripts)]---[string]---END
  122 => 'ControlVariables',

  #     [string:{'A', 'B', 'C', 'D'}(Self Switch Name)]---[int:{0:ON, 1:OFF}]---END
  123 => 'ControlSelfSwitch',

  #     [int:{0:Start, 1:Stop}]---[int:{0~5999}(sec)]---END
  124 => 'ControlTimer',

  #                                     |--[int:0(Constant)]---[int:{0~9999999}(Number)]---END
  #     [int:{0:Increase, 1:Decrease}]--|
  #                                     |--[int:1(Variable)]---[int(Variable ID)]---END
  125 => 'ChangeGold',

  #                                                      |--[int:0(Constant)]---[int:{0~9999999}(Number)]---END
  #     [int(Item ID)]---[int:{0:Increase, 1:Decrease}]--|
  #                                                      |--[int:1(Variable)]---[int(Variable ID)]---END
  126 => 'ChangeItems',

  #                                             |--[int:0(Constant)]---[int:{0~9999999}(Number)]--|
  #                       |--[int:0(Increase)]--|                                                 |--[bool:false(Include Equipment)]---END
  #                       |                     |--[int:1(Variable)]---[int(Variable ID)]---------|
  #     [int(Weapon ID)]--|
  #                       |                     |--[int:0(Constant)]---[int:{0~9999999}(Number)]--|
  #                       |--[int:1(Decrease)]--|                                                 |--[bool(Include Equipment)]---END
  #                                             |--[int:1(Variable)]---[int(Variable ID)]---------|
  127 => 'ChangeWeapons',

  #                                            |--[int:0(Constant)]---[int:{0~9999999}(Number)]--|
  #                      |--[int:0(Increase)]--|                                                 |--[bool:false(Include Equipment)]---END
  #                      |                     |--[int:1(Variable)]---[int(Variable ID)]---------|
  #     [int(Armor ID)]--|
  #                      |                     |--[int:0(Constant)]---[int:{0~9999999}(Number)]--|
  #                      |--[int:1(Decrease)]--|                                                 |--[bool(Include Equipment)]---END
  #                                            |--[int:1(Variable)]---[int(Variable ID)]---------|
  128 => 'ChangeArmor',

  #     [int(Actor ID)]---[int:{0:Add, 1:Remove}]---[int:{0:NO, 1:YES}(Initialize)]---END
  129 => 'ChangePartyMember',

  #     [RPG::BGM]---END
  132 => 'ChangeBattleBGM',

  #     [RPG::ME]---END
  133 => 'ChangeBattleEndME',

  #     [int:{0:Disable, 1:Enable}]---END
  134 => 'ChangeSaveAccess',

  #     [int:{0:Disable, 1:Enable}]---END
  135 => 'ChangeMenuAccess',

  #     [int:{0:Disable, 1:Enable}]---END
  136 => 'ChangeEncounter',

  #     [int:{0:Disable, 1:Enable}]---END
  137 => 'ChangeFormationAccess',

  #     [RPG::Tone]---END
  138 => 'ChangeWindowColor',

  #     |--[int:0(Direct Designation)]---[int(Map ID)]---[int(Map X)]---[int(Map Y)]-------------------------------------------------------------------------------------|
  #     |                                                                                                                                                                |--[int:{0:Retain, 2:Down, 4:Left, 6:Right, 8:Up}(Direction)]---[int:{0:Normal, 1:White, 2:None}(Fade)]---END
  #     |--[int:1(Designation with Variables)]---[int(Map ID Corresponded Variable ID)]---[int(Map X Corresponded Variable ID)]---[int(Map Y Corresponded Variable ID)]--|
  201 => 'TransferPlayer',

  #                                        |--[int:0(Direct Designation)]---[int(Map ID)]---[int(Map X)]---[int(Map Y)]---END
  #     [int:{0:Boat, 1:Ship, 2:Airship}]--|
  #                                        |--[int:1(Designation with Variables)]---[int(Map ID Corresponded Variable ID)]---[int(Map X Corresponded Variable ID)]---[int(Map Y Corresponded Variable ID)]---END
  202 => 'SetVehicleLocation',

  #                                                 |--[int:0(Direct Designation)]---[int(Map X)]---[int(Map Y)]------------------------------------------------------------|
  #                                                 |                                                                                                                       |
  #     [int:{0:This Event, 1:EV001, ...}]----------|--[int:1(Designation with Variables)]---[int(Map X Corresponded Variable ID)]---[int(Map Y Corresponded Variable ID)]--|--[int:{0:Retain, 2:Down, 4:Left, 6:Right, 8:Up}(Direction)]---END
  #                                                 |                                                                                                                       |
  #                                                 |--[int:2(Exchange with Another Event)]---[int(Exchanged Event ID)]---[int:0]-------------------------------------------|
  203 => 'SetEventLocation',

  #     [int:{2:Down, 4:Left, 6:Right, 8:Up}]---[int:{0~100}(Distance)]---[int:{1:1/8 Speed, 2:1/4 Speed, 3:1/2 Speed, 4:Normal, 5:2 Speed, 6:4 Speed}]---END
  204 => 'ScrollMap',

  #     [int:{-1:Player, 0:This Event, 1:EV001, ...}]---[RPG::MoveRoute(45 is Script)]---END
  205 => 'SetMoveRoute',

  #     END
  206 => 'GetSwitchVehicle',

  #     [int:{0:ON, 1:OFF}]---END
  211 => 'ChangeTransparency',

  #     [int:{-1:Player, 0:This Event, 1:EV001, ...}]---[int(Animation ID)]---[bool(Wait for Completion)]---END
  212 => 'ShowAnimation',

  #     [int:{-1:Player, 0:This Event, 1:EV001, ...}]---[int(Ballon Icon ID)]---[bool(Wait for Completion)]---END
  213 => 'ShowBalloonIcon',
  214 => 'EraseEvent',

  #     [int:{0:ON, 1:OFF}]---END
  216 => 'ChangePlayerFollowers',
  217 => 'GatherFollowers',
  221 => 'FadeoutScreen',
  222 => 'FadeinScreen',

  #     [RPG::Tone]---[int:{0~600}(Time 1/60 sec)]---[bool(Wait for Completion)]---END
  223 => 'TintScreen',

  #     [RPG::Color]---[int:{0~600}(Time 1/60 sec)]---[bool(Wait for Completion)]---END
  224 => 'FlashScreen',

  #     [int:{1~9}(Power)]---[int:{1~9}(Speed)]---[int:{0~600}(Time 1/60 sec)]---[bool(Wait for Completion)]---END
  225 => 'ShakeScreen',

  #     [int:{0~999}(Time 1/60 sec)]---END
  230 => 'Wait',

  #                                                                                                      |--[int:0(Constant)]---[int:{-9999~9999}(Map X)]---[int:{-9999~9999}(Map Y)]--------------------------|
  #     [int:{1~100}(Number)]---[string(Picture Graphic Name)]---[int:{0:Upper Left, 1:Center}(Origin)]--|                                                                                                     |--[int:{0~2000}(Width %)]---[int:{0~2000}(Height %)]---[int:{0~255}(Opacity)]---[int:{0:Normal, 1:Add, 2:Sub}]---END
  #                                                                                                      |--[int:1(Variable)]---[int(Map X Corresponded Variable ID)]---[int(Map Y Corresponded Variable ID)]--|
  231 => 'ShowPicture',

  #                                                                     |--[int:0(Constant)]---[int:{-9999~9999}(Map X)]---[int:{-9999~9999}(Map Y)]--------------------------|
  #     [int:{1~100}(Number)]---[int:{0:Upper Left, 1:Center}(Origin)]--|                                                                                                     |--[int:{0~2000}(Width %)]---[int:{0~2000}(Height %)]---[int:{0~255}(Opacity)]---[int:{0:Normal, 1:Add, 2:Sub}]---[int:{0~600}(Time 1/60 sec)]---[bool(Wait for Completion)]---END
  #                                                                     |--[int:1(Variable)]---[int(Map X Corresponded Variable ID)]---[int(Map Y Corresponded Variable ID)]--|
  232 => 'MovePicture',

  #     [int:{1~100}(Number)]-[int:{-90~90}(Speed)]--END
  233 => 'RotatePicture',

  #     [int:{1~100}(Number)]---[RPG::Tone]---[int:{0~600}(Time 1/60 sec)]---[bool(Wait for Completion)]---END
  234 => 'TintPicture',

  #     [int:{1~100}(Number)]---END
  235 => 'ErasePicture',

  #     [string:{":none", ":rain", ":storm", ":snow"}]---[int:{0~9}(Power)]---[int:{0~600}(Time 1/60 sec)]---[bool(Wait for Completion)]---END
  236 => 'SetWeatherEffects',

  #     [RPG::BGM]---END
  241 => 'PlayBGM',

  #     [int:{1~60}(Time sec)]---END
  242 => 'FadeoutBGM',
  243 => 'SaveBGM',
  244 => 'ReplayBGM',

  #     [RPG::BGM]---END
  245 => 'PlayBGS',

  #     [int:{1~60}(Time sec)]---END
  246 => 'FadeoutBGS',

  #     [RPG::ME]---END
  249 => 'PlayME',

  #     [RPG::SE]---END
  250 => 'PlaySE',
  251 => 'StopSE',

  #     [string(Movie Name)]---END
  261 => 'PlayMovie',

  #     [int:{0:ON, 1:OFF}]---END
  281 => 'ChangeMapNameDisplay',

  #     [int(Tileset ID)]---END
  282 => 'ChangeTileset',

  #     [string(Floor Picture)]---[string(Wall Picture)]---END
  283 => 'ChangeBattleBack',

  #     [string(Distant view Picture)]---[bool(Loop Horizontal)]---[bool(Loop Vertical)]---[int(-32~32)(Horizontal Scroll)]---[int(-32~32)(Vertical Scroll)]---END
  284 => 'ChangeParallaxBack',

  #                                                                                                                                                   |--[int:0(Direct Designation)]---[int(Map X)]---[int(Map Y)]---END
  #     [int(Variable for Info)]---[int:{0:Terrain, 1:Event ID, 2:Tile ID(Layer 1), 3:Tile ID(Layer 2), 4:Tile ID(Layer 3), 5:Region ID}(Info Type)]--|
  #                                                                                                                                                   |--[int:1(Designation with Variables)]---[int(Map X Corresponded Variable ID)]---[int(Map Y Corresponded Variable ID)]---END
  285 => 'GetLocationInfo',

  #     |--[int:0(Direct Designation)]---[int(Enemy ID)]-----------------------------------|
  #     |                                                                                  |--[bool(Can Escape)]---[bool(Continue Even When Loser)]---END
  #     |--[int:1(Designation with Variables)]---[int(Enemy ID Corresponded Variable ID)]--|
  301 => 'BattleProcessing',

  #                                                                      |--[int:0(Price: Standard)]---[int:0]------------------|
  #     [int:{0:Item, 1:Weapon, 2:Armor}]---[int(Corresponded Item ID)]--|                                                      |--[bool(Purchase Only)]---END
  #                                                                      |--[int:1(Price: Specify)]---[int:{0~9999999}(Price)]--|
  302 => 'ShopProcessing',

  #     [int(Actor ID)]---[int:{1~16}(Max Characters)]---END
  303 => 'NameInputProcessing',

  #                                                                                         |--[int:0(Constant)]---[int:{1~9999}(Number)]--|
  #                                                                   |--[int:0(Increase)]--|                                              |--[bool:false(Allow Knockout)]---END
  #                                                                   |                     |--[int:1(Variable)]---[int(Variable ID)]------|
  #     |--[int:0(Fixed)]---[int:{0:Entire Party, 1:Actor 001, ...}]--|
  #     |                                                             |                     |--[int:0(Constant)]---[int:{1~9999}(Number)]--|
  #     |                                                             |--[int:1(Decrease)]--|                                              |--[bool(Allow Knockout)]---END
  #     |                                                                                   |--[int:1(Variable)]---[int(Variable ID)]------|
  #     |
  #     |                                                                                     |--[int:0(Constant)]---[int:{1~9999}(Number)]--|
  #     |                                                               |--[int:0(Increase)]--|                                              |--[bool:false(Allow Knockout)]---END
  #     |                                                               |                     |--[int:1(Variable)]---[int(Variable ID)]------|
  #     |--[int:1(Variable)]---[int(Variable ID)]-----------------------|
  #                                                                     |                     |--[int:0(Constant)]---[int:{1~9999}(Number)]--|
  #                                                                     |--[int:1(Decrease)]--|                                              |--[bool(Allow Knockout)]---END
  #                                                                                           |--[int:1(Variable)]---[int(Variable ID)]------|
  311 => 'ChangeHP',

  #     |--[int:0(Fixed)]---[int:{0:Entire Party, 1:Actor 001, ...}]--|                                  |--[int:0(Constant)]---[int:{1~9999}(Number)]---END
  #     |                                                             |--[int:{0:Increase, 1:Decrease}]--|
  #     |--[int:1(Variable)]---[int(Variable ID)]---------------------|                                  |--[int:1(Variable)]---[int(Variable ID)]---END
  312 => 'ChangeMP',

  #     |--[int:0(Fixed)]---[int:{0:Entire Party, 1:Actor 001, ...}]--|
  #     |                                                             |--[int:{0:Add, 1:Remove}]---[int(State ID)]---END
  #     |--[int:1(Variable)]---[int(Variable ID)]---------------------|
  313 => 'ChangeState',

  #     |--[int:0(Fixed)]---[int:{0:Entire Party, 1:Actor 001, ...}]---END
  #     |
  #     |--[int:1(Variable)]---[int(Variable ID)]---END
  314 => 'RecoverAll',

  #                                                                                         |--[int:0(:Constant)]---[int:{1~9999999}(Number)]--|
  #                                                                   |--[int:0(Increase)]--|                                                  |--[bool(Show Level Up Message)]---END
  #                                                                   |                     |--[int:1(Variable)]---[int(Variable ID)]----------|
  #     |--[int:0(Fixed)]---[int:{0:Entire Party, 1:Actor 001, ...}]--|
  #     |                                                             |                     |--[int:0(Constant)]---[int:{1~9999999}(Number)]--|
  #     |                                                             |--[int:1(Decrease)]--|                                                 |--[bool:false(Show Level Up Message)]---END
  #     |                                                                                   |--[int:1(Variable)]------------------------------|
  #     |
  #     |                                                                                   |--[int:0(Constant)]---[int:{1~9999999}(Number)]--|
  #     |                                                             |--[int:0(Increase)]--|                                                 |--[bool(Show Level Up Message)]---END
  #     |                                                             |                     |--[int:1(Variable)]---[int(Variable ID)]---------|
  #     |--[int:1(Variable)]---[int(Variable ID)]---------------------|
  #                                                                   |                     |--[int:0(Constant)]---[int:{1~9999999}(Number)]--|
  #                                                                   |--[int:1(Decrease)]--|                                                 |--[bool:false(Show Level Up Message)]---END
  #                                                                                         |--[int:1(Variable)]---[int(Variable ID)]---------|
  315 => 'ChangeEXP',

  #                                                                                         |--[int:0(Constant)]---[int:{1~98}(Number)]--|
  #                                                                   |--[int:0(Increase)]--|                                            |--[bool(Show Level Up Message)]---END
  #                                                                   |                     |--[int:1(Variable)]---[int(Variable ID)]----|
  #     |--[int:0(Fixed)]---[int:{0:Entire Party, 1:Actor 001, ...}]--|
  #     |                                                             |                     |--[int:0(Constant)]---[int:{1~98}(Number)]--|
  #     |                                                             |--[int:1(Decrease)]--|                                            |--[bool:false(Show Level Up Message)]---END
  #     |                                                                                   |--[int:1(Variable)]---[int(Variable ID)]----|
  #     |
  #     |                                                                                   |--[int:0(Constant)]---[int:{1~98}(Number)]--|
  #     |                                                             |--[int:0(Increase)]--|                                            |--[bool(Show Level Up Message)]---END
  #     |                                                             |                     |--[int:1(Variable)]---[int(Variable ID)]----|
  #     |--[int:1(Variable)]---[int(Variable ID)]---------------------|
  #                                                                   |                     |--[int:0(Constant)]---[int:{1~98}(Number)]--|
  #                                                                   |--[int:1(Decrease)]--|                                            |--[bool:false(Show Level Up Message)]---END
  #                                                                                       |--[int:1(Variable)]---[int(Variable ID)]------|
  316 => 'ChangeLevel',

  #     |--[int:0(Fixed)]---[int:{0:Entire Party, 1:Actor 001, ...}]--|                                                                                                   |--[int:0(Constant)]---[int:{0~9999999}(Number)]---END
  #     |                                                             |--[int:{0:MHP, 1:MMP, 2:ATK, 3:DEF, 4:MAT, 5:MDF, 6:AGI, 7:LUK}]---[int:{0:Increase, 1:Decrease}]--|
  #     |--[int:1(Variable)]---[int(Variable ID)]---------------------|                                                                                                   |--[int:1(Variable)]---[int(Variable ID)]---END
  317 => 'ChangeParameters',

  #     |--[int:0(Fixed)]---[int:{0:Entire Party, 1:Actor 001, ...}]--|
  #     |                                                             |--[int:{0:Learn, 1:Forget}]---[int(Skill ID)]---END
  #     |--[int:1(Variable)]---[int(Variable ID)]---------------------|
  318 => 'ChangeSkills',

  #     [int(Actor ID)]---[int:{0:Weapon, 1:Shield, 2:Head, 3:Boby, 4:Accessory}]---[int:{0:None, 1:Equipment 001, ...}(Equipment ID)]---END
  319 => 'ChangeEquipment',

  #     [int(Actor ID)]---[string(New Actor Name)]---END
  320 => 'ChangeActorName',

  #     [int(Actor ID)]---[int(New Class ID)]---END
  321 => 'ChangeActorClass',

  #     [int(Actor ID)]---[string(New Actor walking Picture Name)]---[int(New Actor Walking Picture Index)]---[string(New Actor Portrait Picture Name)]---[int(New Actor Portrait Picture Index)]---END
  322 => 'ChangeActorGraphic',

  #     [int:{0:Boat, 1:Ship, 2:Airship}]---[string(New Vehicle Picture Name)]---[int(New Vehicle Picture Index)]---END
  323 => 'ChangeVehicleGraphic',

  #     [int(Actor ID)]---[string(New Actor Nickname)]---END
  324 => 'ChangeActorNickname',

  #                                                                      |--[int:0(Constant)]---[int:{1~999999}(Number)]--|
  #                                                |--[int:0(Increase)]--|                                                |--[bool:false(Allow Knockout)]---END
  #                                                |                     |--[int:1(Variable)]---[int(Variable ID)]--------|
  #     [int:{-1:Entire Troop, 0:Troop 001, ...}]--|
  #                                                |                     |--[int:0(Constant)]---[int:{1~999999}(Number)]--|
  #                                                |--[int:1(Decrease)]--|                                                |--[bool(Allow Knockout)]---END
  #                                                                      |--[int:1(Variable)]---[int(Variable ID)]--------|
  #
  331 => 'ChangeEnemyHP',

  #                                                                                 |--[int:0(Constant)]---[int:{1~9999}(Number)]---END
  #     [int:{-1:Entire Troop, 0:Troop 001, ...}]---[int:{0:Increase, 1:Decrease}]--|
  #                                                                                 |--[int:1(Variable)]---[int(Variable ID)]---END
  332 => 'ChangeEnemyMP',

  #     [int:{-1:Entire Troop, 0:Troop 001, ...}]---[int:{0:Add, 1:Remove}]---[int(State ID)]---END
  333 => 'ChangeEnemyState',

  #     [int:{-1:Entire Troop, 0:Troop 001, ...}]---END
  334 => 'EnemyRecoverAll',

  #     [int:{-1:Entire Troop, 0:Troop 001, ...}]---END
  335 => 'EnemyAppear',

  #     [int(Troop ID)]---[int(Enemy ID)]---END
  336 => 'EnemyTransform',

  #     [int:{-1:Entire Troop, 0:Troop 001, ...}]---[int(Animation ID)]---END
  337 => 'ShowBattleAnimation',

  #     |--[int:0(Enemy)]---[int(Troop ID)]--|
  #     |                                    |--[int(Skill ID)]---[int:{-2:Last Target, -1:Random, 0:Index 1,...}]---END
  #     |--[int:1(Actor)]---[int(Actor ID)]--|
  339 => 'ForceAction',
  340 => 'AbortBattle',
  351 => 'OpenMenuScreen',
  352 => 'OpenSaveScreen',
  353 => 'GameOver',
  354 => 'ReturnToTitleScreen',

  #     [string]---END
  355 => 'Script',

  #     [string]---END
  401 => 'ShowText',

  #     [int(Choice Index)]---[string(Choice Name)]---END
  402 => 'When',
  403 => 'WhenCancel',
  404 => 'ChoicesEnd',

  #     [string]---END
  405 => 'ShowScrollingText',

  #     [string]---END
  408 => 'CommentMore',
  411 => 'Else',
  412 => 'BranchEnd',
  413 => 'RepeatAbove',

  #     [RPG::MoveCommand(45 is script)]---END
  505 => 'MoveRoute',
  601 => 'IfWin',
  602 => 'IfEscape',
  603 => 'IfLose',
  604 => 'BattleProcessingEnd',

  #                                                                      |--[int:0(Price: Standard)]---[int:0]---END
  #     [int:{0:Item, 1:Weapon, 2:Armor}]---[int(Corresponded Item ID)]--|
  #                                                                      |--[int:1(Price: Specify)]---[int:{0~9999999}(Price)]---END
  605 => 'ShopItem',

  #     [string]---END
  655 => 'ScriptMore'
}.freeze

Class Method Summary collapse

Class Method Details

.commonevents_json(commonevents, output_dir, complete) ⇒ void

This method returns an undefined value.

将 CommonEvents 对象数组序列化为分开的 JSON 文件

Parameters:

  • commonevents (Array<RPG::CommonEvent>)

    CommonEvents 对象数组

  • output_dir (Pathname)

    输出目录

  • complete (Boolean)

    是否序列化所有内容



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/R3EXS/rvdata2_json.rb', line 15

def self.commonevents_json(commonevents, output_dir, complete)
  if complete
    commonevents.each_with_index do |commonevent, index|
      file_path = output_dir.join("#{format('CommonEvent_%05d', index)}.json")
      Utils.object_json(commonevent, file_path)
      Logger.debug("Serialize   #{file_path}")
    end
  else
    commonevents = Utils.rpg_r3exs(commonevents, R3EXS::CommonEvent)
    commonevents.each do |commonevent|
      file_path = output_dir.join("#{format('CommonEvent_%05d', commonevent.index)}.json")
      Utils.object_json(commonevent, file_path)
      Logger.debug("Serialize   #{file_path}")
    end
  end
end

.commonevents_rvdata2(target_dir, output_dir, original_dir, complete) ⇒ void

This method returns an undefined value.

将 CommonEvent 文件反序列化为 rvdata2 文件

Parameters:

  • target_dir (Pathname)

    目标目录

  • output_dir (Pathname)

    输出目录

  • original_dir (Pathname)

    原始 rvdata2 文件目录

  • complete (Boolean)

    是否完全转换

Raises:



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/R3EXS/json_rvdata2.rb', line 21

def self.commonevents_rvdata2(target_dir, output_dir, original_dir, complete)
  if complete
    Utils.all_commonevent_json_files(target_dir, :RPG) do |commonevents, _, rvdata2_file_path|
      file_path = output_dir.join(rvdata2_file_path.relative_path_from(target_dir))
      Utils.object_rvdata2(commonevents, file_path)
      Logger.debug("Serialize   #{file_path}")
    end
  else
    Utils.all_commonevent_json_files(target_dir, :R3EXS) do |commonevents, _, rvdata2_file_path|
      file_path = output_dir.join(rvdata2_file_path.relative_path_from(target_dir))
      original_file_path = original_dir.join(rvdata2_file_path.relative_path_from(target_dir))
      # 检查 original_file_path 是否存在
      original_file_path.exist? or raise Rvdata2PathError, "Original rvdata2 file not found: #{original_file_path}"

      original_commonevents = Marshal.load(original_file_path.binread)
      Logger.debug("Deserialize #{original_file_path}")
      Utils.r3exs_rpg(commonevents, original_commonevents)
      Utils.object_rvdata2(original_commonevents, file_path)
      Logger.debug("Serialize   #{file_path}")
    end
  end
end

.ex_commonevents(target_dir) ⇒ Array<String>

提取 R3EXS 格式的 CommonEvent 文件中的字符串

Parameters:

  • target_dir (Pathname)

    目标目录

Returns:

Raises:



17
18
19
20
21
22
23
24
25
26
# File 'lib/R3EXS/extract_strings.rb', line 17

def self.ex_commonevents(target_dir)
  ex_strings = []
  Utils.all_commonevent_json_files(target_dir, :R3EXS) do |commonevents, commonevents_paths, _|
    commonevents.zip(commonevents_paths).each do |commonevent, commonevents_path|
      ex_strings.concat(commonevent.ex_strings)
      Logger.debug("Extract     #{commonevents_path}")
    end
  end
  ex_strings
end

.ex_regular(target_dir) ⇒ Array<String>

提取 R3EXS 格式的 常规 JSON 文件中的字符串

Parameters:

  • target_dir (Pathname)

    目标目录

Returns:

Raises:



55
56
57
58
59
60
61
62
# File 'lib/R3EXS/extract_strings.rb', line 55

def self.ex_regular(target_dir)
  ex_strings = []
  Utils.all_regular_json_files(target_dir, :R3EXS) do |obj, file_path|
    ex_strings.concat(Utils.ex_r3exs(obj))
    Logger.debug("Extract     #{file_path}")
  end
  ex_strings
end

.ex_scripts(target_dir, with_symbol) ⇒ Array<String>

提取 Ruby 源码中的字符串

Parameters:

  • target_dir (Pathname)

    目标目录

  • with_symbol (Boolean)

    是否包含脚本中的符号

Returns:

Raises:



36
37
38
39
40
41
42
43
44
45
# File 'lib/R3EXS/extract_strings.rb', line 36

def self.ex_scripts(target_dir, with_symbol)
  ex_strings = []
  Utils.all_rb_files(target_dir) do |scripts, _, scripts_paths, _, _|
    scripts.zip(scripts_paths).each do |script, scripts_path|
      ex_strings.concat(StringsExtractor.extract(script, with_symbol))
      Logger.debug("Extract     #{scripts_path}")
    end
  end
  ex_strings
end

.ex_strings(target_dir, output_dir, with_scripts, with_symbol, with_scripts_separate) ⇒ void

This method returns an undefined value.

提取指定目录下 R3EXS 格式的 JOSN 文件中的字符串

Parameters:

  • target_dir (Pathname)

    目标目录

  • output_dir (Pathname)

    输出目录

  • with_scripts (Boolean)

    是否包含脚本

  • with_symbol (Boolean)

    是否包含脚本中的符号

  • with_scripts_separate (Boolean)

    是否将脚本提取的字符串单独存放

Raises:



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/R3EXS/extract_strings.rb', line 76

def self.ex_strings(target_dir, output_dir, with_scripts, with_symbol, with_scripts_separate)
  all_ex_strings = []

  # 处理 CommonEvent_\d{5}.json 文件
  all_ex_strings.concat(ex_commonevents(target_dir))

  # 处理 Script_\d{3}.rb 文件
  if with_scripts
    rb_strings = ex_scripts(target_dir, with_symbol)
    # 单独输出脚本提取的字符串
    if with_scripts_separate
      Utils.object_json(rb_strings.to_h { |str| [str, str] }, output_dir.join('ManualTransFile_scripts.json'))
    else
      all_ex_strings.concat(rb_strings)
    end
  end

  # 处理常规 JSON 文件
  all_ex_strings.concat(ex_regular(target_dir))

  # 去除 nil 元素
  all_ex_strings.compact!
  Utils.object_json(all_ex_strings.to_h { |str| [str, str] }, output_dir.join('ManualTransFile.json'))
end

.in_commonevents(target_dir, output_dir, manual_trans_hash) ⇒ void

This method returns an undefined value.

注入 R3EXS 格式的 CommonEvent 文件中的字符串

Parameters:

  • target_dir (Pathname)

    目标目录

  • output_dir (Pathname)

    输出目录

  • manual_trans_hash (Hash{String => String})

    翻译结果

Raises:



19
20
21
22
23
24
25
26
27
28
# File 'lib/R3EXS/inject_strings.rb', line 19

def self.in_commonevents(target_dir, output_dir, manual_trans_hash)
  Utils.all_commonevent_json_files(target_dir, :R3EXS) do |commonevents, commonevents_paths, _|
    commonevents.zip(commonevents_paths).each do |commonevent, commonevents_path|
      file_path = output_dir.join(commonevents_path.relative_path_from(target_dir))
      commonevent.in_strings(manual_trans_hash)
      Utils.object_json(commonevent, file_path)
      Logger.debug("Inject      #{file_path}")
    end
  end
end

.in_regular(target_dir, output_dir, manual_trans_hash) ⇒ void

This method returns an undefined value.

注入 R3EXS 格式的 常规 JSON 文件中的字符串

Parameters:

  • target_dir (Pathname)

    目标目录

  • output_dir (Pathname)

    输出目录

  • manual_trans_hash (Hash{String => String})

    翻译结果

Raises:



61
62
63
64
65
66
67
68
# File 'lib/R3EXS/inject_strings.rb', line 61

def self.in_regular(target_dir, output_dir, manual_trans_hash)
  Utils.all_regular_json_files(target_dir, :R3EXS) do |obj, json_path|
    file_path = output_dir.join(json_path.relative_path_from(target_dir))
    Utils.in_r3exs(obj, manual_trans_hash)
    Utils.object_json(obj, file_path)
    Logger.debug("Inject      #{file_path}")
  end
end

.in_scripts(target_dir, output_dir, manual_trans_hash) ⇒ void

This method returns an undefined value.

注入 Ruby 源码中的字符串

Parameters:

  • target_dir (Pathname)

    目标目录

  • output_dir (Pathname)

    输出目录

  • manual_trans_hash (Hash{String => String})

    翻译结果

Raises:



40
41
42
43
44
45
46
47
48
49
# File 'lib/R3EXS/inject_strings.rb', line 40

def self.in_scripts(target_dir, output_dir, manual_trans_hash)
  Utils.all_rb_files(target_dir) do |scripts, script_info, scripts_paths, script_info_path, _|
    scripts.zip(scripts_paths).each do |script, scripts_path|
      file_path = output_dir.join(scripts_path.relative_path_from(target_dir))
      Utils.script_rb(StringsInjector.inject(script, manual_trans_hash), file_path)
      Logger.debug("Inject      #{file_path}")
    end
    Utils.object_json(script_info, output_dir.join(script_info_path.relative_path_from(target_dir)))
  end
end

.in_strings(target_dir, output_dir, manualtransfile_path, with_scripts) ⇒ void

This method returns an undefined value.

将指定目录下 R3EXS 格式的 JOSN 文件按照 ManualTransFile.json 翻译注入字符串

Parameters:

  • target_dir (Pathname)

    目标目录

  • output_dir (Pathname)

    输出目录

  • manualtransfile_path (Pathname)

    ManualTransFile.json 文件路径

  • with_scripts (Boolean)

    是否包含脚本

Raises:



83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/R3EXS/inject_strings.rb', line 83

def self.in_strings(target_dir, output_dir, manualtransfile_path, with_scripts)
  manualtransfile_path.exist? or raise ManualTransFilePathError, "ManualTransFile.json not found: #{manualtransfile_path}"
  manual_trans_hash = Oj.load_file(manualtransfile_path.to_s)

  # 处理 CommonEvent_\d{5}.json 文件
  in_commonevents(target_dir, output_dir, manual_trans_hash)

  # 处理 Script_\d{3}.rb 文件
  in_scripts(target_dir, output_dir, manual_trans_hash) if with_scripts

  # 处理常规的 JSON 文件
  in_regular(target_dir, output_dir, manual_trans_hash)
end

.json_rvdata2(target_dir, output_dir, original_dir, complete, with_scripts) ⇒ void

This method returns an undefined value.

将指定目录下的所有JSON文件反序列化为 rvdata2 文件

Parameters:

  • target_dir (Pathname)

    目标目录

  • output_dir (Pathname)

    输出目录

  • original_dir (Pathname)

    原始 rvdata2 文件目录

  • complete (Boolean)

    是否完全转换

  • with_scripts (Boolean)

    是否转换Scripts

Raises:



119
120
121
122
123
124
125
126
127
128
# File 'lib/R3EXS/json_rvdata2.rb', line 119

def self.json_rvdata2(target_dir, output_dir, original_dir, complete, with_scripts)
  # 处理 CommonEvent_\d{5}.json 文件
  commonevents_rvdata2(target_dir, output_dir, original_dir, complete)

  # 处理 Script_\d{3}.rb 文件
  scripts_rvdata2(target_dir, output_dir) if with_scripts

  # 处理常规 JSON 文件
  regular_rvdata2(target_dir, output_dir, original_dir, complete)
end

.regular_json(obj, klass, file_path, complete) ⇒ void

This method returns an undefined value.

将常规对象数组序列化为 JSON 文件

Parameters:

  • obj (Array<Object>)

    常规对象数组

  • klass (::Class)

    对应 R3EXS 模块的类

  • file_path (Pathname)

    输出文件路径

  • complete (Boolean)

    是否序列化所有内容



61
62
63
64
65
66
67
68
# File 'lib/R3EXS/rvdata2_json.rb', line 61

def self.regular_json(obj, klass, file_path, complete)
  if complete
    Utils.object_json(obj, file_path)
  else
    Utils.object_json(Utils.rpg_r3exs(obj, klass), file_path)
  end
  Logger.debug("Serialize   #{file_path}")
end

.regular_rvdata2(target_dir, output_dir, original_dir, complete) ⇒ void

This method returns an undefined value.

将常规 JSON 文件反序列化为 rvdata2 文件

Parameters:

  • target_dir (Pathname)

    目标目录

  • output_dir (Pathname)

    输出目录

  • original_dir (Pathname)

    原始 rvdata2 文件目录

  • complete (Boolean)

    是否完全转换

Raises:



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/R3EXS/json_rvdata2.rb', line 81

def self.regular_rvdata2(target_dir, output_dir, original_dir, complete)
  if complete
    Utils.all_regular_json_files(target_dir, :RPG) do |obj, obj_path|
      file_path = output_dir.join(obj_path.relative_path_from(target_dir)).sub_ext('.rvdata2')
      Utils.object_rvdata2(obj, file_path)
      Logger.debug("Serialize   #{file_path}")
    end
  else
    Utils.all_regular_json_files(target_dir, :R3EXS) do |obj, obj_path|
      file_path = output_dir.join(obj_path.relative_path_from(target_dir)).sub_ext('.rvdata2')
      original_file_path = original_dir.join(obj_path.relative_path_from(target_dir)).sub_ext('.rvdata2')
      # 检查 original_file_path 是否存在
      original_file_path.exist? or raise Rvdata2PathError, "Original rvdata2 file not found: #{original_file_path}"

      original_object = Marshal.load(original_file_path.binread)
      Logger.debug("Deserialize #{original_file_path}")
      Utils.r3exs_rpg(obj, original_object)
      Utils.object_rvdata2(original_object, file_path)
      Logger.debug("Serialize   #{file_path}")
    end
  end
end

.rvdata2_json(target_dir, output_dir, complete, with_scripts) ⇒ void

This method returns an undefined value.

将指定目录下的所有 rvdata2 文件序列化为 JSON 格式

Parameters:

  • target_dir (Pathname)

    目标目录

  • output_dir (Pathname)

    输出目录

  • complete (Boolean)

    是否序列化所有内容

  • with_scripts (Boolean)

    是否包含脚本

Raises:



80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/R3EXS/rvdata2_json.rb', line 80

def self.rvdata2_json(target_dir, output_dir, complete, with_scripts)
  Utils.all_rvdata2_files(target_dir) do |obj, klass, file_basename, rvdata2_path|
    file_path = output_dir.join(rvdata2_path.relative_path_from(target_dir)).sub_ext('.json')
    if file_basename.to_s == 'CommonEvents'
      commonevents_json(obj, file_path.sub_ext(''), complete)
    elsif file_basename.to_s == 'Scripts'
      scripts_rb(obj, file_path.sub_ext('')) if with_scripts
    else
      regular_json(obj, klass, file_path, complete)
    end
  end
end

.scripts_rb(scripts, output_dir) ⇒ void

This method returns an undefined value.

将 Script 对象数组序列化为分开的 Ruby 源码

Parameters:

  • scripts (Array<Object>)

    Script 对象数组

  • output_dir (Pathname)

    输出目录



38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/R3EXS/rvdata2_json.rb', line 38

def self.scripts_rb(scripts, output_dir)
  scripts_info = []
  script_info_file_path = output_dir.join('Scripts_info.json')
  scripts.each_with_index do |script, index|
    next if script.nil?

    scripts_info << { index: index, name: script[1] }
    file_path = output_dir.join("#{format('Script_%03d', index)}.rb")
    Utils.script_rb_compressing(script[2], file_path)
    Logger.debug("Serialize   #{file_path}")
  end
  Utils.object_json(scripts_info, script_info_file_path)
  Logger.debug("Serialize   #{script_info_file_path}")
end

.scripts_rvdata2(target_dir, output_dir) ⇒ void

This method returns an undefined value.

将 Ruby 源码反序列化为 rvdata2 文件

Parameters:

  • target_dir (Pathname)

    目标目录

  • output_dir (Pathname)

    输出目录

Raises:



53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/R3EXS/json_rvdata2.rb', line 53

def self.scripts_rvdata2(target_dir, output_dir)
  Utils.all_rb_files(target_dir) do |scripts, script_info, _, _, rvdata2_file_path|
    file_path = output_dir.join(rvdata2_file_path.relative_path_from(target_dir))

    output_scripts = []
    script_info.each do |info|
      index = info[:index]
      script = scripts[index]
      output_scripts << [114_514, info[:name], Zlib::Deflate.deflate(script)]
    end
    Utils.object_rvdata2(output_scripts, file_path)
    Logger.debug("Serialize   #{file_path}")
  end
end