Szerző Téma: Kétszer ugyan az  (Megtekintve 879 alkalommal)

Kétszer ugyan az
« Dátum: 2019. Augusztus 04. - 23:08:10 »
0
Kétszer ugyan az
Helló. Van egy alap pilóta munkám. A gond az, hogy a random checkpoint néha egymás után 2-szer (vagy többször) ugyan az. Valaki tudna ebben segíteni, hogy kétszer ne adja be egymás után ugyan azt?
 

new Float:pilotapontok[3][3] =
{
  {1563.1752,-2441.3403,13.5547},
  {-1286.2291,80.2801,14.1484},
  {1363.4385,1586.5054,10.8203}
};
public OnPlayerEnterCheckpoint(playerid)
{
    if(gTeam[playerid] == Pilota)
    {
    new randpilot = random(sizeof(pilotapontok));
    if(PilotJob[playerid] == 1){
    PilotJob[playerid] = 2;
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot][0],pilotapontok[randpilot][1],pilotapontok[randpilot][2],5.0);
    return 1;
    }
    if(PilotJob[playerid] == 2){
    PilotJob[playerid] = 3;
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot][0],pilotapontok[randpilot][1],pilotapontok[randpilot][2],5.0);
    return 1;
    }
    if(PilotJob[playerid] == 3){
    PilotJob[playerid] = 4;
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot][0],pilotapontok[randpilot][1],pilotapontok[randpilot][2],5.0);
    return 1;
    }
    if(PilotJob[playerid] == 4){
    new randpenza = RandomEx(9000, 20000);
    DisablePlayerCheckpoint(playerid);
    Penzad(playerid, randpenza);
    PilotJob[playerid] = 0;
    new string[128];
    format(string,sizeof(string),\"Ennyit kerestél: {FFFFFF}%s $\",randpenza);
    SendClientMessage(playerid, -1, string);
    GetPlayerName(playerid,Nev,sizeof(Nev));
    format(string,sizeof(string),\"%s Befejezte a munkáját\",Nev);
    SendClientMessageToAll(-1 , string);
    }
    }
    return 1;
}
 
stock RandomEx(min, max)
{
    new rand = random(max-min)+min;
    return rand;
}
CMD:pilotamunka(playerid, params[])
    {
    if(gTeam[playerid] == Pilota)
    {
    new randpilot = random(sizeof(pilotapontok));
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vehicleid) == 511 || GetVehicleModel(vehicleid) == 487 || GetVehicleModel(vehicleid) == 519 || GetVehicleModel(vehicleid) == 593)
    {
    PilotJob[playerid] = 1;
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot][0],pilotapontok[randpilot][1],pilotapontok[randpilot][2],5.0);
    }
    else
    {
    SendClientMessage(playerid, -1, \"Repülőben kell lenned!\");
    }
    }
    }
    return 1;
    }

 

 

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Kétszer ugyan az
« Válasz #1 Dátum: 2019. Augusztus 05. - 01:26:11 »
+1
tárold el mi volt az utolsó ID az adott játékosnál és ha mégegyszer ugyanazt kapja, akkor újra generálod (de mivel túl kevés a lehetőség, ezért lehet jobb lenne a következő CP-re ugrani)
 
 
 

if(gTeam[playerid] == Pilota)
    {
    new randpilot = random(sizeof(pilotapontok));
    if(PilotJob[playerid] == 1){
    PilotJob[playerid] = 2;
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot][0],pilotapontok[randpilot][1],pilotapontok[randpilot][2],5.0);
    return 1;
    }
    if(PilotJob[playerid] == 2){
    PilotJob[playerid] = 3;
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot][0],pilotapontok[randpilot][1],pilotapontok[randpilot][2],5.0);
    return 1;
    }
    if(PilotJob[playerid] == 3){
    PilotJob[playerid] = 4;
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot][0],pilotapontok[randpilot][1],pilotapontok[randpilot][2],5.0);
    return 1;
    }
    if(PilotJob[playerid] == 4){

 
ez felesleges kódokat tartalmaz ha megnézed az 1 2 3 kb ismétlés, elég lenne egy feltétel erre
 
így növelni az értéket:
 

PilotJob[playerid]++;

 
és a végére egy else if vagy else ág a 4-esre
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Kétszer ugyan az
« Válasz #2 Dátum: 2019. Augusztus 05. - 03:22:52 »
0
Köszi. Csináltam egy ilyen megoldást. De mi van, ha utolsó az ID?
 

new randert[MAX_PLAYERS];
CMD:pilotamunka(playerid, params[])
    {
    if(gTeam[playerid] == Pilota)
    {
    new randpilot = random(sizeof(pilotapontok));
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    randert[playerid] = randpilot;
    if(GetVehicleModel(vehicleid) == 511 || GetVehicleModel(vehicleid) == 487 || GetVehicleModel(vehicleid) == 519 || GetVehicleModel(vehicleid) == 593)
    {
    PilotJob[playerid] = 1;
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot][0],pilotapontok[randpilot][1],pilotapontok[randpilot][2],5.0);
    }
    else
    {
    SendClientMessage(playerid, -1, \"{FFCC33}A megfelelõ repülõben kell lenned!\");
    }
    }
    }
    return 1;
    }
