Szerző Téma: KEZDÕKNEK - Egy átlagos parancs létrehozása  (Megtekintve 5418 alkalommal)

Nem elérhető Petrik

  • 318
    • Profil megtekintése
KEZDÕKNEK - Egy átlagos parancs létrehozása
« Dátum: 2012. Október 31. - 10:25:23 »
+4 Show voters
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
« Utoljára szerkesztve: 2012. Október 31. - 10:27:19 írta Petrik »

KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #1 Dátum: 2012. Október 31. - 10:26:35 »
0 Show voters
[ pawn ] [ /pawn ] code-ba jobb lenne

Rammstein

  • Vendég
KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #2 Dátum: 2012. Október 31. - 19:39:35 »
+2 Show voters
ha legalább ilyen tutorialt írsz, zcmd-vel írd! hisz az a jó ha a kezdõk rá szoknak, gyorsabb, kezelhetõbb. :)

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #3 Dátum: 2012. November 01. - 07:17:42 »
0 Show voters
É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..  ;)

KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #4 Dátum: 2012. November 01. - 08:50:28 »
0 Show voters
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.

KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #5 Dátum: 2012. December 16. - 08:22:16 »
0 Show voters
Szép leírás, kösz!

Nem elérhető Pedró

  • 3341
  • 2014 © Az év Szkriptere
    • Profil megtekintése
KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #6 Dátum: 2012. December 18. - 13:56:44 »
0 Show voters
[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

Nem elérhető Shady

  • 313
    • Profil megtekintése
KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #7 Dátum: 2012. December 20. - 23:41:08 »
0 Show voters
É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. :)

Nem elérhető b1s

  • 2212
  • Faszidegbénulás
    • Profil megtekintése
KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #8 Dátum: 2012. December 22. - 14:39:05 »
0 Show voters
Arról nem is beszélve, hogy az strcmp nem igazán erre való már. A ZCMD sokkal korszerûbb, és ezerszer gyorsabb!

KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #9 Dátum: 2013. Január 31. - 15:15:08 »
0 Show voters
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

Nem elérhető zeteni

  • 1970
  • Ex-Scripter
    • Profil megtekintése
KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #10 Dátum: 2013. Január 31. - 15:29:30 »
0 Show voters
Van olyan ZCMD, amiben lehet ékezetet használni...

KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #11 Dátum: 2013. Január 31. - 15:33:48 »
0 Show voters
Link?

Nem elérhető zeteni

  • 1970
  • Ex-Scripter
    • Profil megtekintése
KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #12 Dátum: 2013. Január 31. - 16:03:59 »
0 Show voters

Nem elérhető Szasza

  • 388
    • Profil megtekintése
KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #13 Dátum: 2013. Február 01. - 22:38:40 »
0 Show voters
Bugos, elavult

KEZDÕKNEK - Egy átlagos parancs létrehozása
« Válasz #14 Dátum: 2013. Február 10. - 07:47:21 »
0 Show voters
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

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal