💨
RPGコモンイベントのindentとは
indent
は、RPGツクールMVのイベントコマンドにおいて、イベントコマンドのネスト(入れ子)構造を示すために使用されます。特に、条件分岐やループなど、複数のコマンドがネストされる状況で重要です。
indent
の役割
indent
は、イベントコマンドがどのレベルのネストにあるかを示します。ネストレベルは、0から始まり、ネストされるごとに1ずつ増加します。これにより、RPGツクールMVはイベントコマンドの階層構造を理解し、適切に処理できます。
例えば、条件分岐 (IfCommand
) の場合、true_branch
やfalse_branch
に含まれるコマンドの indent
は、IfCommand
自身の indent
よりも1つ高くなります。
例
以下に、条件分岐を含むイベントの例を示します。
イベントの定義
class IfCommand(EventCommand):
def __init__(self, condition, true_branch=None, false_branch=None):
parameters = [condition]
super().__init__(111, parameters)
self.true_branch = true_branch if true_branch else []
self.false_branch = false_branch if false_branch else []
def add_true_command(self, command):
command.indent = self.indent + 1
self.true_branch.append(command)
def add_false_command(self, command):
command.indent = self.indent + 1
self.false_branch.append(command)
def to_dict(self):
true_branch_dicts = [cmd.to_dict() for cmd in self.true_branch]
false_branch_dicts = [cmd.to_dict() for cmd in self.false_branch]
return {
"code": self.code,
"parameters": self.parameters,
"indent": self.indent,
"true_branch": true_branch_dicts,
"false_branch": false_branch_dicts
}
class CommonEvent:
def __init__(self, event_id, name, trigger=0, switch_id=0):
self.id = event_id
self.name = name
self.trigger = trigger
self.switch_id = switch_id
self.list = []
def add_command(self, command):
self.list.append(command)
def to_dict(self):
event_list = []
for cmd in self.list:
event_list.append(cmd.to_dict())
if isinstance(cmd, IfCommand):
event_list.extend(cmd.true_branch)
if cmd.false_branch:
event_list.append({"code": 411, "indent": cmd.indent + 1})
event_list.extend(cmd.false_branch)
event_list.append({"code": 412, "indent": cmd.indent + 1})
return {
"id": self.id,
"name": self.name,
"trigger": self.trigger,
"switchId": self.switch_id,
"list": event_list
}
class CommonEvents:
def __init__(self):
self.events = []
def add_event(self, event):
self.events.append(event)
def to_json(self, file_path):
data = [event.to_dict() for event in self.events]
with open(file_path, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
if __name__ == "__main__":
common_events = CommonEvents()
# イベント1を作成
event1 = CommonEvent(1, "Morning Assembly")
event1.add_command(ShowText("Teacher", "Good morning, students! Today we have a special announcement."))
event1.add_command(Wait(60))
# 条件分岐の追加
if_command = IfCommand("Variable 1 == 1")
if_command.add_true_command(ShowText("Teacher", "Let's begin the class."))
if_command.add_false_command(ShowText("Teacher", "Please take your seats."))
event1.add_command(if_command)
common_events.add_event(event1)
# イベント2を作成
event2 = CommonEvent(2, "Lunch Break")
event2.add_command(ShowText("Friend", "Let's go to the cafeteria together!"))
common_events.add_event(event2)
# 他のイベントを追加...
# jsonファイルを生成
common_events.to_json("common_events.json")
出力されるjson
このコードを実行すると、以下のようなjsonファイルが生成されます。
[
{
"id": 1,
"name": "Morning Assembly",
"trigger": 0,
"switchId": 0,
"list": [
{
"code": 101,
"parameters": ["Teacher", 0, 0, 2, "Good morning, students! Today we have a special announcement."],
"indent": 0
},
{
"code": 230,
"parameters": [60],
"indent": 0
},
{
"code": 111,
"parameters": ["Variable 1 == 1"],
"indent": 0,
"true_branch": [
{
"code": 101,
"parameters": ["Teacher", 0, 0, 2, "Let's begin the class."],
"indent": 1
}
],
"false_branch": [
{
"code": 101,
"parameters": ["Teacher", 0, 0, 2, "Please take your seats."],
"indent": 1
}
]
},
{
"code": 411,
"indent": 1
},
{
"code": 412,
"indent": 1
}
]
},
{
"id": 2,
"name": "Lunch Break",
"trigger": 0,
"switchId": 0,
"list": [
{
"code": 101,
"parameters": ["Friend", 0, 0, 2, "Let's go to the cafeteria together!"],
"indent": 0
}
]
}
]
このjsonファイルは、RPGツクールMVで直接使用できる形式になっています。indent
を使うことで、コマンドのネスト構造が正しく反映されています。
Discussion