Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

[PAMOKA] Mašinos valdymas su numpad'u.


exibo'

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3750 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki šiandien parodysiu pamoka, mašinos valdymas su numpad'u. Sekite visus veiksmus ir turėtų viskas veikti...

 

» Pirmiausiai susikuriame new

new engine, lights, alarm, doors, bonnet, boot, objective;

Kodėl aš nedarau kiekvieno new? Na pvz: new engine new lights? Tai trumpaiau laiko užtrunka ir mažiau apkrauna.

 

» Po new susikūrimo susirandame calbak'ą

public OnPlayerStateChange(playerid, newstate, oldstate)

» Ir po juo rašome

{
    if(newstate == PLAYER_STATE_DRIVER)
            {
                    SendClientMessage(playerid, 0x00FF00FF, "");
                    SendClientMessage(playerid, 0x00FF00FF, "Spausk {FFFFFF}8 {00FF00}norėdamas {FF0000}ijungti/išjungti {00FF00}šviesas.");
                    SendClientMessage(playerid, 0x00FF00FF, "Spausk {FFFFFF}2 {00FF00}norėdamas {FF0000}ijungti/išjungti {00FF00}variklį.");
                    SendClientMessage(playerid, 0x00FF00FF, "Spausk {FFFFFF}6 {00FF00}norėdamas {FF0000}atidaryti/uždaryti {00FF00}kapotą.");
                    SendClientMessage(playerid, 0x00FF00FF, "Spausk {FFFFFF}4 {00FF00}norėdamas {FF0000}atidaryti/uždaryti {00FF00}bagažinę.");
            }
	return 1;
}

Paaiškinimas toks ir paprastas, kai žmogus įlips į mašiną, jam išves šitą text'ą.

 

» Tada susirandame calback'a

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)

» Ir po juo rašome

  new vid = GetPlayerVehicleID(playerid);
   	GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
    if(newkeys == KEY_ANALOG_UP)
            {
                    if(lights == 1)
                    {
                            SetVehicleParamsEx(vid,engine,0,alarm,doors,bonnet,boot,objective);
                            SendClientMessage(playerid, 0xFF9900FF, "Šviesos {FF0000}išjungtos.");
                    }
                    else if(lights == -1||lights == 0)
                    {
                            SetVehicleParamsEx(vid,engine,1,alarm,doors,bonnet,boot,objective);
                            SendClientMessage(playerid, 0xFF9900FF, "Šviesos {FF0000}ijungtos.");
                    }
            }

	if(newkeys == KEY_ANALOG_DOWN)
            {
                    if(engine == 1)
                    {
                            SetVehicleParamsEx(vid,0,lights,alarm,doors,bonnet,boot,objective);
                            SendClientMessage(playerid, 0xFF9900FF, "Variklis {FF0000}užgesintas.");
                    }
                    else if(engine == -1||engine == 0)
                    {
                            SetVehicleParamsEx(vid,1,lights,alarm,doors,bonnet,boot,objective);
                            SendClientMessage(playerid, 0xFF9900FF, "Variklis {FF0000}užvestas.");
                    }
            }

	if(newkeys == KEY_ANALOG_LEFT)
            {
                    if(boot == 1)
                    {
                            SetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,0,objective);
                            SendClientMessage(playerid, 0xFF9900FF, "Bagažinė {FF0000}uždaryta.");
                    }
                    else if(boot == -1||boot == 0)
                    {
                            SetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,1,objective);
                            SendClientMessage(playerid, 0xFF9900FF, "Bagažinė {FF0000}atidaryta.");
                    }
            }

	if(newkeys == KEY_ANALOG_RIGHT)
            {
                    if(bonnet == 1)
                    {
                            SetVehicleParamsEx(vid,engine,lights,alarm,doors,0,boot,objective);
                            SendClientMessage(playerid, 0xFF9900FF, "Kapotas {FF0000}uždarytas.");
                    }
                    else if(bonnet == -1||bonnet == 0)
                    {
                            SetVehicleParamsEx(vid,engine,lights,alarm,doors,1,boot,objective);
                            SendClientMessage(playerid, 0xFF9900FF, "Kapotas {FF0000}atidarytas.");
                    }
            }
	return 1;

Čia paaiškinimas irgi lyg ir lengvas, čia suteikiame mygtukui "galią" 

 

» SVARBIAUSIA, KAD KAI ĮLIPI Į MAŠINĄ JI NEBŪTŲ IŠ KARTO UŽVESTĄ PRIE CALBAKO

public OnGamemodeInit()

Rašome

	ManualVehicleEngineAndLights();

Tai tiek, jeigu kils problemų rašykite padėsiu.

Nuoroda į komentarą
Dalintis per kitą puslapį

Siūlymas daryti ne 

if(newkeys == KEY_ANALOG_RIGHT)

o

if(newkeys & KEY_ANALOG_RIGHT)

Tavo atveju, norint kažką padaryt žaidėjas turės visiškai nieko nespausti tik tavo norimą mygtuką, mano atveju jis tiesiog turės paspaust mygtuką.

Nesupratau ką turėjai omeny...

Nuoroda į komentarą
Dalintis per kitą puslapį

new engine, lights, alarm, doors, bonnet, boot, objective;

Tu kuri tam globalius kintamuosius? Kas bus kai du žmonės panašiu metu tai darys? Ogi jie dalinsis tais kintamaisiais ir visokie blogi dalykai atsitiks.

 

 

 

Tai trumpaiau laiko užtrunka ir mažiau apkrauna.

Trumpiau?Greičiau patogiau ir tiek.  Kintamųjų kūrimas TIKRAI nieko neapkrauna, nors visada buvau už optimizacijas, tai visiška nesamonė.

 if(newkeys == KEY_ANALOG_UP)

Toks mygtukų tikrinimas veiks TIK tada kai žaidėjas yra nuspaudęs TIK tą mygtuką.... O jeigu jis dėl kažkokių priežasčių laiko kažką kito?(Pvz tarpą kad neriedėtų mašina) 

 

 

Kai baigi atliktą veiksmą su mygtukų tikrinimu, reikėtų gražinti 0, kad šis callback'as nebūtų kviečiamas kituose skriptuose(kalbi apie apkrova....). Nors yra išimčių kai to nereikia daryti..

 

Ir dar paskutinė smulkmena, kuri nėra reikšminga, tai kad yra define transporto priemonės būsenoms:

#define VEHICLE_PARAMS_UNSET	-1
#define VEHICLE_PARAMS_OFF		0
#define VEHICLE_PARAMS_ON		1

Redaguota , nario Justas Š.
Nuoroda į komentarą
Dalintis per kitą puslapį

new engine, lights, alarm, doors, bonnet, boot, objective;

Tu kuri tam globalius kintamuosius? Kas bus kai du žmonės panašiu metu tai darys? Ogi jie dalinsis tais kintamaisiais ir visokie blogi dalykai atsitiks.

 

Trumpiau?Greičiau patogiau ir tiek.  Kintamųjų kūrimas TIKRAI nieko neapkrauna, nors visada buvau už optimizacijas, tai visiška nesamonė.

 if(newkeys == KEY_ANALOG_UP)

Toks mygtukų tikrinimas veiks TIK tada kai žaidėjas yra nuspaudęs TIK tą mygtuką.... O jeigu jis dėl kažkokių priežasčių laiko kažką kito?(Pvz tarpą kad neriedėtų mašina) 

 

 

Kai baigi atliktą veiksmą su mygtukų tikrinimu, reikėtų gražinti 0, kad šis callback'as nebūtų kviečiamas kituose skriptuose(kalbi apie apkrova....). Nors yra išimčių kai to nereikia daryti..

 

Ir dar paskutinė smulkmena, kuri nėra reikšminga, tai kad yra define transporto priemonės būsenoms:

#define VEHICLE_PARAMS_UNSET	-1
#define VEHICLE_PARAMS_OFF		0
#define VEHICLE_PARAMS_ON		1

ačiū už pastebėjimą, o kam naudoti define?

Nuoroda į komentarą
Dalintis per kitą puslapį

Puiku tik reikėjo paminėti, kad kodas yra mano. http://pastebin.com/9uZxhEha

 By: Stuneris on Jul 25th, 2011

Beje turiu klausimą, ką turi omenyje sakydamas:

» SVARBIAUSIA, KAD KAI ĮLIPI Į MAŠINĄ JI NEBŪTŲ IŠ KARTO UŽVESTĄ PRIE CALBAKO

Kodėl svarbu, kad būtų neužvesta? Jei ji bus užvesta, ją užgesins spaudžiant, o kitu atveju galėsi važiuot.

 

Jei ką nors domina, tai turiu kompiuteryje naujesnę šio kodo versiją, kurioje viskas labiau apgalvotą ir yra šiek tiek daugiau galimybių.
 

Redaguota , nario Virtual Idea
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3750 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...