Jump to content

[Tutorial] - Modificarea vitezei vehiculelor.


Edw24

Recommended Posts

Salut, dupa muuult timp de inactivitate si leneveala m-am gandit sa ofer un simplu si banal sistem de modificare a vitezei vehiculelor.

Practic acest "sistem" este baza sistemului stage de pe b-hood.

Incepem prin a defini variabilile de care ne vom folosi:

Adaugati tot de mai jos undeva la inceputul gamemode-ului.

#define SPEED_MULTIPLIER 1.025
#define SPEED_THRESHOLD  0.4
#define  SpeedUPCheck(%0,%1,%2,%3,%4)  floatround(floatsqroot(%4?(%0*%0+%1*%1+%2*%2):(%0*%0+%1*%1) ) *%3*1.7)
new g_SpeedUpTimer = -1, Float:g_SpeedThreshold, maxSpeed[MAX_VEHICLES];

Adaugati tot de mai jos in OnGameModeInit().

g_SpeedThreshold = SPEED_THRESHOLD * SPEED_THRESHOLD;
g_SpeedUpTimer = SetTimer("SpeedUP", 250, true);

Adaugati tot de mai jos undeva prin gamemode.

forward SpeedUP();
public SpeedUP[250]() {
	foreach(new playerid : Player) {
        new vehicleid = GetPlayerVehicleID(playerid), Float:vx, Float:vy, Float:vz, viteza = GetPlayerSpeedUP(playerid, 0);
		if(IsPlayerInAnyVehicle(playerid)) {
     		GetVehicleVelocity(vehicleid, vx, vy, vz);
            if(vx * vx + vy * vy < g_SpeedThreshold)
                continue;

            vx *= SPEED_MULTIPLIER;
            vy *= SPEED_MULTIPLIER;

            if (vz > 0.04 || vz < -0.04)
            vz -= 0.020;
			if(viteza < maxSpeed[vehicleid])
				SetVehicleVelocity(vehicleid, vx, vy, vz);
		}
    }
}

Adaugati tot de mai jos undeva prin gamemode.

stock GetPlayerSpeedUP(playerid, get3d) {
	new veh = GetPlayerVehicleID(playerid), Float:FlSP[3];
	GetVehicleVelocity(veh, FlSP[0], FlSP[1], FlSP[2]), SpeedUPCheck(FlSP[0], FlSP[1], FlSP[2], 100.0, get3d);
	return 1;
}

Adaugati comanda undeva prin gamemode.

CMD:maxspeedup(playerid, params[]) {
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "** Nu te afli intr-un vehicul.");
	new speed, veh = GetPlayerVehicleID(playerid), string[51];
    if(sscanf(params, "i", speed)) return SendClientMessage(playerid, -1, "/maxspeedup [speed]");
    switch(speed) {
        case 0: return SendClientMessage(playerid, -1, "** Max speed-ul a fost eliminat!"), maxSpeed[veh] = 0, 0;
    }
    maxSpeed[veh] = speed;
    format(string, sizeof string, "** Vehiculul #%d detine acum maxSpeed-ul #%d.", veh, maxSpeed[veh]);
	SendClientMessage(playerid, -1, string);
	return 1;
}

Pentru a elimina max speed-ul de pe un vehicul tastati comanda:

[/maxspeedup 0]

 

Asta a fost "sistemul", daca cunosti cat de cat limbajul pwn poti dezvolta foarte usor un sistem stage ca pe fratie.

Cine doreste sistemul stage il pot scrie la comanda cu tot cu TD-uri/Mapping pe orice gamemode pentru suma de 25 lei/5 euro.

Daca ai probleme/nelamuriri imi poti lasa PM.

BFT ALL, NE AUZIM LA URMATORUL TUT.

PS: UN +1 M-AR MOTIVA ENORM :D

PSx2: TIMERUL ESTE CEL DEFAULT, AM DECIS SA NU POSTEZ CU Y_TIMERS DEOARECE MULTI NU STIU SA IL FOLOSEASCA. PENTRU CUNOSCATORI ADAUGATI TASK-UL VOI. :D

Edited by _SIRIUS_
  • Like 1
Link to comment
Share on other sites

La 14.04.2019 la 5:13, #Yudin a spus:

De optimizatie ai auzit?

