AMX MOD X Documentation_第1頁
AMX MOD X Documentation_第2頁
AMX MOD X Documentation_第3頁
AMX MOD X Documentation_第4頁
AMX MOD X Documentation_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、AMX MOD X DocumentationScripting Tutorial Translated by Shaman.Kaler介紹Pawn是一種“腳本”語言,用于將各種功能嵌入其他程序。這種語言共有兩種,一種類似C或C+,是“匯編”語言,通常是用于輸出可執(zhí)行二進(jìn)制文件;另一種是“解釋”語言,通過虛擬機(jī)動(dòng)態(tài)地運(yùn)行代碼(VB那樣的譯者注)。AMX Pawn是兩者的混合體:寫AMX是解釋型的,但編譯過程是匯編的。(說明了為什么amxx文件沒法打開,因?yàn)槭菂R編語言譯者注)在你開始編程之前你要知道一些重要的結(jié)構(gòu)。第一是“變量”。變量可以說是含有數(shù)據(jù)的一個(gè)符號或記號(symbol or mark

2、er,中文太相似了譯者注)。比如,變量a可能會(huì)含有值2、16、0等等等等。變量是一個(gè)程序創(chuàng)造的存儲(chǔ)空間,在使用前必須聲明它們的名字(和類型)。給予變量數(shù)據(jù)稱為“賦值”。變量的賦值使用的是一個(gè)等號:new a,b,c,d /這里是 聲明a=5 /把a(bǔ)賦值為5b=16c=0d=500另一個(gè)重要的概念是函數(shù)。函數(shù)是完成某種功能時(shí)引用的符號或記號。這意味著當(dāng)你使用它們時(shí),它們會(huì)處理你所給的數(shù)據(jù)(“傳遞”的數(shù)據(jù))。函數(shù)有幾種,但是使用方法是一致的。例如,”show”函數(shù)把一個(gè)數(shù)字顯示在屏幕上:show(56) /啟動(dòng)”show”函數(shù), 并傳遞數(shù)據(jù)”56”。show() /啟動(dòng)”show”函數(shù), 沒有數(shù)據(jù)

3、(或不需要數(shù)據(jù))。show(a) /啟動(dòng)”show”函數(shù), 并傳遞變量a包含的數(shù)據(jù)。注意任何前面帶有”/”符號的文字都屬于“注釋”,不是真正的代碼。任何傳遞給函數(shù)的數(shù)據(jù)都被稱為“參數(shù)”,一個(gè)函數(shù)可能有任意多的參數(shù),你必須保證你所傳遞的每個(gè)參數(shù)的正確性。如果一個(gè)函數(shù)需要兩個(gè)數(shù)字,你就不能給它兩個(gè)字符串。函數(shù)可以“返回”數(shù)據(jù),比如:new bb = add(5, 7)這個(gè)例子中,如果”add”是一個(gè)把兩個(gè)數(shù)字相加的函數(shù),那么變量b的值就是12.是吧?最后一個(gè)概念就是“大括號式”編程。你可以把程序代碼用”和”括起來作為一個(gè)整體。比如: 這里是 一堆代碼一旦有可能的話就要練習(xí)用這種方式編程,把代碼括成

4、一個(gè)個(gè)單獨(dú)部分。當(dāng)你讀完這些時(shí),你應(yīng)該有了一點(diǎn)AMXX編程的基礎(chǔ)。恭喜。Pawn語言基礎(chǔ)(這一段真是殺了人的多翻譯還在繼續(xù)-譯者崩潰中)1、變量Pawn是一種可捆綁的,(幾乎)不需要輸入的,便于使用的腳本語言,為虛擬機(jī)而匯編。(定義可以直接省略,真的譯者注)AMX Mod X用Small語言使各種功能在HL引擎中實(shí)現(xiàn),使用Small虛擬機(jī)和Metamod(Small是用C寫的,Metamod用的是C+)。當(dāng)你把Small腳本寫好之后可以用“編譯器”把腳本編譯成AMX Mod X二進(jìn)制文件(amxx插件)。AMX Mod X小組提供特殊的Small編譯器(amxxpc.exe)。Pawn的編程腳

