[INCLUDE] Unique Random Number

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Ja oke, dass ist ja so machbar aber ich möchte auch bei anderen Sachen eine Zahl generieren. Bei einem anderen Autohaus und Zulassungsstelle.

      Wie mache ich das so das ich mehrere Sachen einbauen kann also das ich StartGenerateUniqueRandomNumber(playerid, handle, NUMBER_PLATE_POOL, 0); öfters
      benutzen kann.

      irgendwie geht das nicht.

      Quellcode

      1. if(dialogid == DIALOG_AUTOHAUS5) //ZULASSUNG JA LASTSCHRIFT
      2. {
      3. if(response)
      4. {
      5. new vid = GetPlayerVehicleID(playerid);
      6. for(new i = 0; i < sizeof(Autohausauto1); i++)
      7. {
      8. if(IsPlayerInVehicle(playerid, Autohausauto1[i]))
      9. {
      10. if(vid == Autohausauto1[i])
      11. {
      12. if(pInfo[playerid][pBankgeld] < Autohausauto1_preis[i])
      13. {
      14. RemovePlayerFromVehicle(playerid);
      15. new string[100];
      16. format(string, sizeof(string), "{bc4343}Du brauchst $%s auf deinem Konto damit du dir den %s kaufen kannst.",sMoney(Autohausauto1_preis[i]),Autohausauto1_name[i]);
      17. SendClientMessage(playerid,-1,string);
      18. }
      19. else
      20. {
      21. RemovePlayerFromVehicle(playerid);
      22. for(new d = 0; d < sizeof(PCar[]); d++)
      23. {
      24. //Prüfe, ob Fahrzeug existiert. Wenn nicht, nutze den Slot und lege das Fahrzeug an.
      25. SetPVarInt(playerid,"_tmp_veh",d);
      26. StartGenerateUniqueRandomNumber(playerid, handle, NUMBER_PLATE_POOL, 0);
      27. }
      28. }
      29. }
      30. }
      31. }
      32. }
      33. else
      34. {
      35. RemovePlayerFromVehicle(playerid);
      36. }
      37. return 1;
      38. }
      Alles anzeigen


      Quellcode

      1. ublic OnRandomNumberGenerated(playerid, const pool, const token, const status)
      2. {
      3. if(status == -1) return printf("![!]! Der Random Pool (%d), ist leer ![!]!",pool);
      4. switch(pool)
      5. {
      6. case NUMBER_PLATE_POOL:
      7. {
      8. switch(token)
      9. {
      10. case 0:
      11. {
      12. ApplyNumberPlate(playerid, status);
      13. }
      14. }
      15. }
      16. }
      17. return 1;
      18. }
      19. stock ApplyNumberPlate(playerid, number) //number ist die eindeutig zufällige Zahl
      20. {
      21. for(new i = 0; i < sizeof(Autohausauto1); i++)
      22. {
      23. new d = GetPVarInt(playerid,"_tmp_veh"), SP = random(sizeof(SAHSpawn)), FB = random(127);
      24. DeletePVar(playerid, "_tmp_veh");
      25. PCar[playerid][d][P_KZ] = number;
      26. PCar[playerid][d][P_uID] = pInfo[playerid][db_id];
      27. PCar[playerid][d][P_X] = SAHSpawn[SP][0];
      28. PCar[playerid][d][P_Y] = SAHSpawn[SP][1];
      29. PCar[playerid][d][P_Z] = SAHSpawn[SP][2];
      30. PCar[playerid][d][P_R] = SAHSpawn[SP][3];
      31. PCar[playerid][d][P_C1] = FB;
      32. PCar[playerid][d][P_C2] = FB;
      33. PCar[playerid][d][P_MID] = GetVehicleModel(Autohausauto1[i]);
      34. PCar[playerid][d][P_dbID] = pInfo[playerid][db_id];
      35. PCar[playerid][d][P_VID] = CreateVehicle(PCar[playerid][d][P_MID],PCar[playerid][d][P_X] , PCar[playerid][d][P_Y], PCar[playerid][d][P_Z], PCar[playerid][d][P_R], PCar[playerid][d][P_C1], PCar[playerid][d][P_C2], -1);
      36. new query[256];
      37. mysql_format(handle, query, sizeof(query), "INSERT INTO personalcars (P_X, P_Y, P_Z, P_R, P_C1, P_C2, P_MID, P_uID) VALUES ('%f','%f','%f','%f','%d','%d','%d','%d')",PCar[playerid][d][P_X],PCar[playerid][d][P_Y],PCar[playerid][d][P_Z],PCar[playerid][d][P_R],PCar[playerid][d][P_C1],PCar[playerid][d][P_C2],PCar[playerid][d][P_MID],PCar[playerid][d][P_uID]);
      38. mysql_pquery(handle,query);
      39. }
      40. }
      Alles anzeigen

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von BrightLeaN ()

    • BrightLeaN schrieb:

      öfters
      benutzen kann.
      Das habe ich doch auch erklärt, du änderst einfach den Token:

      PAWN-Quellcode

      1. StartGenerateUniqueRandomNumber(playerid, handle, NUMBER_PLATE_POOL, 1);


      und dann kannst du im Callback:

      C-Quellcode

      1. //Im Callback OnRandomNumberGenerated
      2. public OnRandomNumberGenerated(playerid, const pool, const token, const status)
      3. {
      4. if(status == -1) return printf("Der Random Pool (%d), ist leer!",pool);
      5. switch(pool)
      6. {
      7. case SMALL_EXAMPLE_POOL:
      8. {
      9. switch(token)
      10. {
      11. case 0: ApplyNumberPlate(playerid, status);
      12. case 1: AnotherFunction(playerid, status); //<< wird dann nur aufgerufen bei token 1
      13. }
      14. }
      15. }
      16. return 1;
      17. }
      Alles anzeigen
      //Edit:


      BrightLeaN schrieb:

      irgendwie geht das nicht.
      Was machst du da auch?! Wieso änderst du den Code?
      Warum löschst du einfach ein break und die if-Abfrage in der Schleife?!
      Wieso packst du in die andere Funktion eine Schleife mit i die vorher gar nicht da war?!?!
      Nutze dort einfach: GetPlayerVehicleID(playerid) anstatt Autohausauto1[i], du hast ja schon vorher gecheckt, ob er da wirklich drinnen sitzt.

      So kann das natürlich nicht funktionieren...wenn da keine Code-Logik dahinter steht..

      Nimm doch einfach den Code, wie ich ihn geschrieben hatte...


      Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
    • Kaliber schrieb:

      Das habe ich doch auch erklärt, du änderst einfach den Token:
      Verstanden.

      Guck mal in der Zeile 6. da ist auch die Schleife und ich brauche diese ansonsten geht das nicht. (Der Code den ich vorher geschickt habe)
      Und hier in Zeile 15. brauch ich das, hier fragt er ab welches Fahrzeug von den Austellungsfahrzeugen man kaufen will.
      ich kann den Code nicht benutzen den du geschrieben hast weil i nicht definiert ist, deswegen die Schleife.
      das break; habe ich aus Versehen mit gelöscht.

      also die Schleife war auch schon vorher da beim Originalen :D

      PAWN-Quellcode

      1. stock ApplyNumberPlate(playerid, number) //number ist die eindeutig zufällige Zahl
      2. {
      3. for(new i = 0; i < sizeof(Autohausauto1); i++)
      4. {
      5. new d = GetPVarInt(playerid,"_tmp_veh"), SP = random(sizeof(SAHSpawn)), FB = random(127);
      6. DeletePVar(playerid, "_tmp_veh");
      7. PCar[playerid][d][P_KZ] = number;
      8. PCar[playerid][d][P_uID] = pInfo[playerid][db_id];
      9. PCar[playerid][d][P_X] = SAHSpawn[SP][0];
      10. PCar[playerid][d][P_Y] = SAHSpawn[SP][1];
      11. PCar[playerid][d][P_Z] = SAHSpawn[SP][2];
      12. PCar[playerid][d][P_R] = SAHSpawn[SP][3];
      13. PCar[playerid][d][P_C1] = FB;
      14. PCar[playerid][d][P_C2] = FB;
      15. PCar[playerid][d][P_MID] = GetVehicleModel(Autohausauto1[i]);
      16. PCar[playerid][d][P_dbID] = pInfo[playerid][db_id];
      17. PCar[playerid][d][P_VID] = CreateVehicle(PCar[playerid][d][P_MID],PCar[playerid][d][P_X] , PCar[playerid][d][P_Y], PCar[playerid][d][P_Z], PCar[playerid][d][P_R], PCar[playerid][d][P_C1], PCar[playerid][d][P_C2], -1);
      18. new query[256];
      19. mysql_format(handle, query, sizeof(query), "INSERT INTO personalcars (P_X, P_Y, P_Z, P_R, P_C1, P_C2, P_MID, P_uID) VALUES ('%f','%f','%f','%f','%d','%d','%d','%d')",PCar[playerid][d][P_X],PCar[playerid][d][P_Y],PCar[playerid][d][P_Z],PCar[playerid][d][P_R],PCar[playerid][d][P_C1],PCar[playerid][d][P_C2],PCar[playerid][d][P_MID],PCar[playerid][d][P_uID]);
      20. mysql_pquery(handle,query);
      21. }
      22. }
      Alles anzeigen
    • BrightLeaN schrieb:

      ich kann den Code nicht benutzen den du geschrieben hast weil i nicht definiert ist, deswegen die Schleife.
      Lösche die Schleife!


      Kaliber schrieb:

      Nutze dort einfach: GetPlayerVehicleID(playerid) anstatt Autohausauto1, du hast ja schon vorher gecheckt, ob er da wirklich drinnen sitzt.


      Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
    • Auto wird nicht gespawnt. Randomzahl auch nicht generiert soweit kommt es nicht.

      PAWN-Quellcode

      1. stock ApplyNumberPlate(playerid, number) //number ist die eindeutig zufällige Zahl
      2. {
      3. new d = GetPVarInt(playerid,"_tmp_veh"), SP = random(sizeof(SAHSpawn)), FB = random(127);
      4. DeletePVar(playerid, "_tmp_veh");
      5. PCar[playerid][d][P_KZ] = number;
      6. PCar[playerid][d][P_uID] = pInfo[playerid][db_id];
      7. PCar[playerid][d][P_X] = SAHSpawn[SP][0];
      8. PCar[playerid][d][P_Y] = SAHSpawn[SP][1];
      9. PCar[playerid][d][P_Z] = SAHSpawn[SP][2];
      10. PCar[playerid][d][P_R] = SAHSpawn[SP][3];
      11. PCar[playerid][d][P_C1] = FB;
      12. PCar[playerid][d][P_C2] = FB;
      13. PCar[playerid][d][P_MID] = GetPlayerVehicleID(playerid);
      14. PCar[playerid][d][P_dbID] = pInfo[playerid][db_id];
      15. PCar[playerid][d][P_VID] = CreateVehicle(PCar[playerid][d][P_MID],PCar[playerid][d][P_X] , PCar[playerid][d][P_Y], PCar[playerid][d][P_Z], PCar[playerid][d][P_R], PCar[playerid][d][P_C1], PCar[playerid][d][P_C2], -1);
      16. new query[256];
      17. mysql_format(handle, query, sizeof(query), "INSERT INTO personalcars (P_X, P_Y, P_Z, P_R, P_C1, P_C2, P_MID, P_uID) VALUES ('%f','%f','%f','%f','%d','%d','%d','%d')",PCar[playerid][d][P_X],PCar[playerid][d][P_Y],PCar[playerid][d][P_Z],PCar[playerid][d][P_R],PCar[playerid][d][P_C1],PCar[playerid][d][P_C2],PCar[playerid][d][P_MID],PCar[playerid][d][P_uID]);
      18. mysql_pquery(handle,query);
      19. }
      Alles anzeigen

      PAWN-Quellcode

      1. for(new d = 0; d < sizeof(PCar[]); d++)
      2. {
      3. //Prüfe, ob Fahrzeug existiert. Wenn nicht, nutze den Slot und lege das Fahrzeug an.
      4. SetPVarInt(playerid,"_tmp_veh",d);
      5. StartGenerateUniqueRandomNumber(playerid, handle, NUMBER_PLATE_POOL, 0);
      6. break;
      7. }
    • Kaliber schrieb:

      for(new d; d < sizeof(PCar[]); d++)
      {
      if(PCar[playerid][d][P_MID] == 0)
      {
      //Prüfe, ob Fahrzeug existiert. Wenn nicht, nutze den Slot und lege das Fahrzeug an.
      SetPVarInt(playerid,"_tmp_veh",d);
      StartGenerateUniqueRandomNumber(playerid, handle, NUMBER_PLATE_POOL, 0);
      break;
      }
      }
      Schau mal..so sieht meine Code aus..

      ...siehst du den Unterschied?

      Bei dir ist keine if-Abfrage..nur ein break..was keinen Sinn macht...

      //Edit:
      Und sag mal willst du mich hier trollen oder so?! :D


      BrightLeaN schrieb:

      PCar[playerid][d][P_MID] = GetPlayerVehicleID(playerid);
      Ich sagte, du sollst es ersetzen..und nicht das GetVehicleModel drum herum löschen...


      Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
    • Kaliber schrieb:

      Und sag mal willst du mich hier trollen oder so?!
      Nein :D :D

      Hab alles hinbekommen danke dir und ich hab nicht getrollt :D
      Ist das nicht ein "Sicherheit" Fehler. Man kann sich doch bestimmt mit Sobeit oder anderen Vorteilsprogrammen in einen anderen Fahrzeug teleportieren
      GetVehicleModel(GetPlayerVehicleID(playerid)); dann wird ja das Model dort eingetragen (und ja ich weiß vorher wurde ja schon abgefragt)

      Kann man das theoretisch machen?
    • Neu

      Unabhängig davon ob Jemand die SQLite Variante nutzt, sind da paar Memory leaks. (Z. 82, Z.90, Z. 100).
      Wenn die INSERT-Statements ein Problem sind was die Laufzeit betrifft, dann würde ich mir mal Transactions ansehen ( Transaction, Begin, Commit, Autocommit mal als Keywords.)
    • Neu

      Goldkiller schrieb:

      sind da paar Memory leaks. (Z. 82, Z.90, Z. 100).
      Z. 82 = Create Table
      Z.90 = Insert
      Z.100 = Offensichtlich Leer

      Soweit ich das mal gelesen hatte, muss man da nichts clearen, weil da eh nichts existiert.


      Goldkiller schrieb:

      Wenn die INSERT-Statements ein Problem sind was die Laufzeit betrifft, dann würde ich mir mal Transactions ansehen
      Ja, das gar keine schlechte Idee, schau ich mal, ob das die Performance verbessert, danke :)


      Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/