GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Leírások/Útmutatók => A témát indította: Petrik - 2012. Október 31. - 10:25:23

Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: Petrik - 2012. Október 31. - 10:25:23
Sziasztok.
Ez lenne az elsõ leírásom, és egy elég egyszerû dologgal szeretném ezt a dolgot elkészíteni, mert mindennel találtam már leírást, amit akartam  :\'(
A téma címe az, hogy \"Egy átlagos parancs létrehozása\". Mit is értek ezen? Aki egy modot készít, és minden nap fejleszti, akkor szinte mindig belebotlik ilyenbe. Egy olyan parancsot fogunk elkészíteni, ami egy helyhez függ, és ott írhatja be, de mondjuk csak 5 percenként. Kezdjünk is bele!
Elõször is, menjünk fel a szerverünkre, és keressünk egy helyet annak a parancsnak, amit létre szeretnénk hozni. Ahol megvan, írjuk be, hogy /save. Ha ez meg van, ki is kapcsolhatjuk a játékot. Nyissuk meg a Pawno-t. Keressük meg az \"OnPlayerCommandText\" sort.
 
public OnPlayerCommandText(playerid, cmdtext[])

 
Ha ez meg van, akkor készítsük el az alap parancsunkat. Mondjuk... Ha beírjuk, /parancs, akkor feltölti annak a játékosnak az életét max-ra (100), aki beírta, és írja ki neki, hogy \"Életed feltöltve!\".
Elõször is, az \"OnPlayerCommandText\" alá írjuk ezt:
 

   if(strcmp(cmd, \"/parancs\", true) == 0) //A \"/parancs\"-ot átírhatjuk, egyértelmûen az a parancsnak a... parancsa  :D
   {
    //Itt lesz majd az idõhöz fûzött utasításunk (Timer), és a helyhez kötött utasításunk is.
   {

 
Miután ez megvan, írjuk csak egyszerûen ezután a dolog után:
 
 //Itt lesz a parancs végrehajtása
   }
   return 1;
}

 
Szóval, valahogy így néz ki:
 
public OnPlayerCommandText(playerid, cmdtext[])
{
   if(strcmp(cmd, \"/parancs\", true) == 0) //A \"/parancs\"-ot átírhatjuk, egyértelmûen az a parancsnak a... parancsa  :D
   {
    //Itt lesz majd az idõhöz fûzött utasításunk (Timer), és a helyhez kötött utasításunk is.
   {
       //Itt lesz a parancs végrehajtása
   }
   return 1;
}

 
Rendben. Elõször készítsük el azt, hogy felmenjen az élete 100-ra, és azt is, hogy kiküldje neki üzenetben: \"Életed feltöltve!\"

A felirat mondjuk zöld színû legyen. Írjunk egy definet, ami leegyszerûsíti a dolgunkat, és nem kell mindig kikeresgetni a zöld szín kódját (0x33AA33AA), hanem csak COLOR_GREEN lesz. Ezt így tehetjük meg (Felülre írd valahova!):

 
#define COLOR_GREEN 0x33AA33AA

 
Rendben. Most egészítsük ki a parancsunkat, ezekkel a funkciókkal:
 
            SetPlayerHealth(playerid, 100); //Feltölti annak a játékosnak az életét 100-ra, aki beírta.
            SendClientMessage(playerid, COLOR_GREEN, \"Életed feltöltve!\");//Kiírja zölddel, (COLOR_GREEN), hogy \"Életed feltöltve\"!

 
Ezeket oda írjuk, ahova azt írtam: \"//Itt lesz a parancs végrehajtása\"
Szóval most így néz ki az egész:
 
public OnPlayerCommandText(playerid, cmdtext[])
{
   if(strcmp(cmd, \"/parancs\", true) == 0) //A \"/parancs\"-ot átírhatjuk, egyértelmûen az a parancsnak a... parancsa  :D
   {
    //Itt lesz majd az idõhöz fûzött utasításunk (Timer), és a helyhez kötött utasításunk is.
   {
             SetPlayerHealth(playerid, 100);
            SendClientMessage(playerid, COLOR_GREEN, \"Életed feltöltve!\");
   }
   return 1;
}

 
Most jöhet az idõzítõ, ami csak 5 percenként engedi beírni a parancsot. Ahova írtam, hogy ott lesz az idõzítõ (Timer), oda írjuk ezt:
 
if((GetTickCount() - GetPVarInt(playerid, \"leiras\")) < 300000) return SendClientMessage(playerid, -1, \"Csak 5 percenként tudod használni!\");

 
Magyarázat:
\"leiras\": A Timer (Idõzítõ) neve
< 300000: Ez az 5 perc. Ha 1-et írsz, az egy ezredmásodperc. Szóval 1 másodperc 1000, 1 perc az 1000x60, 5 perc pedig 1000x60x5, vagyis 300000.
return SendClientMessage: Ha még nem telt le az 5 perc amíg használta utoljára, akkor kiírja, hogy csak 5 percenként használhatom.
A parancs végrehajtásához, ahova betettük, hogy \"Életed feltöltve!\", és hogy felvigye a játékos életét maximumra, írjuk alájuk ezt:
 
            SetTimer(\"leiras\", 5000, false);
            SetPVarInt(playerid, \"leiras\", GetTickCount());

 
Ezek elindítják a Timert (Idõzítõt).
Szóval így néz ki a parancs végrehajtásunk:
 
            SetPlayerHealth(playerid, 100);
            SendClientMessage(playerid, COLOR_GREEN, \"Életed feltöltve!\");
            SetTimer(\"leiras\", 5000, false);
            SetPVarInt(playerid, \"leiras\", GetTickCount());

 
Az idõzítõvel (Timerrel) készen is vagyunk! Most jöjjön az, hogy csak egy bizonyos helyen tudja használni a játékos! Ugye, már beírtuk, hogy /save, keressük meg a Start menüben \"savedpositions.txt\" filet. Én csak így szoktam, úgy tuti megtalálom. Kattintsunk rá. Ugye, ott lesz az az egy sor, ami az a hely, ahol beírtuk, /save. Másoljuk ki ezt:
\"width=500http://kepfeltoltes.hu/121031/addplayerlcass_www.kepfeltoltes.hu_.png[/img]
Nos, írjuk a Timerünk alá, hogy:
 
if(IsPlayerInRangeOfPoint(playerid, 2748.2021,-2453.8052,13.8623,145.7109))

 
A számok helyére a te általad kimásolt számok legyenek!  :D
Az elsõ szám mellé írjuk meg azt, hogy mekkora körben szeretnénk, hogy használni lehessen a parancsot. Mondjuk legyen az 30.0, 10.0 alatt nem igazán ajánlatos. Szóval most így néz ki:
 
if(IsPlayerInRangeOfPoint(playerid, 30.0,2748.2021,-2453.8052,13.8623,145.7109))

 
Ez mind azt jelenti, hogy a parancsot csak azon a helyen tudjuk alkalmazni. Most csináljuk meg azt is, hogy kiírja, ha nincs abban a bizonyos körben, hogy \"Nem vagy a kiválasztott ponton!\".

Ez elég egyszerû, csak az return fölé írjuk, hogy:

 
else SendClientMessage( playerid, COLOR_GREEN, \"Nem vagy a kiválasztott ponton!\" );

 
Ugye, az else a tagadás, szóval, körülbelül azt jelenti: \"Ha nem, akkor\" ;)
Már kész is vagyunk! Megcsináltuk, hogy csak az általunk kiválasztott helyen lehessen beírni AZT a parancsot, ami feltölti az életünket!
Ez valahogy így néz ki teljes egésszében:
 
   if(strcmp(cmd, \"/parancs\", true) == 0)
   {
   if((GetTickCount() - GetPVarInt(playerid, \"leiras\")) < 300000) return SendClientMessage(playerid, -1, \"Csak 5 percenként tudod használni!\");
   if(IsPlayerInRangeOfPoint(playerid, 30.0,325.0305,304.6423,999.1484,84.2389))
   {
            SetPlayerHealth(playerid, 100);
            SendClientMessage(playerid, COLOR_GREEN, \"Életed feltöltve!\");
            SetTimer(\"leiras\", 5000, false);
            SetPVarInt(playerid, \"leiras\", GetTickCount());
   }
   else SendClientMessage( playerid, COLOR_GREEN, \"Nem vagy a kiválasztott ponton!\");
   return 1;
}

 
Remélem nincs a leírásban túl sok hiba, mert még én sem vagyok profi, de remélem egy alapot meg tudok csinálni  :D
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: timbaland10 - 2012. Október 31. - 10:26:35
[ pawn ] [ /pawn ] code-ba jobb lenne
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: Rammstein - 2012. Október 31. - 19:39:35
ha legalább ilyen tutorialt írsz, zcmd-vel írd! hisz az a jó ha a kezdõk rá szoknak, gyorsabb, kezelhetõbb. :)
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: ZyZu. - 2012. November 01. - 07:17:42
Épp azt akartam írni .. ha már meg csináltad ilyen szépen akkor ZCMD -vel is meg kellett volna megírni egyépként nagyon szép leírás fõleg a kezdõknek nagyon jól jön..  ;)
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: TengeriMalac - 2012. November 01. - 08:50:28
Idézetet írta: Stuntzor シ date=1351708775\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"29289\" data-ipsquote-contentclass=\"forums_Topic
ha legalább ilyen tutorialt írsz, zcmd-vel írd! hisz az a jó ha a kezdõk rá szoknak, gyorsabb, kezelhetõbb. :)
 
ez az egyik..
a másik pedig, hogy rengeteg hiba van benne.
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: Horváth Gergõ - 2012. December 16. - 08:22:16
Szép leírás, kösz!
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: Pedró - 2012. December 18. - 13:56:44
[pawn]public OnPlayerCommandText(playerid, cmdtext[])[/pawn]
ok.
[pawn]if(strcmp(cmd, \"/parancs\", true) == 0) //A \"/parancs\"-ot átírhatjuk, egyértelmûen az a parancsnak a... parancsa  :D[/pawn]
1. Hú de vicces.
2. sz*r!! Hol van a cmd változó deklarálva??? -.-
3. A parancsnak a... parancsa?
wtf?


Szerintem hagyd az egész scriptelést, ami nem megy, nem kell erõltetni..
És még a hsz hunterek dícsérik ezt a 0-t.
Grat. cs
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: Shady - 2012. December 20. - 23:41:08
Én megértettem belõle a timer mûködését és összehoztam egy olyan parancsot amivel óránként lehet pénzt kérni :D .. Ennyibõl nekem jól jött. Köszi. :)
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: b1s - 2012. December 22. - 14:39:05
Arról nem is beszélve, hogy az strcmp nem igazán erre való már. A ZCMD sokkal korszerûbb, és ezerszer gyorsabb!
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: [(The_Pro_Kari)] - 2013. Január 31. - 15:15:08
Am nem csak a zcmd jó annyira ez is ugyanolyan jó. Én is azt használom de akkor is jó ez ugyanis ebben ékezetet lehet tenni. És akár valaki azt is megoldhatná hogy egyszerre mind a 2 bent legyen!! :D
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: zeteni - 2013. Január 31. - 15:29:30
Van olyan ZCMD, amiben lehet ékezetet használni...
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: [(The_Pro_Kari)] - 2013. Január 31. - 15:33:48
Link?
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: zeteni - 2013. Január 31. - 16:03:59
http://www.solidfiles.com/d/286374d222/
Ezt találtam.
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: Szasza - 2013. Február 01. - 22:38:40
Bugos, elavult
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: hegdavid95 - 2013. Február 10. - 07:47:21
Az strcmp megoldás zcmd-vel párosítva akkor hasznos ha mondjuk dinamikusan a szerrveren belül akarunk létrehozni parancsokat illetve kivenni. pl ingame teleport szerkesztõ rendszer itt az történik, hogy ha nincs ZCMD vel létrehozott parancs akkor végig pörgeti a teleportok parancsát tároló tömbön
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: Beckham - 2013. Február 10. - 17:30:01
Szép leírás.
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: pisti525 - 2013. Február 11. - 05:48:50
felõlem fajin lett :)
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: GangBang - 2013. Február 17. - 08:13:16
Egyszer énis csináltam egy IsPlayerInRangeOfPointos parancsot de arrol azthiszem azt tanultam hogy kell elé egy ! jel mert különben akárhol lehet csinálni csak ott nem.Javitsatok ki ha hülyeséget írok!
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: mefi88 - 2013. Február 20. - 08:15:15
Olyat hogy lehet, hogy ne annak töltse az életét aki beírta, hanem annak akinek a /parancs után beírom az ID-jét?
Tehát pl van egy 24-es ID-jû player és ha beírom, hogy /parancs 24 akkor az Õ HP-ját vigye fel?
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: scripter01 - 2013. Március 23. - 06:39:12
Grat szép
Cím: KEZDÕKNEK - Egy átlagos parancs létrehozása
Írta: Scripter,mapper [Aldo] - 2013. Március 27. - 13:35:27
Idézetet írta: mefi88 date=1361344515\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"29289\" data-ipsquote-contentclass=\"forums_Topic
Olyat hogy lehet, hogy ne annak töltse az életét aki beírta, hanem annak akinek a /parancs után beírom az ID-jét?
Tehát pl van egy 24-es ID-jû player és ha beírom, hogy /parancs 24 akkor az Õ HP-ját vigye fel?
 
Azt SSCANF-al kell...