[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

  • Jeffry er benutzt ocmd daher, sollte er die Include etwas abändern oder er nutzt noch eine zusätzliche hooking Methode über state.


    Nun gut zum eigentlichen Problem , füg einfach oben bevor du die Include einbindest
    #define OCMD_COMMAND_LOG


    ein.


    Fall du ein anderes format haben willst musst du das define in der include ändern
    #define OCMD_COMMAND_LOG_FORMAT "[cmd] [%s]: %s"


    oder du definierst es neu Beispiel:
    #undef OCMD_COMMAND_LOG_FORMAT
    #define OCMD_COMMAND_LOG_FORMAT "[%s]: %s"


    Slash™


    Als falls du das ganze nur umbennen möchtest das geht wie Jeffry schon gepostet hat auch via einem define
    #define SCM(%0,%1,%2) SendClientMessage(%0,%1,%2)


    hooken kannst du die Funktionen auch hier mal ein beispiel:

    native __SetPlayerArmour(playerid, Float:armour) = SetPlayerArmour;
    stock _SetPlayerArmour(playerid, Float:armour) {
    AntiCheat[playerid][aArmour] = armour;
    return __SetPlayerArmour(playerid,armour);
    }
    #if defined _ALS_SetPlayerArmour
    #undef SetPlayerArmour
    #else
    #define _ALS_SetPlayerArmour
    #endif
    #define SetPlayerArmour _SetPlayerArmour


    tobialvarez


    Das was du machen möchtest würde eigentlich nur mit dem Audioplugin funktionieren, jedoch weiß ich nicht ob er die Sequenz nochmal neu abspielt, falls du auch musik einbinden willst.
    Bei PlayAudioStreamForPlayer brauchst du nur ein stream der keine werbung enthält
    http://forum.sa-mp.com/showthread.php?t=82162

  • Jeffry: IPrototypeI:
    Ein Define meinte ich nicht.
    Ich möchte einfach an OnDialogResponse am ende noch nen Parameter hinzufügen, ohne die Native in der include zu ändern, daher die Frage ob ich es vom Script aus überschreiben kann.
    Ich hoffe es ist jetzt verständlicher :)


    können schon auch wie bereits genannt via hooking jedoch wird das callback immer noch mit den gleichen parameter aufgerufen.

  • @BlackAce:
    Ich möchte einfach dialoge weiter strukturieren um nicht unendliche dialogids zu nutzen.
    So hatte ich mir das vorgestellt.

    ShowPlayerDialog(playerid,DIALOG_BAUM,DIALOG_STYLE_MSGBOX,"Baum","Testdialog 1","Weiter","Abbrechen",1);
    ShowPlayerDialog(playerid,DIALOG_BAUM,DIALOG_STYLE_MSGBOX,"Baum","Testdialog 2","Weiter","Abbrechen",2);
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[],select)
    {
    switch(dialogid)
    {
    case DIALOG_BAUM:
    {
    if(response)
    {
    switch(select)
    {
    case 1:return SendClientMessage(playerid,-1,"Testdialog 1");
    case 2:return SendClientMessage(playerid,-1,"Testdialog 2");
    }
    }
    }
    }
    return 1;
    }

  • Slash™:
    Dann nutz nen Nativ hook, da packst du einfach SetPVar rein
    dann gehst du zum Callback und hookst das und machst GetPVar.


    Dann verweist du zurück auf das Callback mit dem neuen Parameter und schon kannst du das überall nutzen :thumbup:


    [ SCRIPTING ] Includes richtig erstellen | Hooking ganz einfach

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Das ist mir klar, ist ja nur zum testen :)
    Hab es jetzt mal soweit wie ichs verstanden habe, kommt aber immer noch das die parameter nicht korrekt sind.


    Spoiler anzeigen


    forward _OnDialogResponse(playerid, dialogid, response, listitem, inputtext[],selects);
    #if defined _ALS_OnDialogResponse
    #undef OnDialogResponse
    #else
    #define _ALS_OnDialogResponse
    #endif
    #define OnDialogResponse _OnDialogResponse

    Spoiler anzeigen
    native __ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[],select);
    stock _ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[],select)
    {
    __ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[],select);
    return 1;
    }
    #if defined _ALS_ShowPlayerDialog
    #undef ShowPlayerDialog
    #else
    #define _ALS_ShowPlayerDialog
    #endif
    #define ShowPlayerDialog _ShowPlayerDialog

  • kommt aber immer noch das die parameter nicht korrekt sind.


    So ist es besser:


    Spoiler anzeigen
    forward Hooked_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[],select);
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
    return CallLocalFunction("Hooked_OnDialogResponse","ddddsd",playerid, dialogid, response, listitem,inputtext,0); //0=select
    }
    #if defined _ALS_OnDialogResponse
    #undef OnPlayerConnect
    #else
    #define _ALS_OnDialogResponse
    #endif
    #define OnDialogResponse Hooked_OnDialogResponse

    Spoiler anzeigen
    native Hooked__ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])=ShowPlayerDialog;

    Spoiler anzeigen
    stock Hooked_ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]) {
    return CallLocalFunction("Hooked__ShowPlayerDialog","dddssss",playerid,dialogid,style,caption,info,button1,button2);
    }
    #if defined _ALS_ShowPlayerDialog
    #undef ShowPlayerDialog
    #else
    #define _ALS_ShowPlayerDialog
    #endif
    #define ShowPlayerDialog Hooked_ShowPlayerDialog


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

    Einmal editiert, zuletzt von Kaliber ()

  • Ich wenn du es schon gelöst hast, vielleicht hilft es ja auch anderen ;D

    Wie müsste sowas aussehen? Hab mich nie damit beschäftigt, so wirklich.


    Also im Prinzip gibt es 2 Möglichkeiten.


    1. Hook eine Funktion (bspw. OnPlayerConnect)
    2. Erstell einfach eine Funktion die du einfach aufrufen kannst.


    mMn ist die 2. Möglichkeit wesentlich besser, einfach darum, weil OnPlayerConnect gerne Probleme bereitet, wenn es um Übermittlung von Daten in einem langen Zeitraum geht.
    Zu dem kann man die Funktion dann aufrufen wenn man sie auch wirklich braucht, schont also auch den PC des Users wenn es um die Verarbeitung der ankommenden Daten geht.


    Allgemein sollte man Dinge nur dann erstellen wenn sie benötigt werden (Streamerprinzip)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski