Angepinnt [SAMMELTHREAD] Kleine Scripting Fragen

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

Es gibt Neuigkeiten! Ab sofort könnt ihr dem Donators Club auf Lebenszeit beitreten.
Weitere Infos im Thema Donator's Club ab heute wieder verfügbar!

  • Neu

    Spoiler anzeigen

    Quellcode

    1. stock CreatePlayerVehicle(playerid, vehmodel, Float:posx, Float:posy, Float:posz, Float:posa, preis, neon, color1, color2)
    2. {
    3. new mainQuery[1537], secondQuery[256];
    4. for(new slot=0;slot<MAX_PLAYER_VEHICLES;slot++)
    5. {
    6. if(PrivateVehicle[playerid][slot][CarModel] == 0)
    7. {
    8. if(!PlayerHaveCar[playerid][slot])
    9. {
    10. format(PrivateVehicle[playerid][slot][vehBesitzer], 24, "%s", GetName(playerid));
    11. PrivateVehicle[playerid][slot][CarModel] = vehmodel;
    12. PrivateVehicle[playerid][slot][vehPosX] = posx;
    13. PrivateVehicle[playerid][slot][vehPosY] = posy;
    14. PrivateVehicle[playerid][slot][vehPosZ] = posz;
    15. PrivateVehicle[playerid][slot][vehPosA] = posa;
    16. PrivateVehicle[playerid][slot][vehInterior] = GetPlayerInterior(playerid);
    17. PrivateVehicle[playerid][slot][vehWorld] = GetPlayerVirtualWorld(playerid);
    18. PrivateVehicle[playerid][slot][vehColor1] = color1;
    19. PrivateVehicle[playerid][slot][vehColor2] = color2;
    20. PrivateVehicle[playerid][slot][vehPaintjob] = -1;
    21. PrivateVehicle[playerid][slot][vehSpoiler] = 0;
    22. PrivateVehicle[playerid][slot][vehHood] = 0;
    23. PrivateVehicle[playerid][slot][vehRoof] = 0;
    24. PrivateVehicle[playerid][slot][vehSideskirt] = 0;
    25. PrivateVehicle[playerid][slot][vehLamps] = 0;
    26. PrivateVehicle[playerid][slot][vehNitro] = 0;
    27. PrivateVehicle[playerid][slot][vehExhaust] = 0;
    28. PrivateVehicle[playerid][slot][vehWheels] = 0;
    29. PrivateVehicle[playerid][slot][vehStereo] = 0;
    30. PrivateVehicle[playerid][slot][vehHydraulics] = 0;
    31. PrivateVehicle[playerid][slot][vehFrontBumper] = 0;
    32. PrivateVehicle[playerid][slot][vehRearBumper] = 0;
    33. PrivateVehicle[playerid][slot][vehVentRight] = 0;
    34. PrivateVehicle[playerid][slot][vehVentLeft] = 0;
    35. PrivateVehicle[playerid][slot][vehPreis] = preis;
    36. PrivateVehicle[playerid][slot][vehNeonID] = neon;
    37. PrivateVehicle[playerid][slot][vehKMStand] = 0;
    38. PrivateVehicle[playerid][slot][vehState] = e_Vehicle_Status_Normal;
    39. PrivateVehicle[playerid][slot][vehTUV] = 0;
    40. PlayerHaveCar[playerid][slot] = 1;
    41. PrivateVehicle[playerid][slot][vehID] = INVALID_VEHICLE_ID;
    42. if( PrivateVehicle[playerid][slot][vehState] == e_Vehicle_Status_Destroyed ) {
    43. printf("Das Fahrzeug von %s konnte nicht erstellt werden. Grund: Zerstört",GetName(playerid));
    44. return false;
    45. }
    46. format(PrivateVehicle[playerid][slot][vehNumberPlate], 64, KEIN_KENNZEICHEN);
    47. PrivateVehicle[playerid][slot][vehID] = CreateVehicle(PrivateVehicle[playerid][slot][CarModel], PrivateVehicle[playerid][slot][vehPosX], PrivateVehicle[playerid][slot][vehPosY], PrivateVehicle[playerid][slot][vehPosZ], PrivateVehicle[playerid][slot][vehPosA], PrivateVehicle[playerid][slot][vehColor1], PrivateVehicle[playerid][slot][vehColor2], -1);
    48. aiVehicles[PrivateVehicle[playerid][slot][vehID]] = VEH_PRIVAT;
    49. if(!strcmp(PrivateVehicle[playerid][slot][vehNumberPlate], KEIN_KENNZEICHEN)) {
    50. SetVehicleNumberPlate(PrivateVehicle[playerid][slot][vehID], "." );
    51. }
    52. else {
    53. SetVehicleNumberPlate(PrivateVehicle[playerid][slot][vehID], PrivateVehicle[playerid][slot][vehNumberPlate]);
    54. }
    55. g_VehicleDistance[PrivateVehicle[playerid][slot][vehID]] = PrivateVehicle[playerid][slot][vehKMStand];
    56. LockCar(PrivateVehicle[playerid][slot][vehID]);
    57. strdel(mainQuery, 0, sizeof(mainQuery));
    58. strcat(mainQuery, "INSERT INTO `server_vehicles` (`vehBesitzer`, `slot`, `modelid`, `vehPosX`, `vehPosY`, `vehPosZ`, `vehPosA`, `vehColor1`, `vehColor2`, ");
    59. strcat(mainQuery, "`vehPaintjob`, `vehSpoiler`, `vehHood`, `vehRoof`, `vehSideskirt`, `vehLamps`, `vehNitro`, `vehExhaust`, `vehWheels`, `vehStereo`, `vehHydraulics`, ");
    60. strcat(mainQuery, "`vehFrontBumper`, `vehRearBumper`, `vehVentRight`, `vehVentLeft`, `vehPreis`, `vehNeonID`, `vehNumberPlate`, `vehFuel`, `vehKMStand`, `vehInterior`, ");
    61. strcat(mainQuery, "`vehWorld`,`vehTUV`,`vehState`) VALUES (");
    62. format(secondQuery, sizeof(secondQuery), "'%s', '%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', ",
    63. PrivateVehicle[playerid][slot][vehBesitzer], slot, PrivateVehicle[playerid][slot][CarModel], PrivateVehicle[playerid][slot][vehPosX],
    64. PrivateVehicle[playerid][slot][vehPosY], PrivateVehicle[playerid][slot][vehPosZ], PrivateVehicle[playerid][slot][vehPosA],
    65. PrivateVehicle[playerid][slot][vehColor1], PrivateVehicle[playerid][slot][vehColor2]);
    66. strcat(mainQuery, secondQuery);
    67. format(secondQuery, sizeof(secondQuery), "'%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', ",
    68. PrivateVehicle[playerid][slot][vehPaintjob], PrivateVehicle[playerid][slot][vehSpoiler], PrivateVehicle[playerid][slot][vehHood],
    69. PrivateVehicle[playerid][slot][vehRoof], PrivateVehicle[playerid][slot][vehSideskirt], PrivateVehicle[playerid][slot][vehLamps],
    70. PrivateVehicle[playerid][slot][vehNitro], PrivateVehicle[playerid][slot][vehExhaust], PrivateVehicle[playerid][slot][vehWheels],
    71. PrivateVehicle[playerid][slot][vehStereo], PrivateVehicle[playerid][slot][vehHydraulics]);
    72. strcat(mainQuery, secondQuery);
    73. format(secondQuery, sizeof(secondQuery), "'%d', '%d', '%d', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d')",
    74. PrivateVehicle[playerid][slot][vehFrontBumper], PrivateVehicle[playerid][slot][vehRearBumper], PrivateVehicle[playerid][slot][vehVentRight],
    75. PrivateVehicle[playerid][slot][vehVentLeft], PrivateVehicle[playerid][slot][vehPreis], PrivateVehicle[playerid][slot][vehNeonID],
    76. PrivateVehicle[playerid][slot][vehNumberPlate], gGas[PrivateVehicle[playerid][slot][vehID]], g_VehicleDistance[PrivateVehicle[playerid][slot][vehID]],
    77. PrivateVehicle[playerid][slot][vehInterior], PrivateVehicle[playerid][slot][vehWorld], PrivateVehicle[playerid][slot][vehTUV], PrivateVehicle[playerid][slot][vehState]);
    78. strcat(mainQuery, secondQuery);
    79. mysql_function_query(MySQLConnected, mainQuery, false, "", "");
    80. SetVehicleToRespawn(PrivateVehicle[playerid][slot][vehID]);
    81. gGas[PrivateVehicle[playerid][slot][vehID]] = PrivateVehicle[playerid][slot][vehFuel];
    82. gMaxGas[PrivateVehicle[playerid][slot][vehID]] = GetMaxTank(PrivateVehicle[playerid][slot][vehID]);
    83. return 1;
    84. }
    85. }
    86. }
    87. return 1;
    88. }
    Alles anzeigen


    Hey,

    Mein Fahrzeug spawnt immer mit 0 Liter aber in der Datenbank sind 100 Liter festgehalten?
  • Neu

    Wieso wird bei dieser Funktion das zuletzt erstellte Fahrzeug, nicht zurück an seinen Herkunftsort gebracht?

    PAWN-Quellcode

    1. ocmd:rac(playerid)
    2. {
    3. if(pInfo[playerid][pAdmin] < 3)return 1;
    4. if(AdminDuty(playerid) == 0)return SCM(playerid, COLOR_LIGHTRED, "Du bist nicht im Dienst!");
    5. for(new i;i<GetVehiclePoolSize();i++)
    6. {
    7. if(IsVehicleEmpty(i) == 0)continue;
    8. SetVehicleToRespawn(i);
    9. }
    10. new string[75];
    11. format(string, sizeof string, "Teammitglied %s respawnt alle unbesetzten Fahrzeuge.", getName(playerid)),
    12. SCMTA(COLOR_LIGHTBLUE, string),
    13. playerProtocol(playerid, "hat alle unbesetzten Fahrzeuge respawnt");
    14. return 1;
    15. }
    Alles anzeigen
    Попытка - не пытка :rolleyes:
  • Neu

    Kasakow schrieb:

    for(new i;i<GetVehiclePoolSize();i++)
    Schreibe es:

    PAWN-Quellcode

    1. for(new i=GetVehiclePoolSize(); i!=0; i--)


    Autos starten bei 1 und enden bei der letzten ID.

    Ergo wäre nur folgendes richtig:

    PAWN-Quellcode

    1. for(new i=1;i<=GetVehiclePoolSize();i++)


    Allerdings ist das nicht so performant, wie mein erstes Beispiel (da jeden Durchgang die Funktion aufgerufen werden würde)! :)


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

    Beitrag von Dr. Frauenarzt ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Behoben ().

  • Neu

    Wie bekomme ich die playerid bei OnVehicleDeath?

    edit: Meine natürlich OnVehicleDeath

    Bei meiner Funktion bin ich mir nicht sicher, ob der Spieler noch in dem Fahrzeug ist

    PAWN-Quellcode

    1. stock GetPlayerFromDeadCar(vehicleid)
    2. {
    3. for(new i = GetPlayerPoolSize(); i != -1; --i)
    4. {
    5. if(IsPlayerConnected(i))
    6. {
    7. if(IsPlayerInVehicle(i,vehicleid) && GetPlayerState(i) == PLAYER_STATE_DRIVER)
    8. {
    9. return i;
    10. }
    11. }
    12. }
    13. return 999;
    14. }
    Alles anzeigen
    Programmieren: 1% Programmieren, 99% Bugs Fixen
  • Neu

    @JacLos
    Du kannst es z.B so machen.

    //EDIT

    PAWN-Quellcode

    1. stock GetDriverID(id)
    2. {
    3. for(new i;i<GetMaxPlayers();i++)
    4. {
    5. if(!IsPlayerConnected(i) || GetPlayerState(i) != PLAYER_STATE_DRIVER)continue;
    6. if(GetPlayerVehicleID(i) == id)return i;
    7. }
    8. return INVALID_PLAYER_ID;
    9. }
    10. public OnVehicleDeath(vehicleid, killerid)
    11. {
    12. new playerid = GetDriverID(vehicleid);
    13. if(playerid != INVALID_PLAYER_ID)
    14. {
    15. //In dem Fahrzeug sitzt jemand drinne, playerid ist der Fahrer
    16. }
    17. else
    18. {
    19. //Das Fahrzeug hat keinen Fahrer
    20. }
    21. return 1;
    22. }
    Alles anzeigen
    Попытка - не пытка :rolleyes:
  • Neu

    Hey, habe dir dafür eben eine Funktion zusammen getippt. Vom Grundsatz her gehst du mit einer Schleife durch alle Spieler die verbunden sind und in einem Fahrzeug sitzen.
    Wenn dessen Fahrzeug-ID die gesuchte ist und er der Fahrer ist, wird die ID zurück gegeben.

    Um ganz sicher zu sein könntest du noch abfragen ob der Spieler i sich mittels IsPlayerInRangeOfPoint noch in einem Radius x befindet.

    Oder habe ich etwas missverstanden? :D

    PAWN-Quellcode

    1. stock GetVehicleDriver(vehicleid) {
    2. for(new i; i <= GetPlayerPoolSize(); i++) {
    3. if(IsPlayerConnected(i) && IsPlayerInAnyVehicle(i)) {
    4. if(GetPlayerVehicle(i) == vehicleid && GetPlayerState(i) == PLAYER_STATE_DRIVER)
    5. return i;
    6. }
    7. }
    8. return INVALID_PLAYER_ID;
    9. }
    10. public OnVehicleDeath(vehicleid, killerid) {
    11. new playerid = GetVehicleDriver(vehicleid);
    12. if(playerid != INVALID_PLAYER_ID) {
    13. // hier dann die Aktion
    14. }
    15. return 1;
    16. }
    Alles anzeigen

    LG
  • Neu

    Also erstmal danke für eure Hilfe ihr beiden :)

    Allerdings unterscheiden sich eure Funktionen nur minimal von meiner,

    und diese funktionieren leider auch nicht (habs natürlich ausprobiert)

    Ich hab in der Zwischenzeit auch mal Experimentiert mit OnPlayerDeath & IsPlayerInAnyVehicle

    habe allerdings den Verdacht, dass der Spieler beim Tod des Fahrzeuges nicht mehr im Fahrzeug ist,

    oder, dass das Fahrzeug zu schnell verschwindet.
    Programmieren: 1% Programmieren, 99% Bugs Fixen
  • Neu

    Tatsache, habe es gerade ausprobiert.

    Habe gerade ein bisschen rumprobiert.
    killerid kannst du auch nutzen.

    Aber, probier mal das aus.

    PAWN-Quellcode

    1. new LastDriver[MAX_VEHICLES];
    2. public OnPlayerStateChange(playerid, newstate, oldstate)
    3. {
    4. if(newstate&PLAYER_STATE_DRIVER)
    5. {
    6. if(IsValidVehicle(GetPlayerVehicleID(playerid)) //Weil beim Tod auch die State auf Driver gewechselt wird.
    7. {
    8. LastDriver[GetPlayerVehicleID(playerid)] = playerid;
    9. }
    10. }
    11. }
    12. public OnPlayerExitVehicle(playerid, vehicleid)
    13. {
    14. LastDriver[vehicleid] = INVALID_VEHICLE_ID;
    15. return 1;
    16. }
    17. public OnVehicleDeath(vehicleid, killerid)
    18. {
    19. if(IsPlayerConnected(LastDriver[vehicleid]))
    20. {
    21. if(killerid != LastDriver[vehicleid])
    22. {
    23. SendClientMessage(LastDriver[vehicleid], -1, "Dein Fahrzeug wurde zerstört.");
    24. }
    25. else
    26. {
    27. SendClientMessage(killerid, -1, "Du hast ein fremdes Fahrzeug zerstört.");
    28. }
    29. }
    30. return 1;
    31. }
    32. //bei Ongamemodeinit
    33. for(new i = MAX_VEHICLES, k; k < i; k++)
    34. {
    35. LastDriver[k] = INVALID_PLAYER_ID;
    36. }
    Alles anzeigen
    Попытка - не пытка :rolleyes:
  • Neu

    Mal eine kurze frage,

    Egal was ich angebe Vehicleid nur wird immer 0 angezeigt beim Kennzeichen.

    Verstehe ich nicht :/ möchte unter /dl nur die normale id angezeigt bekommen...

    PAWN-Quellcode

    1. for(new i=0;i<sizeof(pTaxifahrer);i++)
    2. {
    3. format(string, sizeof(string), "{2C140F}LyD {050E2B}- %d", Vehicle[pTaxifahrer[i]][vehID]);
    4. SetVehicleNumberPlate(pTaxifahrer[i], string);
    5. pTaxiSchild[pTaxifahrer[i]][0] = CreateObject(19308, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
    6. AttachObjectToVehicle(pTaxiSchild[pTaxifahrer[i]][0], pTaxifahrer[i], 0.000000, -0.934999, 0.914999, 0.000000, 0.000000, 0.000000);
    7. aiVehicles[pTaxifahrer[i]] = VEH_TAXICAR;
    8. }