public OnPlayerEnterCheckpoint(playerid)
{
    if(gTeam[playerid] == Kamionos)
    {
    kamicheckpointenter(playerid);
    }
    if(gTeam[playerid] == Pilota)
    {
    new randpilot = random(sizeof(pilotapontok));
    if(PilotJob[playerid] == 1){
    PilotJob[playerid] = 2;
    
    if(randert[playerid] != randpilot)
    {
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot][0],pilotapontok[randpilot][1],pilotapontok[randpilot][2],5.0);
    }
    if(randert[playerid] == randpilot)
    {
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot+1][0],pilotapontok[randpilot+1][1],pilotapontok[randpilot+1][2],5.0);
    }
    return 1;
    }
    .
    .
    .

 
 
« Utoljára szerkesztve: 2019. Augusztus 05. - 03:45:16 írta RicSiy123 »

Kétszer ugyan az
« Válasz #3 Dátum: 2019. Augusztus 05. - 03:45:42 »
0
Megoldottam... Tudom, ócska megoldás. Lesz majd jobb is. Köszönöm a segítséget :D     
 
 
 
if(randert[playerid] != randpilot)
    {
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot][0],pilotapontok[randpilot][1],pilotapontok[randpilot][2],5.0);
    }
    if(randert[playerid] == randpilot)
    {
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot+1][0],pilotapontok[randpilot+1][1],pilotapontok[randpilot+1][2],5.0);
    }
    if(randert[playerid] == 3)
    {
    new fun;
    fun = random(2);
    switch(fun)
    {
    case 0:
    {
    SetPlayerCheckpoint(playerid,pilotapontok[0][0],pilotapontok[0][1],pilotapontok[0][2],5.0);
    }
    case 1:
    {
    SetPlayerCheckpoint(playerid,pilotapontok[1][0],pilotapontok[1][1],pilotapontok[1][2],5.0);
    }
« Utoljára szerkesztve: 2019. Augusztus 05. - 03:45:53 írta RicSiy123 »

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Kétszer ugyan az
« Válasz #4 Dátum: 2019. Augusztus 05. - 09:09:50 »
+2

   if(randert[playerid] != randpilot)
    {
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot][0],pilotapontok[randpilot][1],pilotapontok[randpilot][2],5.0);
    }
    if(randert[playerid] == randpilot)
    {
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot+1][0],pilotapontok[randpilot+1][1],pilotapontok[randpilot+1][2],5.0);
    }

 
helyett:
 

   if(randert[playerid] == randpilot)
    {
        randpilot++; // Növeli 1-el az értékét
    }
    SetPlayerCheckpoint(playerid,pilotapontok[randpilot][0],pilotapontok[randpilot][1],pilotapontok[randpilot][2],5.0);

 
 
 
 
 
Ide viszont nem kell case!
 

   case 0:
    {
    SetPlayerCheckpoint(playerid,pilotapontok[0][0],pilotapontok[0][1],pilotapontok[0][2],5.0);
    }
    case 1:
    {
    SetPlayerCheckpoint(playerid,pilotapontok[1][0],pilotapontok[1][1],pilotapontok[1][2],5.0);
    }

 
a változót behelyettesíted:
 

SetPlayerCheckpoint(playerid,pilotapontok[fun][0],pilotapontok[fun][1],pilotapontok[fun][2],5.0);

 
 
 
A wikis linkeket amiket küldtem korábban átnézhetnék, esetleg magyar anyagot kereshetnél, hogy megtanuld mi hogyan működik :)
 
akkor még szebb és jobb kódokat tudnál írni
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Kétszer ugyan az
« Válasz #5 Dátum: 2019. Augusztus 05. - 10:20:50 »
0
Köszönöm, hogy mindig időt szánsz rám :D
« Utoljára szerkesztve: 2019. Augusztus 05. - 10:24:09 írta RicSiy123 »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal