[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
  • Hast du es mal mit GivePlayerWeapon anstatt SetPlayerAmmo versucht? Ich habe eigentlich immer GivePlayerWeapon für solche Dinge genutzt.


    new weap, ammo;GetPlayerWeaponData(playerid, 5, weap, ammo);GivePlayerWeapon(playerid, weap, 150);

    Passiert auch nichts


    //EDIT
    , problem gefunden , danke :)

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • Es kommt bei mir immer öfter vor und es stört halt schon immer mehrmals zu compilen.

    Hast wohl neulich dein Betriebssystem geupdatet :D


    Setze die pawno.exe einfach in einen anderen Kompatibilitätsmodus z.B. Windows 7 oder so :)

    ast2ufdyxkb1.png


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

  • Hi, ist das ein eventuell bekannter Fehler, falls ja wie kann ich ihn beheben?


    Ich zeige per Befehl zwei verschiedene Textdraws. Ich zeige Textdraw A als erstes (Hintergrund) und zeige danach dem Spieler Textdraw B, trotzdem befindet sich TextDraw B hinter TextDraw A.


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Hi, ist das ein eventuell bekannter Fehler, falls ja wie kann ich ihn beheben?


    Ich zeige per Befehl zwei verschiedene Textdraws. Ich zeige Textdraw A als erstes (Hintergrund) und zeige danach dem Spieler Textdraw B, trotzdem befindet sich TextDraw B hinter TextDraw A.

    Ich habe keine Ahnung und falls es sich dumm anhört löscht es.


    Wenn sich Textdraw B hinter Textdraw A befindet und du es genau andersherum möchtest, dann schreib doch das was in A kommt in B und das was in B kommt in A :D

  • Ne, das würde nicht helfen, da ich soeben bemerkt habe das es auf die Reihenfolge ankommt wann man die Textdraws erstellt.
    Sprich Lösung: Reihenfolge ändern wann die Textdraws erstellt werden.


    Jetzt habe ich noch eine andere Frage:


    Ich habe kürzlich mit Hilfe von @Jeffry ein "Skill System erstellt, womit es 6 verschiedene Level gibt (0 dazugezählt). Jetzt würde ich die gerne alle in einem Textdraw anzeigen lassen, aber ich habe das viel zu umständlich gemacht (es funktioniert, aber es geht definitiv einfacher), nur die Frage ist wie :D


    So schaut der Befehl aus:



    Für jedes Level wird eine andere Farbe & eine andere Größe verwendet, wie könnte ich das einfacher, zeilensparender schreiben?


    Info:


    Beispiel Skill Code:



    if(pData[playerid][P_DeathExplosion] >= 1 && random(10) < pData[playerid][P_DeathExplosion])
    {
    //Player is Skill Level 1+ and Deathexplosion appeared
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    CreateExplosion(x, y, z, 10, 2.5);
    }



    if(pData[playerid][P_ArmourSpawn] >= 1 && random(10) < pData[playerid][P_ArmourSpawn])
    {
    //Player is Skill Level 1+ and Deathexplosion appeared
    SetPlayerArmour(playerid, 30);
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Mit einer kleinen Formel kann man schon so viele Zeilen sparen und einfacher realisieren. ;)

  • @AirM4X


    Danke schonmal, das ist natürlich schon um Welten besser :) !


    Nur, ich besitze ja auch 6 verschiedene Skills, müsste ich dazu für jeden Skill den ganzen Case kopieren oder könnte man da auch zaubern?
    (Die Farben bleiben ja gleich, auch wenn die Skills verschieden sind. Beispiel: DoppelGeld & Doppel EXP Skill Level 1 bleibt rot.)


    (Oben sind ja zwei verschiedene Skills aufgelistet (P_Deatghexplosion & P_Armourspawn) )


    Genauer gesagt, muss ich das so machen oder geht's nochmal besser?:



    CMD:skills2(playerid,params[])
    {
    if(SkillShowing[playerid] == 1)
    {
    SkillShowing[playerid] = 0;
    HideSkillTextDraw(playerid);
    HideSkillBar(playerid);
    return 1;
    }



    else
    {
    SkillShowing[playerid] = 1;
    ShowSkillBar(playerid);
    ShowSkillTextDraw(playerid);
    SetPlayerProgressBarValue(playerid,Bar0[playerid],pData[playerid][P_DoubleEXP]*20);
    switch(pData[playerid][P_DoubleEXP])
    {
    case 5:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x008000FF);
    case 4:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x80FF00FF);
    case 3:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFFFF00FF);
    case 2:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF8000FF);
    case 1:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF0000FF);
    case 0:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xC0C0C0FF);
    }



    SetPlayerProgressBarValue(playerid,Bar1[playerid],pData[playerid][P_DoubleWeed]*20);
    switch(pData[playerid][P_DoubleWeed])
    {
    case 5:SetPlayerProgressBarColour(playerid, Bar1[playerid], 0x008000FF);
    case 4:SetPlayerProgressBarColour(playerid, Bar1[playerid], 0x80FF00FF);
    case 3:SetPlayerProgressBarColour(playerid, Bar1[playerid], 0xFFFF00FF);
    case 2:SetPlayerProgressBarColour(playerid, Bar1[playerid], 0xFF8000FF);
    case 1:SetPlayerProgressBarColour(playerid, Bar1[playerid], 0xFF0000FF);
    case 0:SetPlayerProgressBarColour(playerid, Bar1[playerid], 0xC0C0C0FF);
    }
    ShowSkillBar(playerid);
    }
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Ja, der Code ist so richtig. Den kann man bestimmt noch einmal aufpeppen (bzw. kürzer schreiben), aber ich glaube dann verliert man so langsam die Übersicht.

    Nur, ich besitze ja auch 6 verschiedene Skills, müsste ich dazu für jeden Skill den ganzen Case kopieren oder könnte man da auch zaubern?
    (Die Farben bleiben ja gleich, auch wenn die Skills verschieden sind. Beispiel: DoppelGeld & Doppel EXP Skill Level 1 bleibt rot.)

    Da musst du den switch-Teil immer wieder einfügen, weil es ja immer verschiedene Variablen-Namen sind und auch immer andere ProgressBar-Namen (Bar0, Bar1, etc.).

    Einmal editiert, zuletzt von AirM4X () aus folgendem Grund: kleinen grammatikalischen Fehler behoben

  • Ok, ist ja in Ordnung, dachte nur man hätte das noch einfacher schreiben können. Meine letzte Frage:


    Ich habe Textdraws eingefügt die anzeigen wie viel Prozent man zurzeit hat (0, 20, 40, 60, 80 & 100)
    Wie kann ich die Zahl dem passenden Level anpassen ohne gleich den Code um die ~25 mal zu kopieren?


    Also, so setze ich den beispielsweise auf 100 %


    PlayerTextDrawSetString(playerid, EXPSkillCount[playerid][0], "100%");


    Könnte ich nicht eine ähnliche Variante wie   SetPlayerProgressBarValue(playerid,Bar0[playerid],pData[playerid][P_DoubleEXP]*20); verwenden damit ich das nicht oftmals kopieren muss?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Klar, einfach 20*P_DoubleEXP. ;)

    C
    new string[5];
    format(string,sizeof(string),"%d",20*pData[playerid][P_DoubleEXP]);
    PlayerTextDrawSetString(playerid, EXPSkillCount[playerid][0], string);
  • Hmm als ich das nur für ein Skill hinzugefügt habe, hat es funktioniert, jetzt habe ich es für alle gemacht und es kommt überall eine andere Prozentzahl raus O.o
    Außerdem fehlt das Prozentzeichen, obwohl ich es auch dahinter eingefügt habe :S



    new string[5];
    format(string,sizeof(string),"%d",100/pData[playerid][P_DoubleEXP]);
    PlayerTextDrawSetString(playerid, EXPSkillCount[playerid][0], string);




    switch(pData[playerid][P_DoubleEXP])
    {
    case 5:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x008000FF);
    case 4:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x80FF00FF);
    case 3:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFFFF00FF);
    case 2:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF8000FF);
    case 1:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF0000FF);
    case 0:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xC0C0C0FF);
    }




    SetPlayerProgressBarValue(playerid,Bar1[playerid],pData[playerid][P_DoubleWeed]*20);




    new string2[5];
    format(string2,sizeof(string2),"%d",100/pData[playerid][P_DoubleWeed]);
    PlayerTextDrawSetString(playerid, EXPSkillCount[playerid][1], string2);
    switch(pData[playerid][P_DoubleWeed])



    http://imgur.com/RGOb5s2


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Ich hatte mich vorhin, in meinen Post davor, verschrieben. Du musst nicht 100/P_DoubleEXP nehmen, sondern einfach, wie gewohnt, 20*P_DoubleEXP. ;) Sorry.


    - EDIT: Das reicht auch, wenn du nur einmal den string formatierst, sodass du dann nicht 6 brauchst.

  • Jemand eine Idee warum sich mein Textdraw nicht anklicken lässt?



    SkillTD[playerid][1] = CreatePlayerTextDraw(playerid,244.000000, 100.000000, "Double - EXP");
    PlayerTextDrawBackgroundColor(playerid,SkillTD[playerid][1], 255);
    PlayerTextDrawFont(playerid,SkillTD[playerid][1], 2);
    PlayerTextDrawLetterSize(playerid,SkillTD[playerid][1], 0.280000, 1.200000);
    PlayerTextDrawTextSize(playerid, SkillTD[playerid][1], 340.0, 8.0);
    PlayerTextDrawColor(playerid,SkillTD[playerid][1], -1);
    PlayerTextDrawSetOutline(playerid,SkillTD[playerid][1], 0);
    PlayerTextDrawSetProportional(playerid,SkillTD[playerid][1], 1);
    PlayerTextDrawSetShadow(playerid,SkillTD[playerid][1], 1);
    PlayerTextDrawSetSelectable(playerid,SkillTD[playerid][1], 1);



    public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
    {



    if(playertextid == SkillTD[playerid][1])
    {

    new expstring[512];
    strcat(expstring,"{FFFFFF}Skill Name:\n{FF0000}Double EXP Chance\n");
    strcat(expstring,"{FFFFFF}Description:\n");
    strcat(expstring,"{FFFFFF}You have a {FF0000}chance{FFFFFF} to get {FF0000}double EXP {FFFFFF}if you kill someone.\n");
    strcat(expstring,"{FFFFFF}The chance depends on your {FF0000}skill level.\n\n\n");
    strcat(expstring,"{FFFFFF}Skill 1 = {FF0000}10 % Chance.\n");
    strcat(expstring,"{FFFFFF}Skill 2 = {FF0000}20 % Chance.\n");
    strcat(expstring,"{FFFFFF}Skill 3 = {FF0000}30 % Chance.\n");
    strcat(expstring,"{FFFFFF}Skill 4 = {FF0000}40 % Chance.\n");
    strcat(expstring,"{FFFFFF}Skill 5 = {FF0000}50 % Chance.\n");
    ShowPlayerDialog(playerid, D_DoubleEXP, DIALOG_STYLE_MSGBOX, "Description", expstring, "Ok", "");
    }
    }




    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Bei mir funktioniert alles. Versuch mal so:

  • Ups, sorry. Die habe ich gerade zu Testzwecken eingeschaltet. Kannst du entfernen, indem du einfach diese Zeile rauslöscht:

    C
    PlayerTextDrawUseBox(playerid,SkillTD[playerid][1],1);
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen