GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: banbence - 2012. szeptember 25. - 17:45:50

Cím: Interior tel..
Írta: banbence - 2012. szeptember 25. - 17:45:50
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!
Cím: Interior tel..
Írta: SnooP - 2012. szeptember 25. - 17:55:06
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.  ;)
Cím: Interior tel..
Írta: ►ѕтa - 2012. szeptember 25. - 17:55:34
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;
}
Cím: Interior tel..
Írta: banbence - 2012. szeptember 25. - 17:59:50
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? :)
Cím: Interior tel..
Írta: doboka98 - 2012. szeptember 25. - 18:23:07
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.
Cím: Interior tel..
Írta: banbence - 2012. szeptember 25. - 18:39:49
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? :)
Cím: Interior tel..
Írta: doboka98 - 2012. szeptember 25. - 18:43:25
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).
Cím: Interior tel..
Írta: banbence - 2012. szeptember 25. - 18:45:13
Rendben van :)
Cím: Interior tel..
Írta: doboka98 - 2012. szeptember 25. - 18:52:17
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;
}
Cím: Interior tel..
Írta: banbence - 2012. szeptember 25. - 18:57:24
Nagyon szépen köszönöm a segítséged. Tényleg. :)
Cím: Interior tel..
Írta: doboka98 - 2012. szeptember 25. - 19:01:43
Szívesen! Ha bármi kérdésed van csak szólj!