Scorpio 脚本的扩展库
2021-06-08 21:02 更新
函数库
//脚本里使用
//在函数里,有如下的方法可以获取当前函数的信息
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 ); }
table表库
//脚本里使用:
var c = { a = 5; c = 6; t = 7; function cc(){} };
//能获取含有所有的元素的名称的array数组,
table.keys( c );
//检索该数组的方式1
//foreach( var xpair in pairs( table.keys( c ) ) ){
// print( "> " + xpair.value );//依次输出是: a c t cc
//}
//检索该数组的方式2
//foreach( var xpair in vpairs( table.keys( c ) ) ){
// print( "> " + xpair );//依次输出是: a c t cc
//}
//能获取含有所有的元素的值的array数组
table.values( c );
//检索该数组的方式1
//foreach( var xpair in pairs( table.keys( c ) ) ){
// print( "> " + xpair.value );//依次输出是: 5 6 7 Function(xpair)
//}
//检索该数组的方式2
//foreach( var xpair in vpairs( table.keys( c ) ) ){
// print( "> " + xpair );//依次输出是: 5 6 7 Function(xpair)
//}
//检索该数组的方式3
//foreach (var p in kpairs( table.keys( c ) )){
// print(p)
//}
//返回表里面所有元素(包括函数、变量)加起来的数量
table.count( c );//当前是4个元素
//清理表里面的所有元素成空表
table.clear( c );
//移除表里面的 参数2名称的元素,要是没该变量,也不会报错
table.remove( c , "cc" );//会移除函数cc,变量也是直接写上名称的,例如变量t则是 "t"
//查找表里是否存在 参数2的元素,在就返回true,否则返回false
table.containskey( c , "cc" );
math库
//脚本里使用:
//该库里的内容 以后再进行更新
Table.SetValue("PI", script.CreateDouble(PI));
Table.SetValue("Deg2Rad", script.CreateDouble(Deg2Rad));
Table.SetValue("Rad2Deg", script.CreateDouble(Rad2Deg));
Table.SetValue("Epsilon", script.CreateDouble(Epsilon));
Table.SetValue("min", script.CreateFunction(new min()));
Table.SetValue("max", script.CreateFunction(new max()));
Table.SetValue("abs", script.CreateFunction(new abs()));
Table.SetValue("floor", script.CreateFunction(new floor()));
Table.SetValue("clamp", script.CreateFunction(new clamp()));
Table.SetValue("sqrt", script.CreateFunction(new sqrt()));
Table.SetValue("pow", script.CreateFunction(new pow()));
string库
//脚本里使用:
//提取参数填入顺序的位置,从参数2开始包括参数2都是辅助要填入的参数,如果{}不够参数们多则忽略多余的参数
string.format( "a{}b{}c{}d{}eeee", 5,6,7,8,9 );//返回值是"a5b6c7d8eeee"
//返回指定范围内的字符串,
//第2个参数是从 0开始的,例如例子里,0对应的是"问"字,1对应是3字
//第3个参数是从 第2个参数开始数起来的 数量
string.substring( "问3存档完的2" , 0 , 3 );//返回的是 “问3存”
//剔除最前面 ?个数量的字符(所有的字符包括汉字,1就是一个完整的)然后返回
string.substring( "2彻底我的2" , 4 );//返回的是"的2"
//返回字符串的长度
string.length( "充电电池x1" );//返回6
//将大写字母全部转成小写的
string.tolower( "充电电CSndc池" );//返回是 "充电电csndc池"
//将大写字母全部转成大写的
string.toupper( "充电电CSndc池" );//返回是 "充电电CSNDC池"
//剔除字符串左右的空格、缩进符(键盘上的TAB键)
string.trim( " s底层 x ");//返回值是"s底层 x"
//将所有符合的字符串内容换成新的然后返回,该方法不会改变原先参与操作的字符串们
//参数2是要找到的字符串
//参数3是将找到的字符串替换成的新资费从
string.replace( "充电电CSndc池", "CSndc" , "啊s");//返回的是 "充电电啊s池"
//字符串是不是空的或没有内容的,是就返回true,否则返回false
string.isnullorempty( "ccc" );
//从最前面(0表示第1个字符)字符开始,寻找参数2的字符串,如果找到,返回该字符的位置,没有找到就返回-1
string.indexof( "到成都局i吃" , "i" );//返回的是4
//从参数3指定位置的(0表示第1个字符)字符开始(含该位置的字符),寻找参数2的字符串,
// 找到就返回找到的首位置,找不到就返回-1
string.indexof( "到成都局i吃吃点好的" , "i" , 5);//第5个也就是吃开始的向后找,所以找不到,返回的是-1
//从最后面(0表示最后面的字符)字符开始,寻找参数2的字符串,如果找到,返回该字符的位置,没有找到就返回-1
string.lastindexof( "到成都局i吃" , "i" );//返回的是4
//从参数3指定位置的(0表示最后面的字符)字符开始(含该位置的字符),寻找参数2的字符串,
// 找到就返回找到的首位置,找不到就返回-1
string.lastindexof( "到成都局i吃吃点好的" , "i" , 5);//第5个也就是吃开始的向后找,所以找不到,返回的是-1
//判断参数2是否在字符串1的开头,是就返回true,否则返回false
string.startswith( "多吃豆腐的cc" , "多吃" );//返回的是true
//判断参数2是否在字符串1的末尾,是就返回true,否则返回false
string.startswith( "多吃豆腐的cc" , "的cc" );//返回的是true
//功能同 string.indexof
//寻找参数2字符串是否在参数1字符串里,是返回true,否则返回false
string.contains( "的房间诶的附加费" , "的" );//返回值是true
//分隔提取出数据们成表,参数2是要分隔的字符
string.split( "的c房间c诶c的c附c加cc费c" , "c" );
//这是例子,会从 0开始检索出所有的值
//foreach( var xpair in pairs( string.split( "的c房间c诶c的c附c加cc费c" , "c" ) ) ){
// print( "> " + xpair.value )
//}
//下面的例子,使用的是 vpairs,所以不需要写.value就可以取值
//foreach( var xpair in vpairs( string.split( "的c房间c诶c的c附c加cc费c" , "c" ) ) ){
// print( "> " + xpair )
//}
以上内容是否对您有帮助:
更多建议: