Szerző Téma: Ilyet nem pipáltam még... -.-  (Megtekintve 808 alkalommal)

Ilyet nem pipáltam még... -.-
« Dátum: 2012. november 03. - 01:46:33 »
0 Show voters
Nos, van egy Timer ami 10 percenként rak le random autót random helyen.

Ezt a CreateVehicle-t tárolja egy randomkocsi változó.


Van egy ilyen rész a módban:

 

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if(GetPlayerVehicleID(playerid) != randomkocsi)
    {
        if(CSAPAT[playerid] == CRIMINAL)
{
    SendClientMessage(playerid, OLAJZOLD, \"Lépj le az autóval és vidd az export helyre! {\"#sarga\"} (Térképen jelölve!)\");
            SetPlayerRaceCheckpoint(playerid, 3, -2320.9075,2154.0659,17.3312, 0, 0, 0, 5);
}
    }
    return 1;
}

 
(Magát már az elsõ függvényt nem értem miért != -el mûködik (pont nem így kéne) na de m1..)

Ha beülök az autóba oké nem ír ki semmit és CP-t se kapok, de ahogy lefutott egyszer a timer bármelyik jármûbe szállok lefutnak azok a függvények aminek csak a randomkocsinál kellene.  :confused:

Ilyet nem pipáltam még... -.-
« Válasz #1 Dátum: 2012. november 03. - 08:09:40 »
+1 Show voters
GetPlayerVehicleID felesleges, mert OnPlayerEnterVehicle alatt alapba megadja a vehicleid paramétert, azaz hogy melyik autóba ültél bele..
szoval.. ha jól értem, akkor ha nem a randomkocsiba ülsz be, akkor adja a CPt.. neked pedig pont fordítva kéne..
magyarul nem !=, hanem ==

Ilyet nem pipáltam még... -.-
« Válasz #2 Dátum: 2012. november 03. - 10:43:02 »
+1 Show voters
Az OnPlayerEnterVehicle nem mindig kerül meghívásra, kicsit hibás szegény.
OnPlayerStateChange alatt hozd létre ezeket, és nem tagadás hanem egyenlõség operátor jelet kell használni, azért hívódik meg bármelyik jármûnél, csak pont annál nem amelyik a random jármû.
 
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER) // Ha a játékos egy jármû vezetõje lesz
{
if(CSAPAT[playerid] == CRIMINAL)
{
   if(GetPlayerVehicleID(playerid) == randomkocsi)
   {
      SendClientMessage(playerid, OLAJZOLD, \"Lépj le az autóval és vidd az export helyre! {\"#sarga\"} (Térképen jelölve!)\");
      SetPlayerRaceCheckpoint(playerid, 3, -2320.9075,2154.0659,17.3312, 0, 0, 0, 5);
   }
}
return 1;
}
}

Ilyet nem pipáltam még... -.-
« Válasz #3 Dátum: 2012. november 03. - 12:22:05 »
0 Show voters
Érdekes, tegnap full ugyan így írtam meg az OnPlayerStateChange alá és bugolt.. meg van fertõzõdve a pawnom esküszöm.. már nem elõször csinál ilyet hogy egyik nap jó másik nap nem, köszönöm. :O

Még egy kérdés amit nem értek:


Már többször tapasztaltam hogy egy két függvénynél csak a tagadással csinálja amit kell, pl ennél:
[/b]
 
if(!strcmp(drogfajta, \"herbal\", true))

 


És ezután jönnek a többi függvények, ha kiveszem a ! -t és a parancsot herbal paraméterrel használom nem történik semmi, pedig tagadás nélkül kellene mûködnie nem?.. (Tehát ha a drogfajta paraméter egyezik a \"herbal\" al akkor lefutnak a függvények)
« Utoljára szerkesztve: 2012. november 03. - 12:31:15 írta Johnies00 »

Ilyet nem pipáltam még... -.-
« Válasz #4 Dátum: 2012. november 03. - 13:15:52 »
+2 Show voters
Még egy jó darabig elfog tartani míg megérted ezt a tagadás jelet.
Tudom hogy programozás terén szokatlan ez a dolog számodra és azt is tudom hogy pont az strcmp miatt szenvednek sokan.
Ugyanis az strcmp ha teljes egyezést talál a kettõ összehasonlítandó karakterlánc között, akkor 0 értékkel tér vissza.
Ezért vizsgáljuk a következõképpen:
 
if(strcmp(\"valami\", \"valami\", true) == 0)

 
Tehát ha a valami megegyezik a másik valami-vel akkor visszatér nekünk egy nulla értékkel:
 
if(0 == 0)

 
Így kapunk egy igaz állítást, ami után oda írhatjuk hogy, print(\"egyezik\");
És pont az strcmp miatt nehéz megérteni a tagadás jel mûködését mivel a legtöbb native függvény számunkra megfelelõ értékkel tér vissza, tehát leggyakrabban 1-es értékkel(true) és nem nullával(false) mint az strcmp.
Egy if vizsgálat megnézi hogy milyen értékeket kapott az operátor jelek közt/után és aszerint kettõ lehetõséget biztosít számunkra, értelmezés szerint vagy igaz (true) vagy hamis(false), amit egy else utasítás rész biztosít nekünk.
 

if(random(3) == 1)
{
    print(\"a random érték 1\")
} else {
    print(\"a random érték nem egyenlõ 1-el\");
}

 
Ebbõl a fogalmazásból láthatod talán hogy a felkiáltó jellel is használható ez a dolog, mivel az tagadás jele.
 

if(random(3) != 1)
{
    print(\"a random érték nem egyenlõ 1-el\");
} else {
    print(\"a random érték 1\")
}

 
Tovább fokozva:
 

if(!(random(3) == 1))
{
    print(\"a random érték nem egyenlõ 1-el\");
} else {
    print(\"a random érték 1\")
}

 
Elég sokféleképpen lehet alkalmazni, igaz gyakorolni kellene.
Minden függvény visszatér valamilyen értékkel ami megmutatja mit állapított meg a számára megadott adatokból.
Mint mikor téged megkérdeznek valamirõl és te azt mondod ez igaz nem igaz.
Ezt a legtöbb függvény egy \"nulla azaz false(0)\", illetve \"egy azaz true(1)\" értékkel jelzik.
De van más függvény is ami más vissza térési értékkel dolgozik, és itt megint vissza az strcmp-hez, az pont fordítva jelzi a dolgokat mivel nulla értéket ad vissza ha teljes egyezést talál. :D
Elég lesz ennyi. :D:D

Ilyet nem pipáltam még... -.-
« Válasz #5 Dátum: 2012. november 03. - 14:00:23 »
0 Show voters
Hmm.. azt hittem valami a pawno-val van  :D

De alaposan átolvastam amit írtál és már értem hogy némelyik függvény esetében miért van fordítva, köszönöm :)
« Utoljára szerkesztve: 2012. november 03. - 14:05:42 írta Johnies00 »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal