事件中获取、设置当前Mod绑定的存档或非存档的数据

每个 Mod 都可以有一些与之绑定的存档或非存档数据,用于在事件Mod中控制进度。

事件中获取Mod数据

接口

/// <summary>
/// 获取 Int 类型数据
/// </summary>
/// <param name="dataName">数据名</param>
/// <param name="isArchive">该数据是否存档</param>
/// <param name="val">数据的值</param>
/// <returns>是否获取成功</returns>
public bool GetModData(string dataName, bool isArchive, ref int val);


// 除了int之外,目前还支持 bool, float, string 的获取
public bool GetModData(string dataName, bool isArchive, ref bool val);
public bool GetModData(string dataName, bool isArchive, ref float val);
public bool GetModData(string dataName, bool isArchive, ref string val);

示例

// 检查事件触发条件是否满足的方法.
// 假设该事件的触发条件如下:
// 		1. 该事件必须要Mod主线剧情进度 (ModMainStoryProgress) 达到 10
//		2. 开启了机关A (SwitchA)

public override bool OnCheckEventCondition(){

	// 获取不到Mod剧情进度数据,说明此前没有保存过任何进度. (该进度为存档数据)
	// 此时判断为条件不满足
	int progress = -1;
	if(!TaiwuEvent.GetModData("ModStoryProgress", true, ref progress)) return false;

	// 获取到了Mod剧情进度数据,但进度没有达到 10
	// 此时判断为条件不满足
	if(progress < 10) return false;

	// 获取不到机关A的数据,说明此前没有保存过 (该机关状态为存档数据)
	// 此时判断为条件不满足
	bool switchA = false;
	if(!TaiwuEvent.GetModData("SwitchA", true, ref switchA)) return false;

	// 获取到了 机关A 的数据,但该机关没有开启
	// 此时判定为条件不满足
	if(!switchA) return false;

	// 以上条件全部满足,则当前 Mod 事件判定通过
	return true;
}

事件中设置Mod数据

接口

/// <summary>
/// 设置 Int 类型的 Mod 数据
/// </summary>
/// <param name="dataName">数据名</param>
/// <param name="isArchive">该数据是否存档</param>
/// <param name="val">数据的值</param>
public void SetModInt(string dataName, bool isArchive, int val);


// 除了int之外,目前还支持 bool, float, string 的设置
public void SetModBool(string dataName, bool isArchive, bool val);
public void SetModFloat(string dataName, bool isArchive, int val);
public void SetModString(string dataName, bool isArchive, string val);

示例

// 选择事件选项时的逻辑
// 在该事件中,如果前一个事件打开了机关SwitchB,则将剧情进度设置为11并关闭机关,然后跳转到对应的下一级事件
// 如果前一个事件没有打开机关SwitchB,则将剧情进度设置到12并跳转到对应的下一级事件

private string OnSelect()
{
	// 如果上一个事件中无需存档的开关 B 被开启
	bool swtichB = false;
	if(TaiwuEvent.GetModData("SwitchB", false, ref switchB) && switchB) {

		// 将Mod剧情进度设置为 11 (该进度为存档数据)
		TaiwuEvent.SetModInt("ModStoryProgress", true, 11);

		// 关闭机关B (该机关状态为非存档数据)
		TaiwuEvent.SetModBool("SwitchB", false, false);

		return "此处是开关B开启的情况需要跳转到的事件GUID";
	}
	// 开关B没有被设置过或者被设置为关闭
	else{
		// 将需要存档的Mod剧情进度设置为 12
		TaiwuEvent.SetModInt("ModStoryProgress", true, 12);

		return "此处是开关B关闭的情况需要跳转到的事件GUID";
	}

	// 选择选项以后没有后续事件
    return string.Empty;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注