Beiträge von IPrototypeI

    forward LoadAccount(playerid);
    public LoadAccount(playerid)
    {
    if(GetPVarInt(playerid, "loggedin") == 1)
    {
    new data[20];
    cache_get_field_content(0,"Name", SpielerInfo[playerid][pName]);
    cache_get_field_content(0,"Adminrang", data);
    cache_get_field_content(0,"Fraktion", data);
    }
    }



    da musst du konvertieren mit strval oder floatstr entweder in ein integer oder in eine float je nach dem bei bools reicht es auch in ein integer da es ein zuweisungsoperator gibt
    um werte zu "konvertieren" in true oder false.



    beispiel bei dir :
    strval(data) = SpielerInfo[playerid][pAdminrang];


    warum nun data ?
    Es wird ein string zurück gegeben und das immer um diesen nutzen zu können brauchst du einen zweit string umbedingt ist das nicht möglich man könnte auch alles mti dem name machen und diesen zum schluss auslesen aber nun gut du brauchst einen string da die ganze cache funktionen strings zurück geben in ihrem so gesehen 3 Parameter wenn man 0 nicht bei 0 beginnt , jedoch sieht man e sja eindeutig. Den jeweiligen string kann man nicht an integer weiter geben mit dem selben wert den sie enthalten somit muss man das
    ganze umkonvertieren wie schon genannt mit strval oder floatstr je nach dem.

    new bool:no;
    for(new Kord = 0; Kord < sizeof(ATMs); Kord++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 7.0, ATMs[Kord][0], ATMs[Kord][1], ATMs[Kord][2])){
    no = false;
    break;
    }else no = true;
    }
    if(no)return SendClientMessage(playerid, GRAU, "Du bist an keinem Bankautomaten.");


    Du darfst die schleife auch nicht nach der ersten if abfrage abbrechen lassen und durch die Nachricht in der For-schleife bezweckst du nur spam


    Sollte es ihrgend welche problem mit cache_get_row geben hast du noch eine zusätzliche möglichkeit


    cache_get_field_content zu benutzen


    verwendungsbeispiel:


    cache_get_field_content(0,"Password",speicher);


    er bezieht sich dann direkt auf die Spalte da muss man dann nicht die Spalten abzählen um die richtige auszulesen.


    Was man noch anmerken sollte ist das du am besten mysql_format benutzt und beim Platzhalter für den namen '%e'
    damit werden die strings escaped und somit kannst du auch SQL Injections vermeiden sollte auch dort gemacht werden wo der spieler
    eingriff auf die querys hat.

    Muss ich BigYoda recht geben mein fall ist es auch nicht. Vllt sitzt du dich mal an ein neues oder überarbeitest dieses, was nicht so aufbrausend ist, aöso generel überladen von ihrgend welchen Effekten , Mustern etc... .
    Zum Thema Background bei dir sieht man eindeutig das die hinteren gebäude nicht gestreamt wurden. Vllt die Sichtweite höher stellen oder gar noch einen Mod verwenden.

    Ich versteh grundlegend nicht wo jetzt dort speziel das problem sein sollte ich hab dir oben einen text geschrieben dort sind links enthalten und man hat die möglichkeit sich die Informationen zusammen zu suchen und sich das wissen auch selbst anzueignen

    Wärst du so nett und machst mir ein beispiel zu einer Zone?
    Wäre echt extrem nett von dir ;)


    in wie fern ein beispiel also ich würde das mit dem standart filesystem machen und dne inhalt splitten mit sscanf.



    #define STR_LEN 64
    new GFDATASTR[STR_LEN];
    stock LoadZoneInfo(){
    if(!fexist("File.txt"))return print("File.txt missing");
    new File:gfdata = fopen("File.txt", io_read),i;
    while(fread(gfdata,GFDATASTR)){
    sscanf(GFDATASTR,"....",GFInfo[i]);
    ++i;
    }
    fclose(gfdata);
    return print("Gangfightinfos loaded");
    }
    stock SaveZoneInfo(){
    new i,File:gfdata = fopen("File.txt", io_write);
    for(; i < MAX_ZONE; ++i){
    if (fexist("File.txt")){
    strdel(GFDATASTR,0,STR_LEN);
    format(GFDATASTR,STR_LEN,"%d|...\r\n",);
    fwrite(gfdata, GFDATASTR);
    }
    }
    fclose(gfdata);
    return print("Gangfightinfos saved");
    }


    ein beispiel

    1. Die hast dir so gesehen oben schon beantwortest


    2. Du solltest die informationen der Zonen wer Owner ist in einem file oder per MySQL speichern etc... zu dem zum anzeigen der Zonen diese werden erstellt unter OnGameModeInit
    mit GangZoneCreate(Float:minx, Float:miny, Float:maxx, Float:maxy);
    http://wiki.sa-mp.com/wiki/GangZoneCreate
    um diese anzuzeigen kannst du wenn der Spieler auf deinen Server connected also beiOnPlayerConnect die Zone anzeigen lassen per
    GangZoneShowForPlayer(playerid, zone, color);
    http://wiki.sa-mp.com/wiki/GangZoneShowForPlayer


    3. Dazu gibt es wieder eine Fnktion die sich
    GangZoneFlashForAll((zone, flashcolor);
    http://wiki.sa-mp.com/wiki/GangZoneFlashForAll
    nennt das ganze kannst du auch wieder mit
    GangZoneStopFlashForPlayer(playerid, zone);
    http://wiki.sa-mp.com/wiki/GangZoneStopFlashForPlayer
    stoppen. Dabei blinkt die Zone mit der Grundfarbe der Zone also womit sie angezeigt wird auf der Map und der Farbe welche du bei der Parameter color rein schreibt dies sind
    umgestellt ARGB codes 0xFF000096 sollte RGBA sein .



    Zum ändern der Farbe benutzt du
    GangZoneShowForAll(zoneid,farbe); nur solltest du alle daten während des GMs in einem array Temporär speichern.

    Also als grundtipp ist es gut wenn du alles werte in deinem array für einen spieler wenn diese connected auf 0 setzt
    dazu gibts zwei möglichkeiten per for-schleife


    for(new i; eSpielerDaten:i < eSpielerDaten; ++i)SpielerInfo[playerid][eSpielerDaten:i] = 0;


    for(new i; i != _:eSpielerDaten; ++i)SpielerInfo[playerid][eSpielerDaten:i] = 0;


    oder auf das zeichen ende setzten für string '\0' wie du willst.


    Also beispiel für das umschreiben
    laden
    SpielerInfo[playerid][pFraktion] = dini_Int(Spielerdatei,"Fraktion"));
    speichern was du falsch machst bei dir du lässt den wert aus
    dini_IntSet(SpielerDatei, "Fraktion",SpielerInfo[playerid][pFraktion]);


    //edit


    wenn du strings nutzen willst also oben dann musst das array auch jeweilig deklarieren im enum


    enum eSpielerDaten
    {
    pName[MAX_PLAYER_NAME],
    pPasswort[128],
    Float:PosX,
    // etc nur ein beispiel
    };

    So fern kein Unknown Command kommt im Chat wird es daran liegen
    if(GetPVarInt(playerid,"DeagleDuel")==1)

    das die Spielervariabel DeagleDuel nicht auf 1 gesetzt wurde.
    Leicht kann man das überprüfen in dem man dort eine nachricht zurück geben lässt

    if(GetPVarInt(playerid,"DeagleDuel")!=1)return SendClientMessage(playerid,-1,"Du bist in keinem Deagleduel!");

    Ein streamer wurde benutzt, sowie die außenwände mit createObject erstellt. eine Sache die man noch machen könnte wäre, die spawn distanz der Objecte einzustellen.
    Die Kleinigkeiten mit der Tür wurden bereits behoben, jedoch nicht auf dem Server draufgeladen. Aber danke für die Info ;)


    Falls du Interesse hast, kannst du mich ja mal per PN anschreiben ^^


    Mfg



    Grundsätzlich ist es auch hilfreich alles erstellte Objecte per streamer zu erstellen man kann noch in der Tickrate tricksen geht bei zu niedriger einstellen auf die CPU auslastung. Dennoch zurück zum streamen je mehr Objecte du mit CreateObject erstellt hast desto weniger kannst du einstreamen in der gesamtzahl.


    Da es ja auch einen zusammenhang zwischen CreateObject (global für jeden) und CreatePlayerObject gibt :D ist ja auch logisch

    Naja hatte einfach das erstellen mit new vergessen^^


    Hab da noch mal eine Frage und zwar möchte ich ein cmd an bestimmte Orte binden ich kenn da nur die möglichkeit IsPlayerInRangeOfPoint und die koordinaten angeben kann ich nicht auch ein object angeben wie zum beispiel einen geldautomaten mein gedankengang war ob man sich nicht auf eine object id beziehen könnte um so nicht jeden automaten definieren zu müssen ich hoffe es ist verständlich was ich möchte.


    Nein das ist leider "nicht" möglich ohne IsPlayerInRangeOfPoint zu arbeiten bezüglich den Objecten du kannst kleine Zonen erstellen per streamer plugin jedoch ist auch zu viel aufwand erstell dir ein 2d array mit einem enum als index für die 2d. Dann kannst du ganz einfach die Die koordinaten hinzufügen und bei command gehst du per
    for-schleife die einträge des arrays durch und sollte einer gefunden werden so kannst die schleife abbrechen und den dialog aufrufen oder sonst was.
    Dazu kannst du dir mein Tutorial anschauen ist zwar ein Zollsystem dennoch sollte das kein problem sein die grundstruktur zu nehmen und die auf einem atm system aufzubauen.

    Kann da BlackAce nur zustimmen beispiel beim header mach den rest des backgrounds doch schwarz und lass die eine leiste sich widerholen in x richtung


    und der untere Bereich also die icons + text hilfe, Datum etc.. würde ich ein bissle mehr nach innen hauen