Pozdrav svima, danas cu vam pokazati kako napraviti jednostavan sistem bolesti.. Znaci sa 3 komande /kupilek /izlecime /startujbolest
Potrebno nam je :
Y_INI
YCMD
Foreach
TREBA ZNATI: Morate znati kako idu varijable za Y_Ini spremanje , to vas necu uciti ! Takodje, necu praviti FS, jer to morate prilagoditi svom modu !
Znaci, prvo pod vas eNum pInfo morate dodati sledece stvari:
pBolest, // Govori da li je igrac bolestan
pLek // Govori koliko igrac ima lekova
Sledece sto treba jeste da pod OnPlayerConnect stavimo varijablu koja ce resetovati igracu lekove i bolest.. jer ce LoadUser_%s to sam ucitati.. Da ne bi bagovalo, znaci pod OnPlayerConnect stavimo ovako
PlayerInfo[playerid][pBolest] = 0; // Resetuje igracevu bolest na 0 !
PlayerInfo[playerid][pLek] = 0; // Resetuje igraceve lekove na 0 !
Ok, sredili smo eNum, OnPlayerConnect.. Sada odmah krecemo na komande.. Znaci FS nece imati tajmere, vec ce admin da pokrece bolest, jednostavnom komandom /startujbolest
Znaci, odabrali smo YCMD procesor komandi.. u proslom tutorijalu (sastavljanje sistema za kreiranje 3dTextova IG) sam vas naucio kako da sastavite YCMD komandu.. Evo opet cu.. Znaci izgleda ovako, mnogo jednostavnije od strcmp-a
YCMD:komanda(playerid, params[], help)
{
// Ovde ispisujemo to sto treba
return 1;
}
Tako se sastavlja YCMD komanda. Mi cemo koristiti ForEach, i neke PlayerInfo funkcije za to :)
Znaci.. Sastavimo komandu /startujbolest ..
YCMD:startujbolest(playerid, params[], help)
{
Sledece sto treba jeste da namestimo odobrenje.. Posto ne znam kakve vi admin sisteme imate, ja cu koristiti RCON admin sistem.. znaci ovako idemo
if(!IsPlayerAdmin(playerid)) return SCM(playerid, -1, "{FF0000}ERROR:{FFFFFF} Nisi ovlascen !");
Dakle to treba ovako da izgleda
YCMD:startujbolest(playerid, params[], help)
{
if(!IsPlayerAdmin(playerid)) return SCM(playerid, -1, "{FF0000}ERROR:{FFFFFF} Nisi ovlascen !");
Sada cemo malo raditi sa Foreachom, znaci foreach radi sa SVIM igracima .. Ako imate na serveru npr.. 10 igraca, on ce svima desetorici dati nesto, oduzeti nesto, poslati nesto..
Umesto onog for(new i= 0< MAX_PLAYERS i++) (nemojte mi zameriti, ne znam ni ja kako to ide), koristimo jednostavnu funkciju
foreach(Player, i)
{
Znaci , za sada cela komanda /startujbolest treba da izgleda ovako
YCMD:startujbolest(playerid, params[], help)
{
if(!IsPlayerAdmin(playerid)) return SCM(playerid, -1, "{FF0000}ERROR:{FFFFFF} Nisi ovlascen !");
foreach(Player, i)
{
Oke, sada cemo da radimo da svima stavi pBolest na 1 , i da svima posalje poruku da je bolestan.. Znaci to je jednostavno dodeljivanje i SendClientMessage.. Ovako treba da izgleda
PlayerInfo[i][pBolest] = 1; // Dodeljuje SVIM online igracima bolest na 1 .. koristimo I umesto playerid, jer smo radili sa foreach-om
SCMTA(-1,"Bolestan si ! Idi do apoteke i kupi lek kako bi se izlecio"); // Salje svima poruku da su bolesni, da trebaju da kupe lek
Kao sto ste videli, pre jednostavno je .. Ovako treba da izgleda
YCMD:startujbolest(playerid, params[], help)
{
if(!IsPlayerAdmin(playerid)) return SCM(playerid, -1, "{FF0000}ERROR:{FFFFFF} Nisi ovlascen !");
foreach(Player, i)
{
PlayerInfo[i][pBolest] = 1;
SCMTA(-1,"Bolestan si ! Idi do apoteke i kupi lek kako bi se izlecio"); // Salje obavestenje da su bolesni
}
return 1;
}
Komanda /startujbolest je zavrsena, sada krecemo na komandu /kupilek
Znaci sastavljamo komandu
YCMD:kupilek(playerid, params[], help)
{
E sada, morate podesiti da igrac moze da kupi lek samo u apoteci, ja ne znam koordinate vase apoteke, pa cu umesto brojeva upisati samo X,y,Z.. Pa vi to zamenite sa vasim koordinatama, dacu vam example funkcije:
if(!IsPlayerInRangeOfPoint(playerid, 8.0, X,Y,Z)) return SCM(playerid,-1,"GRESKA: Nisi u apoteci");
Za sada komanda /kupilek izgleda ovako:
YCMD:kupilek(playerid, params[], help)
{
if(!IsPlayerInRangeOfPoint(playerid, 8.0, X,Y,Z)) return SCM(playerid,-1,"GRESKA: Nisi u apoteci");
E, sada, moramo dodeliti igracu lek, poslati mu poruku da ga je kupio, i oduzeti mu novac, ja cu oduzeti $200, a vi radite kako hocete...
To izgleda ovako
PlayerInfo[playerid][pLek] += 1; // Dodeljujemo igracu +1 lek ...
GivePlayerMoney(playerid, -200); // Oduzimamo igracu 200$
new string[256]; // definisemo string
new lekovi = PlayerInfo[playerid][pLek]; // Definisemo broj lekova.. Znaci lekovi = pLek ...
format(string, sizeof(string)" Kupio si lek, platio si $200 ! Sada imas %d lekova", lekovi); // "Stringujemo" poruku koju cemo poslati
SCM(playerid, -1, string); // Saljemo "stringovanu" poruku
I komanda treba da izgleda ovako
YCMD:kupilek(playerid, params[], help)
{
if(!IsPlayerInRangeOfPoint(playerid, 8.0, X,Y,Z)) return SCM(playerid,-1,"GRESKA: Nisi u apoteci");
PlayerInfo[playerid][pLek] += 1; // Dodeljujemo igracu +1 lek ...
GivePlayerMoney(playerid, -200); // Oduzimamo igracu 200$
new string[256]; // definisemo string
new lekovi = PlayerInfo[playerid][pLek]; // Definisemo broj lekova.. Znaci lekovi = pLek ...
format(string, sizeof(string)" Kupio si lek, platio si $200 ! Sadhttp://balkan-samp.com/forum/Smileys/noviset/undecided.gifa imas %d lekova", lekovi); // "Stringujemo" poruku koju cemo poslati
SCM(playerid, -1, string); // Saljemo "stringovanu" poruku
return 1;
}
Sada krecemo na konacnu komandu /izlecime ... Pravimo proveru da li je igrac bolestan, da li ima lekove, i sada mu oduzimamo jedan lek, stavljamo bolest na 0 , saljemo mu obavestenje ...
Odradicu odmah komandu, pa cu vam u komentarima objasniti sta je za sta
YCMD:izlecime(playerid, params[], help)
{
if(PlayerInfo[playerid][pBolest] == 0) return SCM(playerid, -1, " Nisi bolestan"); // Ukoliko je igracu bolest na 0 da mu posalje poruku da nije bolestan
if(PlayerInfo[playerid][pLek] == 0) return SCM(playerid, -1, " Nemas lekove"); // Ukoliko su igracevi lekovi na 0 da mu posalje poruku da nema lekove
PlayerInfo[playerid][pLek] -= 1; // Dodeljuje igracu -1 lek
PlayerInfo[playerid][pBolest] = 0; // Dodeljuje igracu bolest na 0
new lekovi = PlayerInfo[playerid][pLek]; // Definisemo da "lekovi" gleda broj igracevih lekova iz fajla
new string[256]; // Definisemo string koji ima max. 256 znakova
format(string, sizeof(string), "Zalecio si se , vise nisi bolestan ! Imas jos %d lekova", lekovi);// "stringujemo" poruku igracu
SCM(playerid, -1, string); // saljemo igracu "stringovanu" poruku..
return 1;
}
To je bio kraj TuT-a :) Hvala vam sto ste pogledali moj tutorial :)
CREDITS: Y_Less | YCMD, Y_INI , Foreach
koliko ja vidim ovo samo salje scm da sam bolestan i da ne kupim lijek i ne izlijecim se nista se nece promijeniti stavi da skida hp ili nesto...ostalo odlicno si objasnio (y)
Ja mislim ipak da je bolje da ima tajmere i da mu svako odredeno vrijeme ako je bolestan skida 5-10 healta - ovo uopce nije tesko za napraviti a sluzilo bi jer ovako bez toga ovaj tut nema svrhe, ostalo je sve lijepo objasnjeno
odlicno si objasnio,bravo!
Nije loše. Moglo je bolje al et :D
Otvaras temu stariju od 10 dana :o LOCK