[TUT] Rent vozila | Na odredeno vrijeme

Započeo Crazyn3ss, Jun 21, 2013, 19:02:27 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

TUT - Rent Vozila by Crazyn3ss






UVOD

Ovo je moj prvi tutorial, pa ako ima gresaka slobodno mi javite na PM/PP, ili ovdje u temi komentirajte. Ovaj tutorial radim, jer sam vidio da jednom clanu treba pomoc oko toga, pa da se ne mucim a i da skuzi lakse.





PA KRENIMO


Tutorial cemo radit uz pomoc YSI-a, komande ce biti u YCMD procesoru. Ukoliko nemate YSI, skinite jer ce vam biti potreban. Prvo sto cemo uradit je postavi include u mod a to ce te uradit ovako:


#include <YSI\y_ini>
#include <YSI\y_commands>


Sljedece, moramo definirat neke stavri pa to uradimo ovako:


new Rent[MAX_PLAYERS];//ova ce nam varijabla pomoc oko rentanja vozila
#define RENT_VOZILA 999//s ovim definiramo dialog
new rentvozila[3];// ovo ce nam pomoc pri oznacavanju rent vozila

Mozemo krenit na komandu. Komanda bi trebala izgledati ovako:


YCMD:iznajmivozilo(playerid, params[], help)
{
#pragma unused help
#pragma unused params
if(Rent[playerid] != -1)//ovaj dio provjerava dali smo vec rentali neko od rentanih vozila
{
SCM(playerid, -1, "Vec si iznajmio vozilo, prvo vrati iznjamljeno pa mozes opet rentat");
return 1;
}
if(Rent[playerid] == GetPlayerVehicleID(playerid))//ovaj dio provjerava dali je neko vec rentao to vozilo
{
SCM(playerid, -1, "Neko je vec rentao ovo vozilo.");
return 1;
}
if(GetPlayerVehicleID(playerid) >= rentvozila[0] && GetPlayerVehicleID(playerid) <= rentvozila[2])//ovaj dio provjerava dal je igrac u vozilu za rentanje a ako nije, izbacit ce poruku da nije, a ako je izbacit ce dialog
{
SPD(playerid,RENT_VOZILA,DIALOG_STYLE_LIST, "Odaberite vrijeme","10 minuta\n20 minuta\n30 minuta\n60 minuta", "U redu", "Odustani");
}
else return SCM(playerid, -1, "Nisi u vozilu za iznjamljivanje vozila");
return 1;
}



Sljedi komanda s kojom vracamo rentano vozilo, prije vremena.


YCMD:vrativozilo(playerid, params[], help)
{
#pragma unused help
#pragma unused params
    new v= GetPlayerVehicleID(playerid);
if(Rent[playerid] != -1)
{
if(v== Rent[playerid])
{
TogglePlayerControllable(playerid, 1);
  }
SetVehicleToRespawn(Rent[playerid]);//respawna rentano vozilo
        RemovePlayerFromVehicle(playerid);//izbacuje igraca iz vozila
Rent[playerid] = -1;//postavlja varijablu na -1 sto znaci da ce igrac ponovno moc rentat vozilo
SCM(playerid,-1,"Vratio si rentano vozilo");
       }
return 1;
}


Komanda s kojom napustamo vozilo, ukoliko necemo rentat:


YCMD:exit(playerid, params[], help)
{
#pragma unused help
#pragma unused params
if(GetPlayerVehicleID(playerid) >= rentvozila[0] && GetPlayerVehicleID(playerid) <= rentvozila[2])
{
RemovePlayerFromVehicle(playerid);
TogglePlayerControllable(playerid, 1);
}
return 1;
}


Komande su gotove, sad mozemo preci na dialog. To cete ubacit pod OnDialogResponse. Dialog cete ovako uradit:


if(dialogid == RENT_VOZILA)
{
if(response)
{
            if(listitem == 0)
{
    if(GetPlayerMoney(playerid) <  50) return SCM(playerid,-1,"Nema te dovoljno novca");//postavite kaku god ocete cijenu
    GivePlayerMoney(playerid,-50);//oduzima vam novac
                Rent[playerid] = GetPlayerVehicleID(playerid);//pamti vam vozilo u kojem sjedit, tocnije id
                SCM(playerid,-1, "Rentao si vozilo na 10 minuta, ako ga zelis vratit kucaj /vrativozilo");
                TogglePlayerControllable(playerid, 1);//odmrzaje igraca je zamrznit bio u autu
                SetTimerEx("IstekRenta",600000, 0, "i", playerid);//timer koji se postavlja na 10 minuta
}
if(listitem == 1)
{
                if(GetPlayerMoney(playerid) <  100) return SCM(playerid,-1,"Nema te dovoljno novca");
                GivePlayerMoney(playerid,-100);
                Rent[playerid] = GetPlayerVehicleID(playerid);
SCM(playerid,-1, "Rentao si vozilo na 20 minuta, ako ga zelis vratit kucaj /vrativozilo");
                TogglePlayerControllable(playerid, 1);
                SetTimerEx("IstekRenta",1200000, 0, "i", playerid);
}
if(listitem == 2)
{
          if(GetPlayerMoney(playerid) <  150) return SCM(playerid,-1,"Nema te dovoljno novca");
                GivePlayerMoney(playerid,-150);
                Rent[playerid] = GetPlayerVehicleID(playerid);
              SCM(playerid,-1, "Rentao si vozilo na 30 minuta, ako ga zelis vratit kucaj /vrativozilo");
                TogglePlayerControllable(playerid, 1);
                SetTimerEx("IstekRenta",1800000, 0, "i", playerid);
}
if(listitem == 3)
{
            if(GetPlayerMoney(playerid) <  300) return SCM(playerid,-1,"Nema te dovoljno novca");
                GivePlayerMoney(playerid,-300);
                Rent[playerid] = GetPlayerVehicleID(playerid);
SCM(playerid,-1, "Rentao si vozilo na 60 minuta, ako ga zelis vratit kucaj /vrativozilo");
                TogglePlayerControllable(playerid, 1);
                SetTimerEx("IstekRenta",3600000, 0, "i", playerid);
}
}
}


