PDA

View Full Version : [Tutorial] Utilizarea inteligentă a Streame



SiNiSTER
07-08-16, 07:23
Acesta este primul meu tutorial vreodată! Am fost de scripting pentru acest joc pentru un timp și mă simt că e timpul să împartă o parte din lucrurile pe care le-am învățat în călătoria mea.

Primul lucru pe care aș vrea să vorbesc despre avantajele (ascunse) ale plugin-gute Incognito lui.

În cazul în care nu ați auzit despre gutei înainte de: streamer Incognito este un plug-in care fluxurile de tot felul de proprietăți. Este mai rapid decât SA: MP gute nativ. Puteți citi detaliile din firul lor!

Să vorbim mai întâi zone.

1. Zonele

O zonă este o proprietate 2D sau 3D, un jucător poate interacționa cu. forma sa cea mai simplă este definită după cum urmează:

Cod:
Noul iAreaID = CreateDynamicRectangle (0,0, 0,0, 10,0, 10,0);
Acum am stocat ID-ul zonei care a fost creat cu CreateDynamicRectangle în variabila iAreaID. Ori de câte ori un jucător intră sau de ieșire această zonă, una dintre următoarele variante este declanșat:

Cod:
OnPlayerEnterDynamicArea (playerid, areaid); // Când un jucător intră într-o zonă.
OnPlayerLeaveDynamicArea (playerid, areaid); // Atunci când un jucător iese o zonă.
Deci, acest lucru înseamnă că putem face ceva cu player-ul atunci când intră într-o zonă!
Să presupunem că doriți să faceți un sistem de casa:
- Exterior Casa 1 a coordona Teleport vă la casa de coordonare a interiorului 1 a lui.
- Exterior Casa 2 a coordona Teleport vă coordona Casa de interior 2 a lui.
- Etc.

Hai să schițeze o situație în care utilizarea gutei poate fi foarte benefic.
Un sistem de casa conține 2000 proprietăți diferite de casa. Fiecare are un exterior casa si un interior puteți călători de la și la cu / enterhouse și / comanda exithouse. Ceea ce văd eu, de obicei, în gamemodes este următoarea (în ZCMD):

Cod:
#define MAX_HOUSES 2000

enum {HInfo

Float: HouseExteriorX,
Float: HouseExteriorY,
Float: HouseExteriorZ,
Float: HouseInteriorX,
Float: HouseInteriorY,
Float: HouseInteriorZ
}
Noua Casa [MAX_HOUSES] [HInfo];

CMD: enterhouse (playerid, params []) {

pentru (nou h; h <MAX_HOUSES; h ++) {

în cazul în care (IsPlayerInRangeOfPoint (playerid, 2,0, Casa [h] [HouseExteriorX], Casa [h] [HouseExteriorY], Casa [h] [HouseExteriorZ])) {// controale mondiale virtuale sunt lăsate afară.

SetPlayerPos (playerid, Casa [h] [HouseInteriorX], Casa [h] [HouseInteriorY], Casa [h] [HouseInteriorZ]);
// Etc
}
}
retur 1;
}

CMD: exithouse (playerid, params []) {

pentru (nou h; h <MAX_HOUSES; h ++) {

în cazul în care (IsPlayerInRangeOfPoint (playerid, 2,0, Casa [h] [HouseInteriorX], Casa [h] [HouseInteriorY], Casa [h] [HouseInteriorZ])) {// controale mondiale virtuale sunt lăsate afară.

SetPlayerPos (playerid, Casa [h] [HouseExteriorX], Casa [h] [HouseExteriorY], Casa [h] [HouseExteriorZ]);