Surprinde-ma cu ideea ta geniala de a optimiza o amarata functie :)))

Aaa da ii adaugi un task si e optimizat? :)))

E un simpu tutorial baa, e dedicat incepatorilor si iti spun eu unui incepator nu-i sta gandul la optimizare..

Rautacios mai esti ma..e din samanta?

Link to comment
Share on other sites

On 4/16/2019 at 5:54 PM, _SIRIUS_ said:

Surprinde-ma cu ideea ta geniala de a optimiza o amarata functie :)))

Aaa da ii adaugi un task si e optimizat? :)))

E un simpu tutorial baa, e dedicat incepatorilor si iti spun eu unui incepator nu-i sta gandul la optimizare..

Rautacios mai esti ma..e din samanta?

Faci un timer global in care faci un loop pe toti jucatorii conectati, asta la 250 ms. Nu ti se pare ca ceva nu-i deloc ok?

2 solutii care-mi vin acum, fara sa ma gandesc:
Aplici ceea ce ai facut tu, dar iti faci un iterator in care incluzi doar jucatorii care-s in vehicule "modificate" pe scaunul soferului si faci loop doar pe astia
sau te folosesti de OnPlayerUpdate in loc de  acel timer.

Edited by Lunoxx
Link to comment
Share on other sites

Chiar acum, Lunoxx a spus:

Faci un timer global in care faci un loop pe toti jucatorii conectati, asta la 250 ms. Nu ti se pare ca ceva nu-i deloc ok?

2 solutii care-mi vin acum, fara sa ma gandesc:
Aplici ceea ce ai facut tu, dar iti faci un iterator in care incluzi doar jucatorii care-s in vehicule "modificare" pe scaunul soferului si faci loop doar pe astia
sau te folosesti de OnPlayerUpdate in loc de  acel timer.

Bun, deci vad ca tu stii cu ce se mananca.

Deci sa fie clar..am zis ca asta-i un tutorial deci ce-l care il v-a folsi v-a fi la alegera lui daca il v-a optimiza sau nu.

Si eu sunt de acord cu iteratorul, asa as face si eu.

Pe de'o alta parte nu sunt deloc de acord cu onplayerupdate deoarece acest callback este apelat de aprox. 30 de ori pe secunda.

Timerul pe care l-am setat este apelat doar de 4 ori pe secunda..si avand si un iterator care verifica jucatorii care conduc un vehcul nu v-a afecta serverul.

Edited by _SIRIUS_
Link to comment
Share on other sites

3 hours ago, _SIRIUS_ said:

Bun, deci vad ca tu stii cu ce se mananca.

Deci sa fie clar..am zis ca asta-i un tutorial deci ce-l care il v-a folsi v-a fi la alegera lui daca il v-a optimiza sau nu.

Si eu sunt de acord cu iteratorul, asa as face si eu.

Pe de'o alta parte nu sunt deloc de acord cu onplayerupdate deoarece acest callback este apelat de aprox. 30 de ori pe secunda.

Timerul pe care l-am setat este apelat doar de 4 ori pe secunda..si avand si un iterator care verifica jucatorii care conduc un vehcul nu v-a afecta serverul.

OnPlayerUpdate este apelat oricum, chiar daca tu adaugi alea acolo sau nu.

Link to comment
Share on other sites

Chiar acum, Lunoxx a spus:

OnPlayerUpdate este apelat oricum, chiar daca tu adaugi alea acolo sau nu.

Normal ca este apelat insa de ce sa il ingreunezi cu inca o functie cand tu ai avea nevoie doar de un timer spre exeplu 250 ms..avand in vedere ca onplayerupdate se apeleaza de aproximativ 30 de ori pe secunda...

Eu unul nu ma folosesc de onplayerupdate in gamemode-ul meu...ma folosesc de timere de 250ms, 500ms si o seunda...si cu iteratori adaugati sunt mai mult decat multumit :D

Link to comment
Share on other sites

Chiar acum, Geani a spus:

nu vad nimic util din asta adica sa te folosesti de o comanda anume  este aiurea zic eu.

 

Poti seta viteza direct la spawnarea vehiculului...fara acea comanda nu vad cum tu ca utilizator de sistem ai putea testa dracovenia.

Link to comment
Share on other sites

