Pomoc


Započeo Fr0z3n, Septembar 17, 2020, 22:27:01 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Problem(error/warning): Pravim sistem za dm event, i sad radi na principu counta u areni napravio sam za 3 i 1 mesto ali nez kako da napravim za 2 mesto...
Deo skripte:
if(IsInDMEvent[playerid])
    {
    	dmcount--;
    	dmevenat[playerid] = false;
		IsInDMEvent[playerid] = false;
    	if(dmcount == 2)
        {
            SendClientMessageToAll(-1, "DM EVENT 3 MESTO je neki lik");
            SendClientMessage(playerid, -1, "{F81414}[DM Event] {FFAF00} Svaka Cast! Dobio si 3 mesto na eventu!");
            //GetPlayerHealth(pid, winner_health);
            //KillTimer(EventTimerce);
            Joey_SetPlayerPos( playerid, PlayerPos[ playerid ][ 0 ], PlayerPos[ playerid ][ 1 ],  PlayerPos[ playerid ][ 2 ] );
			SetPlayerVirtualWorld( playerid, PlayerPosVW[ playerid ] );
			SetPlayerInterior( playerid, PlayerPosInt[ playerid ] );
			ResetPlayerWeapons(playerid);
        }
        if(dmcount == 1)
        {
            SendClientMessageToAll(-1, "DM EVENT dmcount je 1 MESTO %s"ImeIgraca(playerid));
            SendClientMessage(pid, -1, "{F81414}[DM Event] {FFAF00} Svaka Cast! Dobio si 1/2 mesto na eventu!");
            //GetPlayerHealth(pid, winner_health);
            KillTimer(EventTimerce);
            Joey_SetPlayerPos( playerid, PlayerPos[ playerid ][ 0 ], PlayerPos[ playerid ][ 1 ],  PlayerPos[ playerid ][ 2 ] );
			SetPlayerVirtualWorld( playerid, PlayerPosVW[ playerid ] );
			SetPlayerInterior( playerid, PlayerPosInt[ playerid ] );
			ResetPlayerWeapons(playerid);
            break;
        }
        Joey_SetPlayerPos( playerid, PlayerPos[ playerid ][ 0 ], PlayerPos[ playerid ][ 1 ],  PlayerPos[ playerid ][ 2 ] );
		SetPlayerVirtualWorld( playerid, PlayerPosVW[ playerid ] );
		SetPlayerInterior( playerid, PlayerPosInt[ playerid ] );
		ResetPlayerWeapons(playerid);
		InfoMessage(playerid, "[DM Event]Umrli ste, vise srece drugi put.");
	}

error 075: input line too long (after substitutions)
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): ///

if(dmcount == 3) {

	//Trece mesto
}

//Mada ti je malo pametnije koristiti switch

switch(dmcount) {

	case 3: {
		//Trece mesto
	}
	case 2: {
		//Drugo
	}
	case 1: {
		//Prvo
	}
}


Ne radi kako sam zamisljao posto dmcount racuna koliko igraca ima na eventu sto znaci da ako ima 3 igraca da svi dobijaju nagradu, a ja hocu da racuna prva 3 mesta... Kako moze to da se odradi?

Ako radis event, napravis neki brojac koji ce se povecati kada igrac udje, znaci, da default vrednost bude 0

new count = 0;


Kada si je napravio, kada igrac udje u event stavis da se poveca za jedan :

count++;


Kada igrac izadje iz eventa, stavis da proveri kolika je vrednost count varijable, kao sto je prikazano gore u mom kodu

I to je to, u svakoj proveri samo smanji count varijablu za jedan ( count--; ) i smanjis je ako provera ne prodje :)

Joy

*

Ukoliko ti je to pod OnPlayerDeath i ukoliko idemo tvojom logikom bilo bi:
if(dmcount == 2)
//playerid je trece mjesto


if(dmcount == 1)
//playerid je drugo mjesto
//killerid je prvo mjesto


Ukoliko to opozivaš negdje drugdje, npr. kod komande za napuštanje eventa, ili kod disconnecta, tada bi vjerovatno pod if(dmcount == 1) morao odraditi loop za poslednjeg igrača kome je IsInDMEvent[playerid] == true i taj bi bio prvo mjesto.