5、本相對簡單,沒有一些其他語言中的例如指針、類、數(shù)據(jù)流等等的概念。Small只有三種變量數(shù)據(jù)類型。默認(rèn)的變量類型是整型(integer),就是一個(gè)整數(shù)。為了兼容以往的版本,變量名稱不得超過19個(gè)字符,而且必須以字母開頭??梢园珹Z,az,09和下劃線”_”。變量名是區(qū)分大小寫的,”myvar”,”MyVaR”和”MYVAR”是不同的三個(gè)變量。要聲明一個(gè)變量,使用new方法:new a /聲明一個(gè)空的變量anew b=5 /聲明一個(gè)變量b并賦值5.new c=5.0 /這是錯(cuò)誤的,5.0不是整型!(帶有小數(shù)點(diǎn)是浮點(diǎn)型?。﹏ew d=hello /hello是個(gè)字符串,因此也是錯(cuò)誤的。/一行之內(nèi)允

6、許聲明多個(gè)變量:new e,f,g,hnew x=7, y=3你也可以把一個(gè)變量聲明為“浮點(diǎn)型”,這意味著變量可以儲(chǔ)存帶有小數(shù)部分的數(shù)字。也就是“浮點(diǎn)”數(shù):new Float:a /聲明一個(gè)空的浮點(diǎn)型變量a。new Float:b=5.3 /聲明一個(gè)浮點(diǎn)型變量b并賦值5.3。new Float:c=5 /這是有效的,但編譯器會(huì)給你個(gè)warning。new Float:d=hello /這是無效的!”hello”是個(gè)字符串。你也可以做下面的這些:/ float(n)是個(gè)把整型變?yōu)楦↑c(diǎn)型的函數(shù)。new Float:var = float(5)new Float:var2 = 5.0 new Flo

7、at:var3 = 1.0*5new var4 = floatround(5.0) /注: floatround(n) 是把浮點(diǎn)型變?yōu)檎偷暮瘮?shù)。/這使得通常的整型聲明也有效了。注:有沒有空格通常是無關(guān)緊要的,編譯器可以把符號和內(nèi)容分開,但是如果你省略得非常過分,編譯時(shí)就會(huì)出現(xiàn)error和warning了。例如”new var = 5”和”new var=5”是一樣的,但”newvar=5”就是錯(cuò)的了!最后一種就是“布爾型”,它的值只會(huì)有“True(真)”或“False(假)”。默認(rèn)是“False”。new bool:IsItOn /聲明一個(gè)新的布爾型變量“IsItOn”,并設(shè)為“False”

8、new bool:xyz=true /聲明一個(gè)新的布爾型變量“xyz”,并設(shè)為“Ture”2、數(shù)組Pawn擁有基礎(chǔ)的“數(shù)組”。數(shù)組是存儲(chǔ)組織數(shù)據(jù)的一種重要方法。這意味著你可以在一個(gè)變量中存儲(chǔ)多個(gè)數(shù)據(jù)。數(shù)組和變量遵循同一規(guī)定,有同樣的類型,數(shù)組只是單純的可以多存儲(chǔ)幾個(gè)數(shù)據(jù)而已。用中括號”和”來聲明數(shù)組與數(shù)組的容量(容量必須是固定的)。例如:/聲明一個(gè)Players數(shù)組,容量為32(可存儲(chǔ)32個(gè)數(shù)據(jù))。new Players32/現(xiàn)在就可以往數(shù)組的32個(gè)空間里傳遞數(shù)據(jù)了。 /空間的索引從0開始,到n-1結(jié)束。這里就是031啦。/每個(gè)空間的默認(rèn)值都是0./把空間0設(shè)成5.Players0 = 5/把

9、空間1設(shè)成和空間0一樣的值,這里就是5Players1 = Players0/注意下面的是無效的!/雖然有32個(gè)空間,但最多只到31號!/這會(huì)導(dǎo)致AMX Native Error 4 - AMX_ERR_BOUNDS/或者壓根就無法編譯!Players32 = 15/這個(gè)自然也是無效的。 Players-1 = 6/下面的也是無效的,a必須為常數(shù)。new a = 3new BadArraya/這樣就正確了,const代表常數(shù)(無法再被賦值)。const b = 3new GoodArrayb/你甚至可以使用define的數(shù)據(jù)來聲明數(shù)組#define ARRAY_SIZE 3new ArrayA

10、RRAY_SIZE數(shù)組也可以直接聲明并賦予所有的數(shù)據(jù):new Numbers4 = 0,1,2,3/注: 確保數(shù)據(jù)個(gè)數(shù)與數(shù)組容量的一致!數(shù)組也可以使用各種數(shù)據(jù)類型:/浮點(diǎn)型的數(shù)組:new Float:Numbers4 = 0.0, 1.2, 2.4, 3.8/布爾型的數(shù)組:(這會(huì)把所有數(shù)據(jù)設(shè)成True)new bool:playerHasGun32 = true3、字符串你可能注意到了還有一種數(shù)據(jù)類型沒說呢沒錯(cuò),就是字符串。在Pawn里,字符串,也是通過數(shù)字存儲(chǔ)的。/下面聲明了一個(gè)數(shù)組myString包含數(shù)據(jù)Hello. /有五個(gè)字母,就需要六個(gè)空間. /最后一個(gè)空間設(shè)置成0,告訴Pawn引擎

