Pages

Subscribe:

Labels

2019年5月28日 星期二

[模擬市民4自製模組]進階教學 - Python製作腳本模組

如果已經讀過[模擬市民4自製模組]教學列表的基礎教學,並了解模擬市民4基本運作方式,甚至具備Python或其他編程基礎,那麼可以開始學習如何使用Python製作腳本模組(Script Mod)。這篇教學將會說明如何建立編程模擬市民4模組的Python環境,但不會教學如何撰寫Python。

#more#

腳本模組是什麼?

模擬市民4製作團隊使用Python製作模擬市民4,同時也在模擬市民4官方論壇提供Pythont重新編譯腳本,自2018年10月開始的版本號1.46,Python全面更新為3.7版

相對於*.package屬於取代類型的模組,亦有透過修改遊戲內部程式的腳本模組,而過去腳本模組是.*py和.*pyc格式,然而模擬市民4相較於前作幾代在自定義物件和MOD這方面相當通融,後續版本更新推出*.ts4script格式,方便玩家和模組製作者管理。

下載安裝Python和PyCharm

Python
[版本]3.7.0
[官網]下載版本「Windows x86-64 executable installer」

PyCharm
[官網]下載版本「Community」

PyCharm是由jetbrains開發的Python第三方編程軟體,也可以直接使用官方Python去撰寫,仍然建議使用PyCharm,因為介面跟功能比較容易使用。

設定模擬市民4腳本模組專案

使用反編譯腳本將遊戲程式反編譯出來,透過反編譯出的Python程式作為基礎去了解模擬市民4整個遊戲的運作,反編譯的程式可以在S4S下載。
建立製作模組環境必須具備下列:
進行基本的專案設定:
  1. 開啟(File→Open)下載並解壓縮的專案,Sims 4 Python Script Workspace (3.7).zip
  2. 接著進入設定(Settings)→Project InterpreterAddSystem Interpreter→選擇Python 3.7的安裝位置
  3. 按下OK設定完成


反編譯模擬市民4的Python程式

一樣使用先前下載的專案Sims 4 Python Script Workspace (3.7).zip
  1. 開啟settings.py,並修改內容。
    creator_name = 改成模組製作者名字
    mods_folder = 改成Mods資料夾的位置
    game_folder = 改成模擬市民4遊戲的位置
  2. 執行(Run)decompile_all.py,然後等待執行視窗出現「process finished with exit code 0」表示反編譯完成。


編寫Python腳本:作弊碼sims4.commands

S4S提供的專案Sims 4 Python Script Workspace (3.7)也包含了一個範例的Python腳本,第一次撰寫腳本的話,可以藉由這個範例,測試環境有沒有建立完成以及試著打包一個*.ts4script。
「My Script Mods→Example Mod」的example_mod.py,腳本的內容如下:
import sims4.commands

@sims4.commands.Command('myfirstscript', command_type=sims4.commands.CommandType.Live)
def myfirstscript(_connection=None):
    output = sims4.commands.CheatOutput(_connection)
    output("This is my first script mod")

由於這個腳本要寫出可以使用的作弊碼,所以第一行import sims4.commands,必須先載入模擬市民4相關的作弊碼腳本,而這個Python檔案是「EA/core/sims4/commands.py」,接著在第三行和第四行定義函式以及玩家要輸入的作弊碼:
@sims4.commands.Command('作弊碼', command_type=sims4.commands.CommandType.Live)
def 函式名稱(_connection=None):

由於只是測試腳本,所以第五行和第六行,寫成「如果玩家輸入作弊碼之後,就跳出一行文字」,首先在第五行把output的程式從sims4.commands調出來用,然後第六行撰寫要跳出的內容:
output = sims4.commands.CheatOutput(_connection)
output("跳出的文字內容")
撰寫完成後儲存檔案,準備打包成*.ts4script。

打包成*.ts4script

