Beiträge von Jeffry

    Das hat doch auch nichts damit zu tun, was du machen willst. Es färbt den Text in der Farbe des Spielers.


    Du willst doch das hier:
    #define COLOR_RED_EMBED "{FF0000}"

    new msg[128];
    format(msg, sizeof(msg), "This is white and "COLOR_RED_EMBED"this is red.");
    SendClientMessage(playerid, -1, msg);

    Das gibt vom Ablauf her keinen Sinn.
    Schreibe es so:


    Registrationsbefehl:
    new ip[16], query[128];
    GetPlayerIp(playerid,ip,sizeof(ip));
    format(query,sizeof(query),"SELECT NAME FROM Benutzer WHERE IP='%s'",ip);
    mysql_function_query(dbhandle,query,true,"IPCHECK","d",playerid);



    forward IPCHECK(playerid);
    public IPCHECK(playerid)
    {
    if(cache_get_row_count() > 0)
    {
    new ip[16], query[128];
    GetPlayerIp(playerid,ip,sizeof(ip));
    //IP existiert dann kontrolle in der whitelist
    format(query,sizeof(query),"SELECT NAME FROM Benutzer WHERE IP='%s'",ip);
    mysql_function_query(dbhandle,query,true,"WHITELISTCHECK","d",playerid);
    return 1;
    }
    //Hier den Register Dialog anzeigen
    return 1;
    }


    forward WHITELISTCHECK(playerid);
    public WHITELISTCHECK(playerid)
    {
    if(cache_get_row_count() < 1)
    {
    SCM(playerid,-1,"Du hast dich bereits mit dieser IP-Adresse Registriert.");
    SCM(playerid,-1," Bei einem Multiaccount z.B. für Geschwister melde dich bitte bei Admins mit deiner IP.");
    return KickPlayer(playerid);
    }
    //Hier den Register Dialog anzeigen
    return 1;
    }



    Wir prüfen erst (IPCHECK) ob der Spieler ein Konto hat, wenn ja dann prüfen wir (WHITELISTCHECK) ob er in der Whitelist steht, wenn nein, dann wird er gekickt.

    Jeffry: Es werden doch sicherlich Kommawerte enstehen oder ?


    Nein, wenn du zwei Integers dividierst kommt auch wieder ein Integer raus.


    Beispiel:
    7 / 2 = 3 (das .5 fliegt einfach weg)
    2 / 3 = 0 (das .6666 fliegt weg)


    => Es fällt einfach die Nachkommazahl weg, egal was da steht.


    Bei der Methode von maddin kann man deshalb das floatround auch einfach weg lassen.

    Für sowas mach doch bitte einen Thread auf, das ist keine kleine Scripting-Frage mehr, das sind Scriptwünsche für einen halben Gamemode.


    1.) Versuche es erst mal sebst, nutze "format" um den String zu formatieren.
    2.) Was willst du?
    3.) Ja, aber du musst noch fragen, ob jemand in dem Fahrzeug ist, also für jedes Fahrzeug noch eine Schleife durch alle Spieler, dann mit IsPlayerInVehicle prüfen.
    4.) Eine Schleife wie bei 3. und dazu abfragen, ob die Fahrzeug ID einem Fraktionsfahrzeug entspricht. Auch hier, fange erst mal mit dem Code an.


    Für die Zukunft: Eins nach dem anderen. Du hast hier vier verschiedene Dinge, das ist doch klar, dass du da nicht mehr durchblickst. Mache erst eins, dann zwei, nicht alles auf einmal.
    Ebenso beim Fragestellen hier. Stelle nicht alle Fragen auf einmal, wenn die nichts miteinander zu tun haben, das gibt nur ein riesen Chaos. Für sowas erstelle bitte einen separaten Thread.


    => Fange jetzt erst mal mit dem Code für 1 an, etwas Eigeninitiative sollte zu erwarten sein, und wenn du daran scheiterst, dann poste den Code und frage explizit nach.

    tbanwert=cache_get_field_content_int(0,"timeban",MYSQLConnection)-gettime();
    tband = tbanwert / 86400;
    tbanwert -= tband * 86400;
    tbanh = tbanwert / 3600;
    tbanwert -= tbanh * 3600;
    tbanm = tbanwert / 60;
    tbanwert -= tbanm * 60;
    tbans = tbanwert;

    Du erstellst eine zweite Tabelle in die die IPs auf der Whitelist eingetragen werden.
    Dann suchst du nach dem selben Prinzip, wenn für den Spieler bereits eine IP gefunden worden ist, ob die IP in der anderen Tabelle steht, wenn ja ist sie auf der Whitelist und du lässt ihn das Account erstellen, ansonsten nicht. Prinzip ist genau das gleiche.


    Falls dein Code nicht klappt oder du bei der Realisierung hängst, kannst du gerne nochmal Bescheid geben.

    Bin mir nicht sicher ob es funktionieren kann, kann es leider nicht testen da ich alleine bin !


    Ich bin doch kein Semantikanalysator. :D
    Kann schon sein, dass es geht. Teste es doch einfach. Dass du alleine bist macht doch nichts, du kannst es problemlos alleine testen.


    Und zwar so:
    Erstelle dir ein zweites Windows-Benutzerkonto und gehe damit in deinen SA-MP Server, als Spieler. Dann gehst du auf "Benutzer wechseln" und nimmst deinen normalen Benutzeraccount. Damit gehst du auch in deinen Server, und schon bist du zu zweit. So einfach geht das. :thumbup:



    Oder: Setze dir eine Virtuelle Maschine auf, dann kannst du das auch machen.
    Oder: Nutze einen zweiten PC (so mache ich es immer, ich teste mit PC und Notebook, ggf. kommt noch das Win8.1 Tablet dazu).

    Weist du warum?


    Achso...nun gut, dann führt das wohl in deinem Fall zu einem Memory Leak :S


    Ich habe herausgefunden warum der Fehler auftritt, dieser ist sogar ziemlich leicht zu beheben. Das Problem ist ein Fehler im Compiler (der hat ja bekanntlich so einige). Und zwar, wenn man "#emit SYSREQ.C" für eine Funktion (in diesem Fall "format") verwendet, jedoch diese Funktion nicht vor (entsprechend der Zeile im Code) der Vewendung des "SYSREQ.C" Befehls verwendet worden ist (was ja bei dir der Fall ist), dann stürzt der Compiler ab.


    Beheben kannst du es ziemlich einfach, indem du es einfach verwendest. Füge das hier vor dem stock SCM ein:
    forward _Fix_format();
    public _Fix_format() {
    new _str[2]; format(_str, 2, "");
    }


    Dann funktioniert es.

    Müssten es nicht mehr-dimensionale Variablen sein, da du X und Y sonst immer "überspeicherst" ?


    Kommt darauf an, muss man nicht. Warum Speicher verschwenden?


    //N
    x = 100.0 + (25.0 * floatsin(a, degrees));
    y = 100.0 + (25.0 * floatcos(-a, degrees));
    //Hier das N-TextDraw an der Position erstellen.


    //W
    x = 100.0 + (25.0 * floatsin(-a-90.0, degrees));
    y = 100.0 + (25.0 * floatcos(a-90.0, degrees));
    //Hier das W-TextDraw an der Position erstellen.


    //S
    //...usw


    Daher wird es nicht überschrieben, da man es gleich verwendet.

    ocmd:giverang(playerid, params[])
    {
    if(sInfo[playerid][leader] == 0)return SendClientMessage(playerid,ROT,"Info: Du bist dazu nicht befugt!");
    new pID, rID;
    if(sscanf(params,"ui",pID,rID))return SendClientMessage(playerid, ROT, " Benutze: /giverang [playerid] [rangid]");
    if(sInfo[playerid][fraktion] != sInfo[pID][fraktion])return SendClientMessage(playerid,ROT, " Spieler nicht in deiner Fraktion.");
    sInfo[pID][rang] = rID;
    new string [128];
    format(string,sizeof(string), "Admin: %s hat dich zum Leader der Fraktion %s gemacht",getPlayerName(playerid), fInfo[sInfo[playerid][fraktion]][f_name]);
    SendClientMessage(pID, LEUCHTENDBLAU, string);
    SendClientMessage(pID, ROT,"Du kannst mit /help deine neuen Fraktionsbefehle betrachten.");
    SendClientMessage(pID, ROT,"Du hast nun eine 4 Wöchige Leader Pflicht");
    SendClientMessage(pID, ROT,"Wenn du vor Ablauf der Frist rausgeworfen wirst,bekommst du eine Fraksperre für den Rest der Zeit");
    format(string,sizeof(string),"Du hast einen Spieler %s zum Leader der Fraktion %s gemacht",getPlayerName(pID), fInfo[sInfo[playerid][fraktion]][f_name]);
    SendClientMessage(playerid,ROT, string);
    savePlayer(pID);
    return 1;
    }
    Also so?


    Ja, musst du. Es ist ein neuer Stat, der dementsprechend gespeichert werden muss.

    Dann so:
    ocmd:makeleader(playerid, params[])
    {
    if(!isAdmin(playerid,1337))return SendClientMessage(playerid,ROT,"Info: Du bist dazu nicht befugt!");
    new pID, fID;
    if(sscanf(params,"ui",pID,fID))return SendClientMessage(playerid, ROT, " Benutze: /makeleader [playerid] [fraktid]");
    if(fID >= sizeof(fInfo))return SendClientMessage(playerid,ROT, " Fraktion existiert nicht.");
    sInfo[pID][fraktion] = fID;
    sInfo[pID][leader] = 1; //=================>Neu<===================
    new string [128];
    format(string,sizeof(string), "Admin: %s hat dich zum Leader der Fraktion %s gemacht",getPlayerName(playerid), fInfo[fID][f_name]);
    SendClientMessage(pID, LEUCHTENDBLAU, string);
    SendClientMessage(pID, ROT,"Du kannst mit /help deine neuen Fraktionsbefehle betrachten.");
    SendClientMessage(pID, ROT,"Du hast nun eine 4 Wöchige Leader Pflicht");
    SendClientMessage(pID, ROT,"Wenn du vor Ablauf der Frist rausgeworfen wirst,bekommst du eine Fraksperre für den Rest der Zeit");
    format(string,sizeof(string),"Du hast einen Spieler %s zum Leader der Fraktion %s gemacht",getPlayerName(pID), fInfo[fID][f_name]);
    SendClientMessage(playerid,ROT, string);
    savePlayer(pID);
    return 1;
    }


    ocmd:giverang(playerid, params[])
    //...siehe zwei Posts weiter unten...


    Im enum fügst du den Stat "leader" hinzu.


    Der Spieler ist nur dann Leader, wenn er auch Leader ist.

    Funktioniert leider beides nicht wirklich


    Hier, das funktioniert:
    #include <a_samp>
    new obj;
    public OnFilterScriptInit()
    {
    obj = CreateObject(3414, 2082.28, 1670.31, 10.82, 0,0,0);
    MoveObject(obj,2082.28, 1670.30, 10.82,0.01,0,0,90);
    SetTimerEx("TurnObject", 750, 0, "dd", obj, 0);
    return 1;
    }


    public OnFilterScriptExit()
    {
    DestroyObject(obj);
    return 1;
    }


    forward TurnObject(objectid, objpos);
    public TurnObject(objectid, objpos)
    {
    if(objectid == obj)
    {
    switch(objpos)
    {
    case 0: MoveObject(obj,2082.28, 1670.31, 10.82,0.01,0,0,180), objpos = 1;
    case 1: MoveObject(obj,2082.28, 1670.30, 10.82,0.01,0,0,270), objpos = 2;
    case 2: MoveObject(obj,2082.28, 1670.31, 10.82,0.01,0,0,360), objpos = 3;
    case 3: MoveObject(obj,2082.28, 1670.30, 10.82,0.01,0,0,90), objpos = 0;
    }
    SetTimerEx("TurnObject", 750, 0, "dd", obj, objpos);
    }
    return 1;
    }


    Es ist allerdings so, dass es manchmal etwas ruckeln kann, weil die Timer in SA-MP ja bekanntlich nicht immer gleich lang sind. Möglicherweise musst du den Timer noch um ein paar Millisekunden anpassen.

    Hallo com ich habe eine kleine Frage unswa wenn ich ein Spieler mit /setrang 6 den Rang 6 gebe will ich das er dann nicht automatisch leider ist sondern halt ganz normal Rang 6 und er wenn man mit /makeleader jemanden eine Rang gibt das er dann leider ist wie mache ich das ?


    Poste mal deine beiden Befehle.

    Könnte mir da jemand weiter helfen ?


    new Float:a, Float:x, Float:y;
    GetPlayerFacingAngle(playerid, a);


    //N
    x = 100.0 + (25.0 * floatsin(a, degrees));
    y = 100.0 + (25.0 * floatcos(-a, degrees));


    //W
    x = 100.0 + (25.0 * floatsin(-a-90.0, degrees));
    y = 100.0 + (25.0 * floatcos(a-90.0, degrees));


    //S
    x = 100.0 + (25.0 * floatsin(a+180.0, degrees));
    y = 100.0 + (25.0 * floatcos(-a+180.0, degrees));


    //O
    x = 100.0 + (25.0 * floatsin(-a+90.0, degrees));
    y = 100.0 + (25.0 * floatcos(a+90.0, degrees));

    Ich hätte gedacht das er es da durch dem Spieler anzeigen tut.


    Das passt auch:


    new Text:Werbungbalken;
    new Text:Werbungbalken1;
    public OnFilterScriptInit()
    {
    Werbungbalken = TextDrawCreate(2.000000, 425.000000, "_");
    TextDrawBackgroundColor(Werbungbalken,0x00000033);
    TextDrawFont(Werbungbalken, 1);
    TextDrawLetterSize(Werbungbalken, 0.529999, 2.299999);
    TextDrawColor(Werbungbalken,0x00000033);
    TextDrawSetOutline(Werbungbalken, 0);
    TextDrawSetProportional(Werbungbalken, 1);
    TextDrawSetShadow(Werbungbalken, 1);
    TextDrawUseBox(Werbungbalken, 1);
    TextDrawBoxColor(Werbungbalken,0x00000033);
    TextDrawTextSize(Werbungbalken, 639.000000, 0.000000);


    Werbungbalken1 = TextDrawCreate(3.000000, 430.000000, "Hier Koennte deine Werbung stehen..");
    TextDrawBackgroundColor(Werbungbalken1, 255);
    TextDrawFont(Werbungbalken1, 1);
    TextDrawLetterSize(Werbungbalken1, 0.200000, 1.000000);
    TextDrawColor(Werbungbalken1, 16711935);
    TextDrawSetOutline(Werbungbalken1, 0);
    TextDrawSetProportional(Werbungbalken1, 1);
    TextDrawSetShadow(Werbungbalken1, 1);
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    TextDrawShowForPlayer(playerid, Werbungbalken1);
    TextDrawShowForPlayer(playerid, Werbungbalken);
    return 1;
    }


    Bist du sicher, dass dein OnPlayerSpawn aufgerufen wird?

    Öhm, der Index der texturiert werden muss ist doch die 0, ich glaube wir haben das irgendwie durcheinander gebracht. 8o
    Da du gesagt hast die 0 geht bei dir nicht, bin ich davon ausgegangen, dass das Objekt bei Index 1 texturiert wird.


    Ohne <---> Mit


    Code:
    new shint = CreateObject(19377, 231.98621, 1812.54163, 13.92413, 0.00000, 0.00000, 0.00000); //wird texturiert
    SetObjectMaterial(shint, 0, 4981, "wiresetc2_las", "lasunion7", 0xFFFFFFFF);
    CreateObject(19377, 231.98621, 1802.54163, 13.92413, 0.00000, 0.00000, 0.00000); //wird nicht texturiert


    Jetzt sollte es aber passen.

    Willkommen in der Scripting Base!


    new ip[16];
    GetPlayerIp(playerid,ip,sizeof(ip));
    printf("%s ip",ip);
    format(query,sizeof(query),"SELECT NAME FROM Benutzer WHERE IP='%s'",ip);
    mysql_function_query(dbhandle,query,true,"IPCHECK","d",playerid);


    forward IPCHECK(playerid);
    public IPCHECK(playerid)
    {
    if(cache_get_row_count() > 0)
    {
    //IP existiert
    Kick(playerid);
    }
    return 1;
    }