Beiträge von BlackFoX

    Es ist das Sa-mp System zu mehr als die Hälfte jedoch hat dieses eine extra Callback & lässt sich außer den oben erwähnten Funktionen alles alte nutzen zudem lassen sich Zonen speichern & jederzeit wieder herstellen

    Hallo Leute,


    ich hatte noch was altes auf dem PC liegen und hab mich gefragt ob es jemand braucht, es ist nichts großes, es ist ein Zonen System das
    eine Callback besitzt die angibt ob der Spieler ein gewisse Zone betritt.
    Dieses Zonen System hat keine eigenen ID's sondern nutzt die normalen ID's also zum Anzeigen der Zonen können die Standard Funktionen genutzt werden,
    nur diese Funktionen die hier stehen sind wichtig bzw. zu ändern falls man dieses System nutzt, der Rest geht auch normal.



    OnPlayerEnterZone(playerid,zoneid,zonename[])

    • playerid , der , der die Zone betritt
    • Die Zone die betreten wurde
    • Name der Zone
    • wird aufgerufen sobald der Spieler eine neue Zone betritt also nicht immer ^^


    Funktionen


    ZoneConnect(playerid)

    • Bitte unter OnPlayerConnect platzieren
    • Setzt bestimmte Variablen zurück


    AddZone(Float:MiniX,Float:MaxiX,Float:MiniY,Float:MaxiY,ZoneName[] = "Noname")

    • Koordinaten der Zone
    • Name der Zone
    • Gibt die ID der Zone wieder


    DestroyZone(zoneid)

    • Zerstört die Zone
    • Gibt nichts zurück


    Spezial Funktionen


    LoadZones(dateiname)

    • Zonen aus einer bestimmten Datei Laden, es können Zonen aus mehreren Dateien geladen werden


    SaveZones(dateiname)

    • Zonen werden in eine Datei gespeichert, alle die erstellt wurden


    So wie gesagt, um die Zonen anzuzeigen usw. müsst ihr die Standard Sa-mp Zonen Funktionen nutzen


    Hier sollte ein Liste der Funktionen sein


    http://wiki.sa-mp.com/wiki/GangZoneCreate


    Viel Spaß damit

    Jetzt mal was zum Thema & zur Person desjenigen, ich finde es persönlich komisch das er sich
    auf das Niveau herunter begibt & mit einem Doppel Account versucht noch mehr zu werben oder was auch immer,
    solche Handlungen sagen meist nichts gutes über die Person aus zu mindestens merkt man mit wem man es zu tun hat

    Bei GTA SA hat es erst mal gedauert & bei IV wirds mindestens genau solange brauchen bis alles glatt läuft & das beziehe ich auf das darauf bezogene Mod & das Spiel selber

    public RepairVehiclex(vehicleid)return RepairVehicle(vehicleid);


    das ist eine einzelne Klasse wozu } ... -_-


    und playerid durch i ersetzen das ist in der Timer Klasse die ID Angabe...


    Radius ,x,y,z sind deine Angaben zum PaynSpray Koordinaten Plus Entfernung, dort wo sich der Spieler befinden muss


    und zum Schluss


    forward checkpayspray();

    Da ich viele sehe die immer aus dem GF kopieren & meinen das es ach so schwer so sei , hier hab ich mal ein Beispiel vorbereitet,
    daraus könnt ihr einige Informationen fassen & schauen wie das ganze Funktioniert, hab das Speichern in diesem Fall mit meinen Ini ähnlichen System gemacht ( bfx_ini )


    Schaut euch das Beispiel an & lernt eventuelle draus


    • Registrierung umfasst { Abfragen ob der Account existiert oder nicht > Datei erstellen > Datei Öffnen > Passwort eintragen > Speichern & Schließen }
    • Login umfasst { Abfragen ob Account existiert oder nicht > Datei Öffnen > Passwort Laden > Passwort abfragen > entscheiden ob richtig oder Falsch > Handeln }


    #define MAX_PASS 13 // 13 = Maximale Passwort Länge.. kann verändert werden
    #define ACC_EXIST 5 // Fehler Codes damit ihr wisst welche Nummer für welchen Fehler steht...
    #define ACC_NOT_EXIST 8
    #define LOGGED_IN 9
    #define NOT_LOGGED_IN 10
    #define REGISTER_FAILED 11
    #define PASS_LEN_ERR 12
    new bool:player_logged[MAX_PLAYERS];


    OnPlayerRegister(playerid,Passwort[])
    {
    if(fexist(accform(playerid)))return ACC_EXIST;
    if(strlen(Passwort) >=MAX_PASS)return PASS_LEN_ERR;
    CreateINI(accform);
    if(OpenINI(accform))
    {
    SetKeyString("passwort",Passwort);
    SaveINI();
    CloseINI();
    return 1;
    }
    return REGISTER_FAILED;
    }
    OnPlayerLogin(playerid,Passwort[])
    {
    if(!fexist(accform(playerid)))return ACC_NOT_EXIST;
    new readpw[MAX_PASS];
    if(OpenINI(accform(playerid))
    {
    strmid(readpw,ReadStringKey("passwort"),MAX_PASS);
    CloseINI();
    }
    return (!strcmp(readpw,Passwort)) ? (LOGGED_IN):(NOT_LOGGED_IN);
    }



    /* Beispiel


    switch(OnPlayerLogin(playerid,"Pass bla"))
    {
    case LOGGED_IN:
    {
    // Weitere Ladevorgänge...
    player_logged[playerid] = true;
    }
    case ACC_NOT_EXIST:return SendClientMessage(playerid,0xFF0000FF,"Dieser Account existiert nicht!");

    usw...


    }



    Bei OnPlayerRegister Funktionierts genau so


    */



    accform(playerid)
    {
    new acc[MAX_PLAYER_NAME+5];
    format(acc,sizeof acc,"%s.acc",spielername(playerid));
    return acc;
    }
    spielername(playerid)
    {
    new player[MAX_PLAYER_NAME];
    GetPlayerName(playerid,player,sizeof player);
    return player;
    }



    Das System gibt Fehler Codes zurück je nach Fehler Code kann man dann entscheiden was passiert & Spieler Daten Laden aber das müsst ihr dann selber übernehmen, sollte kein Ding sein für
    etwas fortgeschrittene, wie gesagt nicht einfach kopieren & machen, hier müsst ihr schon selber denken

    if(response && strlen(inputtext) > 0)return OnPlayerLogin(playerid,inputtext);
    else return ShowPlayerDialog(playerid,Login,DIALOG_STYLE_INPUT,"Einloggen","Es darf kein Leeres Textfeld Sein!\nBitte tippe dein Passwort in das TextFeld ein um dich einzuloggen:","Einloggen","Abbruch");


    Erstens das ist kürzer zweitens zeig uns einfach den Code Abschnitt

    new inpoint[MAX_PLAYERS];


    public checkpayspray()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
    if(IsPlayerInRangeOfPoint(i,Radius,x,y,z) && !inpoint[playerid])
    {
    inpoint[i] = 1;
    MoveObject(...); // Gate schließen wenn nötig
    SetTimerEx("RepairVehiclex",5000,0); // Wenn nötig ansonsten einfach RepairVehicle & Color Changen...
    }
    else if(IsPlayerInRangeOfPoint(i,Radius,x,y,z) && !inpoint[playerid])
    {
    //[...] Anderes PaynSpray
    }
    else inpoint[i] = 0;
    }
    return 1;
    }


    public RepairVehiclex(vehicleid)return RepairVehicle(vehicleid);


    Nur noch Timer setzen für Checkpaynspray ... auf 1000 ms reicht & das wars... & natürlich so abändern wie man es gerne hätte