Pa napravio sam timer da proverava svake sekunde koliko ima igraca i probao sam ovako da napravim ali nece kad ostane 3 igraca sva 3 igraca dobijaju 3 nagradu...

forward DmEventManager();
public DmEventManager()
{
	foreach(new playerid : Player)
	{
        if(IsInDMEvent[playerid]) {
        	new nagrada;
	        switch(dmcount) {

				case 3: {
					nagrada = random( 75 ) + 400; 
		            Joey_SetPlayerPos( playerid, PlayerPos[ playerid ][ 0 ], PlayerPos[ playerid ][ 1 ],  PlayerPos[ playerid ][ 2 ] );
					SetPlayerVirtualWorld( playerid, PlayerPosVW[ playerid ] );
					SetPlayerInterior( playerid, PlayerPosInt[ playerid ] );
					ResetPlayerWeapons(playerid);
					va_SendClientMessageToAll(-1, ""col_blue"| DM EVENT | "col_white"%s | Pozicija: 3 | Nagrada: $%d |",ImeIgraca(playerid), nagrada);
					DajIgracuNovac(playerid, nagrada);
					IsInDMEvent[playerid] = false;
				}
				case 2: {
					nagrada = random( 75 ) + 1500; 
		            Joey_SetPlayerPos( playerid, PlayerPos[ playerid ][ 0 ], PlayerPos[ playerid ][ 1 ],  PlayerPos[ playerid ][ 2 ] );
					SetPlayerVirtualWorld( playerid, PlayerPosVW[ playerid ] );
					SetPlayerInterior( playerid, PlayerPosInt[ playerid ] );
					ResetPlayerWeapons(playerid);
					va_SendClientMessageToAll(-1, ""col_blue"| DM EVENT | "col_white"%s | Pozicija: 2 | Nagrada: $%d |",ImeIgraca(playerid), nagrada);
					DajIgracuNovac(playerid, nagrada);
					IsInDMEvent[playerid] = false;
					InfoMessage(playerid, "Event zavrsen.");
				}
				case 1: {
					nagrada = random( 75 ) + 2500; 
		            Joey_SetPlayerPos( playerid, PlayerPos[ playerid ][ 0 ], PlayerPos[ playerid ][ 1 ],  PlayerPos[ playerid ][ 2 ] );
					SetPlayerVirtualWorld( playerid, PlayerPosVW[ playerid ] );
					SetPlayerInterior( playerid, PlayerPosInt[ playerid ] );
					Joey_KillTimer(EventTimerce);
					ResetPlayerWeapons(playerid);
					va_SendClientMessageToAll(-1, ""col_blue"| DM EVENT | "col_white"%s | Pozicija: 1 | Nagrada: $%d |",ImeIgraca(playerid), nagrada);
					DajIgracuNovac(playerid, nagrada);
					IsInDMEvent[playerid] = false;
					InfoMessage(playerid, "Event zavrsen.");
				}
			}
		}
    }
    return 1;
}

Joy

*

Citat: Fr0z3n poslato Septembar 19, 2020, 20:10:24 POSLE PODNE
Pa napravio sam timer da proverava svake sekunde koliko ima igraca i probao sam ovako da napravim ali nece kad ostane 3 igraca sva 3 igraca dobijaju 3 nagradu...