腳本模組的格式實際上是壓縮檔,只是將格式後綴改為模擬市民4可以解析的格式,依照以下部分就能製成*.ts4script:
  1. 使用7z的壓縮檔製作軟體把編寫完成的*.py和*.pyc,製作成壓縮檔*.zip。
  2. 將檔名的.zip改成.ts4script
或是直接使用Sims 4 Python Script Workspace (3.7).zip附帶的compile.py執行打包:
  1. 撰寫完成的*.py檔案放在「My Script Mods→Example Mod→Script」資料夾底下
  2. 執行(Run)compile.py,進行打包
  3. 之後得到*.ts4script檔案


延伸閱讀

[模擬市民4自製模組]教學列表
Getting Started with Python Scripting
General Modding - For absolute beginners with no clue: Making a simple script that gets the town's population.
List of TS4 Tools / Documentation

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

2019年5月13日 星期一

[日本]日旅必買常備藥(2019)

這篇是寫給我自己的備註,所以恐怕不會保持最新的日本藥品,不過都是我自己使用過覺得每次去日本必須補貨的常備藥,其中藥品也包含了我自己考量的症狀以及需求,並不能適用所有人哦,我也不是藥師,成分說明僅供參考。

如果代購表單工具的需求,可以參考[日本]自助旅遊必裝App,「Excel簡易代購清單」能夠方便整理購物清單哦。
#more#

サカムケア


[簡易需求]刀傷、挫傷防護膠
[製藥廠商]小林製藥
[藥品類別]第3類
[成分說明]ピロキシリン
[個人心得]手工製作、指溝炎、常下廚,抗菌常備藥!但成分的硝化纖維只能形成一層防護膜,而不包含任何藥效,但是輕微傷口若是需要阻隔病菌感染就很適合使用。

のどぬ~るスプレー


[簡易需求]喉嚨抗菌噴劑
[製藥廠商]小林製藥
[藥品類別]第3類
[成分說明]ヨウ素
[個人心得]換季、傷寒、著涼,喉嚨發癢常備藥!小林製藥推出的喉嚨噴劑分為塗抹版和噴頭版,噴頭版相當適合個人使用,塗抹版則推薦給居家常備藥。
成份的碘,即是外傷使用的優碘,具有殺菌消毒的作用,如果是著涼後容易喉嚨發炎的體質推薦於喉嚨發癢的時候使用,如果已經開始紅腫可能會造成加深症狀,由於是內服藥,仍建議諮詢家庭醫師後再使用。

ニノキュア


[簡易需求]皮膚角化症
[製藥廠商]小林製藥
[藥品類別]第3類
[成分說明]尿素、トコフェロール酢酸エステル、グリチルリチン酸モノアンモニウム
[個人心得]皮膚粗糙、毛髮阻塞、角化症,女性常備藥!成份的酸和尿素作用於軟化角質、促進表皮血液和抗發炎,小幅度改善皮膚角化症,如果發炎演變成膿包或痘痘就必須諮詢醫師或更換藥品囉。

ルルアタックEX


[簡易需求]感冒藥,成人1次2錠,1天3次,未成年禁用。
[製藥廠商]第一三共
[藥品類別]第2類
[成分說明]トラネキサム酸イブプロフェン、クレマスチンフマル酸塩、ブロムヘキシン塩酸塩、dl-メチルエフェドリン塩酸塩、ジヒドロコデインリン酸塩、チアミン硝化物(ビタミンB1硝酸塩)、リボフラビン(ビタミンB2)
[個人心得]在第一三共ルル系列的眾多藥品中,不含無水咖啡因(無水カフェイン),可以睡前服用的感冒常備藥!推薦給咖啡因過敏、咖啡因失眠的體質,除此之外這款加強了緩解喉嚨痛和退燒,不過因為劑量有稍微加強,不建議習慣服用。

ナザール「スプレー」(ポンプ)


