
	PScript file for zmj AI Engine by ZMJ_123
	        流星蝴蝶剑任务增强补丁 v3.15
	   	( 真武林江湖群侠传 出品)

	 该版本以下功能适用于 1.07/1.08/9.07/9.08 版本
	     请不要修改该文件,避免运行崩溃!		  


增加的API 功能函数:
1. 支持 任务PST和地图PST 通信，任务PST通过函数可直接控制地图机关变化。 
2. 支持 任务PST直接函数控制 语音对白，播放语音文件。每句对白是单独语音文件,自由控制播放时间点。
3. 支持 任务等级进度等保存功能, 不限Meteor.exe版本, 比如9.07 也支持保存功能. （提供2种保存函数）
4. 支持 任务PST直接切换玩家的武器。(EnableSwitchWeapon后, 小键盘 4/8/6/2 默认也可切换)
5. 支持 任务PST直接移动玩家到任意地点 
6. 支持 任务PST直接指定玩家使用任意招式。
7. 支持 任务PST直接显示当前使用武器的招式表, 游戏中出现半透明窗口 (EnableSwitchWeapon后 小键盘 5 默认也可切换)
8. 支持 任务PST接收游戏中键盘1-9按键事件, 方便任务PST获得用户选择（1/2..../9)进行多条件开放剧情编写 (键盘事件 9001-9009)
9. 支持 任务PST直接切换当前玩家使用的人物模型。
10. 支持 任务PST禁用ESC键，防止玩家跳过某些桥段。
11.支持 语音自动合成, 对白直接转声音. (声音质量取决于采用的TTS语音引擎，TBD)

基本函数使用简介:
ZMJAI_SendEvent(1, 0, 0, 0);	//播放第1句话， 立即播放
ZMJAI_SendEvent(1, 1, 7, 1);	//播放第2句话，7秒后播放, 1表示结束此次声音事件请求(使用1表示AI引擎会立即处理)
ZMJAI_SendEvent(0, 10, 3, 1);	//启动机关10, 3秒后启动, 1表示结束此次机关事件请求(使用1表示AI引擎会立即处理)
ZMJAI_GameSave(int score, int scence, int val1, int val2, int val3, int val4) //保存本关得分, 以及其余5个用户自定义意义参数 到 pst文件
ZMJAI_SwitchWeapon(8);		//切换或通知SDK, 主角主武器为8（刀）
ZMJAI_MakePose(239);		//让主角使用 239这一招，双刺 左右A
ZMJAI_MoveLocat(8, 9, 10);	//把主角移动到 坐标为8,9,10的地点去。
ZMJAI_SwitchHero(19);		//使用p19 model 代替当前的 model(一般默认是p0 model)
ZMJAI_EnableSwitchWeapon(0);	//0 : 不允许使用小键盘(4/8/6/2 和 5) 切换武器和显示招式表,  1: 允许切换 (按 F12+小键盘5 也可以开关)
ZMJAI_EnableDumpstate(0);	//仅供调试bug使用， 0 ： 不生成dumpstate文件, 1: 生成, （会自动记录日志供调试，可能会导致系统卡顿）

ZMJAI_ShowSkillBook(6);		//游戏中出现半透明窗口显示主角当前使用武器的招式秘笈, -1则表示AI猜测当前武器(用过ZMJAI_SwitchWeapon或小键盘) 
//小键盘5 也可以弹出秘笈窗口，（该功能默认关闭。 调试可用 F11+小键盘5 来弹出， 依然需要先用 F12+小键盘5 先使能）
//低版本图像补丁与该功能冲突，高版本图像补丁则无问题(2019年6月后)

ZMJAI_EnableESCkey(0);		//0：不允许玩家使用ESC按键跳过剧情  1：允许玩家使用ESC按键跳过剧情

ZMJAI_SpeakVoice("Liang", "真武林"，2, 1);//播放这句话，Liang表示男声/Liang (Lily表示女声Lily， ...), 1表示女声, 2秒后开始发声, 1表示结束此次声音事件请求, 
//使用TTS语音引擎合成来说话,必须安装TTS引擎,默认是 NeoSpeech, 质量比较高.默认该功能关闭， 可通过ZMJAI_SendEvent 播放高质量音频替代。


########################### MOD 制作简介 ###########################
再也不用设计NPC吃道具来控制地图机关了，
再也不用全程看哑巴字幕了，
再也不用全程使用同一个主角了，
再也不用全程使用同一把武器了，
再也不用切换出来看招式表了，
再也不能强制ESC跳过剧情桥段了，

添加相关文件到流星目录:
1. AIHero32.dll
2. UIHero32.dll
3. PScriptLib\zmjeve.pst  
4. default.res

如何使能补丁:
二进制打开Meteor.exe, 搜索AVIFile32.dll, 替换成AIHero32.dll 即可


######################## 如何编写剧本：
为了保证游戏效率，只有任务PST和地图PST 都添加了如下代码，
补丁才工作起来。

  
任务PST: sn01_.pst
///////////////////////////////////////////////////////////////////
ZMJAI_OnEvent(int zmjEvt)
{
	//Say(1, "Recv event : ", zmjEvt);
	return zmjEvt-0;
}
#include "..\PScriptLib\zmjeve.pst"

OnUpdate()
{
	int evt = ZMJAI_OnHandler();
	
	// ... 收到事件后该干嘛干嘛
	// ... evt 9001-9009 是专指用户按了键盘 1-9
	// ... 其他事件主要是自己编写的任务和地图互传事件
	// ... 调用 ZMJAI_XXX 做你想做的吧 ！
}
///////////////////////////////////////////////////////////////////



地图PST：sn01.pst
///////////////////////////////////////////////////////////////////
ZMJAI_OnEvent(int zmjEvt)
{
	if(zmjEvt == -1)
	{
		return -1;
	}

	if(zmjEvt == 10)
	{
		Misc("transfer", 1, "D_wpBBox01"); // ... 做你想做的吧 ！
		return 11;			   // 11会传给 任务PST
	}

	if(zmjEvt == 12)
	{
		int i;
		for(i=1; i<=32; i++)
		{
			StoneOnAttack(i, 1000);	// ... 做你想做的吧 ！
		}

		return 13;		       // 13会传给 任务PST
	}
	
	return -1;
}
#include "..\PScriptLib\zmjeve.pst"
///////////////////////////////////////////////////////////////////


########################  对白语音定义：sound\zmjAIvoice.lst
///////////////////////////////////////////////////////////////////
zmj1.mp3
zmj2.mp3
zmj3.mp3
zmj4.mp3
zmj5.mp3
...

音频名是可以随意指定编写,
ZMJAI_SendEvent(1, 0, 0, 0); //播放第1句话（zmj1.mp3）， 立即播放
///////////////////////////////////////////////////////////////////


########################   如何保存存档: 
ZMJAI_GameSave 或 ZMJAI_GameEncryptSave/ZMJAI_GameEncryptLoad
1. PScriptLib\zmjcfg.pst 该文件自动生成,可以直接包含在剧情PST里，函数调用保存的数据。 
2. Level\usrhero.sav     该文件是加密保存存档,最多保存120个数据，需要调用save/load函数

