/*
Köszöntelek a rövid tutorial scriptben!
a \"per csillag\" nyitja a kommentárt, a \"csillag per\" pedig zárja, mint azt láthatod itt is
*/
//a kommentárt így is hozzáadhatod, de a \"//\" után a teljes sor kommentként lesz jelen
/*
ha összehasonlítasz, azt mindig így tedd:
if(változó1 == változó2) ez egyenlőséget jelez
if(változó1 >= változó2) változó1 nagyobb vagy egyenlő a változó2-vel
if(változó1 <= változó2) változó1 kisebb vagy egyenlő a változó1-el
if(változó1 > változó2) változó1 nagyobb, mint a változó2
if(változó1 < változó2) változó1 kisebb, mint a változó2
!!!FONTOS!!!
a változók nevébe ne adj meg ékezetes karaktereket!
a változókhoz rendelhetsz értéket:
new integer = 1;
new Float:value = 3.14;
new string[24] = \"egy karakterlánc\";
integer++; //az integer nevű változóhoz hozzáad egyet
integer--; //az integer nevű változóból kivon egyet
integer -= 2; //az integer értékből kivontunk 2-t, ugyanaz, mint: integer = integer -2;
integer += 2;//az integerhez hozzáadtunk 2-t, ugyanaz, mint: integer = integer +2;
integer *= 2; //az integer-t megszoroztuk kettővel, ugyanaz, mint: integer = integer * 2;
!!!FONTOS!!!
elkerülendő, hogy az érték átadáskor kifaggyon a program, figyelembe kell venni, hogy
a változó typusa megfelelő legyen az adott adat tárolására!
[GYAKORI HIBA]: integer /= 2; //az integer-t osztotuk kettővel,ugyanaz, mint: integer = integer /2;
az integer egész változó típusú, így nem tudja tárolni az adatokat.
Miért?
Fel van készítve arra, hogy az osztás nem egész számot ad vissza, pl.: 1/2 = 0.5
Ezt már nem tudja menteni egyszerű egész számra lefoglalt memóriaterületre a program
a lefoglalható memóriaterületekre most nem térek ki, aki kiváncsi rá, az olvasson utána
(Elnézést kérek érte)
include-ok
az include-ok amolyan beépülők, a pawno/includes mappájából olvassa be őket a konverter.
#include <a_samp> //ez egy olyan alap, amelyre minden módban szükség van
#include <zcmd> //ez egy parancsfeldolgozó, ezzel (szerintem/számomra) legegyszerűbb a parancsok feldolgozása, lentebb ki lesz fejtve
#include <sscanf2> //ez egy függvény, amely a zcmd-t segíti, feldarabolja a paramétereket, és segít feldolgozni azokat, további infó lentebb
néhány include megköveteli a plugin-okat, ezeket a plugins mappában találjuk és oda is kell őket beilleszteni.
az include-ok helyes felhasználásáról érdemes többet olvasni, a leírás végén linkelek pár leírást.
*/
//a script működése érdekében kivettem a kódot a megjegyzésekből, és a feldolgozandó részbe is kimásoltam
#include <a_samp>
#include <zcmd>
#include <sscanf2>
//definíciók
//definiálhatsz egy szavat, amihez hozzáadsz egy értéket, így például a zöld színt
#define COLOR_GREEN 0x33AA33AA
//#define kulcsszó érték
stock pName( playerid )
{
new name[ MAX_PLAYER_NAME ];
GetPlayerName( playerid, name, sizeof name );
return name;
}
main()//ezt a részt innen ne töröld ki, különben nem fut fel a szerver
{
/*a \"print\" a konzolba ír szöveget
pl.: print(\"hello world\");
ha egy változót szeretnénk a szövegbe beilleszteni, nem kell sztringeket
létrehozni sé formázni őket, mint egyébként a SendClientMessage-nél kéne.
a változó beillesztős konzolos kiírás így néz ki:
new integer = 4;
printf(\"az integer értéke %d\",integer);
*/
print(\"\\n----------------------------------\");
print(\" A játékmód felfutott\");
print(\"----------------------------------\\n\");
}
public OnGameModeInit()//amikor felfut a mód
{
SetGameModeText(\"teszt mód\");//ez írja a szerver kliensben a GAMEMODE alá
//az AddPlayerClass-okból legalább egyet haggy bent, különben bugolni fog a szerver
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnGameModeExit()//amikor a szerver leáll
{
return 1;
}
public OnPlayerRequestClass(playerid, classid)//amikor a játékos spawn előtt választ
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}
public OnPlayerConnect(playerid)//amikor a játékos csatlakozik
{
new string[180];//létrehoztál egy új sztringet
format(string,sizeof(string),\"%s csatlakozott a szerverhez!\",pName(playerid));
SendClientMessageToAll(-1,string);
return 1;
}
public OnPlayerDisconnect(playerid, reason)//amikor egy játékos lecsatlakozik
{
new string[180];//létrehoztál egy új sztringet, a []-ben szereplő érték a biteket foglalja le a memóriában
//minél több karaktert szeretnél beletenni, annál több itet kell lefoglalni
format(string,sizeof(string),\"%s lecsatlakozott a szerverről!\",pName(playerid));
//a string változóba eltároltuk a szöveget. a \" %s \" a játékos nevét fogja behelyetesíteni.
//minden változó fajta behelyettesítéséhez más karaktert használunk.
//%s a sztring, %f a lebegőpontos, %d az egész változó
SendClientMessageToAll(-1,string);
switch(reason)//a switch a sok változós összehasonlításnál jó
//switch-be beírod a változót, a \"case\" után pedig hogy mit tartalmazzon.
{
case 0: SendClientMessageToAll(-1,\"Oka: időtúllépés\"); //ha a változó egyet tartalmaz, akkor ezt írja
case 1: SendClientMessageToAll(-1,\"Oka: kilépett (/q)\"); //ha a változó kettőt tartalmaz, akkor ezt írja
case 2: SendClientMessageToAll(-1,\"Oka: kick/ban\"); //ha a változó hármat tartalmaz, akkor ezt írja
}
/*
ez az összehasonlítás így is kinézhetett volna:
if (reason == 0) SendClientMessageToAll(-1,\"Oka: időtúllépés\");
else if (reason == 1) SendClientMessageToAll(-1,\"Oka: kilépett (/q)\");
else if (reason == 2) SendClientMessageToAll(-1,\"Oka: kick/ban\");
*/
return 1;
}
public OnPlayerSpawn(playerid)//mikor a játékos spawnol
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)//miko a játékos meghal
{
return 1;
}
public OnPlayerText(playerid, text[])//amikor a játékos beír valamilyen szöveget, a parancsok nem tartoznak ide
{
return 1;
}
public OnPlayerUpdate(playerid)//amikor a játékos és a szerver között van kapcsolat, tehát ezred másodpercenként
{
return 1;
}
CMD:car(playerid,params[])//amikor a játékos beírja ezt a parancsot
{
//itt létrehozol változókat
new car; //ez egy egyszerű változó, mely egy integer-t, tehát egy egész számot ment a memóriába.
new Float:x,Float:y,Float:z,Float:Angle;// a \"Float:\" lebegőpontos (pl 3.14) értéket ment
GetPlayerPos(playerid,x,y,z);//lekéri a játékos koordinátáit. a koordináták mindig lebegőpontosak
GetPlayerFacingAngle(playerid,Angle); //lekéri a játékos nézőszögét, ez szintén lebegőpontos
car = CreateVehicle(558,x,y,z,Angle,0,0,-1);//a \"car\" nevű változóra rátesszük a járművet, amit létrehozunk.
// CreateVehicle(jármű modell, x tengely, y tengely, z tengely, forgási tengely, szín 1, szín 2, respawn idő);
PutPlayerInVehicle(playerid,car,0);//beleteszi a járműbe a játékost, PutPlayerInVehicle(játékosid, jármű id, ülés száma)
//az ülések: 0-sofőr,1 - anyós, 2&3 - hátsó ülések,4 és több ritkán használt
SendClientMessage(playerid,-1,\"Lekértél egy autót!\");
//küldesz egy üzenetet a játékosnak, SendClientMessage(játékos id, szín id, \"Üzenet\");
return 1; //visszaadjuk a szervernek, hogy parancsot írt be a játékos
}
CMD:createcar(playerid, params[])
{
new string[128],carmodel,Float:x,Float:y,Float:z,Float:angle;//létrehozzuk a változókat
if(sscanf(params, \"d\", carmodel)) return SendClientMessage(playerid, -1, \"[TIPP]: /createcar <modell>\");
//az SSCANF feldolgozza a paramétereket, kiolvassa a paraméterek közül a megadott modellt, pl.: /createcar 558
//itt az 558-as értéket menti át a \"carmodel\" változóba.
GetPlayerPos(playerid,x,y,z);//lekérjük a koordinátákat, az előző parancsnál magyarázva
GetPlayerFacingAngle(playerid,angle);//lekérjük a játékos nézőszögét, előző parancsnál magyarázva
new car = CreateVehicle(carmodel,x,y,z,angle,0,0,-1);//létrehozzuk a járművet, előző parancsnál magyarázva
PutPlayerInVehicle(playerid,car,0);//beleültetjük a játékost a járműbe, előző parancsnál magyarázva
format(string,sizeof(string),\"Letettél egy %d modellű járművet! [iD:%d]\",carmodel,car);
/*a sztringbe beillesztjük a szövegünket, melyben az első %d az általunk megadott jármű modellje lesz,
a második pedig a jármű ID-je, melyet az imént létrehoztunk*/
SendClientMessage(playerid,COLOR_GREEN,string);//elküldjük a játékosnak az üzenetet
return 1;
}
/*amennyiben a leírások valamelyike nem volt érthető, vagy nem merítettem ki a témát eléggé,
(mert nem írtam le mindent, ez az igazság) mellékelek egy link listát!
külön köszönet a www.sampforum.hu adminjainak és felhasználóinak!
zcmd leírása: http://sampforum.hu/index.php?topic=10780.0
sscanf leírása: http://sampforum.hu/index.php?topic=4400.0
!!!Figyelem!!!
Előfordulhatnak banális elírási, illetve fogalmazási és megnevezési hibák.
Amennyiben észrevételek vannak, kérem őket kommentbe, privát üzenetbe, vagy a
bencarter@citromail.hu címre.
Megértéseteket köszönöm!
*/