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
{
//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
{
//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
{
//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:
http://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!
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