阅读(1950)
赞(0)
Scorpio 脚本的扩展库
2019-06-21 23:33:04 更新
函数库
//脚本里使用
//在函数里,有如下的方法可以获取当前函数的信息
function x( a , b , c , d ){
}
//返回函数参数个数
func.count( x );
//返回函数是否是不定参函数
func.isparams( x )
//返回函数是否是静态函数(不是table内部函数)
func.isstatic( x )
//返回函数参数名字 的 脚本数组
func.getparams( x )
json库
//推荐用表,不推荐使用 json //脚本里使用: //注意表的数据类型,表里面的变量不能是c#的容器,否则会出错, // 例如:DictionaryStringString = generic_type( import_type("System.Collections.Generic.Dictionary`2") , import_type("System.String") , import_type("System.String") ); //临时的表 var test = { a = "100", b = b ; c = c ; d = d, e = 100, f = false h = { t = [] }; l = []; function m( a , b ,c ){ foreach( pair in pairs( this ) ){ mtDebug.port_debug_log( pair.key + " = " + pair.value ); } foreach( pair in pairs( this.h.t ) ){ mtDebug.port_debug_log( pair.key + " = " + pair.value ); } foreach( pair in pairs( this.l ) ){ mtDebug.port_debug_log( pair.key + " = " + pair.value ); } } }; test.h.t[ 10 ] = "我"; test.l[ 10 ] = "你"; //表转为json var str = json.encode(test) print(str) //json的转为表 var dec = json.decode(str) //读取 表里的所有内容 test.m( 1 , 2 , 3 );
array库
//脚本里使用: //建立一个临时的空数组,该数组的元素支持任何的类型,包括但不限于 函数、变量、容器变量等等 var tt = []; //添加 参数2 在 尾部 array.add( tt , function(){ print("曾多次");return "ccc";} );//这是函数的,可以直接获取tt[0]();进行执行 //可以直接取出数组里的元素使用 tt[ 0 ]();//这是执行刚刚添加的元素1(函数) //如果访问范围超标,则会直接进行扩容 tt[ 50 ] = "扩容";//会扩容到50,那些没有元素的位置们的值null //插入 参数3 在 参数2的位置 //注意,array.insert 不自动拓展数量的,要是任意使用insert不检查长度会出错的,所以在使用insert前必须先检查长度以扩容以避免bug 该自动扩展问题,已经自行修改源码实现自动扩展,所以不必要再顾忌这注意,但如果你使用的是自行下载的scorpio库,还是自己根据情况改不改吧 //注意,如果插入自动扩展的地方没有值,则该位置是null array.insert( tt , 0 , "cscssc1" );//插入元素到第0位置,也就是它在最前面了 //例如这样,检查它的数量如果长度超出就调整其 //priority是要插入的位置 //function t( arrayPos , priority , script ){ //检查长度是否足够,不够就扩容 //if( array.count( arrayPos ) < priority ){ // array.resize( arrayPos , priority ); //} //array.insert( arrayPos , priority , script ); //移出 和 参数1相同的 1个 元素 array.remove( tt , "cscssc" ); //移除 参数1指定的位置 的 元素 array.removeat( tt , 1 ); //以参数2为可容纳元素的数量,去变动数组里的元素数量, // 要是 当前数组容量大于参数2,则会丢掉从头部数起超过的元素 // 要是 当前数组容量小于参数1,则会在尾部添加null的元素以填充到符合参数1的长度,这些元素可以丢掉的 array.resize( tt , 0 );//这效果就等于是 array.clear( tt )了 //丢掉里面的所有元素 array.clear( tt ); //获取里面的元素数量,1表示里面有1个元素,0表示里面没有元素 array.count( tt ); //排序,第2个参数是方法 //它的使用就同c#里的Array.sort一样,只不过我没用过,所以不知道怎么用它 array.sort( tt , function( a , b ){ return 1;} ); //功能同indexof,最好还是少使用它为好 //检测数组里是否存在 元素1,存在就返回true,否则返回false array.contains( tt , "cscssc"); //从头部开始去寻找 参数2,找到就返回true,否则返回false array.indexof( tt , "cscss多吃点c"); //从尾部开始去寻找 参数2,找到就返回true,否则返回false array.lastindexof( tt , "cscss多吃点c"); //返回第1个元素,就同 tt[ 0 ] 一样 array.first( tt ); //返回最后的元素,就同 tt[ array.count( tt ) - 1 ] 一样 array.last( tt ); //不推荐使用,弹出(从容器里移出该元素和返回该元素)最后面的元素,如果没有存在该元素则会出错 array.pop( tt ); //不推荐使用,安全的弹出最后面的元素,没有存在该元素就返回null而不会出错 array.safepop( tt ); //弹出(从容器里移出该元素和返回该元素)最前面的元素,如果没有存在该元素则会出错 array.popfirst( tt ); //弹出(从容器里移出该元素和返回该元素)最前面的元素,没有存在该元素就返回null而不会出错 array.safepopfirst( tt ); //弹出(从容器里移出该元素和返回该元素)最后面的元素,如果没有存在该元素则会出错 array.poplast( tt ); //弹出(从容器里移出该元素和返回该元素)最后面的元素,没有存在该元素就返回null而不会出错 array.safepoplast( tt ); //遍历的方式1 //使用 vpairs,不需要.value foreach( var xpair in vpairs( tt ) ){ print( "> " + xpair ); } //遍历的方式2 //使用 pairs,需要.value foreach( var xpair in pairs( tt ) ){ print( "> " + xpair.value ); }