/*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 jelezif(változó1 >= változó2) változó1 nagyobb vagy egyenlő a változó2-velif(változó1 <= változó2) változó1 kisebb vagy egyenlő a változó1-elif(változó1 > változó2) változó1 nagyobb, mint a változó2if(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 egyetinteger--; //az integer nevű változóból kivon egyetinteger -= 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, hogya 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.5Ezt már nem tudja menteni egyszerű egész számra lefoglalt memóriaterületre a programa lefoglalható memóriaterületekre most nem térek ki, aki kiváncsi rá, az olvasson utána(Elnézést kérek érte) include-okaz 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ó lentebbné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ékstock 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övegetpl.: print(\"hello world\");ha egy változót szeretnénk a szövegbe beilleszteni, nem kell sztringeketlé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 szerverAddPlayerClass(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 sztringetformat(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 lefoglalniformat(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 írjacase 1: SendClientMessageToAll(-1,\"Oka: kilépett (/q)\"); //ha a változó kettőt tartalmaz, akkor ezt írjacase 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ókatnew 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 mentGetPlayerPos(playerid,x,y,z);//lekéri a játékos koordinátáit. a koordináták mindig lebegőpontosakGetPlayerFacingAngle(playerid,Angle); //lekéri a játékos nézőszögét, ez szintén lebegőpontoscar = 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áltSendClientMessage(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ókatif(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ázvaGetPlayerFacingAngle(playerid,angle);//lekérjük a játékos nézőszögét, előző parancsnál magyarázvanew car = CreateVehicle(carmodel,x,y,z,angle,0,0,-1);//létrehozzuk a járművet, előző parancsnál magyarázvaPutPlayerInVehicle(playerid,car,0);//beleültetjük a játékost a járműbe, előző parancsnál magyarázvaformat(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 üzenetetreturn 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.0sscanf 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[email protected] címre.Megértéseteket köszönöm!*/
nem tudtam eldönteni, mert egyszerre egy működő gamemode és leírás