函數(shù)庫
//腳本里使用
//在函數(shù)里,有如下的方法可以獲取當(dāng)前函數(shù)的信息
function x( a , b , c , d ){
}
//返回函數(shù)參數(shù)個(gè)數(shù)
func.count( x );
//返回函數(shù)是否是不定參函數(shù)
func.isparams( x )
//返回函數(shù)是否是靜態(tài)函數(shù)(不是table內(nèi)部函數(shù))
func.isstatic( x )
//返回函數(shù)參數(shù)名字 的 腳本數(shù)組
func.getparams( x )
json庫
//推薦用表,不推薦使用 json
//腳本里使用:
//注意表的數(shù)據(jù)類型,表里面的變量不能是c#的容器,否則會(huì)出錯(cuò),
// 例如:DictionaryStringString = generic_type( import_type("System.Collections.Generic.Dictionary`2") , import_type("System.String") , import_type("System.String") );
//臨時(shí)的表
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 ] = "你";
//表轉(zhuǎn)為json
var str = json.encode(test)
print(str)
//json的轉(zhuǎn)為表
var dec = json.decode(str)
//讀取 表里的所有內(nèi)容
test.m( 1 , 2 , 3 );
array庫
//腳本里使用:
//建立一個(gè)臨時(shí)的空數(shù)組,該數(shù)組的元素支持任何的類型,包括但不限于 函數(shù)、變量、容器變量等等
var tt = [];
//添加 參數(shù)2 在 尾部
array.add( tt , function(){ print("曾多次");return "ccc";} );//這是函數(shù)的,可以直接獲取tt[0]();進(jìn)行執(zhí)行
//可以直接取出數(shù)組里的元素使用
tt[ 0 ]();//這是執(zhí)行剛剛添加的元素1(函數(shù))
//如果訪問范圍超標(biāo),則會(huì)直接進(jìn)行擴(kuò)容
tt[ 50 ] = "擴(kuò)容";//會(huì)擴(kuò)容到50,那些沒有元素的位置們的值null
//插入 參數(shù)3 在 參數(shù)2的位置
//注意,array.insert 不自動(dòng)拓展數(shù)量的,要是任意使用insert不檢查長(zhǎng)度會(huì)出錯(cuò)的,所以在使用insert前必須先檢查長(zhǎng)度以擴(kuò)容以避免bug
該自動(dòng)擴(kuò)展問題,已經(jīng)自行修改源碼實(shí)現(xiàn)自動(dòng)擴(kuò)展,所以不必要再顧忌這注意,但如果你使用的是自行下載的scorpio庫,還是自己根據(jù)情況改不改吧
//注意,如果插入自動(dòng)擴(kuò)展的地方?jīng)]有值,則該位置是null
array.insert( tt , 0 , "cscssc1" );//插入元素到第0位置,也就是它在最前面了
//例如這樣,檢查它的數(shù)量如果長(zhǎng)度超出就調(diào)整其
//priority是要插入的位置
//function t( arrayPos , priority , script ){
//檢查長(zhǎng)度是否足夠,不夠就擴(kuò)容
//if( array.count( arrayPos ) < priority ){
// array.resize( arrayPos , priority );
//}
//array.insert( arrayPos , priority , script );
//移出 和 參數(shù)1相同的 1個(gè) 元素
array.remove( tt , "cscssc" );
//移除 參數(shù)1指定的位置 的 元素
array.removeat( tt , 1 );
//以參數(shù)2為可容納元素的數(shù)量,去變動(dòng)數(shù)組里的元素?cái)?shù)量,
// 要是 當(dāng)前數(shù)組容量大于參數(shù)2,則會(huì)丟掉從頭部數(shù)起超過的元素
// 要是 當(dāng)前數(shù)組容量小于參數(shù)1,則會(huì)在尾部添加null的元素以填充到符合參數(shù)1的長(zhǎng)度,這些元素可以丟掉的
array.resize( tt , 0 );//這效果就等于是 array.clear( tt )了
//丟掉里面的所有元素
array.clear( tt );
//獲取里面的元素?cái)?shù)量,1表示里面有1個(gè)元素,0表示里面沒有元素
array.count( tt );
//排序,第2個(gè)參數(shù)是方法
//它的使用就同c#里的Array.sort一樣,只不過我沒用過,所以不知道怎么用它
array.sort( tt , function( a , b ){ return 1;} );
//功能同indexof,最好還是少使用它為好
//檢測(cè)數(shù)組里是否存在 元素1,存在就返回true,否則返回false
array.contains( tt , "cscssc");
//從頭部開始去尋找 參數(shù)2,找到就返回true,否則返回false
array.indexof( tt , "cscss多吃點(diǎn)c");
//從尾部開始去尋找 參數(shù)2,找到就返回true,否則返回false
array.lastindexof( tt , "cscss多吃點(diǎn)c");
//返回第1個(gè)元素,就同 tt[ 0 ] 一樣
array.first( tt );
//返回最后的元素,就同 tt[ array.count( tt ) - 1 ] 一樣
array.last( tt );
//不推薦使用,彈出(從容器里移出該元素和返回該元素)最后面的元素,如果沒有存在該元素則會(huì)出錯(cuò)
array.pop( tt );
//不推薦使用,安全的彈出最后面的元素,沒有存在該元素就返回null而不會(huì)出錯(cuò)
array.safepop( tt );
//彈出(從容器里移出該元素和返回該元素)最前面的元素,如果沒有存在該元素則會(huì)出錯(cuò)
array.popfirst( tt );
//彈出(從容器里移出該元素和返回該元素)最前面的元素,沒有存在該元素就返回null而不會(huì)出錯(cuò)
array.safepopfirst( tt );
//彈出(從容器里移出該元素和返回該元素)最后面的元素,如果沒有存在該元素則會(huì)出錯(cuò)
array.poplast( tt );
//彈出(從容器里移出該元素和返回該元素)最后面的元素,沒有存在該元素就返回null而不會(huì)出錯(cuò)
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數(shù)組,
table.keys( c );
//檢索該數(shù)組的方式1
//foreach( var xpair in pairs( table.keys( c ) ) ){
// print( "> " + xpair.value );//依次輸出是: a c t cc
//}
//檢索該數(shù)組的方式2
//foreach( var xpair in vpairs( table.keys( c ) ) ){
// print( "> " + xpair );//依次輸出是: a c t cc
//}
//能獲取含有所有的元素的值的array數(shù)組
table.values( c );
//檢索該數(shù)組的方式1
//foreach( var xpair in pairs( table.keys( c ) ) ){
// print( "> " + xpair.value );//依次輸出是: 5 6 7 Function(xpair)
//}
//檢索該數(shù)組的方式2
//foreach( var xpair in vpairs( table.keys( c ) ) ){
// print( "> " + xpair );//依次輸出是: 5 6 7 Function(xpair)
//}
//檢索該數(shù)組的方式3
//foreach (var p in kpairs( table.keys( c ) )){
// print(p)
//}
//返回表里面所有元素(包括函數(shù)、變量)加起來的數(shù)量
table.count( c );//當(dāng)前是4個(gè)元素
//清理表里面的所有元素成空表
table.clear( c );
//移除表里面的 參數(shù)2名稱的元素,要是沒該變量,也不會(huì)報(bào)錯(cuò)
table.remove( c , "cc" );//會(huì)移除函數(shù)cc,變量也是直接寫上名稱的,例如變量t則是 "t"
//查找表里是否存在 參數(shù)2的元素,在就返回true,否則返回false
table.containskey( c , "cc" );
math庫
//腳本里使用:
//該庫里的內(nèi)容 以后再進(jìn)行更新
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庫
//腳本里使用:
//提取參數(shù)填入順序的位置,從參數(shù)2開始包括參數(shù)2都是輔助要填入的參數(shù),如果{}不夠參數(shù)們多則忽略多余的參數(shù)
string.format( "a{}b{}c{}d{}eeee", 5,6,7,8,9 );//返回值是"a5b6c7d8eeee"
//返回指定范圍內(nèi)的字符串,
//第2個(gè)參數(shù)是從 0開始的,例如例子里,0對(duì)應(yīng)的是"問"字,1對(duì)應(yīng)是3字
//第3個(gè)參數(shù)是從 第2個(gè)參數(shù)開始數(shù)起來的 數(shù)量
string.substring( "問3存檔完的2" , 0 , 3 );//返回的是 “問3存”
//剔除最前面 ?個(gè)數(shù)量的字符(所有的字符包括漢字,1就是一個(gè)完整的)然后返回
string.substring( "2徹底我的2" , 4 );//返回的是"的2"
//返回字符串的長(zhǎng)度
string.length( "充電電池x1" );//返回6
//將大寫字母全部轉(zhuǎn)成小寫的
string.tolower( "充電電CSndc池" );//返回是 "充電電csndc池"
//將大寫字母全部轉(zhuǎn)成大寫的
string.toupper( "充電電CSndc池" );//返回是 "充電電CSNDC池"
//剔除字符串左右的空格、縮進(jìn)符(鍵盤上的TAB鍵)
string.trim( " s底層 x ");//返回值是"s底層 x"
//將所有符合的字符串內(nèi)容換成新的然后返回,該方法不會(huì)改變?cè)葏⑴c操作的字符串們
//參數(shù)2是要找到的字符串
//參數(shù)3是將找到的字符串替換成的新資費(fèi)從
string.replace( "充電電CSndc池", "CSndc" , "啊s");//返回的是 "充電電啊s池"
//字符串是不是空的或沒有內(nèi)容的,是就返回true,否則返回false
string.isnullorempty( "ccc" );
//從最前面(0表示第1個(gè)字符)字符開始,尋找參數(shù)2的字符串,如果找到,返回該字符的位置,沒有找到就返回-1
string.indexof( "到成都局i吃" , "i" );//返回的是4
//從參數(shù)3指定位置的(0表示第1個(gè)字符)字符開始(含該位置的字符),尋找參數(shù)2的字符串,
// 找到就返回找到的首位置,找不到就返回-1
string.indexof( "到成都局i吃吃點(diǎn)好的" , "i" , 5);//第5個(gè)也就是吃開始的向后找,所以找不到,返回的是-1
//從最后面(0表示最后面的字符)字符開始,尋找參數(shù)2的字符串,如果找到,返回該字符的位置,沒有找到就返回-1
string.lastindexof( "到成都局i吃" , "i" );//返回的是4
//從參數(shù)3指定位置的(0表示最后面的字符)字符開始(含該位置的字符),尋找參數(shù)2的字符串,
// 找到就返回找到的首位置,找不到就返回-1
string.lastindexof( "到成都局i吃吃點(diǎn)好的" , "i" , 5);//第5個(gè)也就是吃開始的向后找,所以找不到,返回的是-1
//判斷參數(shù)2是否在字符串1的開頭,是就返回true,否則返回false
string.startswith( "多吃豆腐的cc" , "多吃" );//返回的是true
//判斷參數(shù)2是否在字符串1的末尾,是就返回true,否則返回false
string.startswith( "多吃豆腐的cc" , "的cc" );//返回的是true
//功能同 string.indexof
//尋找參數(shù)2字符串是否在參數(shù)1字符串里,是返回true,否則返回false
string.contains( "的房間誒的附加費(fèi)" , "的" );//返回值是true
//分隔提取出數(shù)據(jù)們成表,參數(shù)2是要分隔的字符
string.split( "的c房間c誒c的c附c加cc費(fèi)c" , "c" );
//這是例子,會(huì)從 0開始檢索出所有的值
//foreach( var xpair in pairs( string.split( "的c房間c誒c的c附c加cc費(fèi)c" , "c" ) ) ){
// print( "> " + xpair.value )
//}
//下面的例子,使用的是 vpairs,所以不需要寫.value就可以取值
//foreach( var xpair in vpairs( string.split( "的c房間c誒c的c附c加cc費(fèi)c" , "c" ) ) ){
// print( "> " + xpair )
//}
更多建議: