|
这几天研究了下JassGenPack的功能,真的十分强大~
尤其是它可以导入外部SLK文件,等于让WE挂接了简单的数据表。
不过JGP不太稳定,经常会不能编译地图,所以我模仿它的作法用Excel写了一个VBA脚本,使得按照一定规则的Excel数据表可以转换成WE能读取的代码
该脚本转换出的代码需要CSCache13.0以上版本支持!
要运行该宏脚本需要将Excel的安全性设定调整至中级以下,选择“菜单-工具-宏-Generate-运行”
执行后会先询问该数据段的名字,输入一个英文名字后,会询问是否将第一列设定为索引字段(所谓索引字段就是指可以利用该字段搜到整行的数据,比如可以把物品的id放在第一列,后面放物品的一些其他数据;如果放弃索引字段,则只能采用数组序号的方式查找数据)
程序会在原Excel文件目录下生成一个和Excel文件同名的TxT文件,里面就是代码。
然后在WE中新建一个触发器,转换成自定义脚本,将TXT中的内容复制进自定义脚本的函数中就可以了。最后的最后,别忘记我们是用了一个全局函数来储存数据的,所以按Ctrl+B打开变量编辑窗口,创建一个和刚才你选择英文名字同名的整数数组变量。
例子:
原始表格
rawcode real string integer <-第一行用来定义下面数据的类型
I000 1.2 云岚 1
I001 3.2 寒光 5
I002 3.4 清秋 11
I003 4.5 寒山
I004 231.23 31
I005 64 烟波 41
转换出的代码(英文名字取Temp,“索引字段”选Yes)
//****************************************************************
//*** This Data was generated by Helanmouse's WE Data Importer ***
//*** Version 1.3
//Line Summary
udg_Temp[0] = 6
//Line 1
udg_Temp[1] = NewArray(5, true)
call SetTableInt( "[Temp]", I2S('I000'), udg_Temp[1] ) //这就是索引字段,在其他函数中可以直接用 GetTableInt() 函数调出该行数据
call SetArrayReal( udg_Temp[1], 2, 1.2 )
call SetArrayString( udg_Temp[1], 3, "云岚" )
call SetArrayInt( udg_Temp[1], 4, 1 )
//Line 2
udg_Temp[2] = NewArray(5, true)
call SetTableInt( "[Temp]", I2S('I001'), udg_Temp[2] )
call SetArrayReal( udg_Temp[2], 2, 3.2 )
call SetArrayString( udg_Temp[2], 3, "寒光" )
call SetArrayInt( udg_Temp[2], 4, 5 )
//Line 3
udg_Temp[3] = NewArray(5, true)
call SetTableInt( "[Temp]", I2S('I002'), udg_Temp[3] )
call SetArrayReal( udg_Temp[3], 2, 3.4 )
call SetArrayString( udg_Temp[3], 3, "清秋" )
call SetArrayInt( udg_Temp[3], 4, 11 )
//Line 4
udg_Temp[4] = NewArray(5, true)
call SetTableInt( "[Temp]", I2S('I003'), udg_Temp[4] )
call SetArrayReal( udg_Temp[4], 2, 4.5 )
call SetArrayString( udg_Temp[4], 3, "寒山" )
//Line 5
udg_Temp[5] = NewArray(5, true)
call SetTableInt( "[Temp]", I2S('I004'), udg_Temp[5] )
call SetArrayReal( udg_Temp[5], 2, 231.23 )
call SetArrayInt( udg_Temp[5], 4, 31 )
//Line 6
udg_Temp[6] = NewArray(5, true)
call SetTableInt( "[Temp]", I2S('I005'), udg_Temp[6] )
call SetArrayReal( udg_Temp[6], 2, 6423 )
call SetArrayString( udg_Temp[6], 3, "烟波" )
call SetArrayInt( udg_Temp[6], 4, 41 )
|
|