Oko posla

Započeo .ysi, April 23, 2022, 14:34:15 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 3 gostiju pregledaju ovu temu.

Problem(error/warning): Kako da napravim kosaca trave na kojem se trave spavnaju jedna po jedna i  kad igrac predje preko trave sa kosilicom da se ta trava obrise i da se druga kreira i sve tako....?
Deo skripte: [pawn]//[/pawn]
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): [pawn]//[/pawn]
Slika/video ingame problema(obavezno ako je ingame problem): //
Poslednja Izmena: Maj 01, 2022, 22:57:09 POSLE PODNE od Deleted User
e

Citat: .ysi poslato April 23, 2022, 14:34:15 POSLE PODNE
Problem(error/warning): Kako da napravim kosaca trave na kojem se trave spavnaju jedna po jedna i  kad igrac predje preko trave sa kosilicom da se ta trava obrise i da se druga kreira i sve tako....?
Deo skripte: [pawn]//[/pawn]
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): [pawn]//[/pawn]
Slika/video ingame problema(obavezno ako je ingame problem): //
malo staro, ali ipak posluzit ce ti
https://balkan-samp.com/forum/index.php?topic=87673.0
BIGDOG ENTERTAINMENT


Citat: .ysi poslato April 23, 2022, 16:52:12 POSLE PODNE
preko ovog sam tutoriala pokusao nesto napraviti al ne ide...
Pošalji nam tvoj kod kako si hteo da napraviš pa ćemo onda i moći da pomognemo. :)
• Website: www.vasic.dev
Web Development & Cyber Security

Citat: Vasic poslato April 23, 2022, 17:15:46 POSLE PODNE
Pošalji nam tvoj kod kako si hteo da napraviš pa ćemo onda i moći da pomognemo. :)
evo sad cu:


ovo se nalazi u komandi

[pawn]
if(!KosenjeVozila(GetPlayerVehicleID(playerid))) return SCM(playerid, -1, ""Sgaa"[sdaP] "BELA"Niste u kosilici!");
   TravaTimer[playerid] = SetTimerEx("TimerTrava", 500, true, "i", playerid);
   KosenjeTrave[playerid] = 1;
   Grass[0][playerid] = CreateDynamicObject(817, 1560.958007, -2155.465820, 12.857999, 0.000000, 0.000000, 0.000000, object_world, object_int, -1, 300.00, 300.00);
   SendClientMessage(playerid, -1, ""col_job"(PfsO): {FFFFFF}Poceli ste sa kosenjem trave.");
[/pawn]

evo timer:

[pawn]
forward TimerTrava(playerid);
public TimerTrava(playerid)
{
   new Float:Pos[3];
   new pokoseno = 0;
   for(new i = 0; i < sizeof(Grass); i++)
   {
      GetDynamicObjectPos(Grass[playerid], Pos[0], Pos[1], Pos[2]);
      if(IsPlayerInRangeOfPoint(playerid, 3.0, Pos[0], Pos[1], Pos[2]) && KosenjeVozila(GetPlayerVehicleID(playerid)))
      {
         DestroyDynamicObject(Grass[playerid]);
         Grass[playerid] = 999;
      }
      if(Grass[playerid] == 999)
      {
         pokoseno++;
         Grass[1][playerid] = CreateDynamicObject(817, 1561.155273, -2162.319091, 12.857999, 0.000000, 0.000000, 0.000000, object_world, object_int, -1, 300.00, 300.00); //ovdje sam stao
      }
   }
   if(pokoseno == 21)
   {
      SendClientMessage(playerid, -1, "uspjesno");
      KosenjeTrave[playerid] = 0;
      KillTimer(TravaTimer[playerid]);
      GivePlayerMoney(playerid, 123);
   }
}
[/pawn]
Poslednja Izmena: April 23, 2022, 18:19:14 POSLE PODNE od .ysi
e

Tajmer ti se poziva svakih 0.5 sekundi i to se ponavlja, a na vrhu funkcije koju pozivas u tajmeru se nalazi varijabla "pokoseno" i dodeljena joj je vrednost 0, sto znaci da se varijabla resetuje na nulu svaki put kada se funkcija pozove - sto dovodi do zakljucka da se uslov koji proverava da li je "pokoseno" jednako 21 nikada nece ispuniti.
Poslednja Izmena: April 23, 2022, 19:20:32 POSLE PODNE od Vasic
• Website: www.vasic.dev
Web Development & Cyber Security

Citat: Vasic poslato April 23, 2022, 19:18:01 POSLE PODNE
Tajmer ti se poziva svakih 0.5 sekundi i to se ponavlja, a na vrhu funkcije koju pozivas u tajmeru se nalazi varijabla "pokoseno" i dodeljena joj je vrednost 0, sto znaci da se varijabla resetuje na nulu svaki put kada se funkcija pozove - sto dovodi do zakljucka da se uslov koji proverava da li je "pokoseno" jednako 21 nikada nece ispuniti.
oke ispravit cu to ali kako da stavim da mi se objekti trave kreiraju jedan po jedan ( kada predjem kosilicom preko jednog objekta da se kreira drugi i tako sve do kraja ) ?
e

Uradio sam što jednostavnije da bi skontao, testiraj ovo pošto ja nisam.

[pawn]new
   MowingStatus[MAX_PLAYERS],
   Grass[3][MAX_PLAYERS], // Proširi array za Grass koliko želiš da ti bude
   MowingTimer[MAX_PLAYERS];

