Problem mit /park befehl

    • Problem mit /park befehl

      Hallo Community,

      Ich habe ein Problem mit meiem /park Befehl.

      Wenn ich alle Fahrzeuge die in meinen Besitz sind entferne und mir dann ein neues erstelle kann ich es parken, aber wenn ich mir noch eins erstelle sagt er mir

      "You don't have the keys for this vehicle"

      C-Quellcode

      1. ocmd:park(playerid,params[])
      2. {
      3. if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,COLOR_COMMENT,"You're not in any vehicle!");
      4. for(new i=0;i<sizeof(vInfo);i++)
      5. {
      6. if(vInfo[i][id_x] == 0)continue;
      7. if(vInfo[i][besitzer] == sInfo[playerid][p_ID])
      8. {
      9. if(!IsPlayerInVehicle(playerid,vInfo[i][id_x]))return SendClientMessage(playerid,COLOR_HRED,"You don't have the keys for this vehicle"); // hier ist wahrscheinlich der Fehler
      10. new query[200],Float:Pos[4];
      11. GetVehiclePos(vInfo[i][id_x],Pos[0],Pos[1],Pos[2]);
      12. GetVehicleZAngle(vInfo[i][id_x],Pos[3]);
      13. format(query,sizeof(query),"UPDATE autos SET x='%f',y='%f',z='%f',r='%f' WHERE id=%i",Pos[0],Pos[1],Pos[2],Pos[3],vInfo[i][db_id]);
      14. mysql_function_query(dbhandle,query,false,"","");
      15. SendClientMessage(playerid,COLOR_TURKEY,"From now on you'll find your car here");
      16. return 1;
      17. }
      18. }
      19. return 1;
      20. }
      Alles anzeigen


      Mein Befehl zum erstellen eines Fahrzeugs


      C-Quellcode

      1. ocmd:v(playerid,params[])
      2. {
      3. if(!isAdmin(playerid,4))return SendClientMessage(playerid,COLOR_HRED,"You are not authorized to use this command!");
      4. new cID,pID;
      5. new Float:x, Float:y, Float:z, Float:za;
      6. GetPlayerPos(pID,x,y,z);
      7. GetPlayerFacingAngle(pID,za);
      8. if(sscanf(params,"ui",pID,cID)) return SendClientMessage(playerid,COLOR_DGREY,"Use: /v [playerid] [vehicle id]");
      9. if(cID<400||cID>611)return SendClientMessage(playerid,COLOR_YELLOW,"Vehicle ID isn't existing");
      10. createPlayerCar(pID,cID,x,y,z,za);
      11. PutPlayerInVehicle(playerid,cID,0);
      12. SendClientMessage(playerid,COLOR_MESSAGE,"Player vehicle successfully created!");
      13. return 1;
      14. }
      Alles anzeigen
      Hier erstellt er dann das Auto

      C-Quellcode

      1. createPlayerCar(playerid,modelid,Float:x,Float:y,Float:z,Float:r)
      2. {
      3. for(new i=0; i<sizeof(vInfo);i++)
      4. {
      5. if(vInfo[i][id_x]!=0)continue;
      6. vInfo[i][besitzer]=sInfo[playerid][p_ID];
      7. vInfo[i][c_x]=x;
      8. vInfo[i][c_y]=y;
      9. vInfo[i][c_z]=z;
      10. vInfo[i][c_r]=r;
      11. vInfo[i][model]=modelid;
      12. vInfo[i][id_x] = CreateVehicle(modelid,x,y,z,r,-1,-1,-1);
      13. saveCarToDB(playerid,i);
      14. return 1;
      15. }
      16. return 1;
      17. }
      Alles anzeigen

      Ich hoffe ihr könnt mir helfen.

      MfG
    • DU fragst ab ob 'i' dem Spieler gehört und wenn ja soll er überprüfen ob er auch in diesem Fahrzeug sitzt.
      Wenn nicht, dann soll er die Nachricht ausgeben und die Funktion beenden.

      Dadurch prüft er aber immer nur DAS ERSTE Fahrzeug bei dem der Besitzer mit der Spielerid überein stimmt.

      Das verhinderst du indem du die Nachricht einfach nach der For Schleife ausgibst und hinter :" if(!IsPlayerInAnyVehicle(playerid))"

      ein "continue;" statt "return;" einsetzt



      Quellcode

      1. ocmd:park(playerid,params[])
      2. {
      3. if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,COLOR_COMMENT,"You're not in any vehicle!");
      4. for(new i=0;i<sizeof(vInfo);i++)
      5. {
      6. if(vInfo[i][id_x] == 0)continue;
      7. if(vInfo[i][besitzer] == sInfo[playerid][p_ID])
      8. {
      9. if(!IsPlayerInVehicle(playerid,vInfo[i][id_x]))continue;
      10. new query[200],Float:Pos[4];
      11. GetVehiclePos(vInfo[i][id_x],Pos[0],Pos[1],Pos[2]);
      12. GetVehicleZAngle(vInfo[i][id_x],Pos[3]);
      13. format(query,sizeof(query),"UPDATE autos SET x='%f',y='%f',z='%f',r='%f' WHERE id=%i",Pos[0],Pos[1],Pos[2],Pos[3],vInfo[i][db_id]);
      14. mysql_function_query(dbhandle,query,false,"","");
      15. SendClientMessage(playerid,COLOR_TURKEY,"From now on you'll find your car here");
      16. return 1;
      17. }
      18. }
      19. SendClientMessage(playerid,COLOR_HRED,"You don't have the keys for this vehicle");
      20. return 1;
      21. }
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Zim30 ()

    • Folgendes unter "/v" kann schonmal nicht funktionieren: PutPlayerInVehicle(playerid,cID,0);
      Du versuchst den Spieler in ein Fahrzeug zu setzen, die das angegebene Modell als ID hat.

      new cID, pID, vID;
      [...]
      vID = createPlayerCar(pID, cID, x, y, z, za);
      PutPlayerInVehicle(playerid, vID, 0);

      Wobei du deine erstellende Funktion auch ändern musst:

      C-Quellcode

      1. createPlayerCar(playerid,modelid,Float:x,Float:y,Float:z,Float:r)
      2. {
      3. for(new i=0; i<sizeof(vInfo);i++)
      4. {
      5. if(vInfo[i][id_x]!=0)continue;
      6. vInfo[i][besitzer]=sInfo[playerid][p_ID];
      7. vInfo[i][c_x]=x;
      8. vInfo[i][c_y]=y;
      9. vInfo[i][c_z]=z;
      10. vInfo[i][c_r]=r;
      11. vInfo[i][model]=modelid;
      12. vInfo[i][id_x] = CreateVehicle(modelid,x,y,z,r,-1,-1,-1);
      13. saveCarToDB(playerid,i);
      14. return vInfo[i][id_x];
      15. }
      16. return 0; //Hier Fehlermeldung -> alle Arrayblöcke in vInfo belegt
      17. }
      Alles anzeigen
      Ansonsten sehe ich auf den ersten Blick nicht, wieso die Fehlermeldung auftaucht. //Edit: "return", wie es oben beschrieben ist ist falsch. Das hab ich übersehen.
    • Zim30 schrieb:

      DU fragst ab ob 'i' dem Spieler gehört und wenn ja soll er überprüfen ob er auch in diesem Fahrzeug sitzt.
      Wenn nicht, dann soll er die Nachricht ausgeben und die Funktion beenden.

      Dadurch prüft er aber immer nur DAS ERSTE Fahrzeug bei dem der Besitzer mit der Spielerid überein stimmt.

      Das verhinderst du indem du die Nachricht einfach nach der For Schleife ausgibst und hinter :" if(!IsPlayerInAnyVehicle(playerid))"

      ein "continue;" statt "return;" einsetzt



      Quellcode

      1. ocmd:park(playerid,params[])
      2. {
      3. if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,COLOR_COMMENT,"You're not in any vehicle!");
      4. for(new i=0;i<sizeof(vInfo);i++)
      5. {
      6. if(vInfo[i][id_x] == 0)continue;
      7. if(vInfo[i][besitzer] == sInfo[playerid][p_ID])
      8. {
      9. if(!IsPlayerInVehicle(playerid,vInfo[i][id_x]))continue;
      10. new query[200],Float:Pos[4];
      11. GetVehiclePos(vInfo[i][id_x],Pos[0],Pos[1],Pos[2]);
      12. GetVehicleZAngle(vInfo[i][id_x],Pos[3]);
      13. format(query,sizeof(query),"UPDATE autos SET x='%f',y='%f',z='%f',r='%f' WHERE id=%i",Pos[0],Pos[1],Pos[2],Pos[3],vInfo[i][db_id]);
      14. mysql_function_query(dbhandle,query,false,"","");
      15. SendClientMessage(playerid,COLOR_TURKEY,"From now on you'll find your car here");
      16. return 1;
      17. }
      18. }
      19. SendClientMessage(playerid,COLOR_HRED,"You don't have the keys for this vehicle");
      20. return 1;
      21. }
      Alles anzeigen
      Danke es funktioniert jetzt!

      Gibt es hier irgendwo ein Tutorial wie man ein Fraktionsautohaus baut? Ich bin nicht so vertraut mit Filterscripts.

      Habe schon ein Fraktions-System & Fraktions-Fahrzeug-System