Bit.ly/sampwiki

Bit.ly/hoclamsamp

Dark Mode

Khái Niệm Cơ Bản



Xuất phát!

Dưới đây là một ví dụ về kịch bản cơ bản nhất bạn có thể viết:
#include <a_samp>
 
main()
{
 print("Hello World!");
 return 1;
}

Bao gồm: include

#include <a_samp>
Điều này về cơ bản tải mã từ pawno / gồm / a_samp.inc vào tập lệnh của bạn, vì vậy mọi thứ bạn có thể sử dụng. Một trong những điều nó có là:
#include <core>
#include <float>
#include <string>
#include <file>
#include <time>
#include <datagram>
#include <a_players>
#include <a_vehicles>
#include <a_objects>
#include <a_sampdb>
Điều này bao gồm tất cả các tệp khác trong thư mục đó, bằng cách thêm một dòng bạn có quyền truy cập vào tất cả các chức năng trong SA: MP (nhiều hơn về các chức năng sau).

Gọi

Phần tiếp theo có hai mặt của một cuộc gọi chức năng. main () là một hàm mà bạn viết mã cho và được gọi từ nơi khác, print (chuỗi []) là một hàm với mã ở nơi khác mà bạn gọi. Hiện tại tất cả những gì sẽ làm là tải, in một chuỗi (tức là in "Hello World!" (Không có "" s) (một truyền thống trong tất cả các ngôn ngữ kịch bản)) đến bảng điều khiển máy chủ và kết thúc
return 1;
Chuyển một giá trị (1) trở lại vị trí được gọi là chính để cho nó biết điều gì đã xảy ra (giá trị chính xác được truyền ở đây không quan trọng nhưng ở những nơi khác thì không). Bây giờ bạn có kịch bản đầu tiên (rất cơ bản). Nếu bạn chọn tệp-> mới trong pawno, nó sẽ cung cấp cho bạn một điểm bắt đầu lớn hơn nhiều, tất cả các cuộc gọi lại trong (xem bên dưới), bao gồm cả chính (về mặt kỹ thuật không phải là một cuộc gọi lại nhưng hoạt động như một).

Các câu lệnh

Các dòng in và trả lại có ';' (dấu chấm phẩy) trên chúng, điều này chỉ biểu thị sự kết thúc của một câu lệnh (một câu lệnh là một nhóm gồm một hoặc nhiều hàm và toán tử cùng làm một việc gì đó, tương tự như một câu trong ngôn ngữ chung). Hầu hết mọi người đặt các câu lệnh riêng biệt trên các dòng riêng biệt nhưng điều này là không bắt buộc, nó chỉ làm cho mọi thứ rõ ràng hơn, những điều sau đây có giá trị như nhau:

main() { print("Hello World!"); return 1; }
{} S (dấu ngoặc (ngoặc nhọn), không phải dấu ngoặc đơn (ngoặc)) bao gồm một nhóm các câu lệnh sẽ được thực thi cùng nhau (như một đoạn trong ngôn ngữ chung). Nếu bạn đã làm:
main() print("Hello World!"); return 1;
Bạn sẽ gặp lỗi vì bây giờ "return 1;" tuyên bố không được nhóm nên không phải là một phần của chính. Niềng răng nhóm một tập hợp các câu lệnh thành một câu lệnh đơn (được gọi là câu lệnh ghép) và các hàm có một câu lệnh với chúng. Không có dấu ngoặc in và trả về là các câu lệnh hoàn toàn riêng biệt, do đó, có hai hoặc chúng, vì một hàm chỉ có thể có một câu lệnh duy nhất, thứ hai không nằm trong một hàm, mã không thể có.
Nhưng nhìn chung, bạn có thể mở rộng các câu lệnh ghép với việc sử dụng toán tử dấu phẩy (,) nhưng điều này không được đề xuất vì nó không phải là cách thực hành mã hóa tốt nhất. Một ví dụ sau:
main() print("Hello World!"), return 1;

Chức năng

Một hàm về cơ bản là một đoạn mã làm một cái gì đó và có thể được yêu cầu làm điều này từ một nơi khác. Nó cũng có thể truyền dữ liệu về những gì nó đã quay lại nơi đã bảo nó chạy (nơi "gọi" nó).
print("Hello World!");

Điều này gọi hàm gọi là "print" (được định nghĩa trong a_samp.inc, đó là lý do tại sao bạn cần đưa nó vào) và bảo nó hiển thị một cái gì đó trong bảng điều khiển máy chủ (từ hello).
Hàm bao gồm tên hàm (ví dụ như in), cho hệ thống biết đoạn mã bạn muốn gọi và danh sách tham số, được đặt trong () s sau tên hàm, truyền dữ liệu bổ sung cho hàm để trợ giúp chạy. Nếu bạn không có tham số, bạn sẽ cần hàng triệu hàm:
printa();
printaa();
printab();
printac();
etc...
Các hàm có thể có bao nhiêu tham số tùy thích, từ 0 trở lên (có thể có giới hạn trên nhưng ít nhất là 128):
printf("Hello World!", 1, 2, 3, 4, 5, 6);
Đừng lo lắng về chức năng đó làm gì bây giờ, chỉ là nó có 7 tham số, mỗi tham số được phân tách bằng dấu phẩy.

Xác định

Cũng như có thể gọi các chức năng hiện có, bạn cũng có thể viết và gọi cho riêng mình:
#include <a_samp>
 
main()
{
 return MyFunction();
}
 
MyFunction()
{
 print("Hello World!");
 return 1;
}
Điều này chỉ thực hiện giống hệt như mã gốc nhưng được sắp xếp khác nhau. Khi hàm main () được gọi khi chế độ được khởi động (nó được gọi tự động), nó gọi hàm tùy chỉnh mới có tên MyFunction (). Hàm này in thông báo trong bảng điều khiển máy chủ, sau đó trả về số 1 thành main (). main () lấy giá trị trả về (1) và sau đó trả về cho máy chủ (tức là nơi được gọi là chính ở vị trí đầu tiên). Như "trả về MyFactor ();" là một tuyên bố duy nhất bạn có thể làm:
#include <a_samp>
 
main() return MyFunction();
 
MyFunction()
{
 print("Hello World!");
 return 1;
}
Nhưng hầu hết mọi người không cho rõ ràng. Bạn cũng không thể sử dụng giá trị trả về MyFactor và thực hiện:
#include <a_samp>
 
main()
{
 MyFunction();
 return 1;
}
 
