Beiträge von [BE]Mika2828

    Anstatt mit GetDistanceFromPoimtToPoint zu arbeiten solltest du dich mal mit der Meter/Sekunde Formel auseinandersetzen.


    new value = floatround(floatsqroot((X*X) + (Y*Y) + (Z*Z)) * 100 * 1.71);// KMH
    Kilometer +=value/3.6;// Formel für Meter/Sekunde


    So Verwendbar in ein einem Sekundentimer, bei schnelleren/langsameren Timer musst du es eben noch "mal" bzw "geteilt" rechnen.


    Vorteil ist das es nicht nur Ressourcen schonender ist sonder funktioniert auch zuverlässiger.


    mfg Mika

    Der SekundenTimer braucht gerade mal 2 Millisekunden um ausgeführt zu werden.
    Mit Pro Timern zu arbeiten ist wie gesagt sehr gut.
    1) Nur 1 Timer
    2) Kein Langer Code wird auf einmal ausgeführt.


    Bei SetTimerEx hätte man bei 60 Spielern 60 Timer, Welche sich eventuell auch überschneiden.


    [12/12/13,16:59:21] Time taken to execute SekundenTimer1: 0
    [12/12/13,16:59:21] Time taken to execute ProTimer: 2
    [12/12/13,16:59:22] Time taken to execute ProTimer: 1
    [12/12/13,16:59:22] Time taken to execute SekundenTimer2: 0
    [12/12/13,16:59:22] Time taken to execute ProTimer: 1
    [12/12/13,16:59:22] Time taken to execute ProTimer: 1
    [12/12/13,16:59:22] Time taken to execute Sekundentimer4: 0
    [12/12/13,16:59:22] Time taken to execute ProTimer: 1
    [12/12/13,16:59:22] Time taken to execute SekundenTimer5: 0
    [12/12/13,16:59:22] Time taken to execute ProTimer: 1
    [12/12/13,16:59:22] Time taken to execute SekundenTimer6: 0
    [12/12/13,16:59:22] Time taken to execute ProTimer: 1
    [12/12/13,16:59:22] Time taken to execute ProTimer: 1


    Inwiefern sich das auswirkt weiß ich nicht.


    mfg Mika

    Das weiß ich auch, danke trotzdem.
    Habe euch gerade mal ein Beispiel geschrieben um es zu Verdeutlichen.


    Jetziger Aufbau:


    public OnGameModeInit()
    {
    SetTimer("StartSekundenTimer1",333,false);
    }
    public StartSekundenTimer1()
    {
    SetProTimer("SekundenTimer1",1000, true);
    }
    public SekundenTimer1()
    {
    foreach(new playerid : Player)
    {
    if(IstCool[playerid] == true)
    {
    //...
    }
    }
    }


    Eventuell besserer Aufbau?!


    public OnPlayerConnect(playerid)
    {
    new SekTimer[playerid] = SetTimerEx("SekundenTimer1", 1000,1, "i", playerid);
    return 1;
    }
    public SekundenTimer1(playerid)
    {
    if(IstCool[playerid] == false)
    {
    //...
    }
    }
    public OnPlayerDisconnect(playerid)
    {
    KillTimer(SekTimer[playerid);
    return 1;
    }


    Ist nur ein Beispiel.



    Danke euch


    mfg Mika

    Hey Kevin,


    Danke für dein Beitrag.


    Hab mir den Timer noch einmal angeschaut und Funktionen mit den in der Zeit ausgeführten Befehlen angeschaut.
    Habe dabei eine mögliche Ursache gefunden.


    Danke dir.


    Trotzdem möchte ich die Frage, ob Sekundentimer per SetTimerEx besser ist noch ein mal in den Raum werfen.


    mfg Mika

    Guten Tag,


    Derzeit stehe ich vor einer schweren Entscheidung.
    Es geht um Sekundentimern.


    Derzeit sieht es bei mir so aus:


    Mehrere Globale Sekunden Timer (6) welche mit der Include ProTimer verknüpft sind. In diesen werden über foreach Spieler bzw. Spieler variablen angesprochen.
    Diese Sekunden Timer werden nach Serverstart in einer gewissen Zeit differenz gestartet sodass sie niemals Gleichzeitig durchlaufen.


    Dieses System hielt ich lange für sehr Gut.


    Doch nun zu meinem Problem. Es scheint sich ein Bug in einem der SekundenTimern (4) eingenistet zu haben, welcher nur bei gewissen Zuständen zu Erscheinung kommt.


    [12/11/13,20:59:59] [debug] #0 000a1ae0 in public SekundenTimer4 () from BE-Script.amx
    [12/11/13,20:59:59] [debug] #1 003b11e4 in public ProTimer () from BE-Script.amx
    [12/11/13,21:00:00] [debug] Run time error 4: "Array index out of bounds"
    [12/11/13,21:00:00] [debug] Accessing element at index 65535 past array upper bound 159
    [12/11/13,21:00:00] [debug] AMX backtrace:
    [12/11/13,21:00:00] [debug] #0 000a1ae0 in public SekundenTimer4 () from BE-Script.amx
    [12/11/13,21:00:00] [debug] #1 003b11e4 in public ProTimer () from BE-Script.amx


    Das Einzige was ich bis jetzt anhand der Logs heraus bekommen konnte ist, dass dieser Fehler durch einen Spieler zu Stande kommt.


    Dieses Problem hat mich nun ein wenig Stutzig gemacht, ob Spieler bezogene Sekunden Timer (SetTimerEx)
    nicht doch sinnvoller wären.


    1) Würde das Problem nur den Spieler betreffen der das Problem verursacht.
    2) Ressourcen Sparender? Ich weiß es nicht, ich hoffe ihr könnt mir helfen.


    Was meint ihr? Ich hoffe ihr habt Tipps bzw mehr Erfahrung in diesem Thema.


    Danke


    mfg Mika

    Guten Tag,


    Würde mir die Map gerne mal anschauen und sie eventuell Erwerben. Aus dem Video heraus Gefällt sie mir echt sehr gut.


    Würde mich freuen wenn du mir im Forum eine Freundschaftsanfrage Senden würdest, so könnten wir uns per PM besser unterhalten.


    mfg Mika

    Wenn ich ein Script öffne, öffnet sich PawnStar ohne Script. Öffne ich nun das Script öffnet er zwar das Script doch der Kompiler Funktioniert nicht.
    (Dos Fenster schließt sich sofort wieder).


    Öffne ich PawnStar mittels der PawnStar.exe, öffne dann das Script, funktioniert der Kompiler.


    Wäre schön wenn du beide Fehler beseitigen würdest =)


    mfg Mika

    Bei mir crasht es leider auch sobald ich etwas tippe.


    Win 8.1
    Net 4.5
    Kompatibilitätsmodus bringt auch nichts.


    edit: Neu runtergeladen, crasht bis jetzt nicht mehr.
    edit: hm mit der Version aus dem Startpost hatte ich keine Crashes.
    Dann habe ich das Update über das Programm durchgeführt und nun wieder Crashes sobald ich etwas Tippe.


    mfg Mika

    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 532)
    {
    SendClientMessage(playerid,ORANGE,"Du hast nun den Job gestartet!Fahre jetz die Checkpoints ab!");
    SetPlayerCheckpoint(playerid,1919.6727,193.1016,34.5751, 3.0);
    Fjob[playerid] = 1;
    return 1;
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du kannst den job nicht starten weil du in keinem Job Fahrzeug bist!");
    DisablePlayerCheckpoint(playerid);
    return 1;
    }

    public CheatCheck()
    {
    foreach(Player, i)
    {
    if(GetPlayerState(i) != PLAYER_STATE_WASTED && GetPlayerState(i) != PLAYER_STATE_SPAWNED && GetPlayerState(i) != PLAYER_STATE_SPECTATING)
    {
    new Float:health;
    GetPlayerHealth(i, health);
    new Float:armour;
    GetPlayerHealth(i, armour);
    if(pHealth[i] > health && GetPlayerState(i) == PLAYER_STATE_ONFOOT)
    {
    pHealth[i] = health;
    }
    if(AntiHealthHack)
    {
    if(health != pHealth[i] && health > 0)
    {
    if(health > pHealth[i])
    {
    new string[128];
    format(string, sizeof(string), "%s wurde vom server gegickt. Grund: Healhack.", SpielerName(i));
    SendClientMessageToAll(COLOR_BANROT,string);
    Kick(i);
    }
    }
    if(armour != pArmour[i] && armour > 0)
    {
    if(armour > pArmour[i])
    {
    new string[128];
    format(string, sizeof(string), "%s wurde vom server gegickt. Grund: Armour Hack.", SpielerName(i));
    SendClientMessageToAll(COLOR_BANROT,string);
    Kick(i);
    }
    }
    }
    }
    }
    return 1;
    }


    Wenn ich keinen Denkfehler habe hattest du "<" in zeile 11, 19, 27 vertauscht.


    mfg Mika

    Das ist aber nicht richtig. Du musst mit GetVehicleModel arbeiten.


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    new vehiclemodel = GetVehicleModel(vehicleid);
    if(vehiclemodel == 481 || vehiclemodel == 509 || vehiclemodel == 510 || vehiclemodel == 520)
    {
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objectives);
    SetVehicleParamsEx(vehicleid,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objectives);
    Motor[vehicleid] = false;
    }
    return 1;
    }

    forward DtdcMoreVehicle(playerid); //
    public DtdcMoreVehicle(playerid)
    {
    switch(PlayerInfo[playerid][pDonateRank])
    {
    case 0:{return 0;}// Kein Donator Kein weiteres Fahrzeug!
    case 1:{return 2;}// Donator Rang 1 - 2 Weiteres Fahrzeuge
    case 2:{return 4;}// Donator Rang 2 - 4 Weitere Fahrzeuge }return 1;}