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:[pawn]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.");
}[/pawn]
error 075: input line too long (after substitutions)
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): ///
[pawn]if(dmcount == 3) {
//Trece mesto
}
//Mada ti je malo pametnije koristiti switch
switch(dmcount) {
case 3: {
//Trece mesto
}
case 2: {
//Drugo
}
case 1: {
//Prvo
}
}[/pawn]
Pomogao ti je VO1D
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
[pawn]new count = 0;[/pawn]
Kada si je napravio, kada igrac udje u event stavis da se poveca za jedan :
[pawn]count++;[/pawn]
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 :)
Ukoliko ti je to pod OnPlayerDeath i ukoliko idemo tvojom logikom bilo bi:
[pawn]if(dmcount == 2)
//playerid je trece mjesto[/pawn]
[pawn]if(dmcount == 1)
//playerid je drugo mjesto
//killerid je prvo mjesto[/pawn]
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...
[pawn]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;
}[/pawn]
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...
[pawn]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;
}[/pawn]
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.
[pawn]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;
}
}
}
}[/pawn]
Lock Neaktivnost