MyFunction()
{
 print("Hello World!");
 return 1;
}
[

Thông số

Tham số là một loại biến mà bạn không cần khai báo vì chúng đến từ nơi được gọi là hàm:

#include <a_samp>
 
main()
{
 return MyFunction("Hello World!");
}
 
MyFunction(string[])
{
 print(string);
 return 1;
}
Mã này vẫn làm điều tương tự nhưng hiện tại chúng tôi đang nói với MyFactor () những gì sẽ hiển thị. Cuộc gọi vượt qua chuỗi "Xin chào thế giới!" đến hàm nơi nó được lưu trữ trong một biến gọi là chuỗi ([] có nghĩa là một mảng như được giải thích sau). Hàm in được gọi, chuyển nội dung của biến chuỗi, chúng ta biết đó là biến vì nó không còn "" nữa.

Biến

Một biến về cơ bản là một chút bộ nhớ, đó là nơi lưu trữ dữ liệu và có thể thay đổi và đọc theo yêu cầu. Các biến là một hoặc nhiều ô, một ô lớn 32 bit (4 byte) và theo mặc định được ký để chúng có thể lưu trữ từ -2147483648 đến 2147483647 (mặc dù -2147483648 được xác định kém trong PAWN và cho kết quả kỳ lạ nếu được hiển thị). Một biến được tạo từ nhiều hơn một ô được gọi là một mảng, chuỗi là một loại mảng đặc biệt trong đó mỗi ô chứa một ký tự của chuỗi (hoặc 4 ký tự trong các chuỗi được đóng gói, nhưng chúng không được đề cập ở đây).


Khai Báo

Để tạo một biến mới, bạn phải khai báo nó:

new
 myVariable;
Điều này báo cho hệ thống tạo một biến mới gọi là myVariable, giá trị ban đầu của biến này sẽ là 0.

Cài đặt

new
 myVariable = 7;
Điều này khai báo một biến mới và đặt giá trị ban đầu của nó thành 7, vì vậy việc in biến bây giờ sẽ cho 7. Để hiển thị một biến không phải là một chuỗi chúng ta cần quay lại hàm printf () đã đề cập trước đó và làm:
new
 myVariable = 7;
printf("%d", myVariable);
Một lần nữa, bây giờ tất cả những gì bạn cần biết là điều này sẽ in giá trị của myVariable (tức là 7 tại thời điểm này) cho máy chủ.
new
 myVariable = 7;
printf("%d", myVariable);
myVariable = 8;
printf("%d", myVariable);
Mã đó sẽ in 7, thay đổi giá trị của biến thành 8 và hiển thị giá trị mới trong cửa sổ máy chủ. Có nhiều thứ khác bạn có thể làm với các biến, một số được liệt kê bên dưới, hầu hết được liệt kê ở nơi khác:
myVariable = myVariable + 4;
Đặt giá trị của myVariable thành giá trị cũ của myVariable cộng với 4, tức là tăng giá trị của nó lên 4. Điều này cũng có thể được viết là:
myVariable += 4;
Điều này chỉ có nghĩa là "tăng myVariable lên 4".
myVariable -= 4;
Điều đó sẽ làm giảm giá trị xuống 4.
myVariable *= 4;
Điều đó sẽ nhân giá trị với 4.
myVariable /= 4;
Điều đó sẽ chia giá trị cho 4.

Mảng

Khai Báo

Mảng là một biến trong đó bạn có thể lưu trữ nhiều mẩu dữ liệu cùng một lúc và truy cập chúng một cách linh hoạt. Một mảng được khai báo theo kích thước đã đặt tại thời gian biên dịch, do đó bạn cần biết trước mình cần lưu trữ bao nhiêu phần dữ liệu, một ví dụ hay về điều này là mảng MAX_PLAYERS rất phổ biến, điều này sẽ có một khe cho mỗi trình phát có thể được kết nối , vì vậy bạn biết dữ liệu cho một người chơi sẽ không can thiệp vào dữ liệu cho người chơi khác (nhiều hơn về định nghĩa sau).

new
 myArray[5];
Mã đó sẽ khai báo một mảng 5 khe lớn, vì vậy bạn có thể lưu trữ 5 mẩu dữ liệu bình thường cùng một lúc trong đó những gì bạn không thể làm là một cái gì đó như sau:
new
 myVariable = 5,
 myArray[myVariable];
Mã đó trông giống như nó sẽ tạo ra một mảng có kích thước của bất kỳ số nào được lưu trữ trong myVariable (ở đây 5 nhưng nó có thể là bất cứ thứ gì), nhưng bạn không thể làm điều này. Trong PAWN, bộ nhớ cho các biến được gán khi bạn biên dịch mã của mình, điều này có nghĩa là các mảng luôn có một kích thước, bạn không thể đặt kích thước thành bất cứ thứ gì bạn thích bất cứ khi nào bạn muốn.

Truy cập

Để đặt một giá trị trong một mảng, bạn cần nói phần nào của mảng bạn muốn lưu trữ dữ liệu, điều này có thể được thực hiện với một biến khác:

new
 myArray[5];
myArray[2] = 7;
Điều này sẽ khai báo một mảng có 5 vị trí và cung cấp cho vị trí THIRD giá trị là 7, với điều kiện các biến luôn bắt đầu là 0, điều này sẽ tạo ra các giá trị trong mảng:
0, 0, 7, 0, 0
Tại sao không phải là:
0, 7, 0, 0, 0
bạn đang tự hỏi? Đó là vì việc đếm thực sự bắt đầu từ số 0 chứ không phải 1. Hãy xem xét những điều sau:
2, 4, 6, 8
Nếu bạn đi qua danh sách thì sau số 2 bạn đã có một số (số 2), điều này có nghĩa là nếu bạn đang đếm số khi bạn đạt đến số 4, bạn đã ở một số, bạn không ở một khi bạn đạt đến 2, bạn ở mức 0. Do đó, 2 ở vị trí 0 và 4 ở vị trí một, và do đó, 6 ở vị trí hai, trong đó 7 ở ví dụ đầu tiên ở trên. Nếu chúng tôi gắn nhãn các vị trí cho ví dụ đầu tiên, chúng tôi sẽ nhận được:
0 1 2 3 4
0 0 7 0 0
Có năm vị trí nhưng như bạn có thể thấy, và điều này rất quan trọng, KHÔNG CÓ NỀN TẢNG NÀO, làm những điều sau đây có thể làm sập máy chủ của bạn:
new
 myArray[5];
myArray[5] = 7;
Như đã đề cập ở trên, chỉ mục mảng (chỉ mục là vị trí mà bạn đang viết) có thể là bất cứ thứ gì, một số, một biến hoặc thậm chí là một hàm trả về một giá trị.
new
 myArray[5],
 myIndex = 2;
myArray[myIndex] = 7;
Khi bạn có một mảng và một chỉ mục, bạn có thể sử dụng khối đó chính xác như thể nó là bất kỳ biến nào khác:
myArray[2] = myArray[2] + 1;
myArray[2] += 1;
myArray[2]++;
[

Thí dụ

Như đã đề cập ở trên, một loại mảng phổ biến là mảng MAX_PLAYERS. MAX_PLAYERS không phải là một biến, nó là một định nghĩa sẽ được giải thích sau, nhưng hiện tại chấp nhận rằng đó là một số không đổi bằng số lượng người chơi tối đa mà máy chủ có thể giữ (mặc định là 500, ngay cả khi bạn thay đổi số trong tập tin server.cfg). Đoạn mã sau sử dụng các biến thông thường để giữ dữ liệu cho 4 người chơi và thực hiện điều gì đó với những người chơi đó trong một hàm (vì đơn giản, giả sử MAX_PLAYERS là 4 bây giờ):

new
 gPlayer0,
 gPlayer1,
 gPlayer2,
 gPlayer3;
 
SetPlayerValue(playerid, value)
{
 switch(playerid)
 {
     case 0: gPlayer0 = value; // is the same as doing if(playerid == 0)
     case 1: gPlayer1 = value; // is the same as doing if(playerid == 1)
     case 2: gPlayer2 = value; // is the same as doing if(playerid == 2)
     case 3: gPlayer3 = value; // is the same as doing if(playerid == 3)
 }
}
Xem phần về cấu trúc điều khiển để biết thêm thông tin về những gì đang diễn ra ở đó, cũng lưu ý rằng điều này có thể được thực hiện dưới dạng một công tắc nhưng điều đó không rõ ràng cho ví dụ và dù sao cũng có cùng mã.
Bây giờ so sánh việc sử dụng một mảng với một vị trí cho mỗi người chơi, lưu ý rằng một chỉ số mảng có thể là bất kỳ giá trị nào:
new
 gPlayers[MAX_PLAYERS];
 
SetPlayerValue(playerid, value)
{
 gPlayers[playerid] = value;
}
Điều đó sẽ tạo ra một mảng toàn cầu (xem phần trên phạm vi) với một vị trí cho mỗi người chơi, sau đó chức năng sẽ gán bất cứ thứ gì có trong "giá trị" biến cho vị trí cho người chơi được chỉ định. Ví dụ đầu tiên rất lớn chỉ có bốn người chơi, sử dụng 4 dòng trên mỗi người chơi, đó là 2000 dòng cho 500 người chơi (nếu có thể ít hơn nhưng vẫn còn rất nhiều), phiên bản thứ hai là một dòng duy nhất cho dù bạn có bao nhiêu người chơi.

Strings


Sử dụng cơ bản

Chuỗi là một loại mảng đặc biệt, một mảng được sử dụng để chứa nhiều ký tự để tạo một từ hoặc câu hoặc văn bản có thể đọc được của con người khác. Một ký tự lớn một byte (mặc dù có các bộ mở rộng trong đó một ký tự có nhiều byte nhưng chúng không được xác định rõ trong SA: MP) và theo mặc định, một ký tự chiếm một ô (một biến thông thường hoặc một khe mảng). Các ký tự được mã hóa trong một hệ thống gọi là ASCII , ký tự "A" được biểu thị bằng số 65, bảo hệ thống hiển thị một số sẽ cho 65, báo cho hệ thống hiển thị một ký tự sẽ cho vốn a. Rõ ràng là một ký tự đơn chiếm một ô nhiều ký tự (nghĩa là văn bản) sẽ chiếm nhiều ô, bộ sưu tập các ô, như vừa giải thích, được gọi là mảng.
Các chuỗi trong PAWN (và các ngôn ngữ khác) là những gì được gọi là "NULL chấm dứt", điều này có nghĩa là khi đạt đến 0, chuỗi kết thúc. Đây không giống với ký tự "0", được biểu thị bằng số 48, đây là ký tự NULL, được biểu thị bằng số 0. Điều này có nghĩa là bạn có thể có một chuỗi chuỗi lớn 20 ô nhưng chỉ có một chuỗi dài 3 ký tự nếu ký tự thứ tư là ký tự NULL, báo hiệu kết thúc chuỗi. Tuy nhiên, bạn không thể có một chuỗi 20 ký tự dài như ký tự NULL PHẢI nằm trong chuỗi, vì vậy trong một mảng 20 ô, bạn có thể có một chuỗi 19 ký tự và ký tự kết thúc NULL.

new
 myString[16] = "Hello World!";
Mã đó khai báo một chuỗi mới có đủ không gian cho chuỗi 15 ký tự và đặt chuỗi ban đầu thành chuỗi 5 ký tự "Hello World!", Dấu ngoặc kép quanh văn bản cho biết đó là chuỗi. Bên trong mảng sẽ trông như sau:
104 101 108 108 111 0 x x x x x x x x x x
"X" có nghĩa là bất cứ điều gì, trong ví dụ này tất cả chúng sẽ là 0 nhưng vì sau ký tự null không quan trọng chúng là gì, chúng sẽ không ảnh hưởng đến chuỗi.
Các chuỗi có thể được thao tác như các mảng thông thường, ví dụ:
new
 myString[16] = "Hello World!";
myString[1] = 97;
Sẽ thay đổi ký tự trong khe 1 thành ký tự được biểu thị bằng số 97 (chữ thường "a"), dẫn đến chuỗi đọc "hallo". Điều này có thể được viết dễ đọc hơn nhiều và dễ dàng chỉnh sửa như:
new
 myString[16] = "Hello World!";
myString[1] = 'a';
Các trích dẫn đơn xung quanh "a" có nghĩa là một ký tự, không phải là một chuỗi, các ký tự không cần phải bị chấm dứt vì chúng chỉ dài một ô, chúng cũng có thể được sử dụng thay thế cho các số nếu bạn biết chúng đại diện cho những gì .
new
 myString[16] = "Hello World!";
myString[1] = '\0';
'\ 0' là hai ký tự, tuy nhiên \ là ký tự đặc biệt sửa đổi ký tự tiếp theo, \ 0 có nghĩa là NULL, mã đó giống như đang làm:
new
 myString[16] = "Hello World!";
myString[1] = 0;
Nhưng KHÔNG giống như làm:
new
 myString[16] = "Hello World!";
myString[1] = '0';
Phiên bản thứ nhất và thứ hai sẽ dẫn đến chuỗi đơn giản là:
h
Phiên bản thứ ba sẽ dẫn đến chuỗi là
h0llo

Escape character

Như đã đề cập ngắn gọn, dấu gạch chéo ngược là một ký tự đặc biệt, thực hiện:
'\'
or:
"\"
Sẽ đưa ra lỗi trình biên dịch vì \ sửa đổi ký tự tiếp theo để các hằng số đó sẽ không được kết thúc chính xác, điều này có thể được sử dụng để tạo các ký tự thường không thể được tạo, ví dụ:
new
 myString[4] = "\"";
Mã đó sẽ tạo ra một chuỗi chỉ bao gồm một trích dẫn kép, thông thường một trích dẫn kép báo hiệu kết thúc chuỗi được viết nhưng dấu gạch chéo ngược tạo ra trích dẫn kép ngay sau đó là một phần của chuỗi và trích dẫn kép sau đó kết thúc chuỗi . Các nhân vật đặc biệt khác là:
\0Nhân vật NULLKết thúc một chuỗi.
EOSNhân vật NULL(giống như trên)
\nNguồn cấp dữ liệusử dụng \ n cho một dòng mới trong Linux (cũng hoạt động trong Windows)
\rVận chuyển trở lạiSử dụng \ r \ n cho một dòng mới trong Windows
\\Dấu gạch chéo ngượcĐược sử dụng để đặt dấu gạch chéo ngược thực tế trong chuỗi
\'Trích dẫn duy nhấtĐược sử dụng để sử dụng một trích dẫn thực tế làm ký tự trong các trích dẫn đơn (sử dụng: '\' ')
\"Dấu ngoặc képĐược sử dụng để đặt một trích dẫn kép thực tế trong một chuỗi
\xNNN;Số lục giácĐược sử dụng để đặt ký tự thành ký tự được biểu thị bằng số hex được chỉ định tại chỗ trên NNN
\ NNN;Con sốĐược sử dụng để đặt ký tự thành ký tự được biểu thị bằng số được chỉ định thay cho NNN (xem \ 0)

Thẻ

Thẻ là một phần thông tin bổ sung về một biến xác định nơi có thể được sử dụng, cung cấp thông tin về chức năng của nó. Thẻ có thể mạnh (bắt đầu bằng chữ viết hoa) hoặc yếu. Ví dụ:
new
    Float:a = 6.0;
Phần "Float" là thẻ, phần này xác định biến này là float (số không toàn bộ / số thực) và xác định nơi nó có thể được sử dụng.
native SetGravity(Float:gravity);
Điều này có nghĩa là hàm SetGravity lấy một tham số duy nhất phải là float, ví dụ:
SetGravity(6.0);
new
   Float:fGrav = 5.0;
SetGravity(fGrav);
Điều đó sẽ đặt trọng lực thành 6 (6.0 là phao) rồi 5 (5.0 là phao). Sử dụng thẻ sai ở vị trí sai thường sẽ khiến thẻ không khớp:
SetGravity(MyTag:7);
Điều đó sẽ thử đặt trọng lực thành 7 với thẻ "MyTag", đó rõ ràng không phải là "Float" nên đã sai. Cũng lưu ý rằng các thẻ là trường hợp nhạy cảm.
Người dùng có thể xác định thẻ tùy chỉnh:
new myTag: variable = 0,
 
    AppleTag: another = 1;
Điều này là hoàn toàn hợp lệ, tuy nhiên, khi thêm hai biến này trực tiếp , bạn phải sử dụng '_:' để 'khử thẻ' chúng, nếu không trình biên dịch sẽ tạo ra cảnh báo 'không khớp thẻ'.

Phạm vi

Phạm vi là nơi một biến có thể được sử dụng. Có bốn phạm vi chính: tĩnh cục bộ, tĩnh cục bộ, tĩnh toàn cầu và toàn cầu. Tất cả các biến chỉ có thể được sử dụng sau khi chúng được khai báo vì vậy điều này là đúng:

new
    var = 4;
printf("%d", var);
Cái này sai:
printf("%d", var);
new
    var = 4;
[edit]

local

Một biến cục bộ là một biến được khai báo "mới" bên trong một hàm hoặc một phần của hàm:
MyFunc ( ) 
{ 
    new 
        var1 = 4 ;
    printf ( "% d" , var1 ) ;
    { 
        // var1 vẫn còn tồn tại vì đây là một cấp dưới 
        mới 
            var2 = 8 ;
        printf ( "% d% d" , var1, var2 ) ;
    } 
    // var2 không còn tồn tại vì đây là cấp độ cao hơn 
} 
// var1 không còn tồn tại
Các biến cục bộ được đặt lại mỗi lần, ví dụ:
for (new i = 0; i < 3; i++)
{
    new
        j = 1;
    printf("%d", j);
    j++;
}
Sẽ in:
1
1
1 
Bởi vì j được tạo, in, tăng sau đó bị hủy, sau đó các vòng lặp mã.

static local

Ví dụ, một cục bộ tĩnh có thể được sử dụng ở cùng một nơi với một địa phương nhưng không quên giá trị cũ của nó, ví dụ:
MyFunc()
{
    static
        var1 = 4;
    printf("%d", var1);
    {
        // var1 still exists as this is a lower level
        static
            var2 = 8;
        printf("%d %d", var1, var2);
    }
    // var2 no longer exists as this is a higher level
}
// var1 no longer exists
Mã đó sẽ hoạt động giống hệt như ví dụ mới, tuy nhiên điều này:
for (new i = 0; i < 3; i++)
{
    static
        j = 1;
    printf("%d", j);
    j++;
}
Sẽ in:
1
2
3 
Vì j là tĩnh nên nhớ giá trị cũ của nó.

global

Biến toàn cục được khai báo bên ngoài một hàm và có thể được sử dụng trong bất kỳ hàm nào:
new
    gMyVar = 4;
 
MyFunc()
{
    printf("%d", gMyVar);
}
Họ không bao giờ được thiết lập lại hoặc bị mất.

global static

Biến tĩnh toàn cầu giống như các quả cầu bình thường nhưng chỉ có thể được sử dụng trong tệp mà chúng được khai báo:
Tệp1:
static
    gsMyVar = 4;
 
MyFunc()
{
    printf("%d", gsMyVar);
}
 
#include "File2"
Tệp2:
MyFunc2()
{
    // This is wrong as gsMyVar doesn't exist here
    printf("%d", gsMyVar);
}

tĩnh cũng có thể được áp dụng cho các chức năng theo cách tương tự.







Nếu Bạn Có Thắc Mắc Gì Liên Quan Đến SA-MP, Vui lòng CMT Tại Đây!

Đăng nhận xét

Friends list