Sada cemo uradit timer, koji sluzi kad istekne vrijeme, da igraca izbaci iz vozila i vozilo se respawna, takodjer se igracu mice rent varijabla:


forward IstekRenta(playerid);
public IstekRenta(playerid)
{
    Rent[playerid] = -1;
    SetVehicleToRespawn(Rent[playerid]);
RemovePlayerFromVehicle(playerid);
TogglePlayerControllable(playerid, 1);
return 1;
}


Sada cemo napravit da kad igrac ude u vozilu, da mu ispise, dal oce rentat ili ce napustit vozilo, taj dio cemo stavit pod callback OnPlayerStateChange:



    if(newstate == PLAYER_STATE_DRIVER)
    {
if(VecRentano(GetPlayerVehicleID(playerid)))//ovaj dio provjerava dali je neko vec rentao to vozilo
{
SCM(playerid, -1, "Neko je vec rentao ovo vozilo.");
return 1;
}
}


Ovo dodajte na kraj moda, to je za provjeravanje vozilda dali su rent vozila:


stock VecRentano(vehid)
{
foreach(Player,i)
{
if(Rent[i] == vehid) return true;
}
return false;
}


Takodjer ovo stavite pod OnPlayerConnet


Rent[playerid] = -1;


Jos je preostalo da vam pokazem kako cete stavljat vozila:

rentvozila[0] = AddStaticVehicle(....);
rentvozila[1] = AddStaticVehicle(....);
rentvozila[2] = AddStaticVehicle(....);






ZAKLJUCAK


Mislim da je to to, ukoliko ima gresaka, molio bih da prijavite, nadam se da sam nekom i pomogo, barem se nadam tom jednom clanu koji trazio pomoc u vezi toga. Kad mi server krene u rad, vjerovatno da cu vise objavljivat neke tutove i fs-ove, sad trenunto nemam toliko vremena. Ovaj sam tut piso u dva navrata. Pozdrav svima :D
Poslednja Izmena: Jun 27, 2013, 15:21:14 POSLE PODNE od Crazyn3ss
Other Dimension RolePlay | Uskoro
Ukoliko zelite pomoci u razvoju servera, mozete se meni javit na PP/PM!

Citat: David (Sabljak) A.k.A SABO(T) poslato Jun 21, 2013, 22:28:22 POSLE PODNE
Vidim lijepo sve objasnjeno koliko sam uhvatio

Samo dodaj #pragma unused za YCMD komande da ne baca igracima warninge..
ma to znaju i sami, al et stavit kad dodem..
Other Dimension RolePlay | Uskoro
Ukoliko zelite pomoci u razvoju servera, mozete se meni javit na PP/PM!

ado97


Svaka cast ! Lepo objasnjeno i mnogo korisno  ;D !
[/center]

Hvala vam :D
Other Dimension RolePlay | Uskoro
Ukoliko zelite pomoci u razvoju servera, mozete se meni javit na PP/PM!

lijepo :D


[FS]Rent
[FS] Vremenska prognoza
[TuT] PayDay
[TuT]PayDay sistem[UPDATED]
Moja Biografija

Respect:Mr.Gagi,FlasH,Streetboy,David (Sabljak) A.k.A SABO(T)
ÄŒovjek nije stvoren za poraze, moze biti unisten, ali ne i pobjeÄ'en!



hvala, bice jos od mene  ;D
Other Dimension RolePlay | Uskoro
Ukoliko zelite pomoci u razvoju servera, mozete se meni javit na PP/PM!


Koristan tutorial i dobro objasnjen :)




Balkan Ulice RPG opis servera: Click



-Tutorial za mijesanje ID-ova na vozilima: Click

pax95

Ok je tutorial ali nasao sam gresku (morao sam da trazim).
Ovaj deo ti ne valja:
if(Rent[playerid] == GetPlayerVehicleID(playerid))//ovaj dio provjerava dali je neko vec rentao to vozilo
{
SCM(playerid, -1, "Neko je vec rentao ovo vozilo.");
return 1;
}

Tako neces proveriti sve igrace da li je neko vec rentao to isto vozilo, ja sam napravio funkciju:
stock VecRentano(vehid)
{
foreach(Player,i)
{
if(Rent[i] == vehid) return true;
}
return false;
}

I onda bi umesto onog tvog koda islo:
if(VecRentano(GetPlayerVehicleID(playerid)))//ovaj dio provjerava dali je neko vec rentao to vozilo
{
SCM(playerid, -1, "Neko je vec rentao ovo vozilo.");
return 1;
}

Sa tom funkcijuom on ce proveriti da li je neko od igraca vec rentao to vozilo onako po tvome je proveravao samo od igraca koji je kucao komandu...

provjerit cu ujutro sad ne mogu :D
Other Dimension RolePlay | Uskoro
Ukoliko zelite pomoci u razvoju servera, mozete se meni javit na PP/PM!

10/10

SA:MP Member Since: 14.05.2008
If one day the speed kills me, do not cry because I was smiling


ok gagi, popravit cu, cim dodem na komp, hvala

EDIT: popravio sam, hvala GAGI
Poslednja Izmena: Jun 27, 2013, 15:22:22 POSLE PODNE od Crazyn3ss
Other Dimension RolePlay | Uskoro
Ukoliko zelite pomoci u razvoju servera, mozete se meni javit na PP/PM!