11、這是字符串.new myString = Hello/注: 在 /* 和 */ 之間的也是注釋.你不能在 /* */ 里面再來一個(gè) /* */./* 下面的命令也能做到存儲(chǔ)”Hello”,但是用起來麻煩,不推薦使用。*/new myString6myString0 = HmyString1 = emyString2 = lmyString3 = lmyString4 = omyString5 = 0/*你不可以使用下面的命令!這可能會(huì)在編譯時(shí)產(chǎn)生數(shù)據(jù)溢出!*/new myString6myString = Hello /無效!(少了就是在一個(gè)變量里存一個(gè)數(shù)組)myString0 = Hello

12、 /無效!(在一個(gè)空間里存了一個(gè)數(shù)組)/想要在字符串里添加數(shù)據(jù),可以使用Copy命令:new goodString6copy(goodString, 6, Hello)/Copy共有三個(gè)參數(shù):copy(destination, length, source)/它把源字符串的內(nèi)容復(fù)制到目標(biāo)數(shù)組中,但只復(fù)制最多l(xiāng)ength個(gè)字符。 /最后,為了證明字符串是用數(shù)字存儲(chǔ)的:new weird6weird0 = 68weird1 = 65weird2 = 73weird3 = 86weird4 = 68weird5 = 0/這會(huì)把變量weird賦值”David”./想知道字符和數(shù)字如何換算,請?jiān)L問www

13、.4、函數(shù)Pawn允許你定義自己的函數(shù)。這就可以在很多地方省略很多相同的語句。注意函數(shù)必須有返回值,使用return命令,將會(huì)直接停止函數(shù)運(yùn)行并將處理結(jié)果傳遞出去(前面曾說過“可以返回?cái)?shù)據(jù)”,這里注意是“必須”有返回值,因?yàn)榉祷氐牟灰欢ㄊ恰皵?shù)據(jù)”譯者注)。注意當(dāng)return被執(zhí)行后函數(shù)就會(huì)強(qiáng)制性停止。這里是一些例子。/這是一個(gè)不需要參數(shù)并直接返回1的函數(shù)./引用時(shí), 這個(gè)函數(shù)調(diào)用(事實(shí)上并不存在的)print命令.show() print(Hello!) return 1 /結(jié)束,返回1/像這樣引用:show()你也可以使函數(shù)變得需要參數(shù):/聲明一個(gè)叫做add_t

14、wo_numbers的函數(shù), 用于求兩數(shù)之和.add_two_numbers(first, second) new sum = first + second return sum /返回sum/然后就可以引用你的函數(shù)了:new a,ba = 5a = 12new c = add_two_numbers(a,b)/c 現(xiàn)在就應(yīng)該等于 17.在參數(shù)類型方面是沒有限制的。當(dāng)你把參數(shù)給予一個(gè)函數(shù)時(shí),這個(gè)過程稱為“傳遞”(這個(gè)定義居然到現(xiàn)在才出現(xiàn)譯者注)。傳遞的可以是數(shù)據(jù),也可以是變量:/聲明一個(gè)叫 add_two_floats 的函數(shù),對兩個(gè)浮點(diǎn)數(shù)求和。Float:add_two_floats(Flo

15、at:first, Float:second) new Float:sum = first + second return sumnew Float:anew Float:ba = 5.0b = 6.3new Float:cc = add_two_floats( a+b )/c 現(xiàn)在應(yīng)該等于 11.3/你甚至可以傳遞數(shù)組!而且數(shù)組的大小不必確定./如果你確定了,那么引用函數(shù)時(shí)就必須傳遞相同容量的數(shù)組.add_two_from_array(array, a, b) new first = arraya new second = arrayb new sum = add_two_numbers(f

16、irst, second) /使用我們之前創(chuàng)造的函數(shù) return sum注:當(dāng)你把數(shù)組傳遞到函數(shù)時(shí),使用的是“引用傳遞(by Ref)”,不像變量傳遞時(shí)是“值傳遞(by Var)”。這意味著你傳遞一個(gè)變量a時(shí),是把變量a的值拷貝到內(nèi)存,傳遞值,運(yùn)算,然后刪除值,原先的變量a不會(huì)變,而當(dāng)你傳遞數(shù)組時(shí),數(shù)組是直接引用過去的,函數(shù)過程之后數(shù)組會(huì)保持函數(shù)造成的變化。例如:/這個(gè)函數(shù)把傳遞的數(shù)組空間a和空間b對調(diào)。.swap_slots(array, a, b) new temp /注意你必須有個(gè)臨時(shí)變量存儲(chǔ)其中一個(gè)數(shù)據(jù), /否則你就不能交換!這是個(gè)經(jīng)典問題。 /假設(shè)有a和b,讓b = a后b原有的數(shù)