[簡易需求]鼻塞、鼻水噴劑,無味道版
[製藥廠商]SATO
[藥品類別]第2類
[成分說明]ナファゾリン塩酸塩クロルフェニラミンマレイン酸塩ベンザルコニウム塩化物
[個人心得]鼻塞、鼻水、換季過敏、起床過敏、冷熱過敏,點鼻常備藥!日本點鼻藥、噴劑常使用於花粉劑,然而銷售冠軍的鼻噴劑通常都含有類固醇成份(ベクロメタゾンプロピオン酸エステル),如果使用在非過敏源造成的鼻塞鼻水就變得有些多餘。
這款點鼻藥不含類固醇,但仍保有第一代抗組織胺(クロルフェニラミンマレイン酸塩),會有輕微嗜睡症狀,奈甲嘧唑啉(交感神經興奮劑)和苯扎氯銨,擴張鼻內部血管,阻止鼻水。

ニキビ 痘痘藥


痘痘藥有太多,族繁不及備載,可以參考這篇My Best撰寫的前10名痘痘藥排行榜,該篇也針對成份進行準確分析。
市販ニキビ用塗り薬のおすすめ人気ランキング10選【大人ニキビ・赤みなどにも!】
[簡易需求]痘痘藥、粉刺
[藥品類別]第2類
[成分說明]イオウイソプロピルメチルフェノールレゾルシングリチルレチン酸ヒドロコルチゾントコフェロール酢酸エステル
[個人心得]痘痘藥的基本成份是殺菌效果的硫化物,抗菌劑IPMP,抗發炎的Enoxolone和皮質醇,以及額外添加的保濕成份例如蜂蠟、橄欖油。
建議根據自己的痘痘體質挑選適合的痘痘藥,光是基本的殺菌就有不同藥劑,也有些痘痘藥不含抗發炎,或是不添加保濕,篩選適合以及交替使用是最佳解。

ハンドクリーム護手霜


護手霜也是族繁不及備ㄗ...
建議參考マガジン撰寫的12種護手霜比較,這篇將手質分為三種程度,粗糙、乾燥和硬皮,並且依序推薦適合的護手霜,護手霜質感也有評比質地、延展性、含水度、香味和保濕效果,非常推薦。
定番ハンドクリーム12種を塗って塗って徹底比較! 一番しっとりするのはどれ?

My Best撰寫的48種護手霜比較,則是幾乎把市面上都嚐過一遍了(?),評比簡單分成ABC等級,並且有做排行,如果マガジン也沒有寫出你想找的護手霜,可以參考這篇。
【徹底比較】ハンドクリームの最強おすすめ人気ランキング48選【2019年最新版】

順帶一題我是用花王アトリックス無香味。
[簡易需求]護手、乾裂
[成分說明]ヒアルロン酸、シアバターなど、ビタミンEビタミンC尿素やグリセリン
[個人心得]輕度護手使用含玻尿酸成份作為基礎保濕,但是玻尿酸分子比較大,無法滲入皮膚,所以只能作為表面防護。如果是缺乏水份,油和霜的基本成份也有防護效果像是乳木果油。
至於更嚴重的乾裂、即使使用油質也沒有效果,則是表示身體缺乏某些營養,可以選擇添加維他命E或C,但是根本方法是要飲食均衡。
如果已經呈現硬皮,就需要使用加入軟化角質作用的尿素或酸,但是到這種程度卻不是因為工作的話,最好還是去看醫生。

2019年5月5日 星期日

HTML encoder 轉碼工具

HTML encoder轉碼工具,用在文章中顯示程式碼內容。 #more#


[模擬市民4自製模組]基礎教學 - TDESC說明文件

在之前的[模擬市民4自製模組]第2篇基礎教學,說明如何修改Tuning腳本的XML,並以範本做簡單教學。
然而當製作Tuning Mod逐漸增加難度,閱讀Tuning腳本中的XML標籤和屬性變得越來越困惑,實際上模擬市民4的EA官方有釋出Tuning腳本的說明文件供模組製作者閱讀。

