Pages

Subscribe:

Labels

2019年5月24日 星期五

[模擬市民4自製模組]進階教學 - XML Injector新增互動選項

進階教學的第1篇,將說明如何新增互動選項到物件或人物上,本篇教學以我自製的模組「賣給當地商店Sell to Local Market」作為範例。
MOD除了改改字、啟用/停用功能或是啟用EA隱藏的功能之外,也能夠為物件或人物新增互動選項,然而置入互動選項並不能僅透過修改XML,必須編寫Python腳本。
除了白手起家自己寫Python之後,推薦使用scumbumbo製作的XML Injector,scumbumbo製作許多模組製作工具並發佈在MTS,使用他製作的工具能夠減輕許多製作負擔與難處。
#more#

1. 下載並安裝XML Injector

[版本]2.0 (20190326)
[下載]http://modthesims.info/d/622928/xml-injector-version-2.html
XmlInjector_v2.zip 必要的檔案
XmlInjector_Modders_Documentation_v2.zip scumbumbo編寫的教學文件

玩家須知
如果你使用的模組需要XML Injector才能運行,下載XmlInjector_v2.zip,解壓縮後將XmlInjector_Script_v2.ts4script放在模組資料夾「Mods」的第二層。
Mods (資料夾)
↳XmlInjector (資料夾)
   ↳XmlInjector_Script_v2.ts4script

模組製作須知
如果你是模組製作者,除了下載XmlInjector_v2.zip,也建議下載教學文件XmlInjector_Modders_Documentation_v2.zip,scumbumbo撰寫了如何使用XML Injector以及範例,接下來將會根據教學文件來解釋。

2. 找出互動選項的XML,以及要被置入互動的物件

賣給當地商店Sell to Local Market模組的功能是「『賣給當地麵包店』的互動選項加到所有食物上,並且能收到模擬幣和名氣。」,因此透過Sims4Studio找出影響這項功能的XML:
Tuning Name: CupcakeMachine_SellObject
Tuning ID: 97128

食物物件太多了,也為了方便更新,scumbumbo考慮到這點,因此可以用XML Injector去篩選擁有特定互動選項的所有物件,所以接下來就要找出所有食物物件的共通點是「吃的互動選項」:
Tuning Name: eat_to_clean_from_sit
Tuning Id: 75242
記下這兩個物件名稱和Id,接下來會使用到。

3. 新增一個XML去呼叫XML Injector


使用Sims4Studio加入新的XML,並利用雜湊值產生器(Hash)生成一支新的雜湊值,將雜湊值輸入Instance,XML頁面也加入標籤和屬性,n="名稱"、s="生成的Id":
<i c="XmlInjector" i="snippet" m="xml_injector.snippet"
n="c82_XmlInjector_AddInteractionToFood" s="13197251937291617975"></i>

4. 撰寫Injector的內容

Injector顧名思義是置入器,XML Injector主要功能是「將需要的功能置入到遊戲中」,因此要寫下「想放入的互動功能(affordance)」和「被放入的人或物件」。

「想放入的互動功能」是步驟2找到的互動功能是CupcakeMachine_SellObject
「被放入的人或物件」因為食物是物件,所以使用語法add_interactions_to_objects(將互動置入物件)。
因此步驟3的XML頁面繼續撰寫,<I>和</I>之間再放入下列的語法:
<L n="add_interactions_to_objects">
    <U>
      <V n="object_selection" t="objects_with_affordance">
        <U n="objects_with_affordance">
          <T n="affordance">75242<!--eat_to_clean_from_sit--></T>
        </U>
      </V>
      <L n="_super_affordances">
        <T>97128<!--SuperInteraction: CupcakeMachine_SellObject--></T>
      </L>
    </U>
  </L>
接下來說明這段語法的意思:
「被放入的人或物件」因為需要指定的食物物件有非常多,為了方便以後更新模組,食物物件的語法不使用object_list(物件清單)去一一列出來,而是使用objects_with_affordance這項語法的意思是「篩選出所有具有這個互動選項(affordance)的物件(objects)」,所以第7行輸入剛剛記下來的吃的互動選項。
<U n="objects_with_affordance">
  <T n="affordance">75242<!--eat_to_clean_from_sit--></T>
</U>

接下來在第11行輸入「想放入的互動功能」,<L></L>是清單所以可以同時放入很多個互動選項。
<L n="_super_affordances">
  <T>97128<!--SuperInteraction: CupcakeMachine_SellObject--></T>
  <T>第二個想放入的互動選項</T>
</L>
完成之後,儲存package,並放入Mods資料夾和XmlInjector_Script_v2.ts4script一起測試效果,測試成功就完成模組「賣給當地商店Sell to Local Market」。


接下來介紹XML Injector的其他功能,這些在教學文件中都有說明。

XML Injector其他功能:新增互動選項

參考scumbumbo提供的檔案XmlInjector_Test_v2.package有其他功能範例,接下來說明。
如果要一一列出物件,使用物件清單object_list
<V n="object_selection" t="object_list">
  <U n="object_list">
    <L n="object_list">
      <T>物件Id</T>
      <T>物件Id</T>
    </L>
  </U>
</V>

如果要將互動加到模擬市民身上使用,使用add_interactions_to_sims
<L n="add_interactions_to_sims">
  <T>互動Id</T>
</L>
加到電話上使用則換成add_interactions_to_phones
加到關係介面換成add_interactions_to_relationship_panel

如果是限定情況的互動選項,例如使用到Mixer的時候,使用add_mixer_interactions
<L n="add_mixer_interactions">
  <U>
    <L n="mixer_snippets">
      <T>Mixer清單</T>
      <T>Mixer清單</T>
    </L>
    <L n="affordances">
      <T>互動選項</T>
      <T>互動選項</T>
    </L>
  </U>
</L>

新增Buff到Trait(特徵)或loot_action

如果要將Buff加到某個特徵,使用add_buffs_to_trait
<L n="add_buffs_to_trait">
  <U>
    <T n="trait">特徵編號</T>
    <L n="buffs">
      <U>
        <V n="buff_reason" t="enabled">
        <T n="enabled">0x00000000字串編號</T>
        </V>
        <T n="buff_type">Buff編號</T>
      </U>
    </L>
  </U>
</L>


如果要將Buff加到某個loot_action,使用add_to_loot_actions,可以加入出現機率、篩選白名單或黑名單的特徵:
<L n="add_to_loot_actions">
  <U>
    <T n="loot_actions_ref">LootActions編號</T>
  <L n="loot_actions_to_add">
  <V t="buff">
  <U n="buff">
  <U n="buff">
    <V n="buff_reason" t="enabled">
      <T n="enabled">0x00000000 Buff的字串</T>
    </V>
    <T n="buff_type">Buff編號</T>
  </U>
  <U n="chance">
    <T n="base_chance">出現Buff的機率</T>
  </U>
  <L n="tests">
  <L>
  <V t="trait">
      <U n="trait">
      <L n="whitelist_traits">
        <T>白名單的特徵編號</T>
      </L>
    </U>
  </V>
  </L>
  </L>
  </U>
  </V>
  </L>
  </U>
</L>


以上是比較常使用的語法,還有更多在教學文件XmlInjector_Modders_Documentation_v2.zip

0 意見:

張貼留言