Beiträge von Jason_Gregory

    Keine Schwere Sache, du brauchst nur die Definition für Farbe und den Wantedgrund...



    new Text3D:wantedtextdraw[MAX_PLAYERS];
    new _str[100],
    name[MAX_PLAYER_NAME],
    verbrechen[128];
    #define Rotefarbe /*deine Rote Farbe*/


    public OnPlayerSpawn(playerid)
    {
    wantedlevel[playerid] = GetPlayerWantedLevel(playerid);
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerName(playerid, name, sizeof(name));
    verbrechen= "/*Dein Define für die Wanted Verbrechen*/"
    format(_str, sizeof(_str), "Name %s /n Wanteds %i /n Verbrechen %s",name , wantedlevel, verbrechen);
    wantedtextdraw[playerid] = CreatePlayer3DTextLabel(_str,0x008080FF,x,y,z+3,40.0,0);
    Attach3DTextLabelToPlayer (wantedtextdraw[playerid], playerid, 0.0, 0.0, 0.0+4)
    return 1;
    }


    public OnPlayerUpdate(playerid)
    {
    wantedlevel[playerid] = GetPlayerWantedLevel(playerid);
    format(_str, sizeof(_str), "Name %s /n Wanteds %i /n Verbrechen %s",name , wantedlevel, verbrechen);
    if(wantedlevel != 0) { UpdatePlayer3DTextLabelText(playerid, wantedtextdraw[playerid], 0x008080FFBE, _str); }
    else { UpdatePlayer3DTextLabelText(playerid, wantedtextdraw[playerid], Rotefarbe, _str); }
    return 1;
    }

    public OnPlayerUpdate(playerid) {
    PlayerDesk[playerid] = 0;
    }


    So würdest du den Parameter, durch ein Event schicken, das ja öfter als einmal in der Sekunde (wenn ich mich nicht irre)
    auf 0 setzen.


    Zitat

    Das würde den Server eigentlich nur aufhängen da es zu einem Unendlichem Loop kommt.


    Wozu gibt es den break :sleeping:
    public OnPlayerUpdate(playerid)
    {
    new _desk[playerid] = GetTickCount(); /*Bringt vermutlich nichts, der Parameter muss ja auch ner Funktion zugewiesen werden, welche die Ticks vom Spieler ausgibt*/
    while(_desk[playerid] > /*Menge*/) {} else { break; return kick(playerid); }
    }

    War auch nur eine Idee, aber wie kann es sein, das man keine Pakette an den Server sendet sobald man den Desktop betritt ?



    public OnPlayerUpdate(playerid)
    {
    new _desk[playerid] = GetTickCount(); /*Bringt vermutlich nichts, der Parameter muss ja auch ner Funktion zugewiesen werden, welche die Ticks vom Spieler ausgibt*/
    while(_desk[playerid] > /*Menge*/) {} else { return kick(playerid); }
    }

    Hm...es müsste ja eine Funktion sein, die sich verändert ein anderes Ergebnis ausgibt wenn der Spieler den Server/Desktop betritt.
    Trotzdem gäbs natürlich einen Weg, indem man einfach die Position des Spielers nimmt, bzw. (wenn das in Sa-mp möglich ist) die Position des Cursors.

    Bin mir nicht sicher, aber sollte in der Regel über GetTickCount() funktionieren...


    public OnPlayerUpdate(playerid)
    {
    new _desk = GetTickCount();
    while(_desk) {} else { return kick(playerid); }
    }


    Habs selber nicht ausprobiert, müsste mal ein paar Funktionen durchgehen, unter MTA wäre die Sache einfacher,
    vermutlich ändert sich beim auf den Desktop wechseln Ping, Ip, Position des Spielers, Animation oder sonstiges...

    Dir fehlt ganz einfach die Definition für playerid, die hast du nur in von Sa:mp vordefinierten Funktionen...


    public IsAPlane()
    {
    for(new playerid=0; playerid > MAX_PLAYERS; playerid++) {
    new modelid = GetVehicleModel(GetPlayerVehicleID(playerid));
    if(modelid == 592 || modelid == 577 || modelid == 511 || modelid == 512 || modelid == 593 || modelid == 520 || modelid == 553 || modelid == 476 || modelid == 519 || modelid == 460 || modelid == 513 || modelid == 548 || modelid == 425 || modelid == 417 || modelid == 487 || modelid == 488 || modelid == 497 || modelid == 563 || modelid == 447 || modelid ==469)
    {
    return 1;
    }
    return 0;
    }
    }

    Du verstehst die Frage nicht oder ?
    Wie heißt die Definition für deine Clangruppe also etwa..


    PlayerInfo[playerid][pTeam] = 5;


    Das wär eine Godfather Fraktion mit der ID:5.

    Hast du deinen Toren unter OnGamemodeInit überhaupt eine Definition gegeben ?
    Falls ja hast du in deinem Code trotzdem noch einen Klammerfehler...



    new Torbewegung,
    bool: Torcheck = false; /* oder true kommt auf deinen Torpos an*/


    if (strcmp(cmdtext, "/tor", true) == 0) {
    while(Torbewegung){ return SendClientMessage(playerid, COLOR_YELLOW,"ACHTUNG: Tor bewegt sich bereits!"); }
    if(Torcheck == false) {
    Torbewegung = MoveObject(gate1,1532.1589355469, -1676.4626464844, 12.3828125);
    Torcheck = true;
    SendClientMessage(playerid, COLOR_YELLOW,"ACHTUNG: Tor bewegt sich nach links!"); }
    else if(Torcheck == true) {
    Torbewegung = MoveObject(gate1,1532.0819091797, -1667.5843505859, 12.3828125);
    Torcheck = false;
    SendClientMessage(playerid, COLOR_YELLOW,"ACHTUNG: Tor bewegt sich nach rechts!"); }
    return 1; }

    Gute Arbeit, aber vermutlich sind dir manche Fehler nicht aufgefallen...


    Dein Payday Script schluckt für einen Textdraw/Gametext ziemlich viele Resourcen


    public OnPlayerSpawn(playerid)
    {
    PayDayTimer = SetTimerEx("PlusPayDayZeit",60000,1,"i",playerid);
    return 1;
    }


    Du aktivierst bei JEDEM Spawn, einen extra Timer mit Parameter (playerid).
    Jetzt stell dir mal vor, ein Server verwendet den /kill Befehl, was wirklich viele Server tun.
    Jetzt bekommt dieser Spieler nicht nur einen oder 2 Paydays sondern wird damit zugefloodet.


    Ganz einfache Lösung...



    new PayDayTimer[MAX_PLAYERS];
    public OnPlayerSpawn(playerid)
    {
    while(PayDayTimer[playerid]) { }
    else { PayDayTimer[playerid] = SetTimerEx("PlusPayDayZeit",60000,1,"i",playerid); }
    return 1;
    }

    #define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

    Ich geh davon aus das du ein Anti-Geld Cheat System in deinem Server (als Filterscript oder als Include) geworfen hast.
    Da sollte es in deinem Anti-Cheat Script normal eine eigenen Funktion geben, wie


    GivePlayerAntiCheatMoney(playerid, menge);


    Dein Befehl ist in Ordnung.


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(fahrzeug, 8, cmdtext);
    return 0;
    }


    dcmd_fahrzeug(playerid, params[]) {
    new
    ModelID,
    FarbId1,
    FarbId2;
    if (sscanf (cmd, "iii", ModelID, Farbid1, Farbid2)) SendClientMessage(playerid, 0xFF0000AA, "Benutzung: /fahrzeug [fahrzeugid] [fahrzeugfarbe1] [fahrzeugfarbe2]"); {
    else if (ModelID == INVALID_VEHICLE_ID) SendClientMessage(playerid, 0xFF0000AA, "Ungültige Fahrzeugmodelid <400-612>");
    else if (Farbid1 > 120 && Farbid1 < 0 && Farbid2 > 120 && Farbid2 < 0) SendClientMessage(playerid, 0xFF0000AA, "Ungültige Farbid");
    else {
    new Float: _Fahrzeug[5];
    GetPlayerPos (playerid, _Fahrzeug[1], _Fahrzeug[2], _Fahrzeug[3]);
    GetPlayerFacingAngle (playerid, _Fahrzeug[4]);
    new v = CreateVehicle (ModelID, _Fahrzeug[1], _Fahrzeug[2], _Fahrzeug[3], _Fahrzeug[4], Farbid1, Farbid2, false);
    PutPlayerInVehicle (playerid, v, 0);
    SendClientMessage(playerid, 0xFF0000AA, "Fahrzeug erstellt");
    }
    return 1;
    }