Szerző Téma: Interior tel..  (Megtekintve 1154 alkalommal)

Interior tel..
« Dátum: 2012. szeptember 25. - 17:45:50 »
0 Show voters
Sziasztok!
Olyan kérdésem lenne, hogy hogyan tudom megoldani azt, hogy pickup berakása nélkül teleportájon egy épületbe.
Pl.: Van egy épület és az mellé raktam egy pickupot és ha rámegyek akkor bemegy (Teleportája) :)
Azt szeretném, hogy a pickup nélkül is betudjak menni, hogy nincs ott semmi, de ha oda megyek akkor is bemegy.
Köszönöm a segítségetek!

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
Interior tel..
« Válasz #1 Dátum: 2012. szeptember 25. - 17:55:06 »
0 Show voters
Egyszerû két függvény használata, az egyik (IsPlayerInRangeOfPoint lekérdezi, ha a játékos azon a bizonyos helyen van mi történjen a másik pedig berakja az adott helyre (SetPlayerPos)
Ennek a kettõnek a kombinációjával meg lehet oldani, ha nem boldogulnál add meg a kordinátákat, hogy honnan hová rakja és megoldom neked.  ;)

Nem elérhető ►ѕтa

  • 2016
  • Newbie
    • Profil megtekintése
Interior tel..
« Válasz #2 Dátum: 2012. szeptember 25. - 17:55:34 »
0 Show voters
Nos ezt úgy oldhatod meg, hogy létrehozol egy x mp-s timert (vagy OnPlayerUpdate, bár én az elsõt ajánlom), ugyebár (OnPlayerSpawn-hoz) rakd be:
 

SetTimerEx(\"playerupdate\", x*1000, true, \"d\", playerid);

 
Majd hozd létre egy üres (azaz funkcióban illetve eljáráson kívüli) helyen így:
 

forward playerupdate(playerid);
public playerupdate(playerid)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, x, y, z))
{
// ide hogy mi történjen ha ott van
}
return 1;
}

Interior tel..
« Válasz #3 Dátum: 2012. szeptember 25. - 17:59:50 »
0 Show voters
Nagyon megköszönném ha segítenél megírni, mert ehez még nem értek.
(Ide akarok bejutni) In: 2313,-4, 27
(Bentrõl ide akarok ki jutni) Out: 1481.130371,-1763.401000, 18.795755
Még egyszer nagyon köszönöm! :)

Dupla hozzászólás automatikusan összefûzve. ( 2012. szeptember 25. - 18:06:06 )

Star: A második részét nem nagyon értem. Hol a ki és bemeneti koordináta helye? :)
« Utoljára szerkesztve: 2012. szeptember 25. - 18:06:06 írta banbence »

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Interior tel..
« Válasz #4 Dátum: 2012. szeptember 25. - 18:23:07 »
0 Show voters
Kelleni fog még két koordináta. Elmagyarázom! Elõszõr is tudnod kell, hogy a PAWN nyelven való programozás fele logika. A gondolkodásmód. Hogy hogy akarod elkészíteni a dolgokat. Na most már.
E mûvelet elvégzéséhez szükséged lesz egy függvényre.
IsPlayerInRangeOfPoint

. Errõl bõvebben itt olvashatsz: http://wiki.sa-mp.com/wiki/IsPlayerInRangeOfPoint. Egy kevéske angoltudással megérted. Mint minden függvénynek, ennek is vannak paraméterei.
(playerid, Float:range, Float:x, Float:y, Float:z)

 
A legelsõ paraméter a playerid. Ide egy játékos ID -je kerül. De hogy melyiké, azt te kell eldöntsd. De jelen esetben, a playerid, mivel õ maga végzi el a \"cselekvést\". A Float: Range paraméter azt jelöli, hogy az adott ponttól milyen távolságra legyen. Ezt számmal jelöljük. A maradék paraméterek, a pozíciót jelölik, amiket te tudsz elmenteni a játékban( /save, és ezt a dokumentumok mappádban találod meg ). Ezek az elõbb megemlített adott pontok. Tehát ez a függvény,
IsPlayerInRangeOfPoint

 egy adott pontból való távolságot \"figyel\". Ha az õ hatókörén belül vagy, akkor történik valami. És ez a szócska, hogy if, ez a ha feltételt jelöli. Tehát:
 
if(IsPlayerInRangeOfPoint(playerid, 1.0, x, y, z))

 
Ez azt jelenti, hogy ha a játékos (playerid), a megadott koordináták 1 \"méteres\" hatósugarán belül van, történjék valami. Ha még mindig nem értesz valamit, szólj és szívesen segítek.

Interior tel..
« Válasz #5 Dátum: 2012. szeptember 25. - 18:39:49 »
0 Show voters
Akkor ha ezt berakom OnPlayerSpawnhoz és beállítom azt a helyet ahol a teleportot szeretném akkor ehez nem kell interiot összefûzni vele vagy egyéBb? :)

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Interior tel..
« Válasz #6 Dátum: 2012. szeptember 25. - 18:43:25 »
0 Show voters
De igen. Interiort is hozzá kell fûzni. Itt minden megvan : http://weedarr.wikidot.com/interior.
És ha az OnPlayerSpawn alá rakod, nem lesz jó. Használd azt a megoldást amit Star írt le. Kell hozzá egy timer(nézd Star hozzászólását), és egy callback (nézd Star leírását).

Interior tel..
« Válasz #7 Dátum: 2012. szeptember 25. - 18:45:13 »
0 Show voters
Rendben van :)

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Interior tel..
« Válasz #8 Dátum: 2012. szeptember 25. - 18:52:17 »
0 Show voters
public OnPlayerSpawn(playerid) //ez egy függvény, ha egy játékos lespawol, történik valami...
{ //ezzel nyitjuk meg a szkriptet
SetTimerEx(\"playerupdate\", 1000, true, \"d\", playerid); //ez a timer, vagyis idõzítõ.Lényege:Ha letelik egy bizonyos idõ, mi történjen...
return 1; //visszatérés
} //lezárjuk a szkriptet
forward playerupdate(playerid); //létrehozzuk a callback -t vagyis eljárást
public playerupdate(playerid) // elkezdjük a callback -t
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, x,y,z)) // errõl az elõbb beszéltem, x,y,z helyére azokat a koordinátákat rakd, amik a belépésnél vannak, az ajtó elõtt.Tehát mi történjen, ha odaér a player.
{
SetPlayerPos(playerid, x,y,z); //ide azokat a koordinátákat, ahova legyen teleportálva a player
//SetPlayerInterior(playerid, x); Ez csak akkor kell ha más interiorba akarod rakni a playert. Az x helyére az interior ID fog kerülni.
}
return 1;
}

Interior tel..
« Válasz #9 Dátum: 2012. szeptember 25. - 18:57:24 »
0 Show voters
Nagyon szépen köszönöm a segítséged. Tényleg. :)

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Interior tel..
« Válasz #10 Dátum: 2012. szeptember 25. - 19:01:43 »
0 Show voters
Szívesen! Ha bármi kérdésed van csak szólj!

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal