Beiträge von Kayer

    Da hab ich was gemacht :whistling:


    Schau im Thread "Nützliche Codeschnippsel". Da stehts.

    Es es ist sehr unwahrscheinlich und unglaubwürdig (...auch unverschämt die zu behaupten ... ) , LUKA , dass du dies nicht gefunden hast, denn es steht auf der letzen Seite bzw. ist der letze Beitrag in diesem Thread und daher leicht zu finden.


    Von Bright nochmal für alle,die zu faul sind:

    // Das Ganz nach unten
    stock sLangMsg(playerid, color, langmsg1[], langmsg2[])
    {
    if(langp == 1)
    {
    SendClientMessage(playerid, color, langmsg1);
    }
    else if(langp == 2)
    {
    SendClientMessage(playerid, color, langmsg2);
    }
    }


    // Das Ganz oben am Besten
    new langp = 0;


    // So inetwa sähe es aus,wenn du die Sprache für den User einstellen willst bei einem Command


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp("/lang1",cmdtext,true) == 0)
    {
    langp = 1;
    return 1;
    }
    if(strcmp("/lang2",cmdtext,true) == 0)
    {
    langp = 2;
    return 1;
    }
    return 0;


    }



    // Anwendungsbeispiel
    public OnPlayerSpawn(playerid)
    {
    sLangMsg(playerid, 0xFF0000FF, "Du bist gespawnt.", "You have spawned.");
    return 1;

    }




    hmm dieses Thread gabs schon hier im forum ^^ da gabs auch antworten drauf nur kenne nicht mehr wie er hieß ;(


    wenn ich finde post ich ihn hier rein^^ :thumbup:

    UnderDead Rang: Profi
    Beiträge: 613 (20,43 Beiträge pro Tag)
    Nun weiß ich,wie du das erreichst.


    ein Rat: Such doch erstmal den Thread bzw. Link und poste es dann.Damit hast du zwar nur einen (!) Beitrag,aber spammst das arme Forum mit sinnfreien Posts zu ;) . Wie Bright schon erwähnt hat, gibt es diesen Thread (Post in einem Thread),doch keinen interessiert es bzw. es ist vollkommen unwichtig,dass du nicht mehr weißt wie er heißt,sondern hier es es relevant ihm (LUKA) zu helfen.

    Danke Supderdok ,dass du mich verbessert hast doch die Klammern bei GetPlayerName(playerid, name, sizeof name); sind nicht nötig :pinch: .Und einrücken ist hier sehr schwer,da man alles durch Leertaste machen müsste ;)

    SetTimerEx ist ein Timer,der aber eine Variable "überträgt".
    SetTimerEx("Bsp",10000,1,"i",playerid);
    SetTimerEx = Funktion
    "Bsp" = Name (muss mit "forward" und "publiuc" sein)
    100000 = Angabe nach wie vielen Millisekunden seit Start des Timers der Timer ausgeführt werden soll
    1 = Wiederolung ( ja = 1 ; nein = 0);
    "i" = Angabe der folgende(n) Variabel(n)
    playerid = (folgende Variabel)


    // =====================
    i = Integerwert
    d = Integerwert
    s = string
    b = bool
    f = float
    a = Arry



    Wenn zB ein Timer nur für eine Person (die "playerid") ausgeführt werden soll, brauchst du das.
    Oder ein string beispielsweise weitergegeben soll.Oder eine Zahl.
    Im forward und public muss du das dann ebenfalls definieren.
    Beispiel:

    // Obriger Timer
    forward Bsp(playerid);
    public Bsp(playerid);



    // SetTimerEx("lol",1000,0,"s",string);
    forward lol(string[]);
    public(string[])


    Hoffe,dass es so stimmt

    Die beiden Funktionen kommen dahin,wo bzw. wann sie auch angezeigt werden sollen...

    if(strcmp(cmdtext,"/textdraw",true)==0)
    {
    TextDrawShowForPlayer(playerid,Text:Kills);
    TextDrawShowForPlayer(playerid,Text:Deaths);
    return 1;
    }

    ...als Beispiel.Daher können sie bei OnPlayerConnect (bzw. -Disconnect) , in einem Command, bei OnPlayerEnterVehicle etc. stehen.
    Was genau dein Problem ist,kann ich nicht herauslesen.
    Wenn du nicht weiß wie Variablen funktionieren, guck im Bereich "Tutorial" auf eine der letzen Seiten. Dort wirst du einen von Yoda verfassten Thread finden, der deine Fragen lösen sollte.
    Die weiteren TextDrawFunktionen findest du auf >>> http://www.sa-mp.com <<< .
    Ich hab dir bereits erklärt,dass dies keinen Sinn gibt. Wenn du selbst durch meine Erklärung nicht verstehst wieso,gucke dir das Tutorial an (oben genannt!).

    public deathsupdate();
    {
    kills[killerid]++; // Das würde, wenn der Timer abgelaufen ist, Kills + 1 machen. Sinn ?
    format(s,sizeof(s),"Deaths: %d",ddeaths[playerid]); // Das bereitet und definiert nur seinen String,jedoch wird damit nichts getan.Sinn?
    return 1;
    }

    Das Prinzip wäre,dass du bein OnPlayerDeath kills[killerid] und deaths[playerid] + 1 machst, und dann es neu Anzeigen lasst durch - wie ich schon mal gesagt habe - TextDrawSetString .



    ---------------------------------------------------------------------------------------------------------
    :thumbdown: Threadpushing,(Spamm) und Doppelpost's ( Man beachte die Erstllungsdaten: Heute, 15:45 - Gestern, 21:26 - 12:35 ).Edit hätte vollkommen ausgereicht,denke ich.
    Zitat von Breadfish:" Offensichtlich ist den Usern die das benutzen ja bewusst dass gegen Forenregeln verstoßen wird, trotzdem wird es getan.
    Zukünftig gibts dafür Warnungen."

    HI,
    so was kann ic hauch aber ich will die join leave message als Gametext nicht als SendClientMessage als gametext!


    MfG ~Luka~ :thumbup:

    Mit der Erfahrung von 530 Posts und meinem Beitrag als Hilfe solltest du es eig. leicht schaffen,da da kein großer Unterschied ist

    Du hattest bei den einzelnen Floats Komma´s statt Punkte:


    ballas = GangZoneCreate(1847.332, -1468.684, 2079.305, -1137.074);

    Hallo, ich hab ein kleines Problem.


    Folgender Code lässt sich wunderbar compilen, doch verwende ich "fdeleteline" einmal,so zeigt er folgenden Fehler:

    Code
    error 017: undefined symbol "equal"



    stock fdeleteline(filename[], line[]){
    if(fexist(filename)){
    new temp[256];
    new File:fhandle = fopen(filename,io_read);
    fread(fhandle,temp,sizeof(temp),false);
    if(strfind(temp,line,true)==-1){return 0;}
    else{
    fclose(fhandle);
    fremove(filename);
    for(new i=0;i<strlen(temp);i++){
    new templine[256];
    strmid(templine,temp,i,i+strlen(line));
    if(equal(templine,line,true)){ //====================== Logischerweise hier =======================
    strdel(temp,i,i+strlen(line));
    fcreate(filename);
    fhandle = fopen(filename,io_write);
    fwrite(fhandle,temp);
    fclose(fhandle);
    return 1;
    }
    }
    }
    }
    return 0;
    }
    Kennt jemand eine Lösung?

    Was soll das bewirken?

    public todeupdate();
    {
    tode[playerid]++;
    new s[30];
    format(s,sizeof(s),"Tode: %d~n~Kills: %d",tode[playerid],kills[playerid]);
    TextDrawHideForPlayer(playerid,ja[playerid]);
    ja[playerid]=TextDrawCreate(307.00,455.00,s);
    TextDrawShowForPlayer(playerid,ja[playerid]);
    if(killerid!=INVALID_PLAYER_ID)
    return 1;
    }

    Dadurch würde,wenn der Timer eintrifft tode[playerid] plus 1 gemacht werden,was gar keinen Sinn gäbe :pinch: .
    Mach das mit dem Textdraw bei "OnGameModInt"
    Dann bei "OnPlayerDeath" wie Keks schon gesagt hat die Variablen +1 jeweils und statt ein neues zu erstelllen verwende "TextDrawSetString" .
    Klappt bei mir wunderbar :thumbup:

    Das kann gar nicht gehen!
    GameTextForAll(0xAAAAAAAA, 5000,3, string);
    So müsste das inetwa aussehen:


    GameTextForAll( string, 5000, 3 );


    String = Was gezeigt wird!
    5000 = Wie lange es gezeigt werden soll in Millisekunden!
    3 = Stil!
    > Diese Reihenfolge !


    Erklärung, wieso Waldi´s, LUKA´s und Antonio´s falsch ist:
    Farben werden durch "~r~" oder "~g~" im String angegeben und nicht durch den HexaCode in der Funktion.


    Woher ich das weiß ?
    http://www.sa-mp.com</a>
    Es würde keinem von euch schaden, mal dort bisschen nachzugucken.
    Denn alles was du hier gefragt hast,gibt es dort nach nicht mal 10 Sekunden, ohne einen sinnlosen Thread zu eröffnen.
    http://wiki.sa-mp.com/wiki/Cre…in_and_Leave_Messages</a>

    Hallo.
    Ich hab ein kleines Problem mit dini.Und zwar folgendes:

    new name[MAX_PLAYER_NAME];
    new form[100];
    new gsn[256];
    gsn = dini_Get(form,"GangName");
    GetPlayerName(playerid, name,sizeof name);
    format(form,sizeof form,"%s.ini",name);
    if(dini_Isset(form,"GangName"))
    {
    new lol7[200];
    format(lol7,sizeof lol7,"%s[GANG].ini",gsn);
    if(dini_Exists(lol7))
    {
    new lol4[256],lol5[200],lol6[200];
    lol4 = dini_Get(form,"GangName");
    format(lol5,sizeof lol5,"%s betraten den Server als Mitglied/Leader der Gang",name);
    format(lol6,sizeof lol6," >>>>>> %s <<<<<< ",lol4);
    SendClientMessageToAll(dunkelblau,lol5);
    SendClientMessageToAll(dunkelblau,lol6);
    return 1;
    }
    else
    {
    dini_Unset(form,"GangName");
    return 1;
    Doch anscheinend geht es nicht . Ebenso ein anderer Befehl, in dem "dini_Isset" verwendet wird,geht gar nicht
    Jemand eine Lösung


    //EDIT: naja...musste es wiedermal alleine schaffen :evil:

    Ich verstehe die erklärung mit dem Arry´s nicht ganz. Gäbe es eine Arry,die sich auf einen USer bezieht und destotrotz ein String ist,wie Bsp[MAX_PLAYERS][100]; ?


    // Füg das mal ganz unten ein
    stock SetPlayerMoney(playerid, money)
    {
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, money);
    }

    Doch eine Frage habe ich:
    " -Alle Playerstats werden nun aller 2sekunden geupdatet "
    Wieso eigentlich? ( Sagen,wenn ich etwas falsche sage !)
    Man kann doch bei OnPlayerConnect alles laden bzw. beim Einloggen wenn der Account registriert ist ( auf z.B.: "PlayerBankMoney[playerid] = dini_Int(file,"BankMoney");" ) und dann bei OnPlayerDisconnect und OnGameModExit alles einfach speichern ( z.B.: "dini_IntSet(file,"BankMoney",PlayerBankMoney[playerid]);" ).Oder? Wäre das dann nicht ressourcendschonend?

    Ist
    GameTextForPlayer(playerid, string, 3000, 4);
    nicht sinnvoler, da es "Hier kannst du dich heilen" für den User angezeigt werden sollte,der es betritt, und nicht für jeden, denn die werden nicht wissen,wo gemeint ist ;)

    Es gibt von DracoBlue eine Funktion die genau dies bewirkt, also "OnPlayerEnterArea" und "OnPlayerLeaveArea".
    Dann müsstest du eben nur das Textdraw erstellen und beim Betreten ändern.

    Verbessere mich,wenn ich einen Schmarn sage, doch man kann genau so gut die Dateien bei OnPlayerDisconnect speichern.Und zB bei OnPlayerConnect die Dateien,die man lädt, auf Variablen speichern, wie "BankMoney[playerid] = dini_Int(file,"bankmoney");",dann im Script bzw. was der User auf dem Server macht ( zB bei einem Befehl dann BankMoney[playerid] -= betrag) und bei OnPlayerDisconnect dann als Beispiel "dini_IntSet(file,"bankmoney",BankMoney[playerid]); " .So umgeht man einen Timer und bei mir klappt's wunderbar...korrigier mich,wenn's falsch ist ! (file entspricht dann der jeweiligen UserDatei)
    Und RL != GF ,hoffe ,dass das auch jeder weiß 8)

    Da du mehrere Parameter verwendest,ist sscanf ratsam.

    // ========== Erstellen von /givegun [ID/Name] [WAFFENID] [MUNI] [PREIS] ==========
    //Wie gehandhabt unter OnPlayerCommandText
    dcmd(givegun,7,cmdtext);



    //Außerhalb eines CallBacks
    dcmd_givegun(playerid, params[])
    {
    //Wir definieren zunächst alle Variablen
    new user;
    new waffe;
    new preis;
    new muni;
    if(sscanf(params,"uddd",user,waffe,muni,preis)) //Hier haben wir einen User ("u"), und 3 Integerwerte (Waffe,Muni,Preis = "d") vorliegen.
    {
    SendClientMessage(playerid,COLOR_RED,"Verwende:/givegun [ID] [WAFFENID] [MUNI] [PREIS]");//Wenn er nicht genügend Variablen vorliegen hat
    return 1;
    }
    if(GetPlayerMoney(user) < preis) //Wenn "User" nicht genügend Geld hat
    {
    SendClientMessage(playerid,COLOR_RED,"Der angegebene User hat nicht so viel Geld");
    return 1;
    }
    if(waffe <= 0 && waffe >= 47) //Wenn die WaffenID über 47 und unter 0 ist
    {
    SendClientMessage(playerid,COLOR_RED,"Diese WaffenID existiert nicht!");
    return 1;
    }
    GivePlayerWeapon(user,waffe,muni);
    GivePlayerMoney(user, -preis);
    return 1;
    }


    Edit: Hab es herausgefunden !

    Zwar einfacher,aber dennoch sehr gute Arbeit :thumbup: .


    Doch wieso sollte in diesen Moment die Userdateien gespeichert werden?