[TuT] Jednostavni sistem bolesti by Lazarevic

Započeo lv, Avgust 06, 2014, 17:09:39 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

lv

*

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
Pišem skriptu isključivo kad sam naduvan

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!


Lack of planning on your part does not constitute an emergency on my part.


Otvaras temu stariju od 10 dana  :o LOCK

[FS] Bank Sistem
[TuT] Array Sistem (Napredna)


"Pa krenite na mene i provesce te se super ko kapetan Kuka kada levom brise dupe"

www.denis-lapi.com