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!

  • Ich setzte für mehrere Dinge den selben Timer, all diese Dingen haben die selbe Index-ID im Array Objekt[0] und z.B Test[0]
    Jetzt will ich nach dem Timer ein Objekt erstellen, kann in den Timer eine Zahl mitgeben? Die Zahl setzt er dann für den Array-Index ein?

    Objekt[2] soll nach Timerende erstellt werden, dann einfach eine 2 den Timer mitgeben und er kann die Zahl dann im Array-i einsetzten.

    Ist so etwas möglich, oder was kann ich machen?

    Ich weiß, dass ich weiß, dass ich nichts weiß.
  • JacLos schrieb:

    Nein ich lade den Spieler nicht, diese Funktion muss wirklich die userID returnen
    Naja, dann solltest du es so lösen:

    C-Quellcode

    1. //Hier ist Code 1
    2. Funktion_Der_UserID();
    3. //Hier ist Code 2

    Nimm nun den Code 2 und Kapsel ihn in eine neue Funktion:

    C-Quellcode

    1. //Hier ist Code 1
    2. Funktion_Der_UserID();
    3. stock Code2(playerid, user_ID)
    4. {
    5. //Hier ist nun Code 2
    6. }

    Und dann kannst du einfach Code2 aufrufen, sobald du den Wert der User_ID hast und dahin alles übergeben und nutzen :)

    BrightLeaN schrieb:

    Ist so etwas möglich
    Natürlich, einfach mit SetTimerEx :)


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Ja hab ich mir auch schon gedacht, aber es gibt ja noch nen Befehl womit ich die SpielerID abfrage also

    halt insgesamt 3 musst dir das wie ne GetName() Funktion vorstellen.

    Bin mir sicher, dass man das alles in eine Funktion packen kann, kann mich

    nur nicht genau Erinnern wie man das nochmal schreibt
    Programmieren: 1% Programmieren, 99% Bugs Fixen
  • JacLos schrieb:

    Bin mir sicher, dass man das alles in eine Funktion packen kann
    Natürlich kann man das, aber das will man nicht :D

    Bzw man sollte es eigentlich schlicht weg vermeiden, da das keine asynchronen calls wären, sondern synchrone...

    Dann lade die User_ID doch einfach 1x am Start und dann speichere sie zwischen in einer Variable?

    Dann kannst du sie immer direkt nutzen, ohne eine Funktion verwenden zu müssen :)


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Achsoo sehe erst jetzt, dass sich der Name nicht auf den Spielernamen bezieht, okay.

    JacLos schrieb:

    Verstehe aber nicht warum man das nicht "wollen" wollte
    Weil der Server in dieser Zeit nichts machen kann und auf das Ergebnis von der Datenbank warten muss.


    C-Quellcode

    1. stock GetUserIDByName(const name[])
    2. {
    3. new Cache:reports,query[128];
    4. mysql_format(mysqlconnect, query, sizeof(query), "SELECT `userID` FROM `user` WHERE `username` = '%e' LIMIT 1", name);
    5. reports = mysql_query(mysqlconnect, query, true);
    6. new count = cache_num_rows();
    7. if(!count) return 0;
    8. new userID;
    9. cache_get_value_name_int(0, "userID", userID);
    10. return userID;
    11. }
    Alles anzeigen
    Nutze bei Strings zudem IMMER %e, sonst wäre eine SQL-Injection möglich.


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

  • So ich stehe momentan vor folgender Schwierigkeit da ich mich mit #emit etc. nicht auskenne.
    Ich will ein Script bisschen aufarbeiten indem ich das 2 sprachig mache.

    Ich habe da alles vollgeklatscht mit SendClientMessageEx.

    Quellcode

    1. SendClientMessageEx(playerid, color, form[], {Float, _}: ...) {
    2. #pragma unused form
    3. static
    4. tmp[145]
    5. ;
    6. new
    7. t1 = playerid,
    8. t2 = color
    9. ;
    10. const
    11. n4 = -4,
    12. n16 = -16,
    13. size = sizeof tmp
    14. ;
    15. #emit stack 28
    16. #emit push.c size
    17. #emit push.c tmp
    18. #emit stack n4
    19. #emit sysreq.c format
    20. #emit stack n16
    21. return (t1 == -1 ? (SendClientMessageToAll(t2, tmp)) : (SendClientMessage(t1, t2, tmp)) );
    22. }
    Alles anzeigen


    Dann habe ich folgendes gefunden aus dem Multilanguage Tutorial.

    C-Quellcode

    1. stock SendMessage(playerid, colour, Language1[], Language2[]) {
    2. switch( player_Language[playerid] ) {
    3. case 0: { SendClientMessage(playerid, colour, Language1); }
    4. case 1: { SendClientMessage(playerid, colour, Language2); }
    5. }
    6. return true;
    7. }
    Wie kann ich beides kombinieren, so dass ich z.B. ein SendMessageEx habe, mit dem ich dann Daten sowohl in den Text von Sprache 1 als auch Sprache 2 packen kann? Kann da jemand was bauen?

    z.B. sowas SendMessageEx(i, COLOR_WHITE, "%d joined the server","%d ha entrado al servidor",playerid); bzw, am besten das ganze noch fuer 3 Sprachen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Sub Royal ()

  • Sub Royal schrieb:

    bzw, am besten das ganze noch fuer 3 Sprachen.
    Du kannst dafür ein Makro nutzen :)

    Habe mal eins Geschrieben, exakt für 3 Sprachen:


    C-Quellcode

    1. #define SendMessageEx(%0,%1,%2,%3,%4,%5) format(string,sizeof(string),(player_Language[%0]==0)?(%2):(player_Language[%0]==1)?(%3):(%4),%5),SendClientMessage(%0,%1,string)
    2. //Kannst die Sprachen so definieren
    3. enum
    4. {
    5. LANGUAGE_A,
    6. LANGUAGE_B,
    7. LANGUAGE_C
    8. };
    9. //Dann mal ein Beispiel:
    10. player_Language[playerid] = LANGUAGE_A;
    11. new string[128];
    12. SendMessageEx(playerid,-1,"A: %d","B: %d","C: %d",5);
    13. //Output:
    14. //A: 5
    Alles anzeigen
    Bei LANGUAGE_B würde eben B: 5 ausgegeben werden und bei LANGUAGE_C eben C: 5 :)


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Guten Abend,
    ich habe mal eine Frage, ich möchte gerne das er einen Random Skin aus meiner Liste erhält, meine Liste schaut wie folgt aus:

    PAWN-Quellcode

    1. #define MAX_SKIN_DATA 20
    2. enum e_SkinData{
    3. skinID,
    4. skinGender,
    5. skinFraktion
    6. }
    7. new SkinData[MAX_SKIN_DATA][e_SkinData] = {
    8. {2, 1, 0}, {6, 1, 0}, {7, 1, 0}, {15, 1, 0}, {19, 1, 0}, {21, 1, 0}, {22, 1, 0}, {23, 1, 0}, {26, 1, 0}, {29, 1, 0},
    9. {11, 2, 0}, {12, 2, 0}, {13, 2, 0}, {41, 2, 0}, {54, 2, 0}, {55, 2, 0}, {69, 2, 0}, {90, 2, 0}, {93, 2, 0}, {192, 2, 0}
    10. };


    Wie muss ich nun mit einer Schleife vorgehen, das er Beachtet welches Geschlecht er ist und welche Fraktion er ist.
    Und das er dann natürlich nur den Skin aus meiner Liste Erhält.

    Mit freundlichen Grüßen,
    Bestes Zitat des Jahres von Max Jackson!
    Vertrauen kann man mir auch, ich bin hier auf Breadfish schon sehr lange Aktiv und das sollte schon auf einer gewissen Weise, eine Vertrauensbasis schaffen. Ich meine, meine schlimmste Verwarnung war lediglich eine Morddrohung - Is ja nix.