Szerző Téma: [TUT] Teljesen automata ajtók és kapuk  (Megtekintve 3231 alkalommal)

Nem elérhető Y2K

  • 488
    • Profil megtekintése
[TUT] Teljesen automata ajtók és kapuk
« Dátum: 2011. március 15. - 19:33:18 »
+5 Show voters
TELJESEN AUTOMATA AJTÓK ÉS KAPUK
 
Elõzmények:
Úgy egy hete azt álmodtam, hogy van egy RP szerverem. :) Nem tudom miért, de ilyet szerintem nem mindenki szokott éjjel megálmodni. Na, ezt az álmot kezdtem el megvalósítani. Kezdtem írogatni egy teljesen saját, egyedi RP módot, mely egy teljesen saját, egyedileg map-olt településen játszódik. Ahogyan írogattam, gondoltam legyen benne egy bevásárlóközpont. Amint az említett bevásárlóközpontot építgettem, hatalmas dolog ugrott be: mi lenne ha itt a
/bemegy

 és
/kimegy

 helyett \"fotocellás\" ajtó lenne, mint IRL (In Real Life = a való életben)...
Feltételek:
Ebben a leírásban az
IsPlayerInRangeOfPoint

 függvényt fogjuk használni, mely csak a v0.3a vagy annál újabb kiadásokban mûködik. Régebbi kiadás esetén a következõ függvény kódba való beillesztése szükségeltetik:
 
stock IsPlayerInRangeOfPoint(playerid, Float:radius, Float:X, Float:Y, Float:Z){
    new Float:px,Float:py,Float:pz;
    GetPlayerPos(playerid,px,py,pz);
    return ( ( ((px-X)*(px-X))+((py-Y)*(py-Y))+((pz-Z)*(pz-Z)) ) >= radius*radius );
}

 
Változó, változó, mindennek az alapja:
Minden függvényen kívül hozzunk létre egy új változót, valahogy így:
 
new valamicske;

 
Az újonnan létrehozott változónak OnFilterScriptInit vagy OnGameModeInit alatt adjuk értékül a mozgatni kívált objektum azonosítóját.
 
valamicske = CreateObject(objectid, X, Y, Z,  elfX, elfY, elfZ); // itt a csukott állapot koordinátáit adjuk meg

 
Idõzítés:
Most hozzunk létre egy idõzítõt, mely adott idõközönként (ajánlott 500ms) meghív egy saját függvényt, mely ellenõrzi van-e játékos a közelben, és ha van, kinyitja az ajtót vagy a kaput:
 
SetTimer(\"ajtotimer\", 500, true);

 
Egy rövidke függvényecske:
Végül íme maga a \"központi\" függvény, melyet igyekeztem bõségesen felkommentezni:
 
forward ajtotimer(); // prototípus
public ajtotimer(){
    new bool:nyissuk = false; // egy helyi változó
    for(new i; i<MAX_PLAYERS; i++){ // minden játékost ellenõrzünk
        if(!IsPlayerConnected(i)) continue; // ha nincs ilyen játékos, ugrunk a következõre
        if(IsPlayerInRangeOfPoint(i, 7.5, X, Y, Z)){
            nyissuk=true; // ha 7.5 egységen belül van, legyen kinyitva neki - az értékeket itt is helyettesítsük a csukott állapotéval
            break; // ha egy játékos a közelben van, nem nézünk tovább, hanem nyitunk
        }
    }
    if(nyissuk)
        MoveObject(valamicske, nyX, nyY,  nyZ, seb); // ha van játékos a közelben lassan áthelyezzük az objektumot - \"kinyissuk\" - az értékeket itt a nyitott állapotéval helyettesítsük be
    else
        MoveObject(valamicske, X, Y, Z, seb); // ha nincs játékos a közelben, becsukjuk - az értékeket itt is helyettesítsük a csukott állapotéval
}

 
Írta: Y2K (2010. augusztus 12.)
Frissítette: Y2K (2010. augusztus 23.)
« Utoljára szerkesztve: 2011. március 15. - 20:03:42 írta Y2K »

[TUT] Teljesen automata ajtók és kapuk
« Válasz #1 Dátum: 2011. március 15. - 19:50:06 »
+1 Show voters
Szép,DE
 
Idézetet írta: Y2K date=1300213998\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"6850\" data-ipsquote-contentclass=\"forums_Topic

new valamicske

 

Lemaradt a ; jel  :D

Nem elérhető Y2K

  • 488
    • Profil megtekintése
[TUT] Teljesen automata ajtók és kapuk
« Válasz #2 Dátum: 2011. március 15. - 20:03:56 »
0 Show voters
Idézetet írta: ChuckNorris date=1300215006\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"6850\" data-ipsquote-contentclass=\"forums_Topic
Szép,DE
 

 
new valamicske

 

Lemaradt a ; jel  :D
 
[/quote]
Hehe, nézd már meg jobban!

[TUT] Teljesen automata ajtók és kapuk
« Válasz #3 Dátum: 2011. március 15. - 20:21:16 »
0 Show voters
Idézetet írta: Y2K date=1300215836\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"6850\" data-ipsquote-contentclass=\"forums_Topic


Szép,DE
 

 
new valamicske

 

Lemaradt a ; jel  :D
 
[/quote]
Hehe, nézd már meg jobban!
 
[/quote]
Hehe,TEIS
 
« Utoljára szerkesztve: Ma - 20:03:42 írta Y2K »
[/quote]

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal