Beiträge von Hagi

    Den 1 Sekunden Timer kann ich nicht verändern, Die 10 und 15 Minuten sind egal, da sie nicht oft aufgerufen werden.


    Das heißt ich kann nur noch den 10 Sekunden Timer ändern. Aber wenn ich den um ein paar Milisekunden änder ist die Frage ob das überhaupt was bringt, denn der Server brauch ja auch ein bisschen um den 1 Sekunden Timer zu durchlaufen. Aber wenn ich den um einen höheren Intervall ändern sind es ja keine 10 Sekunden mehr.

    Vom einen auf den anderen Tag kommt das Script mit den Textdraws durcheinander.


    Ich habe mehrere Textdraws:


    carrespawn,spawnschutz,einnahmen,events, rankdraw.


    Das Problem ist jetzt nur, dass immer nur das erste Textdraw, Rankdraw aktualisiert wird mit den Strings der anderen Textdraws. Nur jeder Textdraw hat einen eigenen Namen. Wie kann das sein ?

    Spätestens wenn der Bot sein Passwort eingeben muss scheiterst du mit deiner ini.


    Nein, du musst Abfragen ob der Spieler ein Bot ist und wenn ja, dann keinen Account erstellen und auch nicht in den Login schicken, sondern einfach spawnen lassen.


    if(IsPlayerNPC(playerid))

    Gut also ein GF Script.


    ICh kenn mich damit jetzt nicht aus, aber es gibt meiner Meinung nach eine Variable, die bestimmt ob der Spieler das Tut bereits hat. Diese musst du auch beim connecten auf true setzten. Du musst außerdem gar nicht mal schaun ob der Bot schon nen Account hat, er brauch keinen, da du ja mit IsPlayerNPC abfragen kannst ob ein Bot ist und damit das login umgehen kannst.

    Hast du bereits deinen Bot aufgenommen, dann ein Filterscript mit Anweisugnen für den Bot erstellt?


    Das Filterscript in -> npcmodes
    Die rec Datei in npcmodes/recordings


    ...............


    Unter die defines:


    new car_BusLSTest2:


    Unter OnGameModeInit



    ConnectNPC("Botname in diesem Fall 'BusLSTest2","name der filterscript datei, welche sich im npcmodes ordner befindet");
    car_BusLSTest2 = CreateVehicle(431, 0.0, 0.0, 5.0, 0.0, 0, 0, 5000);


    OnPlayerConnect:


    if(IsPlayerNPC(playerid))
    {
    gPlayerAccount[playerid] = 1;
    gPlayerLogged[playerid] = 1;
    }



    OnPlayerSpawn



    if(IsPlayerNPC(playerid))
    {
    new botname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, botname, sizeof(botname));
    if(strcmp(botname, "BusLSTest2", true) == 0)// Wenn der beim Connecten festgelegte Botname gleich dem comparestring ist
    {
    PutPlayerInVehicle(playerid, car_BusLSTest2, 0); //Dann setzt du ihn in das Auto, dass für den Bot vorgesehen ist
    }
    }


    Und das ist auch schon alles

    Jeder Bot bekommt beim Connecten einen eigenen Namen. Der Code sieht unter OnPlayerSpawn dann folgendermaßen aus:


    if(IsPlayerNPC(playerid))
    {
    new botname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, botname, sizeof(botname));
    if(strcmp(botname, "BusLSTest2", true) == 0)// <--------------------BOTNAME
    {
    PutPlayerInVehicle(playerid, car_BusLSTest2, 0); //Putting the NPC into the vehicle we created for it.
    }
    }


    Auto wird natürlich unter OnGameMode Init erstellt und muss deshalb nur noch mit dem Bot besetzt werden

    Wenn du sowas schreibst kann ich ja nicht riechen, dass er nicht im car sitzt


    Zitat

    Aber wenn ich aufn Server gehe, steht der nur inner Luft dumm rum.
    Das steht da, und das Car, ist auch da, wo er gespawned wird,

    Wenn du ihm beim login in ein Auto pakst ist das so als ob du ein Brötchen isst, dass noch verpackt ist



    Der muss schon beim Spawnen ins Auto


    PS: Haste denn auch das Filterscript und die aufgenommene Route im Ordner npcmodes - npcmodes/recordings, auf dem gleichen Host wo auch das Script liegt ?

    ja genau mysql, wird nur aufgerufen wenn man sich einloggt und ausloggt.


    Hier der 1 Sekunden Timer und der 10 Sekunden Timer


    public onesek() // Diverse Updates auf 1 Sekunde
    {
    // Team-Counter Spawnschutz Prison RB Adminleben

    tcounter[tmafia] = 0;
    tcounter[tpolice] = 0;

    for(new i = 0;i<MAX_PLAYERS;i ++)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i))
    {
    if(gTeam[i] == TEAM_MAFIA && GetPVarInt(i,ADMINLEBENCHECK_KEY) == 0)
    {
    tcounter[tmafia] ++;
    }
    else if(gTeam[i] == TEAM_POLICE && GetPVarInt(i,ADMINLEBENCHECK_KEY) == 0)
    {
    tcounter[tpolice] ++;
    }

    if(GetPVarInt(i,SPAWNSCHUTZ_KEY) > 1)
    {
    SetPlayerHealth(i,10000);
    TextDrawHideForPlayer(i,spawnschutztext);
    TextDrawShowForPlayer(i,spawnschutztext);
    SetPVarInt(i,SPAWNSCHUTZ_KEY,GetPVarInt(i,SPAWNSCHUTZ_KEY)-1);
    }
    if(GetPVarInt(i,SPAWNSCHUTZ_KEY) == 1)
    {
    SetPlayerHealth(i,100);
    TextDrawHideForPlayer(i,spawnschutztext);
    SetPVarInt(i,SPAWNSCHUTZ_KEY,GetPVarInt(i,SPAWNSCHUTZ_KEY)-1);
    }

    if(GetPVarInt(i,PRISON_KEY) >= 1)
    {
    if(GetPVarInt(i,PRISON_KEY) >= 1)
    {
    SetPVarInt(i,PRISON_KEY,GetPVarInt(i,PRISON_KEY)-1);
    }
    if(GetPVarInt(i,PRISON_KEY) == 0)
    {
    SpawnPlayer(i);
    SendClientMessage(i,weiß,"Deine Prison Zeit ist abgelaufen");
    }
    }

    if(GetPVarInt(i,HATRBGEBAUT_KEY) >= 1)
    {
    SetPVarInt(i,HATRBGEBAUT_KEY,GetPVarInt(i,HATRBGEBAUT_KEY)-1);
    }

    if(GetPVarInt(i,ADMINLEBENCHECK_KEY) == 1)
    {
    SetPlayerHealth(i,1000);
    SetPlayerArmour(i,1000);
    }
    }
    }

    // Wurdeeingenommen

    for(new i = 0;i<sizeof(zonen);i++)
    {
    if(wurdeeingenommen[i] >= 1)
    {
    wurdeeingenommen[i] --;
    }
    }


    // Admincarleben


    for(new i = 0;i<sizeof(admincar);i++)
    {
    SetVehicleHealth(admincar[i],10000.0);
    RepairVehicle(admincar[i]);
    }
    return 1;
    }


    public tensek()
    {
    // Medic Punktebar Ränge

    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))
    {
    if(gKlasse[i] == KLASSE_MEDIC)
    {
    for(new p = 0;p<MAX_PLAYERS;p++)
    {
    if(IsPlayerConnected(p) && p != i)
    {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(i,x,y,z);


    if(IsPlayerInRangeOfPoint(p,5.0,x,y,z))
    {
    if(gTeam[i] == gTeam[p])
    {
    new Float:health;
    GetPlayerHealth(p,health);


    if(health + 25 > 100)
    {
    SetPlayerHealth(p,100.0);
    }
    else
    {
    SetPlayerHealth(p,health+25);
    }
    }
    }
    }
    }
    }

    for(new j = 0;j<sizeof(rankdraws);j++)
    {
    if(GetPVarInt(i,PUNKTE_KEY) >= rankdraws[j][ipunkte])
    {
    for(new k = 0;k<sizeof(rankdraws);k++)
    {
    TextDrawHideForPlayer(i,rankdraw[k]);
    }
    TextDrawShowForPlayer(i,rankdraw[j]);
    SetPVarInt(i,RANK_KEY,j);


    if(j == 12)
    {
    if(GetPVarInt(i,PREMIUM_KEY) == 0)
    {
    SetPVarInt(i,PREMIUM_KEY,1);
    SendClientMessage(i,hblau,"Für deine Leistungen um Rank 12 erhälst du Premium");
    }
    }
    }
    }

    new punktestring[128];
    format(punktestring,sizeof(punktestring),"Punkte: %d\t\tKills: %d\t\tTode: %d",GetPVarInt(i,PUNKTE_KEY),GetPVarInt(i,KILLS_KEY),GetPVarInt(i,TODE_KEY));
    TextDrawSetString(statsdraw[i],punktestring);
    }
    }


    // Uhrzeit


    if(autozeit == 1)
    {
    new stunde,minute,sekunde;
    gettime(stunde,minute,sekunde);
    SetWorldTime(stunde);
    }
    return 1;
    }


    Noch zur Info:


    OnPlayerUpdate ist leer

    Ich habe bereits diese Tipps befolgt ,Hilfe wenn der Server laggt , aber es laggt trotzdem noch.


    Ich habe 4 Timer auf folgenden Instanzen:


    1 Sekunde
    10 Sekunden
    5 Minute
    15 Minuten


    In allen 4 Publics laufen so wenig Schleifen für jeden Spieler wie möglich.


    Ich habe bereits meine eigenen Logs rausgenommen weil diese den Server zum laggen brauchten, doch er laggt immer noch. So sahen meine Logs aus:



    Außerdem hab ich noch nen Antibadwords welchen ich aber eigentlich nicht entfernen möchte:



    Weiß sonst noch einer woran das laggen liegen könnte ?

    Ist doch nix anderes als ein Tor.


    Erstellst halt zwei tore


    const maxtor = 2;
    new tor[2];


    tor[1] = CreateObject...
    tor[1] = CreateObject...


    Dann in deinem Befehl bewegst du einfach beide Tore


    if(strcmp(...../gate......)
    {
    for(new i = 0;i<maxtor;i++)
    {
    MoveObjec(tor[i],.......
    }
    SendClientMessage(playerid,farbe,"Das Tor am Hangar blubb wurde geöffnet und bleibt 5 Sekunden offen");
    SetTimer("closetor",5000,0);
    return 1;
    }


    Hier ist es jetzt per Array und ner For-loop gelöst, kannst natürlich auch beide tore einzen ohne Schleife bewegen oder die komplett ohne array machen, sprich einfach tor1 und tor2 nennen.


    Um dann die Tore wieder zu schließen:


    forward closetor();


    public closetor()
    {
    for(new i = 0;i<maxtor;i++)
    {
    MoveObjec(tor[i],.......
    }
    return 1;
    }

    hier fehlte die letzte )


    if(newstate == PLAYER_STATE_DRIVER && PlayerInfo[playerid][pCarLic] == 0 && !NoLicCar(GetPlayerVehicleID(playerid)))


    Also komplett dann so


    stock NoLicCar(vehicleid)
    {
    switch(GetVehicleModel(vehicleid))
    {
    case 462, 510, 509, 481: return true;
    }
    return false;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER && PlayerInfo[playerid][pCarLic] == 0 && !NoLicCar(GetPlayerVehicleID(playerid)))
    {
    SendClientMessage(playerid, 0xFFFFFF00, "Fahren ohne Führerschein ist verboten!");
    }
    return 1;
    }

    Du brauchst ne Schleife die alle Badwords durchgeht.




    const maxbadwords = 23;
    new BadWords[maxbadwords][1] =
    {
    {"Hurensohn"},
    {"Wichser"},
    { "Schwanzlutscher"},
    {"fotzenkopf"},
    {"Penner"},
    {"Wixxer"},
    {"Huso"},
    {"fick dich"},
    {"missgeburt"},
    {"fick_dich"},
    {"fickdich"},
    {"Huren Sohn"},
    {"spaken"},
    {"asshole"},
    {"Spast"},
    {"spasti"},
    {"Fotze"},
    {"Penislutscher"},
    {"Arschficker"},
    {"Idiot"},
    {"Motherfucker"},
    {"Bitch"},
    {"Hurentochter"}
    };


    public OnPlayerText(playerid, text[])
    {
    for(new i = 0;i<maxbadwords;i++)
    {
    if(strfind(text,BadWords[i][0],true))
    {
    if(SpielerInfo[playerid][alvl]<=0)
    {
    new kname[MAX_PLAYER_NAME], string[256];
    GetPlayerName(playerid, kname, sizeof(kname));
    SendClientMessage(playerid,0xFF0000FF,"Beleidigungen sind verboten, du wurdest gekickt!");
    format(string, sizeof(string), "%s(%d) wurde vom System gekickt. Grund: Beleidigung ",kname,playerid);
    SendClientMessageToAll(0xFF0000FF,string);
    Kick(playerid);
    }
    }
    }
    return 1;
    }


    sollte eig gehn.


    Ansonsten ist hier ein Badwords System, da kannste ja mal reinschaun obs dir hilft: [ FILTERSCRIPT ] Badwords-System by Hagi


    Das kann ja schonmal nicht funktionieren. Dein Objekt hat zu viele Zellen.


    Du hast es so new Float:Eingang[MAX_EINGANG][3][3]
    Aber du brauchst die zweite [3] nicht.
    Also einfach so machen
    new Float:Eingang[MAX_EINGANG][3][3]


    Erklärung: Max Eingang bestimmt wie viele Reihen du hast.
    die erste und einzige [3] bestimmt wie viele Parameter sich pro Zeile befinden.


    Solltest du das also geändert haben muss der Rest so aussehen.


    public OnGameModeInit()
    {
    for(new i = 0; i < MAX_EINGANG; i++)
    {
    EingangPick[i] = Create3DTextLabel("Eingang[Entertaste]",0x00A4DCFF,Eingang[i][0],Eingang[i][1],Eingang[i][2], 10,0, 0);
    }
    return 1;
    }