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 )
				//}




以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号