[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
  • Ist nur ein Beispiel geht alles viel dynamische etc. bin aber gerade am essen xD

    Okay, kann man dass nicht irgendwie einfacher machen, weil es ist ja ziemlich viel zum schreiben dann :D

  • Code
    #define LEVEL_MULTIPLIER 2
    
    
    stock GetPlayerMaxExp(playerid)
    {
    	new NextLevel = Spieler[playerid][pLevel] +1;
    	new MaxRespekt = NextLevel*LEVEL_MULTIPLIER;
    	return MaxRespekt;
    }

    Level 1 = 4 Respektpunkte, Level 2 = 6 Respektpunkte, Level 3 = 8 Respektpunkte, Level 4 = 10 Respektpunkte, usw. :)


    Kannst die Definition ändern wie du willst.

  • Ayy yo,
    hab versucht nen Schiff irgendwie fahren zu lassen :D



    Code
    MoveObject(schiff[0], 0, 0+10, 0, 20.00);
    	MoveObject(schiff[1], 0, 0+10, 0, 20.00);
    	MoveObject(schiff[2], 0, 0+10, 0, 20.00);

    Das Schiff besteht aus 3 Objekten.. Schiff[0], Schiff[1] nd Schiff[2].



    Das Resultat ist erschreckend :D
    Wo liegt der Fehler? c:

  • Um das Objekt vorwärts bewegen zu lassen musste das so machen:


    ast2ufdyxkb1.png


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

  • Hey, man hat ja bei sscanf die Möglichkeit per Spieler Name / ID die "targetid" zu suchen.
    Das funktioniert auch, nur wie kann ich das umändern das dass auch mit weniger Buchstaben/Zahlen funktioniert?


    Sprich:


    Aktuell funktioniert z.B. mein kick Befehl so:


    /kick [LnD]JustMe.77 .. = Erfolgreich
    /kick JustMe = nicht erfolgreich



    CMD:kick(playerid, params[]) {
    new playerID, Reason[64], cQuery[128 + (MAX_PLAYER_NAME * 2)];



    if(pData[playerid][P_Admin] < 1) return
    SendClientMessage(playerid, COLOR_RED, LV_Fail);



    if(sscanf(params,"uS()[32]", playerID, Reason)) return
    SendClientMessage(playerid, COLOR_RED, "Use: /kick <player> <reason>");



    if(!IsPlayerConnected(playerID)) return
    SendClientMessage(playerid, COLOR_RED, ID_Fail);



    if(!Reason[0]) format(Reason, sizeof(Reason), "No reason given");



    format(cQuery, sizeof(cQuery), "{%06x}%s {FFFFFF}has been kicked by {%06x}%s {FFFFFF}(%s)", GetPlayerColor(playerid) >>> 8, GetName(playerID), GetPlayerColor(playerID) >>> 8, GetName(playerid), Reason);
    SendClientMessageToAll(-1, cQuery);



    format(cQuery, sizeof(cQuery), "Admin %s kicked %s for %s", GetName(playerid), GetName(playerID), Reason);
    writeLog("Logs/Kick.txt", cQuery);



    Kick(playerID);
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Das funktioniert auch, nur wie kann ich das umändern das dass auch mit weniger Buchstaben/Zahlen funktioniert?

    Gar nicht...was machst du denn wenn es einen [LnD]JustMe.77 gibt und einen JustMe gibt...


    Dann haste doch n Problem :D

    ast2ufdyxkb1.png


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

  • Wenn's [LnD]JustMe.77 & JustMe gibt (ich bin etwas besonderes mich gibt's nur einmal :P) und der Spieler /kick JustMe eingibt, dann würde ich den Spieler JustMe kicken da er irgendwie näher dran ist als der Spieler mit Clantag.


    Mit freundlichen Grüßen
    JustMe.77 8)

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Nutze:
    stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
    {
    new l_name[MAX_PLAYER_NAME];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(!strcmp(l_name,l_PlayerName, true)) return i;
    }
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(strfind(l_name,l_PlayerName,true)!=-1) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }


    Und schreibe den Befehl so:
    CMD:kick(playerid, params[]) {
    new playerID, pname[MAX_PLAYER_NAME], Reason[64], cQuery[128 + (MAX_PLAYER_NAME * 2)];



    if(pData[playerid][P_Admin] < 1) return
    SendClientMessage(playerid, COLOR_RED, LV_Fail);



    if(sscanf(params,"s[24]S()[32]", pname, Reason)) return
    SendClientMessage(playerid, COLOR_RED, "Use: /kick <player> <reason>");


    playerID = ReturnPlayerID(pname);


    if(!IsPlayerConnected(playerID)) return
    SendClientMessage(playerid, COLOR_RED, ID_Fail);



    if(!Reason[0]) format(Reason, sizeof(Reason), "No reason given");



    format(cQuery, sizeof(cQuery), "{%06x}%s {FFFFFF}has been kicked by {%06x}%s {FFFFFF}(%s)", GetPlayerColor(playerid) >>> 8, GetName(playerID), GetPlayerColor(playerID) >>> 8, GetName(playerid), Reason);
    SendClientMessageToAll(-1, cQuery);



    format(cQuery, sizeof(cQuery), "Admin %s kicked %s for %s", GetName(playerid), GetName(playerID), Reason);
    writeLog("Logs/Kick.txt", cQuery);



    Kick(playerID);
    return 1;
    }


    Dann geht das beschriebene Szenario, wenn du den genauen Namen eingibst, und falls nicht, wird die erst-gefundene ID genommen.

  • Danke, funktioniert perfekt.


    Möchte das mit mehreren Befehlen machen und möchte deswegen wissen wofür die Zahlen in


      if(sscanf(params,"s[24]S()[32]", pname, Reason)) return



    bedeuten?


    Die erste Zahl für die Länge des Spielernamen und die zweite für den Grund?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Hmm, merke gerade das es dann nicht mehr mit der Playerid funktioniert, soll ja mit beidem gehen @Jeffry


    Habe versucht das if(sscanf(params,"s[24]S()[32]", pname, Reason)) return s dort drin in einem u oder r zu ändern, hat beides nicht geholfen.


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Hmm, merke gerade das es dann nicht mehr mit der Playerid funktioniert, soll ja mit beidem gehen @Jeffry

    Ah, auch noch zusätzlich. Das geht auch, so:
    CMD:kick(playerid, params[]) {
    new playerID, pname[MAX_PLAYER_NAME], Reason[64], cQuery[128 + (MAX_PLAYER_NAME * 2)];



    if(pData[playerid][P_Admin] < 1) return
    SendClientMessage(playerid, COLOR_RED, LV_Fail);



    if(sscanf(params,"sS()[32]", pname, Reason)) return
    SendClientMessage(playerid, COLOR_RED, "Use: /kick <player> <reason>");


    if(IsNumeric(pname))
    playerID = strval(pname);
    else
    playerID = ReturnPlayerID(pname);


    if(!IsPlayerConnected(playerID)) return
    SendClientMessage(playerid, COLOR_RED, ID_Fail);



    if(!Reason[0]) format(Reason, sizeof(Reason), "No reason given");



    format(cQuery, sizeof(cQuery), "{%06x}%s {FFFFFF}has been kicked by {%06x}%s {FFFFFF}(%s)", GetPlayerColor(playerid) >>> 8, GetName(playerID), GetPlayerColor(playerID) >>> 8, GetName(playerid), Reason);
    SendClientMessageToAll(-1, cQuery);



    format(cQuery, sizeof(cQuery), "Admin %s kicked %s for %s", GetName(playerid), GetName(playerID), Reason);
    writeLog("Logs/Kick.txt", cQuery);



    Kick(playerID);
    return 1;
    }


    Und füge diese Funktion noch hinzu:
    stock IsNumeric(const string[])
    {
    for(new i = 0, j = strlen(string); i < j; i++)
    {
    if(string[i] > '9' || string[i] < '0') return 0;
    }
    return 1;
    }

  • Sobald ich am Anfang aus dem Grove Street Interior rausgehe, fallen meine Grovecars durch die Welt und spawnen ein wenig weiter weg, als dort wo sie eigentlich stünden. Gibts da einen Tipp für?

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

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