Beiträge von Templer

    Bitte ^^

    if (strfind(text, "meinbusbot") != -1)
    {
    if(IsPlayerInRangeOfPoint(playerid, 15, -1559.5802,-464.8181,14.0000))
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    OnPlayerCommandText(playerid, "/o hallo hier spricht der Busbot :D");
    format(string, sizeof(string), "Hey %s! You are so mean, you make me so sad!", name);
    OnPlayerText(playerid, string);
    return 0;
    }
    }

    Du kannst im GM keine NPC Funktionen verwenden ^^ Bitte ändere die Zeilen um in:


    Statt SendCommand("/o hallo hier spricht der Busbot :D"); :
    OnPlayerCommandText(playerid, "/o hallo hier spricht der Busbot :D");


    und statt SendChat(string);
    SendClientMessage(playerid, 0xFFFFFF00, string);


    Jedoch hast du es irgendwie falsch aufgefasst. Erkläre bitte was du mit dem Befehl vorhattest, dann richte ich in dir!


    Wegen dem Array [128], dass bedeutet das 128 Charaktere (bzw. Zeichen) in ein Array passen zB wird das
    format(string, sizeof(string), "Hey %s! You are so mean, you make me so sad!", name);
    so abgespeichert:
    string[0] = "H";
    string[1] = "e";
    string[2] = "y";
    //usw...


    abgespeichert ^^ Also einzeln.

    Also im pastebin Code ist alles in Ordnung. Wird die public Funktion DeadCountdown noch irgendwo mit einem Timer gestartet? Da du in ordnungsgemäß abtöten lässt.

    ai toll.. Ich meinte eigentlich was anders aber bitte von OBEN orientieren!


    Bitte so lassen:



    forward CheckVehicleSpecialAction(playerid, vehicleid);


    public CheckVehicleSpecialAction(playerid, vehicleid)

    Ok bitte überprüfe ob du es richtig eingefügt hast, da ich keinen Fehler bekommen wenn ich es in einen leeren GM reinhau. Außer das mit forplayerid aber das gehört zu playerid ^^


    Aber ansonsten bitte überprüfen und dann sagen obs geklappt hat, Danke!

    Das blöde ist, ich weiß nichtmehr direkt, wann genau die Waffe gegeben wird, aber es gäbe eine Sache, wie du meine Version verbesserst, also einfach folgenden Code mim vorhandenen ersetzen:

    new bool:gVehicleSpecialAction[MAX_VEHICLES][MAX_PLAYERS];
    new gLastVehicleID[MAX_PLAYERS];
    new bool:gPlayerVehicleSpecialAction[MAX_PLAYERS];


    forward CheckVehicleSpecialAction(playerid, vehicleid);


    stock RemovePlayerWeapon(playerid, weaponid)
    {
    if(!IsPlayerConnected(playerid) || weaponid < 0 || weaponid > 50) return false;
    new saveweapon[13], saveammo[13];
    for(new slot = 0; slot < 12; slot++)
    GetPlayerWeaponData(playerid, slot, saveweapon[slot], saveammo[slot]);
    ResetPlayerWeapons(playerid);
    for(new slot; slot < 12; slot++)
    {
    if(saveweapon[slot] == weaponid || saveammo[slot] == 0) continue;
    GivePlayerWeapon(playerid, saveweapon[slot], saveammo[slot]);
    }
    GivePlayerWeapon(playerid, 0, 1);
    return true;
    }


    public OnVehicleStreamIn(vehicleid, forplayerid)
    {
    gVehicleSpecialAction[vehicleid][forplayerid] = true;
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    if(gPlayerVehicleSpecialAction[playerid] == true) CheckVehicleSpecialAction(playerid, gLastVehicleID[playerid]); //Führt Funktion sofort aus!
    gLastVehicleID[playerid] = GetPlayerVehicleID(playerid);
    }
    if(newstate == PLAYER_STATE_ONFOOT && oldstate == PLAYER_STATE_DRIVER && gVehicleSpecialAction[gLastVehicleID[playerid]][playerid] == true)
    {
    gPlayerVehicleSpecialAction[playerid] = true;
    SetTimerEx("CheckVehicleSpecialAction", 2000, 0, "dd", playerid, gLastVehicleID[playerid]);
    }
    return 1;
    }


    public CheckVehicleSpecialAction(playerid, vehicleid)
    {
    switch(GetVehicleModel(vehicleid))
    {
    case 596..598:
    {
    new weapon, ammo, cw = GetPlayerWeapon(playerid);
    GetPlayerWeaponData(playerid, 3, weapon, ammo);
    if(weapon == 25)
    {
    RemovePlayerWeapon(playerid, weapon);
    if(ammo > 5) GivePlayerWeapon(playerid, weapon, (ammo-5));
    SetPlayerArmedWeapon(playerid, cw);
    }
    }
    }
    gPlayerVehicleSpecialAction[playerid] = false;
    gVehicleSpecialAction[vehicleid][forplayerid] = false;
    return true;
    }

    else if (!strcmp(type, "park", true, 4))
    {
    if(!PlayerInfo[playerid][cars]) return SendClientMessage(playerid,COLOR_LIGHTRED,"[SYSTEM]: Du besitzt kein Auto.");
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,COLOR_YELLOW,"[SYSTEM]: Du musst in deinen Auto sitzen.");
    if(!IsPlayerInVehicle(playerid, PlayerInfo[playerid][cars])) return SendClientMessage(playerid,COLOR_YELLOW,"[SYSTEM]: Du musst in deinen Auto sitzen.");
    new Float:px, Float:py, Float:pz, Float:pa; // 1581
    GetVehiclePos(PlayerInfo[playerid][cars], px, py, pz);
    GetVehicleZAngle(PlayerInfo[playerid][cars], pa);
    PlayerInfo[playerid][carx] = px; // 1584
    PlayerInfo[playerid][cary] = py; // 1585
    PlayerInfo[playerid][carz] = pz; // 1586
    PlayerInfo[playerid][cara] = pa; // 1587
    PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0);
    new string[50];
    format(string, sizeof(string), "~w~Fahrzeug ~g~ Geparkt");
    GameTextForPlayer(playerid, string, 3000, 6);
    }


    und oben beim new PlayerInfo im enum drinnen steht anscheinend das so bei dir:


    carx,
    cary,
    carz,
    cara,
    gehören tut es so:
    Float:carx,
    Float:cary,
    Float:carz,
    Float:cara,

    Trooper, drück mal in einem GTA Fahrzeug was ca 10km/h fährt so oft wie möglich die aussteige Taste, dann haste dein OnPlayerExitVehicle und wenn jetzt sagen wir in einer Stunde 1000 mal ein Auto verlassen wurde (und per PlayerState abgefragt wird), so häuft sich das ein bisschen zusammen... Was wirklich schonend wäre ein globaler Timer der nur die verbundenen Spieler durchgeht!

    Trooper das ist Falsch! SetTimerEx verbraucht mehr Ressourcen, wenn es öfter aufgerufen wird, als ein globaler Timer! Selbst ausgetestet mit einem globalen Timer, der einen loop durchführt durch alle 500 Slots und mit einem SetTimerEx der playerid 0 ausführt. Das Ergebnis ist, dass bei SetTimerEx überreste gibt die nicht richtig weggeräumt wurden.. Somit wird dann mehr Speicher benützt, je länger der Server läuft.

    Nein mein Timer bleibt global und überprüft ob Spieler in Fahrzeug oder Nicht, so wie es der andere gemacht hat, war eigentlich richtig, nur wäre dann für seine Variante ein normales GameTextForPlayer ausreichend ohne Countdown ^^