17、據(jù)就被覆蓋了。 temp = arrayb arrayb = arraya arraya = tempnew myArray2myArray0 = 5myArray1 = 6swap_slots(myArray, 0, 1)/myArray0 是 6, myArray1 是 5/你也可以通過聲明為常量來防止數(shù)組被修改:add_two_from_array(const array, a, b) new first = arraya new second = arrayb new sum = add_two_from_array(first, second) return sum/注:現(xiàn)在這個(gè)數(shù)組

18、就不會(huì)變化了。./這個(gè)函數(shù)想要對常量賦值,自然不會(huì)工作。bad_function(const array) array0 = 0(這個(gè)部分比較困難,多看幾遍你會(huì)懂的。-譯者注)5、表達(dá)式就像聽起來那樣,和數(shù)學(xué)上的表達(dá)式?jīng)]什么區(qū)別。通過運(yùn)算符來計(jì)算并返回一個(gè)數(shù)據(jù),就是表達(dá)式(遵循運(yùn)算法則)。你可以把表達(dá)式放在任何地方,也可以對變量進(jìn)行操作。/最簡單的表達(dá)式,返回0.0/如果為了讀起來方便,也可以寫成這樣:(0)當(dāng)一個(gè)表達(dá)式不是0或False時(shí),它除了會(huì)返回值外還會(huì)返回一個(gè)True。/下面是一些數(shù)學(xué)表達(dá)式與符號:/ + 表示相加/ - 表示相減/ * 表示相乘/ / 表示相除/ % 表示求余數(shù)(5

19、+6) /返回 11(5*6)+3) /返回33(5+3)/2)*4)-9) /返回5(5*6) % 7) /返回2/另一些表達(dá)式:(true) /返回true(5.0 + 2.3) /返回7.3 (浮點(diǎn)數(shù))/還可以直接對變量賦值:new a = 5new b = 6/下面是前/后加減的方法:(非常之困難+有爭議譯者注)a+ /返回 a+1, 或 6. 后加加.+a /也返回 a+1, 或 6. 前加加.區(qū)別很簡單但是很重要。a+是先使本身為a然后計(jì)算a+1最后賦值a = a+1,而+a是先使本身為a+1然后賦值a = a+1。(也就是a+的返回值是a,但會(huì)使a變成a+1;而+a的返回值是a+

20、1,a也會(huì)變成a+1譯者注)a- /返回 4, 后減減-a /返回 4, 前減減/注:a+相當(dāng)于下面的:a = a + 1/還有一種寫表達(dá)式的方法:a = a OP y/其中OP 代表運(yùn)算符. 這種形式可以精簡為:a OP= y/觀察:a += 1 /a = a + 1a -= b /a = a - ba *= 0 /a = a * 0a /= 2 /a = a / 2.運(yùn)算符并不只是給出的那幾個(gè),還有布爾運(yùn)算符:/&(and,與)運(yùn)算符運(yùn)算左右兩個(gè)布爾值. /只有全為真時(shí)返回真.(1 & 0) /返回false, 因?yàn)?返回true而0返回false. (1 & 2) /兩個(gè)數(shù)字都是 tru

21、e, 因此返回true.(true & false) /false(false & false) /false(true & true) /true/另一個(gè)就是|(or,或)運(yùn)算符,兩者有一個(gè)為true就返回true.(1 | 0) /true, 因?yàn)?是true.(1 | 2) /true(true | true) /true(false | false) /false(true | true) /true下面是不太常用的“按位”運(yùn)算符,比較的是二進(jìn)制數(shù)據(jù)。例如“按位與”運(yùn)算符&比較9(1001)和8(1000)時(shí),每一位進(jìn)行比較,1and1,0and0,0and0,1and0,其結(jié)果為(1000)也就是8./返回8,如上面所說.(9 & 8)/4 (00100) 按位與 16 (10000) 返

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論