Beiträge von IPrototypeI


    1. Du benötigst keine abfrage nach den Listitems dies macht ja nur sinn wenn du welche verwendest was du ja in diesem fall nicht tust.
    2. Falls du das anzeigen willst brauchst du wie du schon geschrieben hast den Plathalter %s
    format(str,64,"Du kommst aus %s",PlayerInfo[playerid][pOrigin]);
    oder auch
    new str[64] = "Du kommst aus ";
    strcat(str,PlayerInfo[playerid][pOrigin]);

    Die jeweilige settings bringen hinsichtlich des streamers nicht viel, wenn du willst das die Objekte von einer weiteren distanz sichtbar sind so kannst du die Drawdistanz
    erhöhen enwteder über die Funktion CreateDynamicObjectEx oder durch das setzen dieser über Streamer_SetFloatData.


    Ebenfalls ist es möglich das zu viele Objekte auf einem Punkt sind daher kann man mit streamdistance arbeiten, um ein objekt früher oder später einzustreamen.
    Zusätzlich könntest du TickRate verringern was jedoch auf die CPU leistung geht falls die Elemente zu langsam erscheinen.

    Du setzt den Dialog-style auf DIALOG_STYLE_INPUT.


    ShowPlayerDialog(playerid,DIALOG_REGSTEP_3,DIALOG_STYLE_INPUT,"Woher kommst du?","Schreibe hier dein Wohnort rein!","Weiter"," ");


    nach dem klick auf weiter wird das Callback OnPlayerDialogResponse aufgerufen,


    dort solltest du den inputtext an deine variable übergeben. Dies geht auch via strcat als Beispiel.


    Davor solltest du jedoch pOrigin als integer zu einem string abändern im enum
    pOrigin[20],



    strcat(PlayerInfo[playerid][pOrigin],inputtext,20);


    Hier solltest du die Größe noch ändern von dem String var.
    format(var, 32, "Origin=%s\n",PlayerInfo[playerid][pOrigin]);fwrite(hFile, var);
    // da ladet er
    if( strcmp( key , "Origin" , true ) == 0 ) strcat(PlayerInfo[playerid][pOrigin],ini_GetValue( Data ),20);

    Nutz doch einfach die funktionen des streamer-plugins


    Damit erstellst du eine Zone:
    native CreateDynamicRectangle(Float:minx, Float:miny, Float:maxx, Float:maxy, worldid = -1, interiorid = -1, playerid = -1);


    Zum Thema schlagen dazu kannst du das Callback OnPlayerTakeDamage verwenden , welches aufgerufen wird wenn ein Spieler schaden bekommt die issuerid ist die Spielerid , welche dne schaden verursacht
    hat.
    Da kannst du zusätzlich überpüfen mit einer for-schleife (falls du noch andere Zone erstellen willst, welche keine DM-Zonen sein sollen) ob der spieler in einer dm zone ist.

    Code
    native IsPlayerInDynamicArea(playerid, areaid, recheck = 0);
    native IsPlayerInAnyDynamicArea(playerid, recheck = 0);



    Folgende Callbacks sind nützlich um irgend welche texte anzuzeigen, diese werden aufgerufen wenn der Spieler eine Zone, welche unter anderem mit CreateDynamicRectangle erstellt wurde :

    forward OnPlayerEnterDynamicArea(playerid, areaid);
    forward OnPlayerLeaveDynamicArea(playerid, areaid);

    Zunächst danke ich dir mal für die Nutzung meines Commandprozessors und die Erwähnung.


    Was ich gut find sind die umfangreichen Verwaltungsmöglichkeiten, als auch die Visuallisierung über Dialoge.


    Zum Thema zusätzliche Ideen:


    + Die Hinzufügung und verwaltung von Fraktionsfahrzeugen ( schon genannt).
    + Falls dies nicht umgesetzt ist wäre es nicht schlecht alle Mitglieder der Fraktion in der Mitgliederliste anzuzeigen,
    welche online als auch offline sind mit Kennzeichnung.
    + Ein Wilkommenstext oder Gangnachrichten die der Leader verwalten kann.

    Also ich find es garnicht so schlecht. Man könnte bei deinem Header die Abrundung der Ecken entfernen und eventuell das userpanel etwas anders gestalten. Eventuell könnte ein Footer noch das ganze abrunden.

    Bei dem oberen würde ich noch ein bisschen mehr Kontrast reinbringen.


    Unteres sieht gut aus


    Das Design war eigentlich ein Produkt von der Aussage von Steve das ich ein schlichtes Design erstellen sollte und er bearbeitet das weiter , dass hat sich jedoch nicht so ergeben
    Ich werde mir dein Rat dennoch zu Herzen nehmen und demnächst wenn ich wieder eine Coding Runde einlege und die ganzen Designs mal code beherzigen.


    Das muss doch alles Sagen oder? Ich möchte das er erstmal alles Ladet, finde ich einfach besser wenn alles Geladen hat bevor der Spieler sich einloggen kann.



    Der Punkt ist hier das du die ganzen Daten Temporär erstmal ablegst, der Nachteil ist sollte der Server crashen muss eine größere Datenmenge gespeichert werden es kann dadurch
    dazu kommen das Daten nicht gespeichert werden könnten und diese somit verloren gehen.


    Das umzusetzen ist dank Plugin kein Problem, jedoch solltest du erstmal differzieren ob die Daten welche du laden lassen möchtest statisch ablegen möchtest oder du später darauf zurück greifen und diese verändern. Jedoch gehe ich davon aus das du die zweite Variante bevorzugst.


    Zum einen erstmal zum ablegen von statischen Daten. Falls dein Skript auf MySQL bassieren sollte und du die neueren Versionen von dem MySQL Plugin von maddinat0r verwenden solltest (r30+)
    hast du die Möglichkeit, die ausgelesenen Daten im Memory abzulegen um somit auf den cache später zurück zu greifen. Das kann man mit diesen Funktionen handhaben.


    native Cache:cache_save(connectionHandle = 1);
    native cache_delete(Cache:cache_id, connectionHandle = 1);
    native cache_set_active(Cache:cache_id, connectionHandle = 1);


    Beispiele findest du auch hier
    http://wiki.sa-mp.com/wiki/MySQL/R33#cache_save


    Kommen wir nun zur zweiten Variante, welche ich bereits auch schon verwendet habe bei meinem Ingamemapeditor.
    Das ist mit dem Memory access plugin und der zusätzlichen list.inc sehr gut umsetzbar da du damit dynamische Arrays erstellen kannst und das ganze strukturieren.


    http://gta-sa-mp.de/forum/3-sa…393-memory-access-plugin/



    Hier mal ein Beispiel um eine Datenstruktur zu erstellen und um dort werte zu speichern:

    MEM::struct obj_mem_struct {
    obj_mem_objectid,
    obj_mem_materialindex,
    obj_mem_modelid,
    obj_mem_txdname[20],
    obj_mem_texturename[20],
    obj_mem_materialcolor,
    };


    new static LIST_init<streamer_material>;



    native __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname[], texturename[], materialcolor = 0) = SetDynamicObjectMaterial;
    stock static _SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname[], texturename[], materialcolor = 0, bool:set=false) {
    if(set)return __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname, texturename, materialcolor);
    new obj_insert[_insert];
    obj_insert[insert_objectid] = objectid;
    obj_insert[insert_materialindex] = materialindex;
    new ListIt:data = LIST_find_arr(streamer_material, obj_insert),object_buffer[obj_mem_struct];
    if(data)LIST::erase(streamer_material,data);
    object_buffer[obj_mem_objectid] = objectid;
    object_buffer[obj_mem_materialindex] = materialindex;
    object_buffer[obj_mem_modelid] = modelid;
    strcat(object_buffer[obj_mem_txdname],txdname,20);
    strcat(object_buffer[obj_mem_texturename],texturename,20);
    object_buffer[obj_mem_materialcolor] = materialcolor;
    LIST::push_back_arr(streamer_material, object_buffer);
    return __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname, texturename, materialcolor);
    }
    #if defined _ALS_SetDynamicObjectMaterial
    #undef SetDynamicObjectMaterial
    #else
    #define _ALS_SetDynamicObjectMaterial
    #endif
    #define SetDynamicObjectMaterial _SetDynamicObjectMaterial

    In der for schleife geht ja nicht


    Warum sollte das nicht gehen



    ocmd:pc(playerid,params[])
    {
    new i;
    for(; i != MAX_PC; ++i)
    {
    if(!IsPlayerInRangeOfPoint(playerid,6.0,objekte[i][x1],objekte[i][y1],objekte[i][z1]))continue;
    if(!sInfo[playerid][Betrieb])return PlayerTextDrawShow(playerid,PCRand[0][playerid]);
    else return SendClientMessage(playerid,Grad," ** Dein PC ist aus ! **");
    }
    return SendClientMessage(playerid,Grad," ** Du bist nicht vor deinem Computer ! **");
    }

    Wie wäre es mit einer for-schleife



    ocmd:pc(playerid,params[])
    {
    new i;
    for(; i != MAX_PC; ++i)
    {
    if(!IsPlayerInRangeOfPoint(playerid,6.0,objekte[i][x1],objekte[i][y1],objekte[i][z1]))continue;
    return SendClientMessage(playerid,Grad," ** Du bist vor deinem Computer ! **");

    }
    return SendClientMessage(playerid,Grad," ** Du bist nicht vor deinem Computer ! **");
    }

    !TheO Damit wollte ich nur wie schon gesagt jeglichen Zweifel ausräumen.


    Mert_Coleman Danke für die Verbesserungsvorschläge ich habe eigentlich die Render ein stück nach unten gesetzt aber ich werde nochmal danach schauen.



    Devine_ Danke für den Link wo ich damals nach ideen gesucht habe , fand ich nur ein bild von der vip-Ranggrafik da hab mich mich daraufhin an die Ranggrafiken gemacht, welche ich hier gepostet habe.
    Jedoch werde ich die besser rausnehmen. Jedoch wäre ich mit einer konstruktiven Kritik eher zufrieden.


    //edit GRAMMAR

    Zum Thema joggen eventuell gibts bei dir extra joggingwege wo es noch so stationen gibt, diese kannst du jeweils ansteuern um erstmal pause zu machen. Anschließend nach der kurzen Pause
    kannst die stationen machen.

    Zum einen warum verwendest du nicht einfach SetVehicleParamsEx .
    Falls das Auto zerstört wird muss das ganze erneut gesetzt werden um die türen zu verschließen, das gleiche gilt auch für das respawnen.


    Dein Fehler liegt generel daran das du id verwendest und nicht cInfo[id][id_x] da du hier die fahrzeugid temporär speicherst.

    Ich weiß nicht, ob ich etwas falsch mache, aber immer wird noch 0 ausgegeben.
    new varibale = mysql_tquery(mysql,"SELECT `hid` FROM `haus` ORDER BY `hid`","","");
    printf("Variable %d", varibale);


    L.G.


    Das wird auch nie so funktionieren.

    new value;


    mysql_tquery(mysql,"SELECT MAX(hid) AS `maxvalue` FROM `haus`;","@GetMaxValue");


    forward @GetMaxValue();
    @GetMaxValue(){
    value= cache_get_field_content_int(0,"maxvalue",sqlHandler);
    return 1;
    }



    //edit1