找回密码
 点一下
查看: 5744|回复: 10

wtg|wct fileFormat

  [复制链接]
发表于 2007-1-26 08:14:46 | 显示全部楼层 |阅读模式
麦德三世大大在研究脱离WE的触发编辑器。希望这个研究对她(他)有帮助。

wtg文件格式不是文本格式,wct文件格式是文本格式
wtg格式是WE工作所需的纪录触发器的数据文件格式
wct格式是WE工作所虚的纪录触发器中自定义脚本庶几乎的文件格式

本文格式:
dword:无符号32位整数
string:以'\0'为结束符的c风格字符串,空string为5个字节
bool:其实是dword,true=1;false=0
finger:指示
index:索引,用来排序
??:未知


wtg文件格式
文件头(header
char[4] finger='WTG!'
dword ??似乎是版本信息,通常为7
dword categoryCount:类别个数
类别定义部分:紧跟文件头
dword finger=1
struct category
{
  dword index;//每个category的这个值都应该不同
  string category;//类别名,以'\0'为结束符的c风格字符串
  dword endSign=0;//结束标志或分隔标志
} category[categoryCount];
变量定义部分:紧跟类别定义部分
dword finger=2
dword variableCount;//变量个数
struct variable
{
  dword index;//每个variable的这个值都应该不同
  string name;//变量名
  string type;//变量类别
  bool;unkown
  bool;是否为数组
  bool;是否初始化
  string;预设值
} variable[variableCount];
触发器定义部分:紧跟变量定义部分
dword triggerCount;//触发器的个数
struct trigger
{
  string triggerName;//触发器名
  string description;//触发器描述文本
  bool enable;//是否是有效的
  bool isCustomTextTrigger;//是一个自定义脚本的触发器
  bool initial;//是否初始化
  dword ??
  dword fingerOfcategory;//指示属于那个类别,这个值应该和指示的类别的索引值相同
  dword itemCount;//指示有多少条语句,如果是自定义脚本的T则此值为0。
  struct item[itemCount];触发器描述部分
}
触发器描述部分:位于每个触发器定义部分的末尾
struct item//触发器每一项的描述,可以没有。
{
  dword itemType;//event=0,condition=1,action=2
  string itemUIname;//ui中的名字
  bool enable;
  struct Parameters[参数的个数];//参数的描述,参数的个数由UI中的设定确定。
}
参数的描述部分:位于每个触发器描述的末尾
struct Parameters
{
  dword finger;//1:变量,2:自定义脚本(单行),3:值
  string value;
  dword??;
  dword??;
}
明天更新
发表于 2007-2-8 21:57:42 | 显示全部楼层
这个我已经研究过了呀~~

其实我现在的问题不是格式~~而是.net用不了SFmpq库~~
回复

使用道具 举报

发表于 2007-2-8 22:10:38 | 显示全部楼层
这是飞雪大人说的~~所以我不知道嗯嗯~~其实我连.NET是啥都不知道~~

但是飞雪大人说我用VCE编写的软件必须用.NET~~而.NET兼容不了普通dll~~而SFmpq正是普通dll~~因此我要么另外找一个编程软件推倒重做~~要么自己写一个兼容.NET的MPQ库~~

于是便暂搁着呢~~
回复

使用道具 举报

发表于 2007-2-8 22:18:00 | 显示全部楼层
如果是显式的dll是可以用的
麦德大人不妨先看看那个dll中有没有显式的导出函数
回复

使用道具 举报

 楼主| 发表于 2007-2-8 22:24:47 | 显示全部楼层
.net是应该能够使用普通dll滴
由于VC 6.0编写的DLL没有自描述,所以无法像C#.net编写的DLL一样直接引用调用,一般可以采用两种方法调用。
一、注册成COM组件:用命令regsvr32 DllFilePath进行注册,然后引用到项目。
二、一些非COM组件的DLL文件可以在程序中用如下格式,将其中需要调用的函数一个一个的引用声明出来。一些数据格式的对应见下表。
基本格式:[DllImport("DllFilePath",...)]
                    public static extern void function_name(datetype args,...);
DllImport 属性具有下列行为:
它只能放置在方法声明上。
它具有单个定位参数:指定包含被导入方法的 dll 名称的 dllName 参数。
它具有五个命名参数:
CallingConvention 参数指示入口点的调用约定。如果未指定 CallingConvention,则使用默认值CallingConvention.Winapi。
CharSet 参数指示用在入口点中的字符集。如果未指定 CharSet,则使用默认值 CharSet.Auto。
EntryPoint 参数给出 dll 中入口点的名称。如果未指定 EntryPoint,则使用方法本身的名称。
ExactSpelling 参数指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配。如果未指定ExactSpelling,则使用默认值 false。
PreserveSig 参数指示方法的签名应当被保留还是被转换。当签名被转换时,它被转换为一个具有HRESULT 返回值和该返回值的一个名为 retval 的附加输出参数的签名。如果未指定 PreserveSig,则使用默认值 true。 SetLastError 参数指示方法是否保留 Win32“上一错误”。如果未指定 SetLastError,则使用默认值false。 它是一次性属性类。
此外,用 DllImport 属性修饰的方法必须具有 extern 修饰符。
是的,上面就是MSDN原文内容.好了继续我们的例子,好了,先把我们上面的C代码编译成DLL叫什么呢?那就叫MYDLLTest好了.
[DllImport("MYDLLTest.dll",EntryPoint="average",ExactSpelling=false,CallingConvention=CallingConvention.Cdecl)]
static extern int average(int av[]);
回复

使用道具 举报

发表于 2007-2-8 22:34:27 | 显示全部楼层
所以说要显式的dll
显式dll中dll文件包含了导出函数名,所以可以通过DllImport或API函数LoadLibrary导入
但是隐式dll中只有函数入口地址,不能通过函数名定位,要使用隐式dll必须导入静态库文件
不过,麦德大人说的那个应该素显式的...
回复

使用道具 举报

 楼主| 发表于 2007-2-8 22:37:08 | 显示全部楼层
sfmpqapi静态动态都有,实在不行换storm.dll
回复

使用道具 举报

发表于 2007-2-9 16:37:26 | 显示全部楼层
有两种版本的吗?555

给我个下载地址吧~~
回复

使用道具 举报

 楼主| 发表于 2007-2-9 18:57:20 | 显示全部楼层
官方提供的不带静态库吗?
反正stormLib是带静态库的,而且有修改MPQ的功能

SFmpqapi.zip

167 KB, 下载次数: 62

回复

使用道具 举报

发表于 2007-2-10 15:17:48 | 显示全部楼层
sfmpq和mpqlib是显式的,倒是storm.dll是隐式的。
回复

使用道具 举报

发表于 2007-2-10 15:37:15 | 显示全部楼层
storm.dll
storm.GIF
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-4-27 10:32 , Processed in 0.102319 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表