[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Ich nehme an du willst erst die Health voll machen, und dann die Armour, oder?
    Dann so:


    ocmd:smokeweed2(playerid, params[])
    {
    if(PlayerInfo[playerid][sWeed] > 0)
    {
    new Float:pHealth, pArmour;
    GetPlayerHealth(playerid, pHealth);
    GetPlayerArmour(playerid, pArmour);
    if(pHealth == 100.0 && pArmour == 100.0) return SendClientMessage(playerid, COLOR_WHITE, "* Du brauchst kein Weed mehr.");
    if(pHealth > 100.0 || pArmour > 100.0) return SendClientMessage(playerid, COLOR_WHITE, "* Du bist ein Cheater.");
    if(pHealth + 25.0 <= 100) SetPlayerHealth(playerid, pHealth+25.0);
    else
    {
    SetPlayerHealth(playerid, 100.0);
    pArmour += pHealth-75;
    if(pArmour > 100.0) pArmour = 100.0;
    SetPlayerArmour(playerid, pArmour);
    }
    PlayerInfo[playerid][sWeed] -= 2;
    new sendername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    GiveNameSpace(sendername);
    SaveDrugs(playerid);
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "* Du hast kein Weed mehr.");
    }
    return 1;
    }

  • hi, ich möchte gerade einen setskin Befehl machen,
    funktioniert auch alles, nur beim erneuten einloggen habe ich den Skin der bei OnPlayerRequestClass unter SetSpawnInfo steht.


    Muss ich dann unter diesem Callback meine Skinid aus der DB laden oder geht das anders auch?

  • Muss ich dann unter diesem Callback meine Skinid aus der DB laden oder geht das anders auch?


    Genau dann, wenn du auch deine anderen Daten wie (Geld) o.ä. lädst, genau da lädst du auch den Skin in eine Variable.


    und dann unter OnPlayerSpawn, machst du dann:


    SetPlayerSkin(playerid, SpielerInfo[playerid][pSkin]);


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Mache gerade die Fraktionsspawns, irgendwie funktioniert das SetPlayerFacingAngle nicht..
    SetPlayerPos(playerid,fInfo[fID][f_x],fInfo[fID][f_y],fInfo[fID][f_z]);
    SetPlayerFacingAngle(playerid,fInfo[fID][f_r]);
    Er spawnt an der richtigen Stelle, aber sieht um ca.160 Grad in eine andere Richtung als abgespeichert..
    Weiss jmd an was das liegen könnte?

  • die speicher ich in einer Globalen Variable im enum
    enum fraktenum
    {
    f_name[128],
    Float:f_x,
    Float:f_y,
    Float:f_z,
    Float:f_r,
    f_inter,
    f_world
    }

    new fInfo[][fraktenum] =
    {
    {"Zivilist",0.0,0.0,0.0,0.0,0,0},
    {"LSPD",2108.3289,1386.0986,10.8203,182.4039,0,0},
    {"Medic",0.0,0.0,0.0,0.0,0,0}
    };

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Hi, habe hier eine Funktion von Jeffry die aber nicht richtig funktioniert.
    Es geht um Rangnamen definieren mit einem Stock, der Fraktionsname Funktioniert nur die Ränge nicht.


    Es kommt immer Du bist "Polizei" mit dem Rang "Polizei" obwohl ja dann der Rangname kommen sollte.


    stock GetRangName(team, rang)
    {
    new name[32];
    switch(team)
    {
    case 0:
    {
    switch(rang)
    {
    case 0: name = "Unbekannt";
    case 1: name = "Unbekannt";
    default: name = "Unbekannt";
    }
    }
    case 1:
    {
    switch(rang)
    {
    case 0: name = "Praktikant";
    case 1: name = "Polizeimeister";
    case 2: name = "Polizeiobermeister";
    case 3: name = "Polizeihauptmeister";
    case 4: name = "Polizeiratsanwärter";
    case 5: name = "Polizeirat";
    case 6: name = "Polizeidirektor";
    default: name = "Unbekannt";
    }
    }
    case 2:
    {
    switch(rang)
    {
    case 0: name = "Anfänger";
    case 1: name = "Pro";
    default: name = "Unbekannt";
    }
    }
    case 3:
    {
    switch(rang)
    {
    case 0: name = "Streife";
    case 1: name = "Officer";
    default: name = "Unbekannt";
    }
    }
    case 4:
    {
    switch(rang)
    {
    case 0: name = "Anfänger";
    case 1: name = "Pro";
    default: name = "Unbekannt";
    }
    }
    case 5:
    {
    switch(rang)
    {
    case 0: name = "Streife";
    case 1: name = "Officer";
    default: name = "Unbekannt";
    }
    }
    case 6:
    {
    switch(rang)
    {
    case 0: name = "Streife";
    case 1: name = "Officer";
    default: name = "Unbekannt";
    }
    }
    default: name = "Unbekannt";
    }
    return 1;
    }


    format(string, sizeof(string), "Ich bin in Fraktion %s und habe den Rang %s.", GetFraktionsName(SpielerInfo[playerid][pTeam]), GetRangName(SpielerInfo[playerid][pTeam],SpielerInfo[playerid][pRank]));
    SendClientMessage(playerid, 0xFF0000FF, string);



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ugh, tatsächlich. Habe den Fehler in dem Thread wo du es her hast ausgebessert. :whistling:


    return 1;
    zu:
    return name;



    @FerienFreak: Das geht leider nicht. Man müsste immer wieder die Position setzen, aber das funktioniert nicht richtig, sobald man eine kleine Steigung hat.

  • Hallo,


    Wie macht man ein Skript z.B. Wenn man /auf macht geht das Auto auf und bei /zu Das Auto zu.
    -----------------------------
    Wie macht man, wenn ein Spieler die Taste '' N'' Drückt geht das Motor an und wenn man Wieder auf die Taste '' N'' drückt geht das Motor wieder aus.


    Danke schonmal im Vorraus.


    MFg
    SST

  • Wie macht man ein Skript z.B. Wenn man /auf macht geht das Auto auf und bei /zu Das Auto zu.


    Wie macht man, wenn ein Spieler die Taste '' N'' Drückt geht das Motor an und wenn man Wieder auf die Taste '' N'' drückt geht das Motor wieder aus.


    http://wiki.sa-mp.com/wiki/SetVehicleParamsEx_DE


    Unten ist ein Beispiel anhand des Alarms, kannst du aber auch auf deine Probleme anwenden. Ist im Prinzip das Selbe.
    Das Ganze dann mit einem Command Prozessor (bspw. ocmd) oder unter OnPlayerCommandText() und unter OnPlayerKeyStateChange (zum Abfragen der Taste N).


    http://wiki.sa-mp.com/wiki/OnPlayerKeyStateChange


    Einen Befehl würdest du z.B. so erstellen.


    mit ocmd:
    ocmd:auf(playerid, params[]){
    //Code, der bei /auf ausgeführt werden soll
    }


    mit dem Callback OnPlayerCommandText():
    if(!strcmp(cmd, "/auf")){ //Prüft, ob der in der Chat eingegebene Befehl /auf ist
    //Code, der bei /auf ausgeführt werden soll
    }


    Abfragen der Taste N (Code unter OnPlayerKeyStateChange()):
    if(newkeys & KEY_NO){
    //Code, der bei Tastendruck "N" ausgeführt werden soll
    }

  • Hallo, dafür gibt es eigentlich eine menge Tutorials, aber hier schau mal:


    Ganz oben im Script:
    new bool:Motor[MAX_VEHICLES]=false;


    OnGameModeInit:
    ManualVehicleEngineAndLights();
    for (new i=0; i< MAX_VEHICLES; i++)
    {
    GetVehicleParamsEx(i,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(i,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[i] = false;
    }


    OnPlayerKeyStateChange:


    Spoiler anzeigen
    if(newkeys & 131072)
    {
    if(GetPlayerVehicleSeat(playerid) == 0)
    {
    new v = GetVehicleModel(car);
    if(GetVehicleModel(car) == 509 || GetVehicleModel(car) == 481 || GetVehicleModel(car) == 510)
    {
    SendClientMessage(playerid, error, "Du sitzt auf einem Fahrrad. Das hat keinen Motor!");
    }

    Spoiler anzeigen
    else if (Motor[car] == false )
    {
    GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(car,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
    Motor[car] = true; // Setzt den Bool Motor auf true
    }

    Spoiler anzeigen
    else
    {
    GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(car,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[car] = false; // Setzt den Bool wieder auf falsch zurück.
    }
    }
    return 1;
    }


    OnVehicleSpawn:
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(vehicleid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
    Motor[vehicleid] = false;


    Ist jetzt aus meinem Script, habs dir aber kurz angepasst.
    Sollten Errors/Warnings kommen, so melde dich bei mir per PN!
    WICHTIG: Vergiss nicht die Farben anzupassen(SendClientMessage)



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Dann so:
    ocmd:smokeweed2(playerid, params[])
    {
    if(PlayerInfo[playerid][sWeed] > 0)
    {
    new Float:pArmour;
    GetPlayerArmour(playerid, pArmour);
    if(pArmour == 100.0) return SendClientMessage(playerid, COLOR_WHITE, "* Du brauchst kein Weed mehr.");
    if(pArmour > 100.0) return SendClientMessage(playerid, COLOR_WHITE, "* Du bist ein Cheater.");
    if(pArmour + 25.0 <= 100) SetPlayerArmour(playerid, pArmour+25.0);
    else SetPlayerArmour(playerid, 100.0);
    PlayerInfo[playerid][sWeed] -= 2;
    new sendername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    GiveNameSpace(sendername);
    SaveDrugs(playerid);
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "* Du hast kein Weed mehr.");
    }
    return 1;
    }