好吧,这才是cleo.h核心部分
typedef struct CScriptThread CScriptThread;//别名CScriptThread代表
struct CScriptThread#pragma pack(push,1)
struct CScriptThread{
CScriptThread*next;
//队列中指向下一个元素的指针?老实说我也不知道,因为如果后面根本没有入队出队操作,更别说申请新内存、清栈、插队等了..- -或许是他的手误或者为以后的准备吧CScriptThread*prev; //队列前一个元素
charthreadName[8]; //对线程的命名,也就是03A4: name_thread 'MAIN',从[8]看得出来对自定义名称有限制的,而且注意是char类型的
BYTE*baseIp;//script中指向内存的开始位置
BYTE*ip;
//当前索引的指针BYTE*stack[8];
//返回栈,这里用的是数组所以是一个顺序栈WORDsp;
//当前堆栈中处理的数据WORD_f3A;//padding
SCRIPT_VARtls[34];
//定义线程中的局部变量为一个数组,现在知道了局部变量为什么有限制了吧
或许我们可以改改这个34,但是就不知道其他地方有没有同样的限制,等我哪天有空去看看cleo4里面的源码,说不定可以突破这个局部变量选择BYTEisActive; //当前响应的线程
charcondResult;
//结果,或者假..其实这里用布尔值应该会更好charmissionCleanupFlag;//清理任务
charexternal;//script.img中的的线程
BYTE_fC8;//unknown
BYTE_fC9;//unknown
BYTE_fCA;//unknown
BYTE_fCB;//unknown
DWORDwakeTime;//时间,当脚本开始后再次使用0001操作码
WORDlogicalOp;//if的参数
BYTEnotFlag;//opcode & 0x8000不等于0..话说0x8000操作码我怎么没有找到
BYTEwbCheckEnabled; //任务成功或者失败的检查标志
BYTEwastedOrBusted; //玩家状态
BYTE_fD5;//unknown
WORD_fD6;//unknown
DWORDsceneSkip;//场景转换,可以理解为瞬移..
BYTEmissionFlag;
//任务线程BYTE_fDD[3];//padding
};