forward DmEventManager();
public DmEventManager()
{
	foreach(new playerid : Player)
	{
        if(IsInDMEvent[playerid]) {
        	new nagrada;
	        switch(dmcount) {

				case 3: {
					nagrada = random( 75 ) + 400; 
		            Joey_SetPlayerPos( playerid, PlayerPos[ playerid ][ 0 ], PlayerPos[ playerid ][ 1 ],  PlayerPos[ playerid ][ 2 ] );
					SetPlayerVirtualWorld( playerid, PlayerPosVW[ playerid ] );
					SetPlayerInterior( playerid, PlayerPosInt[ playerid ] );
					ResetPlayerWeapons(playerid);
					va_SendClientMessageToAll(-1, ""col_blue"| DM EVENT | "col_white"%s | Pozicija: 3 | Nagrada: $%d |",ImeIgraca(playerid), nagrada);
					DajIgracuNovac(playerid, nagrada);
					IsInDMEvent[playerid] = false;
				}
				case 2: {
					nagrada = random( 75 ) + 1500; 
		            Joey_SetPlayerPos( playerid, PlayerPos[ playerid ][ 0 ], PlayerPos[ playerid ][ 1 ],  PlayerPos[ playerid ][ 2 ] );
					SetPlayerVirtualWorld( playerid, PlayerPosVW[ playerid ] );
					SetPlayerInterior( playerid, PlayerPosInt[ playerid ] );
					ResetPlayerWeapons(playerid);
					va_SendClientMessageToAll(-1, ""col_blue"| DM EVENT | "col_white"%s | Pozicija: 2 | Nagrada: $%d |",ImeIgraca(playerid), nagrada);
					DajIgracuNovac(playerid, nagrada);
					IsInDMEvent[playerid] = false;
					InfoMessage(playerid, "Event zavrsen.");
				}
				case 1: {
					nagrada = random( 75 ) + 2500; 
		            Joey_SetPlayerPos( playerid, PlayerPos[ playerid ][ 0 ], PlayerPos[ playerid ][ 1 ],  PlayerPos[ playerid ][ 2 ] );
					SetPlayerVirtualWorld( playerid, PlayerPosVW[ playerid ] );
					SetPlayerInterior( playerid, PlayerPosInt[ playerid ] );
					Joey_KillTimer(EventTimerce);
					ResetPlayerWeapons(playerid);
					va_SendClientMessageToAll(-1, ""col_blue"| DM EVENT | "col_white"%s | Pozicija: 1 | Nagrada: $%d |",ImeIgraca(playerid), nagrada);
					DajIgracuNovac(playerid, nagrada);
					IsInDMEvent[playerid] = false;
					InfoMessage(playerid, "Event zavrsen.");
				}
			}
		}
    }
    return 1;
}


Dobiju svi nagrade zato što ti loop prođe za sve igrače kroz case 3. Ali zašto da se opterećuješ timerom svake sekunde kada su ti za DM event bitne samo 3 situacije:
-OnPlayerDeath (kada igrač umre)
-OnPlayerDisconnect (kada se igrač diskonektuje)
-Komanda za napustanje eventa (ako kojim slucajem igrac odluci da napusti event)

Probaj ovako nekako da staviš pod OnPlayerDeath, OnPlayerDisconect i pod komandom za napuštanje eventa. Uredi kako ti već odgovara ovo za nagrade i chat, a za vraćanje na poziciju prije eventa bi trebalo pri spawnu da ga vratiš pošto je valjda predviđeno da se na DM eventu umre.

if(IsInDMEvent[playerid])
    {
        dmcount--;
    	dmevenat[playerid] = false;
		IsInDMEvent[playerid] = false;
    	if(dmcount == 2)
        {
            SendClientMessageToAll(-1, "DM EVENT 3 MESTO %s",ImeIgraca(playerid));//tece mesto
            SendClientMessage(playerid, -1, "{F81414}[DM Event] {FFAF00} Svaka Cast! Dobio si 3 mesto na eventu!");
            ResetPlayerWeapons(playerid);
        }
        else if(dmcount == 1)
        {
            SendClientMessageToAll(-1, "DM EVENT 2 MESTO %s",ImeIgraca(playerid));//drugo mesto
            SendClientMessage(playerid, -1, "{F81414}[DM Event] {FFAF00} Svaka Cast! Dobio si 2 mesto na eventu!");
            ResetPlayerWeapons(playerid);

            foreach(new lastplayer : Player)//utvrdjujes ko je poslednji ostao na eventu
	        {
	            if(IsInDMEvent[lastplayer] == true)
	            {
	                dmevenat[lastplayer] = false;
		            IsInDMEvent[lastplayer] = false;
                    SendClientMessageToAll(-1, "DM EVENT 1 MESTO %s",ImeIgraca(lastplayer));//prvo mesto
                    SendClientMessage(lastplayer, -1, "{F81414}[DM Event] {FFAF00} Svaka Cast! Dobio si 1 mesto na eventu!");
                    ResetPlayerWeapons(lastplayer);
                    break;
                }
            }


        }
	}