Najważniejszą rzeczą, z którą musicie się zaznajomić tą dokumentacja:
[Funkcje serwera] [Eventy serwera]
[Funkcje klienta] [Eventy klienta] (dopiero od wersji 0.1)
[Dokumentacja Squirrel] [Dokumentacja bibliotek]
Jak widać funkcje i eventy są podzielone na client-side i server-side (jak w MTA). To znaczy, że są 2 typy skryptów: te, które wykonują się na serwerze i te, które wykonują się na komputerze gracza. Oczywiście oba skrypty mogą się ze sobą komunikować przez odpowiednie funkcje.
No, ale teraz trochę o programowaniu. Przyjęło się, że pierwszym skryptem jest wyświetlenie tekstu "Hello World". W Squirrel'u jest to bardzo proste:
print("Hello World");
lublog("Hello World"); // funkcja log() jest dodana w IV-MP, w normalnym Squirrelu jej nie ma
Powyższy kod spowoduje wyświetlenie się w konsoli tekstu "Hello World". Prawda, że łatwe? Teraz czas na praktyczną wiedzę: komentarze, zmienne, tablice, tabele, stałe, instrukcje warunkowe i operatory, pętle, instrukcja switch, funkcje, kolory, podstawowe funkcje i eventy.
Komentarze
Są dwa typy komentarzy:
/* Komentarz blokowy zajmujący kilka lini */
oraz
// komentarz jednoliniowy
Zmienne
Definiuje się je tak:
local zmienna;z przypisaną wartością:
local zmienna = "test";Jak widać nie musimy podawać jaki ma być typ zmiennej, może być to zarówno liczba, tekst, liczba zmiennoprzecinkowa czy typ logiczny.
local liczba = 123; local tekst = "tekst"; local liczba2 = 12.34; local prawda = true;Przy zmiennych można używać następujących operatorów:
= przypisanie wartości += dodanie wartości -= odjęcie wartości /= podzielenie wartości *= pomnożenie wartości %= podzielenie wartości modulo
Przykładowo:
local liczba = 1; liczba += 2; print(liczba.tostring()); // wyświetli 3 liczba *= 3; print(liczba.tostring()); // wyświetli 9
Tablice
Tablice definuje się praktycznie tak samo jak zmienne:
local tablica = [];z przypisaną wartością:
local tablica = [123, "tekst", false];Wartości mogą mieć dowolny typ danych. Tablice mogą być wielowymiarowe:
local tablica = [ ["pierwszy element", true], ["drugi element", false] ];Aby się dostać do jakiegoś elementu musimy wpisać:
print(tablica[1][0]); // wyświetli "drugi element"
Tabele
Tabele są praktycznie takie same jak tablice z tym, że są bardziej "dynamiczne" - oznacza to, że mają nieokreśloną liczbę elementów. Definiuje się je tak:
local tabela = {};
z przypisaną wartością:local tabela = {[0] = "wartosc 1", [1] = "wartosc 2"};
można też używać nazw zamiast liczb:
local tabela = {pole1 = "wartosc 1", pole2 = "wartosc 2"};
Aby dostać się do jakiegoś elementu musimy wpisać:
print(tabela[1]); print(tabela.pole2); // w obu przypadkach wyświetli "wartosc 2"
Jeśli korzystamy z tabel, łatwo można dodawać nowe wartości:
local tabela = {};
tabela[0] <- "wartosc 1";
tabela[1] <- "wartosc 2";
tabela.pole <- "wartosc 3";
oraz je usuwać:
delete tabela[0];
Aby sprawdzić ile elementów ma tablica lub tabela, należy użyć kodu:
nazwa_zmiennej.len();
Stałe
Stałe to nic innego jak zmienne, z tym, że raz ustawionej wartości nie da się już zmienić. Przykład:
const stala = 123.456;
Stałe mogą zawierać jedynie liczby całkowite i zmienno przecinkowe oraz tekst.
Instrukcje warunkowe i operatory
Dzięki instrukcji warunkowej możemy sprawdzić, np. czy jakaś zmienna równa się "true". Jej składnia jest następująca:
if(warunek) {
// warunek spełniony
} else {
// warunek nie spełniony
}
Przykładowo chcemy sprawdzić czy zmienna "imie" równa się "Rafal":
local imie = "Rafal";
if(imie == "Rafal") {
print("Witaj, Rafal.");
} else {
print("Imie jest niepoprawne, podano: "+imie);
}
Przy okazji można zauważyć jak łączyć zmienne i tekst - robimy to znakiem + (plus). Można łączyć kilka zmiennych tekstowych (zmienna1+zmienna2+zmienna3) lub nawet różne ciągi znaków ("Hello"+"World").
W instrukcji warunkowej możemy używać następujących operatorów:
== równa się != nie równa się ! zaprzeczenie < mniejsze > większe <= mniejsze bądź równe => większe bądź równe
Oczywiście warunki możemy łączyć dzięki operatorom || (lub) oraz && (i), np.:
if((warunek && warunek2) || warunek3) {
// zrób coś
}
Z czego wynika: albo warunek i warunek2 będą prawdziwe lub warunek3 będzie prawdziwy.
Pętle
Mamy 4 typy pętli:
for
for(local i = 0; i < 10; i++) {
print(i.tostring());
}
foreach (iteracja po tablicach/tabelach)
foreach(i, val in zmienna) {
print(val[0]);
}
while
local i = 0;
while(i < 10) {
print(i.tostring());
i++;
}
do ... while (różni się od while tym, że zawsze wykona się przynajmniej raz)
local i = 0;
do {
print(i.tostring());
i++;
} while(i < 10);
Instrukcja switch
Dzięki instrukcji switch nie musimy używać wiele razy if ... else. Przykładowe użycie:
local imie = "Patryk";
switch(imie) {
case "Adam":
print("Witaj, Adam.");
break;
case "Patryk":
print("Witaj, Patryk.");
break;
case "Rafal":
print("Witaj, Rafal.");
break;
default:
print("Twoje imie jest niepoprawne.");
}
Jak widać należy użyć wyrażenia case wartosc oraz zatrzymać wykonywanie się dalszego kodu używając break; Aby ustawić co ma się robić gdy wartość jest inna używamy default:
Funkcje
Definiuje się je w następujący sposób:
function nazwa_funkcji(para, metry) {
// treść funkcji
}
Parametrami funkcji może być cokolwiek. Aby funkcja zwracała jakąś wartość musimy użyć return. Przykład funkcji:
local wynik = dodaj(3, 4);
print(wynik.tostring()); // wyswietli 7
function dodaj(a, B) {
return a + b;
}
Kolory
Kolory definiuje się wg. następującego schematu:
0xRRGGBBAA RR - czerwony GG - zielony BB - niebieski AA - poziom alpha
Czyli poprostu kolor w formacie hex (szesnastkowym) wraz z poziomem alpha. Kolory można brać z dowolnych generatorów, ja używam tego. Możecie użyć tych podstawowych kolorów:
const cBlack = 0x000000AA; const cSilver = 0xC0C0C0AA; const cGray = 0x808080AA; const cGrey = 0x808080AA; const cWhite = 0xFFFFFFAA; const cMaroon = 0x800000AA; const cRed = 0xFF0000AA; const cPurple = 0x800080AA; const cFuchsia = 0xFF00FFAA; const cGreen = 0x008000AA; const cLime = 0x00FF00AA; const cOlive = 0x808000AA; const cYellow = 0xFFFF00AA; const cNavy = 0x000080AA; const cBlue = 0x0000FFAA; const cTeal = 0x008080AA; const cAqua = 0x00FFFFAA; const cLightblue = 0x33CCFFAA; const cOrange = 0xFF9900AA;
Podstawowe funkcje i eventy
Zaczniemy od eventów. Definiuje się je przy pomocy funkcji addEvent(); Eventy można przypisać do dowolnie nazywającej się funkcji. Przykładowo:
function onScriptInit( ) {
log("Moj pierwszy skrypt zostal zaladowany.");
return 1;
}
addEvent("scriptInit", onScriptInit);
Link do wszystkich eventów macie u góry, ale tutaj opisze te najważniejsze:
Cytat
scriptExit() - wyjście skryptu
playerConnect(playerid) - dołączenie gracza do serwera
playerDisconnect(playerid, reason) - odłączenie gracza od serwera
playerText(playerid, text) - napisanie czegoś na czacie
playerCommand(playerid, command) - napisanie komendy przez gracza
playerSpawn(playerid) - zespawnowanie się gracza
playerDeath(playerid, killerid, killervehicle) - śmierć gracza
playerEnterVehicle(playerid, vehicleid, seatid) - wejście do pojazdu
Tak samo z podstawowymi funkcjami, opisze te najważniejsze (parametry w nawiasach kwadratowych są opcjonalne):
Cytat
- pobierz nick gracza
bool setPlayerHealth ( int playerid, int health )
- ustaw ilość życia
float getPlayerHealth ( int playerid )
- pobierz ilość życia
bool setPlayerCoordinates ( int playerid, float x, float y, float z )
- ustaw pozycje gracza
pos = getPlayerCoordinates ( int playerid )
- pobierz pozycję gracza
bool sendMessageToAll(string message [, int color = 0xFFFFFFFF, bool allowTextFormatting = false])
- wyślij wiadomość do wszystkich
bool sendPlayerMessage(int playerid, string message [, int color = 0xFFFFFFFF, bool allowTextFormatting = false])
- wyślij wiadomość do gracza
int createVehicle ( int vehModelID, float x, float y, float z, float rx, float ry, float rz, [ int color1 = 0 , int color2 = 0 , int color3 = 0 , int color4 = 0 ] )
- zespawnuj samochód
int createObject ( int modelHash, float posX, float posY, float posZ, float rotX, float rotY, float rotZ )
- stwórz obiekt
int createCheckpoint ( int type, float posX, float posY, float posZ, float targetPosX, float targetPosY, float targetPosZ, float radius )
- stwórz checkpoint
bool addEvent(string event, function);
- dodaj funkcje do eventu
bool callEvent(string event, ...);
- wywołaj event
bool triggerClientEvent(int playerid, string event, ...);
- wywołaj event w skrypcie client-side (tylko w skryptach server-side)
bool triggerServerEvent(string event, ...);
- wywołaj event w skrypcie server-side (tylko w skryptach client-side)
bool displayPlayerText ( int playerid, float x, float y, string text, int time)
- pokaż tekst na ekranie dla użytkownika
bool displayTextForAll ( float x, float y, string text, int time )
- pokaż tekst na ekranie dla wszystkich
bool displayPlayerInfoText ( int playerid, string text, int time)
- pokaż tekst na dole ekranu dla użytkownika
bool displayInfoTextForAll ( string text, int time )
- pokaż tekst na dole ekranu dla wszystkich
int createBlip(int blipID, float x, float y, float z)
- stwórz ikonę na radarze
int createPickup(int model, int type, int value, float x, float y, float z, float rx, float ry, float rz)
- stwórz pickupa


Pobierz San Andreas Multiplayer w najnowszej wersji stabilnej 0.3e.
Pobierz Multi Theft Auto w najnowszej wersji stabilnej 1.3.










