Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: Fr0z3n poslato Septembar 17, 2020, 22:27:01 POSLE PODNE

Naslov: Pomoc
Poruka od: Fr0z3n poslato Septembar 17, 2020, 22:27:01 POSLE PODNE
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): ///
Naslov: Odg: Pomoc
Poruka od: V01D poslato Septembar 18, 2020, 14:42:15 POSLE PODNE
[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]
Naslov: Odg: Pomoc
Poruka od: Supe-rAdmi-n99 poslato Septembar 18, 2020, 16:48:02 POSLE PODNE
Pomogao ti je VO1D
Naslov: Odg: Pomoc
Poruka od: Fr0z3n poslato Septembar 19, 2020, 13:00:48 POSLE PODNE
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?
Naslov: Odg: Pomoc
Poruka od: V01D poslato Septembar 19, 2020, 17:28:08 POSLE PODNE
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 :)
Naslov: Odg: Pomoc
Poruka od: Joy poslato Septembar 19, 2020, 17:35:07 POSLE PODNE
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.
Naslov: Odg: Pomoc
Poruka od: 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]
Naslov: Odg: Pomoc
Poruka od: Joy poslato Septembar 19, 2020, 21:19:15 POSLE PODNE
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]
Naslov: Odg: Pomoc
Poruka od: V01D poslato Septembar 22, 2020, 22:32:12 POSLE PODNE
Lock Neaktivnost