怎麼在CLEO中連結區域性變數和全域性變數?

CLEO是應用於單機遊戲GTA的外掛,應用於GTA III代系列遊戲如GTA VC(罪惡都市)GTA SA(聖安地列斯)在遊戲中擴充套件編碼的可能性。最新版本為CLEO 4 1.1.30.F ,官方更新於11年4月。

CLEO可以說是俠盜獵車手這款遊戲最為讓人痴迷的一款補丁,目前全世界各大GTA相關論壇這種補丁可以說是數不勝數。

很多玩家喜歡自己製作IFP,TXD等檔案配合CLEO使用使得遊戲更為豐富。

由於CLEO涉及到程式設計知識,不太懂程式設計結構的新手朋友可能完全不懂CLEO該如何編寫。

這篇經驗介紹一下

怎麼在CLEO中連結區域性變數和全域性變數,讓新手玩家認識CLEO的變數定義用法。

工具/原料

聖安地列斯V1.0完整版

Sanny BuilderV3.04

一: 跳轉到相應的標籤接入口

定義標籤接入口連結定義變數的必要預先工作,我們需要按照遊戲語言的格式定義CLEO檔案的格式等相關資訊。

首先,我們開啟Sanny Builder,點選選單欄-檔案-新建,新建一個空白文件框。

我們在檔案頭輸入如下原始碼:

// This file was decompiled using SASCM.INI published by Seemann ( on 13.10.2007

{$VERSION 3.1.1000}
{$CLEO .cs}這一段是CLEO程式設計固定的語句,定義輸出檔案格式為.cs。

怎麼在CLEO中連結區域性變數和全域性變數

接下來按空格空一行,輸入:

//-------------MAIN---------------
03A4: name_thread 'HDRVBY'
這一段是定義建立遊戲執行緒名稱,執行緒名稱可以自定義,比如改為'MY GOD',那就可以寫為:03A4: name_thread 'MY GOD',以下的標籤接入口名稱也要隨之更改為 :MY GOD_11(11這樣的編號可以隨意,建議從小到大,便於記憶)

怎麼在CLEO中連結區域性變數和全域性變數

接下來就要建立標籤接入口我們空一行,輸入 :HDRVBY_11

這個:HDRVBY_11就是一個標籤接入口了,和步驟三建立的執行緒名稱相對應。

:HDRVBY_11就是一個迴圈標籤,和建立的執行緒名稱相同,後面的數字可以自定義,不過建議從小開始,建議從小到大,便於記憶,也不容易搞錯。

在接下來就要用到標籤跳轉,004D: jump_if_false @HDRVBY_11,如果以上條件不滿足就跳轉回迴圈標籤:HDRVBY_11,跳轉時用@+標籤名,用來連結跳轉到相應標籤標籤接入口,即迴圈標籤的用法就是這樣。

怎麼在CLEO中連結區域性變數和全域性變數

二.連結區域性變數

遊戲中的物件需要一個類似身份登記的辦法來處理執行,這個身份登記可以理解為變數。區域性變數由@和數字組合而成。範圍從[email protected][email protected] 是允許的 , [email protected][email protected] 用於計時器, cs 檔案中最多隻能用到[email protected]

首先,我們依舊開啟Sanny Builder,點選選單欄-檔案-新建,新建一個空白文件框。

怎麼在CLEO中連結區域性變數和全域性變數

我們在檔案頭輸入如下原始碼:

// This file was decompiled using SASCM.INI published by Seemann ( on 13.10.2007

{$VERSION 3.1.1000}
{$CLEO .cs}這一段是CLEO程式設計固定的語句,定義輸出檔案格式為.cs。

怎麼在CLEO中連結區域性變數和全域性變數

我們建立一個迴圈標籤頭,輸入:

:HUNTERARRAY_49
0247: load_model #HUNTER
038B: load_requested_models
0001: wait 0 ms
00D6: if
0248: model #HUNTER available
004D: jump_if_false @HUNTERARRAY_49
03E5: show_text_box 'FN_FUNN'

先檢測模型載入(阿帕奇飛機),如果載入成功,就在螢幕顯示文字內容 'FN_FUNN'。如果載入不成功,就跳轉回:HUNTERARRAY_49

怎麼在CLEO中連結區域性變數和全域性變數

接下來接著輸入

04C4: store_coords_to [email protected] [email protected] [email protected] from_actor $PLAYER_ACTOR with_offset 0.0 9.8 0.5
00A5: [email protected] = create_car #HUNTER at [email protected] [email protected] [email protected]
0224: set_car [email protected] health_to 1E38
0002: jump @HUNTERARRAY_19

將遊戲主角當前座標偏移0.0 9.8 0.5的距離儲存為[email protected] [email protected] [email protected](就是X軸,Y軸,,Z軸方向的偏移距離)[email protected] [email protected] [email protected] 就被連結儲存為區域性變量了,作為當前資訊的儲存變數識別符號。之後在[email protected] [email protected] [email protected] 這個座標點建立名為HUNTER的車輛,定義為[email protected][email protected]也是區域性變數,儲存當前建立車輛資訊。之後設定車輛血量為10的38次方,最後跳轉回標籤頭。

怎麼在CLEO中連結區域性變數和全域性變數

三:用來連結全域性變數

全部變數和區域性變數用法一樣,只需要將@識別符號改為(包括執行緒建立和OBJ定義等)。全域性變數是以$ 為標誌和一些單詞,數字之類組成的。在CLEO指令碼中使用全域性變數可能會導致遊戲BUG和崩潰
只有 $PLAYER_CHAR, $PLAYER_ACTOR, $ONMISSION 才會正常執行
全域性變數運用於Mani.scm中以此在不同遊戲執行緒中相互連線,並且幾乎大部分已經預定義在main.scm檔案中,比如$PLAYER_CHAR,你可以在CLEO編寫中直接呼叫,而不需要預先定義它。
區域性變數同樣也是運用於main.scm中但是他們不能在不同遊戲執行緒中相互連線
你可以線上程中用區域性變數建立一輛汽車標記為[email protected]同時在main.scm的其他執行緒中使用[email protected]
[email protected] = create_car
你有2種不同的車輛,存在於不同的執行緒命令中
你可以在一個執行緒中使用全域性變數建立一輛汽車但是不能夠在其他執行緒中再次使用同一個全域性變數來建立這輛汽車
$mycar5 = create_car
但是你可以從main.scm的其他執行緒中呼叫這輛汽車
全域性變數是可儲存的,而區域性變數則不行
但是在CLEO指令碼中使用全域性變數會導致遊戲BUG和崩潰
只有 $PLAYER_CHAR, $PLAYER_ACTOR, $ONMISSION 才不會
簡單來說,全域性變數在任何執行緒中都能夠使用,區域性變數只能用於單個執行緒中,需要預先定義。
這就是全域性變數與區域性變數的區別。

怎麼在CLEO中連結區域性變數和全域性變數

注意事項

​全部變數因為已經預先定義於MAIN.SCM中,在CLEO中不推薦使用,容易引起BUG或者遊戲崩潰。

相關問題答案