cmd:mowing(playerid, params[])
{
   if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 572) return SendClientMessage(playerid, -1, "Morate biti u kosilici.");
   MowingStatus[playerid] = 1;
   Grass[0][playerid] = CreateDynamicObject(817, 1561.155273, -2162.319091, 12.857999, 0.00000, 0.00000, 0.00000, -1, -1, playerid);
   MowingTimer[playerid] = SetTimerEx("Mowing", 500, true, "i", playerid);
   SendClientMessage(playerid, "Poceli ste sa kosenjem trave, predjite preko prvog objekta trave.");
   return 1;
}
forward Mowing(playerid);
public Mowing(playerid)
{
   new Float:Pos[3];
   switch(MowingStatus[playerid])
   {
      case 1:
      {
         GetDynamicObjectPos(Grass[0][playerid], Pos[0], Pos[1], Pos[2]);
         if(IsPlayerInRangeOfPoint(playerid, 3.0, Pos[0], Pos[1], Pos[2])
         {
            DestroyDynamicObject(Grass[0][playerid]);
            Grass[1][playerid] = CreateDynamicObject(817, X, Y, Z, 0.00000, 0.00000, 0.00000, -1, -1, playerid);      
            MowingStatus[playerid] = 2;
         }
      }
      case 2:
      {
         GetDynamicObjectPos(Grass[1][playerid], Pos[0], Pos[1], Pos[2]);
         if(IsPlayerInRangeOfPoint(playerid, 3.0, Pos[0], Pos[1], Pos[2])
         {
            DestroyDynamicObject(Grass[1][playerid]);
            Grass[2][playerid] = CreateDynamicObject(817, X, Y, Z, 0.00000, 0.00000, 0.00000, -1, -1, playerid);      
            MowingStatus[playerid] = 3;
         }
      }
      case 3:
      {
         GetDynamicObjectPos(Grass[2][playerid], Pos[0], Pos[1], Pos[2]);
         if(IsPlayerInRangeOfPoint(playerid, 3.0, Pos[0], Pos[1], Pos[2])
         {
            KillTimer(MowingTimer[playerid]);
            DestroyDynamicObject(Grass[2][playerid]);      
            MowingStatus[playerid] = 0;
            GivePlayerMoney(playerid, 500);
            SendClientMessage(playerid, "Pokosili ste travu i dobili 500$.");
         }
      }
   }
   return 1;
}[/pawn]

Ovo bi mogao još više da pojednostaviš, ali probaj ovako za početak. :)
• Website: www.vasic.dev
Web Development & Cyber Security

Kreiras niz sa koordinatama i varijablu koja ce storati igracev objekat, kao i varijablu koja ce cuvati zadnju poziciju. Kada zapocne kosenje, resetiras varijable, podesis vrijednost niza varijable na 0, kreiras i prikazes objekat, i kreiras 1 funkciju koja se poziva kada dodje igrac na objekat, u kojoj brises stari, povecavas varijablu koja pokazuje na niz i ujedno vadis sa njom naredne koordinate gdje ces spawnati travu. Kada varijabla dosegne visinu niza (koordinata), posao je zavrsen.

Citat: Vasic poslato April 23, 2022, 21:17:58 POSLE PODNE
Uradio sam što jednostavnije da bi skontao, testiraj ovo pošto ja nisam.

[pawn]new
   MowingStatus[MAX_PLAYERS],
   Grass[3][MAX_PLAYERS], // Proširi array za Grass koliko želiš da ti bude
   MowingTimer[MAX_PLAYERS];

cmd:mowing(playerid, params[])
{
   if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 572) return SendClientMessage(playerid, -1, "Morate biti u kosilici.");
   MowingStatus[playerid] = 1;
   Grass[0][playerid] = CreateDynamicObject(817, 1561.155273, -2162.319091, 12.857999, 0.00000, 0.00000, 0.00000, -1, -1, playerid);
   MowingTimer[playerid] = SetTimerEx("Mowing", 500, true, "i", playerid);
   SendClientMessage(playerid, "Poceli ste sa kosenjem trave, predjite preko prvog objekta trave.");
   return 1;
}
forward Mowing(playerid);
public Mowing(playerid)
{
   new Float:Pos[3];
   switch(MowingStatus[playerid])
   {
      case 1:
      {
         GetDynamicObjectPos(Grass[0][playerid], Pos[0], Pos[1], Pos[2]);
         if(IsPlayerInRangeOfPoint(playerid, 3.0, Pos[0], Pos[1], Pos[2])
         {
            DestroyDynamicObject(Grass[0][playerid]);
            Grass[1][playerid] = CreateDynamicObject(817, X, Y, Z, 0.00000, 0.00000, 0.00000, -1, -1, playerid);      
            MowingStatus[playerid] = 2;
         }
      }
      case 2:
      {
         GetDynamicObjectPos(Grass[1][playerid], Pos[0], Pos[1], Pos[2]);
         if(IsPlayerInRangeOfPoint(playerid, 3.0, Pos[0], Pos[1], Pos[2])
         {
            DestroyDynamicObject(Grass[1][playerid]);
            Grass[2][playerid] = CreateDynamicObject(817, X, Y, Z, 0.00000, 0.00000, 0.00000, -1, -1, playerid);      
            MowingStatus[playerid] = 3;
         }
      }
      case 3:
      {
         GetDynamicObjectPos(Grass[2][playerid], Pos[0], Pos[1], Pos[2]);
         if(IsPlayerInRangeOfPoint(playerid, 3.0, Pos[0], Pos[1], Pos[2])
         {
            KillTimer(MowingTimer[playerid]);
            DestroyDynamicObject(Grass[2][playerid]);      
            MowingStatus[playerid] = 0;
            GivePlayerMoney(playerid, 500);
            SendClientMessage(playerid, "Pokosili ste travu i dobili 500$.");
         }
      }
   }
   return 1;
}[/pawn]

Ovo bi mogao još više da pojednostaviš, ali probaj ovako za početak. :)
hvala radi
e