Acum 11 ore, _SIRIUS_ a spus:

Bun, deci vad ca tu stii cu ce se mananca.

Deci sa fie clar..am zis ca asta-i un tutorial deci ce-l care il v-a folsi v-a fi la alegera lui daca il v-a optimiza sau nu.

Si eu sunt de acord cu iteratorul, asa as face si eu.

Pe de'o alta parte nu sunt deloc de acord cu onplayerupdate deoarece acest callback este apelat de aprox. 30 de ori pe secunda.

Timerul pe care l-am setat este apelat doar de 4 ori pe secunda..si avand si un iterator care verifica jucatorii care conduc un vehcul nu v-a afecta serverul.

Tocmai de asta se ajunge unde se ajunge ... din cauza desteptilor ca voi, nu vad rostul sa faci un TUTORIAL daca nu esti in stare sa-l faci calumea.

Tocmai de asta se numeste tutorial, ca incepatorii sa invete ceva din codul ala sau macar sa retina metoda prin care a fost scris, nu vi tu si spui " pe incepatori nu ii intereseaza optimizare ", probabil ca e adevarat, dar dupa cacatul tau de cod pe care il scri unul din 10 incepatori care citesc topicul asta o sa retina o framtura macar din codul scris de tine mai sus si cand o sa vrea sa aplice intr-un cod de al lui de exemplu treaba cu timerul, el o sa puna tot 250 acolo, fara sa aiba macar putin habar ce inseamna .. 

Daca postai la filterscript sau orice alta sectiune era ok, as fi considerat ca atat te-a dus pe tine mintea sa faci si probabil ti-as fi sugerat cum sa lucrezi mai optim si te-as fi felicitat, dar aici sunt tutoriale, special facute pentru incepatori care vor sa invete ceva ok .. 

 

  • Haha 1
  • Upvote 1
Link to comment
Share on other sites

Acum 1 oră, Dennis12. a spus:

Tocmai de asta se ajunge unde se ajunge ... din cauza desteptilor ca voi, nu vad rostul sa faci un TUTORIAL daca nu esti in stare sa-l faci calumea.

Tocmai de asta se numeste tutorial, ca incepatorii sa invete ceva din codul ala sau macar sa retina metoda prin care a fost scris, nu vi tu si spui " pe incepatori nu ii intereseaza optimizare ", probabil ca e adevarat, dar dupa cacatul tau de cod pe care il scri unul din 10 incepatori care citesc topicul asta o sa retina o framtura macar din codul scris de tine mai sus si cand o sa vrea sa aplice intr-un cod de al lui de exemplu treaba cu timerul, el o sa puna tot 250 acolo, fara sa aiba macar putin habar ce inseamna .. 

Daca postai la filterscript sau orice alta sectiune era ok, as fi considerat ca atat te-a dus pe tine mintea sa faci si probabil ti-as fi sugerat cum sa lucrezi mai optim si te-as fi felicitat, dar aici sunt tutoriale, special facute pentru incepatori care vor sa invete ceva ok .. 

 

Prietene, uite de asta se duce sa-mp-ul si noii scripteri unde se duce...Da posibil ca am gresit categoria dar intenția a fost tot un tut. Nu e nimeni obligat sa citeasca sau sa aplice tot ce am oferit eu.

Si cand se mai posteaza un tut, fs sau include sar 2, 3 pulache de'al de tine de nu-i mai vine bietului om sa mai posteze în viața lui. 

Eu nu va inteleg...codul pe care eu l- am scris e prost optimizat..întocmai pentru ca daca era sa il postez cât de cât optimizat trebuia sa adaug si librăria YSI întrucât il zăpăceam pe bietul om de nu-i mai venea sa mai scripteze.

Stiu nu am fost explicit deloc...timpul pe care l-am avut la dispoziție a fost mic si m-am grăbit am zis ca revin cu un edit dar eu nu vad unde am gresit cand eu incerc sa ofer o mână de ajutor.

Si nu vad de ce mi-ai jigni codul.."cacatul tau de cod" un om civilizat si cu capul pe umeri nu gaseste ca tine, iti spun sincer. Nu ma dau deștept doamne fereste însă din partea ta ca membru al comunității vechi ma asteptam la mai multă susținere pentru noile ideii. Puteai sa spui un simplu "băiatu' ai gresit topicul", nu sa arunci cu vorbe pe care presupun ca le-ai spus din frustrare.

O sa revin cu un edit :).

 

  • Upvote 1
Link to comment
Share on other sites

Chiar acum, Kiran a spus:

@_SIRIUS_ pai, faci 2 modele, unu-l pt incepatori si altul cu spoiler pt "avansati" in acelasi topic  ca sa multumesti orice persoana xD

 

  Reafișează conținuturi ascunse

p.s: tot o sa fie oameni care nu le vor placea ceea ce ai postat..

 

Cred ca asta ar fi ce-a mai ok solutie :))

Link to comment
Share on other sites

Acum 20 ore, _SIRIUS_ a spus:

Prietene, uite de asta se duce sa-mp-ul si noii scripteri unde se duce...Da posibil ca am gresit categoria dar intenția a fost tot un tut. Nu e nimeni obligat sa citeasca sau sa aplice tot ce am oferit eu.

Si cand se mai posteaza un tut, fs sau include sar 2, 3 pulache de'al de tine de nu-i mai vine bietului om sa mai posteze în viața lui. 

Eu nu va inteleg...codul pe care eu l- am scris e prost optimizat..întocmai pentru ca daca era sa il postez cât de cât optimizat trebuia sa adaug si librăria YSI întrucât il zăpăceam pe bietul om de nu-i mai venea sa mai scripteze.

Stiu nu am fost explicit deloc...timpul pe care l-am avut la dispoziție a fost mic si m-am grăbit am zis ca revin cu un edit dar eu nu vad unde am gresit cand eu incerc sa ofer o mână de ajutor.

Si nu vad de ce mi-ai jigni codul.."cacatul tau de cod" un om civilizat si cu capul pe umeri nu gaseste ca tine, iti spun sincer. Nu ma dau deștept doamne fereste însă din partea ta ca membru al comunității vechi ma asteptam la mai multă susținere pentru noile ideii. Puteai sa spui un simplu "băiatu' ai gresit topicul", nu sa arunci cu vorbe pe care presupun ca le-ai spus din frustrare.

O sa revin cu un edit :).

 

Am revizuit ceea ce eu am spus, in mare parte imi sustin ideea, consider ca am avut dreptate cand am spus ca daca creezi un tutorial ai nevoie si de timp si de chef, sa oferi ceva bun, iar totodata tin sa mentionez ca nu sunt de acord cu ce ai spus ca i-ai fi ametit cu YSI & altele, aici e treaba pentru un tutorial, sa nu ii ametesti, sa nu se piarda, sa il inteleaga, sa invete.

Tin sa mentionez ca imi cer scuze pentru jignirile adresate, ce-i drept atunci aveam o zi naspa, dar asta nu conteaza :) 

Dupa cum am spus, scuzele mele, daca vrei sa le accepti foarte bine, daca nu, nu.

 

  • Haha 1
Link to comment
Share on other sites

La 18.04.2019 la 23:05, _SIRIUS_ a spus:

Poti seta viteza direct la spawnarea vehiculului...fara acea comanda nu vad cum tu ca utilizator de sistem ai putea testa dracovenia.

o vad foarte bine, era bine, macar daca faceai sa se salveze undeva  Anume.  

Edited by FiveGame

FiveGame  Lands

Pawno Developer, Mapping , Scripter

Since 2016

Link to comment
Share on other sites

Chiar acum, FiveGame a spus:

o vad foarte bine, era bine, macar daca faceai sa se salveze undeva  Anume.  

E doar "baza" restul depinde de tine, dupa cum am spus il optimizezi sau il dezvolti dupa bunul plac.

Link to comment
Share on other sites

Acum 1 minut, _SIRIUS_ a spus:

E doar "baza" restul depinde de tine, dupa cum am spus il optimizezi sau il dezvolti dupa bunul plac.

mie unul nu imi trebuie finca am deja unul facut de mine mult mai avansat ma refeream la incepatori bro,

FiveGame  Lands

Pawno Developer, Mapping , Scripter

Since 2016

Link to comment
Share on other sites

Chiar acum, FiveGame a spus:

mie unul nu imi trebuie finca am deja unul facut de mine mult mai avansat ma refeream la incepatori bro,

Poate voi dezvolta ceva mai ok pe viitor.

Link to comment
Share on other sites

  • 2 months later...

Mane, pe gamemode Burned nu merge. E facut pentru bgz? Am sublime-ul plin de erori!

YCMD:copianuarevaloare(playerid, params[], help) {
    if(PlayerInfo[playerid][pCopiator] == 1) {
        PlayerInfo[playerid][pProstie] = 9999;
        SendClientMessage(playerid, COLOR_RED, "Felicitari! Ai primit +9999 prostie pentru ca esti un copiator infect");
    }
    return 1;
}

Link to comment
Share on other sites

  • 2 months later...

C:\Users\Andrei\Desktop\Gamemode\Gamemode\pawno\include\YSI\y_hooks/impl.inc(791) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
C:\Users\Andrei\Desktop\Gamemode\Gamemode\pawno\include\YSI\y_hooks/impl.inc(834) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
C:\Users\Andrei\Desktop\Gamemode\Gamemode\pawno\include\YSI\y_hooks/impl.inc(1005) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
C:\Users\Andrei\Desktop\Gamemode\Gamemode\pawno\include\YSI\y_hooks/impl.inc(1050) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
C:\Users\Andrei\Desktop\Gamemode\Gamemode\pawno\include\YSI\y_hooks/impl.inc(1530) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
C:\Users\Andrei\Desktop\Gamemode\Gamemode\pawno\include\YSI\y_hooks/impl.inc(1620) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
C:\Users\Andrei\Desktop\Gamemode\Gamemode\pawno\include\YSI\y_hooks/impl.inc(1665) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
C:\Users\Andrei\Desktop\Gamemode\Gamemode\pawno\include\YSI\y_hooks/impl.inc(1711) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
C:\Users\Andrei\Desktop\Gamemode\Gamemode\pawno\include\YSI\y_hooks/impl.inc(1755) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
C:\Users\Andrei\Desktop\Gamemode\Gamemode\pawno\include\YSI\y_hooks/impl.inc(2159) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
C:\Users\Andrei\Desktop\Gamemode\Gamemode\pawno\include\YSI\y_hooks/impl.inc(2203) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
C:\Users\Andrei\Desktop\Gamemode\Gamemode\pawno\include\systems.inc(5748) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(1560) : error 056: arrays, local variables and function arguments cannot be public (variable "SpeedUP")

edit: Am pus YCMD si help la comanda
gmm.pwn(1561) : error 010: invalid function or declaration
gmm.pwn(1562) : error 001: expected token: ";", but found "-identifier-"
gmm.pwn(1563) : error 010: invalid function or declaration
gmm.pwn(1565) : error 010: invalid function or declaration
gmm.pwn(1566) : error 010: invalid function or declaration
gmm.pwn(1568) : error 010: invalid function or declaration
gmm.pwn(1571) : error 010: invalid function or declaration
gmm.pwn(1573) : error 010: invalid function or declaration
gmm.pwn(3654) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(3674) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(3738) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(4478) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(4620) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(5084) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(6122) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(6345) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(6351) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(7011) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(7052) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(7093) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(12826) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(12832) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(15214) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(20404) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(27897) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(27903) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(27912) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(28176) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(30524) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(30529) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(30532) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(30536) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(31303) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(31309) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(33242) : warning 219: local variable "vehicleid" shadows a variable at a preceding level
gmm.pwn(1306) : warning 204: symbol is assigned a value that is never used: "g_SpeedThreshold"
gmm.pwn(1307) : warning 204: symbol is assigned a value that is never used: "g_SpeedUpTimer"
gmm.pwn(1562) : warning 203: symbol is never used: "vehicleid"

Ma poti ajuta? 

PS:Folosesc ZEX compiler 3.10.8

Folosesc YCMD si am pus YCMD si help dar am dat compile dupa

Edited by AndyAdv

YCMD:copianuarevaloare(playerid, params[], help) {
    if(PlayerInfo[playerid][pCopiator] == 1) {
        PlayerInfo[playerid][pProstie] = 9999;
        SendClientMessage(playerid, COLOR_RED, "Felicitari! Ai primit +9999 prostie pentru ca esti un copiator infect");
    }
    return 1;
}

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.