延伸閱讀
三宫六院:[功能MOD必备]调整档说明书浏览器 (TDesc Browser) 
#more#

什麼是Tuning Description(TDESC)

[論壇位置]Mods and CC Technical Discussions
EA遊戲官方在官方論壇會定期發佈供模組製作者閱讀的Tuning腳本說明文件,文件格式*.tdesc,可以透過文字編輯器閱讀,例如記事本或Notepad++。
例如Buff.tdesc的內容如下:
<Instance instance_type="buff" class="Buff" 
module="buffs.buff" muid="428AC54D9C8BCD1A" description="Main container 
class that holds all data for a buff and contains all the&#xA;accessors for the buff_tracker.
" instance_needs_reference="True" instance_subclasses_only="False" 
path="Buffs\Descriptions" use_guid_for_reference="True">

閱讀TDESC的工具

[下載位置]scumbumboTS4 Tuning Description Browser
[全文翻譯][模擬市民4]TS4 Tuning Description Browser
我推薦scumbumbo的工具,把TDESC以樹狀分類,並加入Search(搜尋)功能,閱讀介面也很清楚明瞭;搜尋功能可以同時搜尋多個單字,大小寫也不區分。
第一次啟動需要選擇TDESC資料夾的位置,如果之後要變更,在Settings的Tdesc Root Folder做更改。

TDESC的標籤


每一項Tuning名稱都會註明它的標籤,例如:buff_reason的(TunableVariant),接下來會說明標籤在XML如何使用。

Instance: 物件名稱,XML屬性是I。
<I n="名稱"></I>

Tunable: 表示可以調整,XML屬性是T。
<T n="名稱">調整內容</T>

TunableEnum: 列舉值,使用方法類似Tunable,XML屬性是E。
<E n="名稱">調整內容</E>

TunableTunableEnum通常使用在整個樹狀標籤的末端,內容取決於標籤的規則,例如:interaction_action的NO_ACTION。
當標籤的說明提到type是bool(布林值),標籤的規則就是True(啟用)和False(停用)。
allow_autonomous (Tunable): <T n="allow_autonomous">True</T>
interaction_action (TunableEnum): <E n="interaction_action">NO_ACTION</E>

TunableVariant: 可以從它的子項目中多選一,只能使用一項,超過一項以上會被無視,XML屬性是V,必須寫出t=表示他的子項目名稱。
<V n="名稱" t="子項目名稱">
  <T n="子項目名稱"></T>
</V>
有個特例,是當TunableVariant的名稱是None,表示這個Variant沒有名稱,則可以忽視n,直接寫t。
<V t="子項目名稱">
  <T n="子項目名稱"></T>
</V>

TunableTuple: 它的巢狀子項目有許多串列,這些串列都可以使用,XML屬性是U。
<U n="名稱">
  <T></T>
  <V n="子項目名稱"></V>
</U>

TunableList: 它是清單,表示可以它可以有很多統一屬性的子項目,XML屬性是L。
<L n="名稱">
  <T>項目名稱</T>
  <T>項目名稱</T>
</L>


當這些標籤在TDESC以樹狀結構表示的時候,必須在XML以巢狀撰寫,假設是以下情況的時候:
name_a (TunableVariant)
  ↳name_b (TunableVariant)
    ↳name_c (TunableTuple)
      ↳name_d (Tunable)

在XML撰寫的時候如下:
<V n="name_a" t="name_b">
  <V n="name_b" t="name_c">
    <U n="name_c">
      <T n="name_d"></T">
    </U>
  </V>
</V>

如何在XML文件中加上註解

註解的用途在於備註、整理、讓其他人讀懂,請養成習慣加上註解;註解也可以用於讓這行程式不被執行
如果你想加上EDITED,來表示你有修改過這行。
<!--EDITED-->