[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
  • Für Vehicles gibt es [wiki]On VehicleRespray[/wiki] (PayNSpray)


    Für die Sprunkautomaten kannst du entweder den Animationsindex Abfragen oder halt sie entfernen.

    Und beim Tuning komm ich wohl nicht drum herum zu prüfen, welche componentid neu ist und dann den Preis abzuziehen oder ?
    Gibt es vielleicht auch noch eine andere Möglichkeit Moneyhacks zu vermeiden, als einfach das Geld über eine Variable zu setzen, ohne dass man dann für diese Funktionen extra noch so viel drum herum arbeiten muss?

    MfG. Adrian

    • Offizieller Beitrag

    Und beim Tuning komm ich wohl nicht drum herum zu prüfen, welche componentid neu ist und dann den Preis abzuziehen oder ?

    Du könntest die Tuning Garagen natürlich auch einfach zumappen

    Gibt es vielleicht auch noch eine andere Möglichkeit Moneyhacks zu vermeiden, als einfach das Geld über eine Variable zu setzen, ohne dass man dann für diese Funktionen extra noch so viel drum herum arbeiten muss?

    Grundsätzlich sind eigene Variablen natürlich am besten, da die nicht einfach "geändert" werden können. Die Frage ist was du meinst mit "drum arbeiten"

  • Du könntest die Tuning Garagen natürlich auch einfach zumappen

    Grundsätzlich sind eigene Variablen natürlich am besten, da die nicht einfach "geändert" werden können. Die Frage ist was du meinst mit "drum arbeiten"

    Das erste will ich vermeiden, da ich die Tuning Garagen schon gerne mit ihrer standardmäßigen Funktion beibehalten würde.


    Mit drum rum arbeiten meine ich genau diese Funktionen die ich scripten muss, damit das Geld nicht an einigen Stellen geschenkt wird.


    Hab für die Tuning-Garagen mittlerweile eine Lösung.
    Ich prüfe ob das Geld nicht mit der Variable übereinstimmt. Dann prüfe ich die Differenz zwischen beiden Werten und ob dieser maximal dem teuersten Tuningteil entspricht. Danach setze ich die Variable auf den richtigen Wert. (natürlich nur wenn ein Spieler in der Tuninggarage ist und wirklich etwas getunt wurde)



    Ich danke euch allen für eure Hilfe.

    MfG. Adrian

  • //edit new problem


    die //makierungen lesen



    ocmd:makeleader(playerid,params[])
    {
    if(!PlayerInfo[playerid][pLoggedIn]) return NO_CONNECT_ME;
    if(!IsPlayerAnAdmin(playerid, 5)) return NO_ADMIN;
    new string[120],fID, pID, frak;
    if(sscanf(params,"ui", pID, frak)) return SCM(playerid,ROT,"Info:" #HTML_WHITE" /makeleader [playerid/name] [fraktion-id]");
    if(!PlayerInfo[pID][pLoggedIn]) return NO_CONNECT_P;
    if(!IsPlayerConnected(pID))return NO_CONNECT_P;
    if(frak<0||frak>MAX_FRAKTIONEN) return SCM(playerid,ROT,"Info:" #HTML_WHITE" /makeleader [playerid/name] [fraktion-id]");
    PlayerInfo[pID][pFraktion] = frak; //Hier wird der Spieler in die Jeweilige fraktion gesetzt.
    SpawnPlayer(pID);
    fID = PlayerInfo[pID][pFraktion]; //Hier wird die Fraktion des Spielers ermittelt doch es kommt die Alte fragen raus
    format(string,sizeof(string), "%s %s hat dich zum Leader der Fraktion %s gemacht.",Adminrang(playerid), PlayerInfo[playerid][pName], FrakInfo[fID][frakname]); // hier FrakInfo[fID][frakname] hier kommt immer die alte fraktion raus
    SCM(pID,ROT,string);
    format(string,sizeof(string), "Du hast %s zum Leader der Fraktion %s gemacht.", PlayerInfo[pID][pName], FrakInfo[fID][frakname]);
    SCM(playerid,ROT,string);
    new log[100];
    format(log,sizeof(log), "%s hat dem Spieler %s zum Leader der %s gemacht.",PlayerInfo[playerid][pName],PlayerInfo[pID][pName], FrakInfo[fID][frakname]);
    Log("Makeleader",log);
    return 1;
    }

    Du willst mich kennenlernen? Kauf mein Buch, Bia*ch!


    Einmal editiert, zuletzt von Maho ()

  • //EDIT

    Verändert sich das, wenn du SpawnPlayer an das Ende des Befehls setzt?

    Nein leider nicht.

    Wieso nutzt du überhaupt fID? Nutze doch einfach direkt frak

    Du hast recht schlau schlau danke :D


    aber es steht immer noch Test als fraktion also die frak id 1 ist test aber wenn ich den spieler 0 setze steht immer noch test.

    Du willst mich kennenlernen? Kauf mein Buch, Bia*ch!


  • //EDIT

    Wie sieht die Variable/Funktion denn aus?

    was genau brauchst du ?





    enum fDataEnum
    {
    fraksql,
    frakname[50],
    frakfarbe[25],
    interior,
    vwelt,
    Float:sposx,
    Float:sposy,
    Float:sposz,
    Float:sposa,
    Float:aposx,
    Float:aposy,
    Float:aposz,
    Float:eposx,
    Float:eposy,
    Float:eposz,
    frakrank1[25],
    frakrank2[25],
    frakrank3[25],
    frakrank4[25],
    frakrank5[25],
    frakrank6[25],
    };
    new FrakInfo[MAX_FRAKTIONEN][fDataEnum];



    forward LoadFrakInfo();
    public LoadFrakInfo()
    {
    new rows;
    cache_get_row_count(rows);
    print("MYSQL: Fraktionen werden Geladen.");
    for(new i; i<rows; i++)
    {
    cache_get_value_name_int(i, "frakid", FrakInfo[i][fraksql]);
    cache_get_value_name(i, "frakname", FrakInfo[i][frakname],50);
    cache_get_value_name_int(i, "interior", FrakInfo[i][interior]);
    cache_get_value_name_int(i, "vwelt", FrakInfo[i][vwelt]);
    cache_get_value_name(i, "frakfarbe", FrakInfo[i][frakfarbe],25);
    cache_get_value_name(i, "frakrank1", FrakInfo[i][frakrank1],25);
    cache_get_value_name(i, "frakrank2", FrakInfo[i][frakrank2],25);
    cache_get_value_name(i, "frakrank3", FrakInfo[i][frakrank3],25);
    cache_get_value_name(i, "frakrank4", FrakInfo[i][frakrank4],25);
    cache_get_value_name(i, "frakrank5", FrakInfo[i][frakrank5],25);
    cache_get_value_name(i, "frakrank6", FrakInfo[i][frakrank6],25);
    cache_get_value_name_float(i, "sposx", FrakInfo[i][sposx]);
    cache_get_value_name_float(i, "sposy", FrakInfo[i][sposy]);
    cache_get_value_name_float(i, "sposz", FrakInfo[i][sposz]);
    cache_get_value_name_float(i, "sposa", FrakInfo[i][sposa]);
    cache_get_value_name_float(i, "aposx", FrakInfo[i][aposx]);
    cache_get_value_name_float(i, "aposy", FrakInfo[i][aposy]);
    cache_get_value_name_float(i, "aposz", FrakInfo[i][aposz]);
    cache_get_value_name_float(i, "eposx", FrakInfo[i][eposx]);
    cache_get_value_name_float(i, "eposy", FrakInfo[i][eposy]);
    cache_get_value_name_float(i, "eposz", FrakInfo[i][eposz]);
    printf("id:%i, name:%s,farbe:%s, int:%i, vwelt:%i, spx:%f, spy:%f, spz:%f, spa:%f, apx:%f, apy:%f, apz:%f, epx:%f, epy:%f, epz:%f",FrakInfo[i][fraksql],FrakInfo[i][frakname],FrakInfo[i][frakfarbe],FrakInfo[i][interior],FrakInfo[i][vwelt],FrakInfo[i][sposx],FrakInfo[i][sposy],FrakInfo[i][sposz],FrakInfo[i][sposa],FrakInfo[i][aposx],FrakInfo[i][aposy],FrakInfo[i][aposz],FrakInfo[i][eposx],FrakInfo[i][eposy],FrakInfo[i][eposz]);
    new str[100];
    format(str,sizeof(str), ""HTML_LIGHTBLUE">> %s <<\n"HTML_WHITE"Betreten mit "HTML_GREEN"'ENTER'",FrakInfo[i][frakname]);
    CreateDynamic3DTextLabel(str,ORANGE,FrakInfo[i][eposx],FrakInfo[i][eposy],FrakInfo[i][eposz]+0.50,15,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,0);
    format(str,sizeof(str), ""HTML_LIGHTBLUE">> %s <<\n"HTML_WHITE"Verlassen mit "HTML_GREEN"'ENTER'",FrakInfo[i][frakname]);
    CreateDynamic3DTextLabel(str,ORANGE,FrakInfo[i][aposx],FrakInfo[i][aposy],FrakInfo[i][aposz]+0.50,15,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,FrakInfo[i][vwelt]);
    CreateDynamicPickup(1318,1,FrakInfo[i][eposx],FrakInfo[i][eposy],FrakInfo[i][eposz],0);
    CreateDynamicPickup(1318,1,FrakInfo[i][aposx],FrakInfo[i][aposy],FrakInfo[i][aposz],FrakInfo[i][vwelt]);
    CreateDynamic3DTextLabel("Fraktionslager\n/Ausruesten\n/Frakbank",ORANGE,FrakInfo[i][sposx],FrakInfo[i][sposy]+0.50,FrakInfo[i][sposz],15,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,FrakInfo[i][vwelt]);
    CreateDynamicPickup(1240,1,FrakInfo[i][sposx],FrakInfo[i][sposy]+0.50,FrakInfo[i][sposz],FrakInfo[i][vwelt]);



    }
    print("MYSQL: Fraktionen wurden Geladen.");
    return 1;
    }

    Du willst mich kennenlernen? Kauf mein Buch, Bia*ch!


  • @iTsRooT werden bei der Load Funktion im Print auch alle Namen bei den Fraks richtig angezeigt ? (hier: der printf in Z. 30)
    Wie viele Fraks hast du aktuell insgesamt ?


    Und versuch mal bitte:


    C
    for(new i; i<rows; i++)
    
    
    // ZU 
    
    
    for(new i; i<=rows; i++)


    zu ändern. Weiß zwar nicht ob das hilft oder ob ich Schleife nicht verstehe denn ( i<rows ) dürfte ja die Bedingung zum ausführen des Codes in der Schleife sein.
    Daher würde die letzte row(Reihe) bei dir nicht mitgezählt werden und hat somit Ingame/im Array keine Werte als Fraktion gesetzt.


    //e: Die erste gefundene row ist glaubig immer 0, mein Fehler wenns falsch ist, dann wäre deine Schleife richtig

    MfG. Adrian

  • Okay habe auch mal wieder ein Problem, dass sich nicht lösen lassen will.


    Ich habe einen Wartungsmodus, der über einen Dialog(ShowServerSettings) de-/aktiviert werden kann.
    Lustigerweise hat der Dialog sich auch immer richtig angepasst, wenn die Variable (auf 0-wartung aus oder 1wartung-an) gesetzt wurde.
    Seit ich jetzt jedoch eine Funktion eingebaut habe, die im Endeffekt nur 1-2 Funktionen mehr ausführt und trotzdem die Variable ändert, bleibt der Text beim deaktivieren einfach auf ("Wartungdsmodus aktiviert")


    Ich hab auch mal geschaut ob die Variable sonst noch irgendwo geändert wird, aber nein. Nur durch das changeWartung im OnDialogResponse.
    Allerdings hat ein Testcommand ergeben, dass die Variable direkt nach dem print in changeWartung nochmal irgendwo auf 1 gesetzt wird.


    Ich weiß ist n bissl viel Code für so eine Frage, ich sitze da heute nur schon den 2. Tag ohne Lösung vor.

    MfG. Adrian

    2 Mal editiert, zuletzt von SkeeZy ()

    • Offizieller Beitrag

    Wenn ich nicht ganz falsch liege, liegt es an deinem OnDialogResponse, Zeile 6. Da der return Wert von changeWartung immer 1 ist.
    Du könntest dir das ganze sparen und folgene Zeile

    Code: OnDialogResponse
    if(listitem == 3) { sInfo[sWartung] = (sInfo[sWartung] == 1) ? (changeWartung()) : (changeWartung()); }

    zu




    Code: OnDialogResponse
    if(listitem == 3) { changeWartung(); }

    Da du changeWartung sowieso immer ausführst, reicht es auch so.

  • Wenn ich nicht ganz falsch liege, liegt es an deinem OnDialogResponse, Zeile 6. Da der return Wert von changeWartung immer 1 ist.
    Du könntest dir das ganze sparen und folgene Zeile

    Code: OnDialogResponse
    if(listitem == 3) { sInfo[sWartung] = (sInfo[sWartung] == 1) ? (changeWartung()) : (changeWartung()); }

    zu


    Code: OnDialogResponse
    if(listitem == 3) { changeWartung(); }

    Da du changeWartung sowieso immer ausführst, reicht es auch so.

    Danke das klappt so wie du beschrieben hast. Hätte man auch irgendwann mal selbst merken können -.-


    Lag wohl daran, dass ich vorher statt changewartung 2 verschiedene Funktionen in dem if Statement ausgeführt habe.



    Hast du vielleicht eine Hilfeseite, die die Funktion von den one-liner- if Statements erklärt? Hab das dort das erste mal benutzt und finde es praktisch, da es in den anderen Einstellungen ja auch klappt ^^
    Also eigtl. ist es doch wie folgt oder ?


    MfG. Adrian

  • Okay. Ich versuche aktuell ein Premiumsystem mit temporärem Premium zu erstellen.
    Das ganze soll über Timestamps funktionieren, indem für den Zeitpunkt an dem das Premium auslaufen soll einen Timestamp setze.
    Ich brauche jedoch auch eine Funktion, die prüft ob der Spieler noch Premium hat. Dafür habe ich mir folgende Funktion gescriptet:


    C
    stock GetPlayerPremium(playerid)
    {
    	if(pInfo[playerid][pPrem] > gettime()) return (pInfo[playerid][pPrem]-gettime()); //pPrem ist der Timestamp mit dem Auslaufdatum
    	return 0;
    }


    Nun weiß ich nur nicht, wie ich das am besten einsetze und dann die noch übrige Zeit bis zum Auslaufen des Premium als String bzw. in Tagen, Std, Minuten ausgebe.


    Wie prüfe ich mit der Funktion am besten, ob der Spieler überhaupt Premium hat und nutze dann noch den return-Wert innerhalb der dazugehörigen Expression?


    Beispiel(zum Verständnis):

    Ich danke schonmal im Voraus. Wenn es bessere Lösungen für ein solches System gibt, wär ich froh davon zu hören.


    !!! Die beste Lösung wäre natürlich, dass die GetPlayerPremium-Funktion einfach wie bei gettime(hour, min, second) die Sekunden(timestamp) returnt aber trotzdem noch die Variablen(hour, min, second) mitgibt.

    MfG. Adrian

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen