[Scripting-Übung] by INk

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
  • Ich kann mal so ein Spiel Anfangen :D Wer mitmachen will ist dazu herzlich eingeladen.
    Ich gebe eine Aufgabe, löse sie natürlich selbst und man kann sich dann ja mal ansehen was wir so herausbekommen ;D
    Nach einiger Zeit, oder nach Wunsch poste ich dann die Lösung.


    Scripting-Übung #1
    [tabmenu]


    [tab='Frage']
    "Eine Funktion womit man am ende die Player IP-Range in einem String stehen hat, also die IP bis zum 2. Punkt"
    Wobei es kein public oder stock sein muss ;)
    [tab='Lösung']
    (Wie immer gibt es natürlich mehrere Lösungen)
    Ich habe es quasi genau wie Hauke :) Einen Flotten 3 Zeiler

    new IP[16];
    GetPlayerIp(playerid,IP,sizeof(IP));
    strmid(IP,IP,0,strfind(IP,".",false,strfind(IP,".")+1));

    [tab='Erklärung/Erläuterung']
    Erklärung/Erläuterung:
    strmid kopiert von einen in einen anderen string. Wir starten also indem wir von dem IP string in dem die IP steht am ende wieder in diesen Schreiben.
    So sparen wir uns einen neuen string. Mit der Syntax von strmid starten wir bei 0 schließlich wollen wir die IP von vorne haben.
    Nun werden die Funktionen von innen nach außen abgearbeitet, das innere strfind gibt uns als zahl zurück wann es den ersten punkt findet.
    Diese gibt die Zahl dann an das äußere strfind weiter, dieses würde uns aber die selbe zahl zurück geben, also rechnen wir das Ergebnis + 1
    Nun haben wir als ergebnis beider funktionen die stelle bis zu der strmid kopieren soll.


    Fertig.
    //Wers besser erklären kann, bitte postenxD
    [/tabmenu]


    Scripting-Übung #2
    [tabmenu]


    [tab='Frage']
    Eine eigene String-Compare Funktion die true zurückgibt wenn die strings, auch in Groß und Kleinschreibung, übereinstimmen.
    [/tabmenu]


    //Edit 1 Erste Mögliche Lösung geaddet
    //Edit 2-3 2. Aufgabe geaddet

  • Ich habe grade ehrlich gesagt Angst loszulegen,
    weil soviele Leute grade hier im Thread sind und
    wahrscheinlich schon angefangen haben :/


    Vllt denkste dir dazu noch ne Regel aus um dem vorzubeugen,
    finde die Idee nämlich gut.
    Das wird wohl solange gut laufen, bis die Leute ihre Skriptwünsche hier reinpacken...

  • GetIPRange(playerid)
    {
    new pIP[16],a,b,range[12];
    GetPlayerIp(playerid,pIP,16);
    for(new i;i!=17;i++)
    {
    if(pIP[i]=='.')
    {
    a++;
    if(a==2)
    {
    b=i;
    break;
    }
    }
    }
    strmid(range,pIP,0,b);
    return range;
    }


    Ungetestet, zu 99% falsch, unsauber, hässlich, aber ich hab nen Ergebnis :D

  • Obwohl ich zu spät bin, schreib ich trotzdem mein Ergebnis rein xD
    stock GetRangeIP(playerid,rangeip[],rangelen = sizeof(rangeip)) {
    if(!IsPlayerConnected(playerid)) return -1;
    new ip[32],
    pnr,
    cpos;
    GetPlayerIp(playerid,ip,sizeof(ip));
    for(new s; s<strlen(ip);s++) {
    if(ip[s] == '.') pnr++;
    if(pnr == 2) {
    cpos = s;
    break;
    }
    }
    strmid(rangeip,ip,0,cpos,rangelen);
    return 1;
    }
    Zu 99% getestet, funtzt, gibt "127.0" aus.

  • Dir ist doch echt langweilig xD
    Ich hätte den String in der die IP gespeichert werden soll kleiner machen sollen, hast recht.
    ABER du hast den Null-Terminator vergessen, wenn mal ne IP wirklich genau 16 Zeichen lang ist,
    wird das letzte nicht mitgespeichert! xD

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Yop, hast recht.
    Wie geht es jetzt den weiter?
    Wird INk eine neue Aufgabe posten oder muss der, der sie geschafft hat eine Aufgabe posten?


    //Edit:
    Ich glaube INk wollte sowas sehen:
    #define GetRangeIP(%0,%1,%2) \
    GetPlayerIp(%0,%1,sizeof(%1)); \
    new cr = strfind(%1,".",false,4); \
    strmid(%2,%1,0,cr)
    Syntax: GetRangeIP(playerid,String zum Speichern der normalen IP, String in der die RangeIP stehen wird);
    Edit2: Rechtschreibfehler

  • Ich hab auchn Angebot :thumbup:



    Also das ist kopiert von einer anderen Webseite :rolleyes:
    new IP[4],
    IPString[16];
    GetPlayerIp(playerid, IPString, sizeof IPString);
    sscanf(IPString, "p<.>a<i>[4]", IP);
    format(IPString, sizeof IPString, "%i.%i", IP[0], IP[1]);
    return IPString;


    Aus dem Code von Pain aka. DeaThHoPe hab ich mal schnell einen drei-zeiler gemacht :D
    #define GetRangeIP(%0,%1,%2) \
    GetPlayerIp(%0,%1,sizeof(%1)); \
    strmid(%2,%1,0,strfind(%1,".",false,4))


    Das ist eine Funktion von mir, wo man theoretisch ganz oben #define GetPlayerIP GetRangeIP einfügen kann ;) So hat man automatisch immer die 2 Stellen :D
    #define GetRangeIP(%0,%1) \
    GetPlayerIp(%0,%1,sizeof(%1)); \
    strdel(%1,strfind(%1,".",false,4),sizeof(%1))



    Mehr fällt mir gerade auch nicht ein.
    Bin gespannt aufs Ergebnis ^^

    Miete mich (nicht) :love:

  • Und nun nochmal an alle Pseudocoder: Defines als "inline function" zu verwenden ist fatal und wird fast so hart wie goto/jmpset bestraft.. mehr als ein inline-statement gehört nicht in ein Define.. (PS: Defines sollte man zur Abhebung übrigens mit Großbuchstaben schreiben)

  • ich bin zwar gerade etwa angetrunken aber daas ist mein Vorschlag:

    stock GetIPRange ( ip [ 32 ] )
    strmid ( ip , ip , 0 , strfind ( ip , "." , true , 1 + strfind ( ip , "." , true ) ) , 32 );

    nun kann man das ungefähr so nutzern:

    new string [ 32 ];
    GetPlayerIP ( payerid , string , 32 );
    GetIPRange ( string );
    printf ( "Das ist die IP Range: %s" , string );

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • xD Da ich jetzt den Sinn von dieser Aufgabe nicht verstehe und auch keine Ahnung habe was du meinst.
    Stell ich mal ne dumme Frage, erklärste nacher auch dein Ergebnis?


    Ich bin noch zum lernen da :D
    Wobei man sowas eh nicht benutzen wird.^^



    //edit


    Danke Servertest


    Jetzt hab ichs geraft, ich setzt mich ma kurz ran ^^


    Das ich davon nichts gehört habe is ja klar, weil ich mich für sowas nicht interessiere den "Stamm" zu bannen ist ja irwie doof :D


    //edit


    Naja ich hätte es auf dem selben Weg gemacht wie Hauke, also bringt ja nichts, wenn ich es hier nochma poste..


    #JoKér

    2 Mal editiert, zuletzt von #PsyNet ()

  • Ja ERklärung ist diese:


    Eine IP-Addresse die vom Nutzer als Identifikation gesendet wird, besteht (zur Zeit im IP_v4 Protokoll) aus 4 Blöcken. Die IPs können maximal: XXX.XXX.XXX.XXX lang sein und mindestens X.X.X.X - Jede länge dazwischen ist auch möglich wie: XX.XXX.X.XXX


    Es gibt statische, feste IPs, diese kosten im Regelfall bei deinem ISP extra und werden selten von privatpersonen genutzt. Mit jeder Zwangstrennung (alle 24 Stunden) oder beim Verbindungsneuaufbau der SubscriberLine bekommst du eine neue IP von deinem Provider (Telekom, Vodafone, Alice, KabelBW, ... , ...) zugewiesen. Damit kann der Pool der vergebenen IPs für die Anbieter kleiner gehalten werden. DIe IP setzt sich dabei zusammen aus:


    ISP.ORT.Dynamisch.Dynamisch - Das heißt bei einer IP verändern sich immer nur die letzten 2 Blöcke, wärend die ersten beiden gleich bleiben.


    Möchte man einen Spieler für immer (ausser er zieht um / wechselt den Provider) Bannen, nutzt man den Sog. Range - Ban. Dabei kontrolliert der kontaktierte Server nur die Ersten beiden Blöcke und es ist egal was dannach kommt. Dabei werden alle ca 3000 Potenzielle Menschen auf einmal dem Server verwiesen, nämlich alle in deiner Nähe, bei deinem Provider (Internet Anbieter).


    Ein Rangebann ist daher oft nur das letzte mittel, wenn ein und der selbe Spieler sonst immer wieder Schaden anrichten würde.


    Der hier erfragte Code wird eben diese "Range" als String abspeichern, so dass ein späterer Rangeban auch dann möglich ist, wenn der Spieler grad nicht online ist und man die Ip "vergessen hat", sicher das geht auch anders aber es ist ja auch nur eine Scripting Übung, wie hoch der Sinn am Ende ist, muss jeder selbst entscheiden. Amen.

    Deine Werbung hier?
    Niemals!
    Denn hier steht GTA:Westcoast
    gtawc.de

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