Jump to content

[REZOLVAT] Cum pot să fac un top?


ClanuButoane
 Share

Recommended Posts

Salutare prieteni.

Cum as putea face un top să zicem 3 dmg la jucatori?

Gen cum e sistemul de "metine" pe samp, iar primii 3 primesc un premiu, iar restul primesc altceva?

Si sa arate si numele lor, eventual..primul x, al doilea y, al treilea z.

Nu am idee cum as putea face, sincer. Multumesc frumos anticipat.

Edited by ClanuButoane
Link to comment
Share on other sites

Acel sistem verifica folosind functia OnPlayerWeaponShot daca tinta este un obiect, apoi verifica daca obiectul e, sa zicem, "MetinObject".

Daca acel obiect a fost lovit, atunci, sa zicem, variabila "MetinDamage[playerid]" creste cu random(5) + 1.

Cand piatra a fost distrusa, verifici prin toti jucatorii care au dat cel mai mult damage.

Respecta si vei fi respectat.

 

BigInt Pawn:

Pacman C++: 

Snake C++:

Minesweeper C++:

 

mattbb.cash

leaks.ro

Link to comment
Share on other sites

Acel sistem verifica folosind functia OnPlayerWeaponShot daca tinta este un obiect, apoi verifica daca obiectul e, sa zicem, "MetinObject".

Daca acel obiect a fost lovit, atunci, sa zicem, variabila "MetinDamage[playerid]" creste cu random(5) + 1.

Cand piatra a fost distrusa, verifici prin toti jucatorii care au dat cel mai mult damage.

O variabila pentru damage am creat si eu, m-am gândit la asta, dar nu stiu cum să fac acea verificare..cu cine a dat mai mult damage, dupa al doilea dupa el, si asa mai departe.. :(

Link to comment
Share on other sites

foreach(Player, i) {

      if(dmg > dmg) {

                 format(string,sizeof(string),"%s a dat cel mai mult damage",GetName(i));

                 SCMTA(COLOR_WHITE,string);

      }

}

 

 

EDIT: sa se inteleaga mai bine

Adaug acum asta si ii fac un mic test apoi. Pentru a afisa si numele/dmg-ul locurilor 2 si 3 ce ar trebui să adaug in plus?

Link to comment
Share on other sites

Practic, trebuie sa creezi inca 3 variabile (care sa nu fie vectori), "top3", "top2", "top1" si verifici:

 

foreach(new x : Player)
{
if(MetinDamage[x] > top3) top3 = x;
else if(MetinDamage[x] > top2) top2 = x;
else if(MetinDamage[x] > top1) top1 = x;
}

Respecta si vei fi respectat.

 

BigInt Pawn:

Pacman C++: 

Snake C++:

Minesweeper C++:

 

mattbb.cash

leaks.ro

Link to comment
Share on other sites

 

Practic, trebuie sa creezi inca 3 variabile (care sa nu fie vectori), "top3", "top2", "top1" si verifici:

 

foreach(new x : Player)
{
if(MetinDamage[x] > top3) top3 = x;
else if(MetinDamage[x] > top2) top2 = x;
else if(MetinDamage[x] > top1) top1 = x;
}

 

 

new locul1,dmgloc1,dmgloc2,locul2,locul3,dmgx[MAX_PLAYERS];

cmd:demegi(playerid, params[]) {
	new string[50];
	foreach(Player,i) {
		if(dmgx[i] > 0) {
			if(dmgx[i] > dmgx[i]) {
				locul1 = i; 
				dmgloc1 = dmgx[i];
			}
			if(dmgx[i] > dmgx[i] && dmgx[i] < dmgloc1) {
				locul2 = i;
				dmgloc2 = dmgx[i];
			}
			if(dmgx[i] > dmgx[i] && dmgx[i] < dmgloc2) {
				locul3 = i;
			}
		}
	}
	format(string, sizeof(string), "Locul 1 - %s", GetName(locul1));
	SCM(playerid,-1,string);
	format(string, sizeof(string), "Locul 2 - %s", GetName(locul2));
	SCM(playerid,-1,string);
	format(string, sizeof(string), "Locul 3 - %s", GetName(locul3));
	SCM(playerid,-1,string);
	return 1;
}

cred ca ar trb sa mearga

 

Incerc imediat si revin cu un raspuns, va multumesc ca aveti bunavointa sa ma ajutati.

Link to comment
Share on other sites

daca nu merge m-am gandit la altceva

la onplayerweaponshot

 

cand obiectul se distruge sau ce vrei sa faci tu, cand se termina eventu de exemplu

foreach(Player, i) {
   if(dmg[i] > dmg[i]) {
       locul1 = i;
       dmg[i] = 0;
   }
   if(dmg[i] > dmg[i]) {
       locul2 = i;
       dmg[i] = 0;
   }
   if(dmg[i] > dmg[i]) {
       locul3 = i;
       dmg[i] = 0;
   }
}

apoi la comanda top ai nevoie doar de GetName(locul1 2 3)

merge 100%

Tot nu merge, apar toate 3 locurile cu numele care intra primul pe server, chiar si dupa ce un alt jucător a făcut dmg mai mare.

Am văzut spre exemplu la video-ul cu sistemul tau. Cel care avea cel mai mult dmg a luat un premiu mai mare, urmatorul a luat mai putin, si tot asa. Si era topul ok.

 

 

Practic, trebuie sa creezi inca 3 variabile (care sa nu fie vectori), "top3", "top2", "top1" si verifici:

 

foreach(new x : Player)
{
if(MetinDamage[x] > top3) top3 = x;
else if(MetinDamage[x] > top2) top2 = x;
else if(MetinDamage[x] > top1) top1 = x;
}

 

Nu prea inteleg ce ai vrut sa spui..

Link to comment
Share on other sites

 

acolo unde se termina eventul pui top1();

function top1() {
	foreach(Player, i) {
		if(dmg[i] > dmg[i]) {
		   locul1 = i;
		   dmg[i] = 0;
		}
	}
	top2();
	return 1;
}

function top2() {
	foreach(Player, i) {
		if(dmg[i] > dmg[i]) {
		   locul2 = i;
		   dmg[i] = 0;
		}
	}
	top3();
}

function top3() {
	foreach(Player, i) {
		if(dmg[i] > dmg[i]) {
		   locul3 = i;
		   dmg[i] = 0;
		}
	}
}

Aceeasi problema..tot nu merge.

Link to comment
Share on other sites

Aceeasi problema..tot nu merge.

In aceste functii ai comparat dmg cu dmg, care (evident) sunt egale. In functia top1, trebuie sa o compari cu variabila locul1, astfel => dmg > locul1, pentru celelalte la fel.

Respecta si vei fi respectat.

 

BigInt Pawn:

Pacman C++: 

Snake C++:

Minesweeper C++:

 

mattbb.cash

leaks.ro

Link to comment
Share on other sites

In aceste functii ai comparat dmg cu dmg, care (evident) sunt egale. In functia top1, trebuie sa o compari cu variabila locul1, astfel => dmg > locul1, pentru celelalte la fel.

M-ai cam bagat in ceata. Am invartit variabilele pe aici de nu mai inteleg nimic..

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...