Forum profesionist despre scenariu de amanet

Învățați să faceți o barieră lină

Bună, uv. utilizatorii portalului! M-am hotărât să vă arăt cum să faceți aceste porți. Deși forumul și a avut +100500 lecții, dar totuși utilizatorii pun o astfel de întrebare. Deci, ceea ce este necesar pentru aceasta:
  1. Cap cu creier.
  2. Mâinile.

La început, adăugăm modulul la toate variabilele globale:

nou
poarta. gateopen # 91; MAX_PLAYERS char # 93 ;;

Poarta variabilei va stoca obiectul în sine.
Variabila gateopen va fi utilizată pentru a evita inundarea cu o comandă.

Apoi, în publicul OnGameModeInit (), adăugați următoarele:

gate = CreateDynamicObject (coordonatele modelului porților închise (X.Y.Z), coordonatele de rotație);

exemplu:
968 - modelul barierului.
1544.684692, -1630.881592, 13.004568 - coordonatele porților închise (XYZ)
0.0000, 90.0000, 90.0000 - coordonatele rotației.

Apoi, alegem cum vrem să deschidem bariera? Comandă sau buton.

CMD. gateopen (param # 91; # 93;)
dacă (! IsPlayerConnected (playerid)) returnează adevărat;
dacă (gateopen == 1) return true;
dacă {(IsPlayerInRangeOfPoint (jucătorul) raza coordonatelor locului (X.Y.Z), unde puteți deschide bariera)) returnați SendClientMessage (playerid - 1. "* Sunteți prea departe!");
gateopen = 1;
MoveDynamicObject (coordonatele poarta de deschidere xyz .0.12 coordonatele de rotație);
SetTimerEx ("@GateClose". 7000. false "D", Playerid);
retur 1;
>

0.12 - aceasta este viteza (netezirea) barierului.
SetTimerEx ("@_ GateClose", 7000. false, "d", playerid); - Timer cu timp, prin care bariera este închisă.
gateopen - Acest lucru nu este de a inunda echipa.

În public OnPlayerKeyStateChange (playerid, newkeys, old keys) lipiți:

dacă (chei noi / * cheie * /)
dacă (IsPlayerInRangeOfPoint (playerid, 15.0, 1544.684692.-1630.881592, 13.004568)))
dacă (gateopen == 0)
gateopen = 1;
MoveDynamicObject (coordonatele poarta deschise xyz .0.12 0.0000 0.0000 .90.0000);
SetTimerEx ("@GateClose". 7000. false "D", Playerid);
>
>
>

Și acum, la sfârșitul modului, adăugăm publicul cu închiderea porții.

@ _GateClose (playerid);
@ _GateClose (playerid)
gateopen = 0;
MoveDynamicObject (coordonatele poarta de închidere xyz, coordonatele de rotație 0.12);
retur 1;
>