Beiträge von IPrototypeI


    Was möchtest du den machen klar kannst du OnDialogResponse aufrufen mit den jeweiligen parametern per CallLocalFunction
    oder CallRemoteFunction oder ganz einfach die Funktion aufrufen

    Ah ja ok


    Danke für die Hilfe und ich werde die einfache variante von Schwabbel nehmen


    Ahja falls du es gebrauchen kannst



    stock ChangeString(const text[],str[])
    {
    new i,l = strlen(text);
    for(; i != l; ++i)str[i] = text[i+1];
    str[l-1] = text[0];
    return 1;
    }
    eine kleinigkeit der setzt den letzten buchstaben des eingegebenen strings nach hinten

    Ich würde mal sagen das neu erstellen des textdraws und verschieben , dennoch ist die variante wo er gepostet hat besser da du so nicht immer und immer wieder
    das textdraw neu erstellst sondern den Text nur mit TextDrawSetString veränderst

    Hey, ich hab mal ne Frage:


    Wie kann ich machen, dass der Bot mit der Waffe in der Hand rumläuft?
    Ich hab ihm nen Schlagstock gegeben, doch weis nicht, wie er ihn in der `Hand
    hält.


    Mfg


    Das ist leider nur möglich, wenn du den bot mit der waffe in der Hnad aufnimmst.


    Daher Recorden mit einer Waffe.
    mit GivePlayerWeapon kannst du dem bot keine waffe geben.

    Wenn ich mir deine include so anschaue stehst du anscheinend auch auf Kriegsfuß mit dem Memory
    Bsp


    format(area, sizeof(area), "Unbekannt");
    return area;


    Ich hoffe du weisst das sowas zu Memoryleaks führt und warum benutzt du while schleifen anstelle von for-schleifen diese sind schneller.
    Was mich noch stört ist format diese funktion ist im großen und ganzen extrem langsam strcat ist doppelt so schnell.
    Noch eine andere möglickeit wäre den string mit Unknown zu deklarieren und danach mit dem erbrachten string gleichzusetzen.
    was sich da auch meist anbietet bei solchen arrays ist const zu verwenden oder static const .

    Das liegt daran das du auch die höhe verändern musst so wie man dies aus dem vorherigen code herraus lesen konnte ist das normale höge 10.0
    zu dem vergesse nicht die geschwindigkeit noch hinzuzufügen dies ist der 5 Parmaeter also nach der Z -koordinate


    //edit zu dem benutz doch bitte else if und starte bei den command nicht immer eine neeu if abfrage dies spart dem skript zeit.

    Das Problem lässt dich eigentlich schon aus dem kontext lesen von dem code.


    if(!IsAFightFaction(FightSystem[TempZone][fsOwnerFaction]))return SendClientMessage(playerid,FS_COL_GREY,"Gebiet wurde ausgeschaltet.");


    Dazu sollte man nur wissen was der operator ! bedeutet , was IsAFightFaction zurück gibt und was dort die bedingung ist geht aus dem text herraus.
    und zu guter letzte was überprüft wird , besser gesagt welcher wert FightSystem[TempZone][fsOwnerFaction]) dort ist die lösung auch wieder
    im name fsOwnerFaction.

    Ich hatte das Problem mal weil iwas mit der Stringlänge nicht stimmte.
    Aber geschätzt sind das nicht mehr als 512 Zeichen.


    Ich teste sowas immer mit Prints zwischen den Zeilen wo ich bestimmte Werte wiedergebe und das dann in der ServerLog nachsehe und schaue wo der Knackpunkt ist.


    Daran wird sowas nicht liegen ^^.
    Zu einem benutzt er übergroße strings mann kan auch nur 64 Zeichen im Titel verwenden, Das hat dennoch nix mit dem zu tun was ich eigentlich erwähnen wollte.


    Es kann gut sein das er eine negative dialogid aufruft das bedeutet es schließen sich sofort wieder sowie alle anderen geöffneten Dialoge.

    Es gibt manche situationen wo der Server crasht bei der verwendung von cache_get_row


    dieses problem hatte ich auch mal und zwar hier


    mysql_format(m_connect,Query,"SELECT `Password`,`LastLogin` FROM `accounts` WHERE `Name` = '%e'",PlayerName(playerid));
    mysql_function_query(m_connect,Query,true,"OnPlayerCheckAccount","i", playerid);


    du kannst acuh anstelle von cach_get_row
    cache_get_field_content
    verwenden


    Dennoch interessiert es mich auch brennent warum er dann crasht.


    Aber noch was zu deinem code ich hoffe zum testen steht dort mehr als
    SELECT 1 MySQL kann auch nicht erraten von wo er 1 returnen soll.


    da fehlt hier das from und generel kannst du so nichts genau testen bei dem speed test benutz schon SELECT Spaltename FROM Tabellenname

    Sieht wirklich gut aus ^^ dennoch die Säulen kommen nicht so gut rüber da kannst du dir ja was anderes einfallen lassen oder auch nicht.
    Was auch was wäre die Textur davon zu ändern oder es gibt so sehr länge säulen die kannst du auch verwenden der vorteil davon dann hast du eine strahlende umrandung
    wenn dud ie textur dann von dem objekt 4006 die citywall nimmst


    Ganz einfach, damit das klarer wird, warum es möglich ist.
    Deine Art das dazustellen, wäre schon wieder zukomplex und stellt es nicht so da wie es wirklich ist und warum es funktioniert ;)



    Wozu jetzt new?
    Was willst du mit dem Speicher?


    nix ist ja auch nur angelegt an deinem beispiel. Da du mit const ein konstante werte erstellst die der kompiler auch nicht verändert
    man kann auch


    stock const Array[20] = {0,1,...};


    draus machen sogar die kombination mit static ist möglich auch , wenn das ja hier abweicht


    static const Array[20] = {0,1,...};

    In dem du notepad++ öffnest und diesen code dort rein kopierst und danach unter Speicher unter All types eingibst und es mit der endung .inc speicherst
    geht jedoch auch mit einem anderen editor man sollte halt schauen das die datei auch als .inc abgespeichert ist.
    Mann kann auch bei notepad auf pascal wechseln und es dann abspeichern dort ist der typ .inc auch dabei.

    Hier bitte


    #include <a_samp>
    #define MAX_MACHINES 10 // CHANGE IF YOU'RE USING A STREAMER AND WILLING TO ADD MORE
    #define MACHINE_CASH 1 // Cost - Default is $1


    //**VARIABLES**//
    enum fMachines
    {
    Float:fmX,
    Float:fmY,
    Float:fmZ,
    fmType
    };
    new FoodMachines[MAX_MACHINES][fMachines];
    new Machine = 1;
    new SprunkMachine[MAX_MACHINES];
    new CandyMachine[MAX_MACHINES];
    new Anim[200];
    //**FORWARDS**//
    forward MachineAnimation(playerid);
    /*x---------------------------------CallBacks-------------------------------------x*/
    stock Seif_PlayerToPoint(playerid,Float:radi, Float:px, Float:py, Float:pz)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:x, Float:y, Float:z;
    new Float:ox, Float:oy, Float:oz;
    GetPlayerPos(playerid, ox, oy, oz);
    x = (ox -px);
    y = (oy -py);
    z = (oz -pz);
    if (((x < radi) && (x > -radi)) && ((y < radi) && (y > -radi)) && ((z < radi) && (z > -radi))) return 1;
    }
    return 0;
    }


    AddSprunkMachine(Float:X,Float:Y,Float:Z,Float:rX,Float:rY,Float:rZ)
    {
    Machine++;
    SprunkMachine[Machine] = CreateObject(955,X,Y,Z,rX,rY,rZ);
    FoodMachines[Machine][fmX] = X;
    FoodMachines[Machine][fmY] = Y;
    FoodMachines[Machine][fmZ] = Z;
    FoodMachines[Machine][fmType] = 1;
    }


    AddCandyMachine(Float:X,Float:Y,Float:Z,Float:rX,Float:rY,Float:rZ)
    {
    Machine++;
    CandyMachine[Machine] = CreateObject(956,X,Y,Z,rX,rY,rZ);
    FoodMachines[Machine][fmX] = X;
    FoodMachines[Machine][fmY] = Y;
    FoodMachines[Machine][fmZ] = Z;
    FoodMachines[Machine][fmType] = 2;
    }


    public MachineAnimation(playerid)
    {
    if (Anim[playerid] == 1) ApplyAnimation(playerid,"VENDING","VEND_Drink2_P",4.1,0,1,1,1,1), Anim[playerid] = 0 ,SetTimerEx("MachineAnimation",1000,0,"d",playerid);
    else if (Anim[playerid] == 2) ApplyAnimation(playerid,"VENDING","VEND_Eat_P",4.1,0,1,1,1,1), Anim[playerid] = 0, SetTimerEx("MachineAnimation",1000,0,"d",playerid);
    else if (Anim[playerid] == 0) ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 0);
    return 1;
    }

    Nen größeren Schwachsinn hab ich hier in diesem Forum glaube ich noch nicht lesen dürfen. Mach dir mal bitte Gedanken darüber, wofür die Klammern eigentlich da sind und welchen Zweck sie erfüllen, bevor du andere belehren möchtest. Danke.


    Nun gut die formulierung ist anstößig gebe ich selbst zu.
    Hat ja Klaiber auch gepostet da hätte ein eigentlich rein können.
    Nun gut ein großen unterschied macht das nicht du kannst, wenn du kein return 0 schreiben willst
    auch #emit RETN schreiben gibt auch den wert 0 zurück solang man davor in ihrgend einer Form mit emit gearbeitet hat.
    Aber nun gut ich weiß sehr wohl das man mit den geschweiften Klammern ein Anweisungsblock erstellt.


    //edit


    was auch möglich zum theme return mehrere sachen hintereinander zu schreiben
    return SendClientMessage(playerid,-1,"Hallo"),SendClientMessage(playerid,-1,"Wie"),SendClientMessage(playerid,-1,"Gehts");


    der rückgabe wert bezieht sich auf die letzte hinzugefügte Anweisung


    Dann solltest du dich damit mehr befassen.
    ___________________________________________
    (INSERT) Wenn es letztendlich dynamisch sein soll.
    ___________________________________________


    Mit dem SQL Befehl SELECT und UPDATE
    und wenn du es richtig willst mit dem splitten eines strings stichwort sscanf 2.8.1
    http://forum.sa-mp.com/showthread.php?t=120356


    und je nach plugin mit den entsprechenden funktionen ob
    mysql_fetch_row oder mysql_fetch_row_format
    Tipp um alles auszulesen benötigt man eine schleife je nach dem for-schleife oder while.
    Nachteil
    for-schleife: Du brauchst einen konstanten wert läst sich jedoch ermitteln aus der jeweiligen tabelle.
    Vorteil schneller als while schleife


    while: Nachteil:Langsamer als for-loop
    Vorteil: ließ nur soviel aus wie vorhanden ist. Daher keinen konstanten werd nach dem man dies zählen lassen sollte.


    Links:
    http://forum.sa-mp.com/showthread.php?t=120356
    http://dev.mysql.com/doc/refman/5.1/de/select.html
    http://dev.mysql.com/doc/refman/5.1/de/update.html
    http://wiki.sa-mp.com/wiki/MySQL
    oder
    http://wiki.sa-mp.com/wiki/MySQL_Plugin


    Weiteres nützliches
    http://forum.sa-mp.com/showthread.php?t=186495