Beiträge von BlackFoX

    Jo sieht nicht schlecht aus aber mit Photoshop wird das ganze stark vereinfacht


    4/10


    HustleR : Wenn du damit die Möglichkeiten der beiden Dinge ansprichst, dann ist das Coding höchst Komplex dagegen ist Bilderchen machen ne Kippe am Morgen

    public SFArena()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
    if(IsPlayerInRangeOfPoint(i, 2.0, -2111.2424, -444.1721, 38.7344))
    {
    SetPlayerPos(i, -1398.103515, 937.631164, 1036.479125);
    SetPlayerInterior(i, 15);
    }
    }
    return 1;
    }


    Einfach Timer auf 1k Ms in OnGameModeInit setzen

    ahja, dann sag mir doch welche Methode du verwendet hättest, ich sehe keine Synchro extra für CP's ;)
    So hoch ist die Belastung nicht sprich davon merkt man ziemlich wenig, zumal die Schleife nur bis zur Anzahl der bereits erstellen führt,
    dazu wird beim erstellen gecheckt ob in den vorigen Slots nicht schon was Frei ist was durch den Code KillCheckpoint schon gelöscht wurde.


    Ich kenne keine anderen Methoden, mit Checkpoints habe ich bisher noch nicht so oft zu tun gehabt, ich weißt das es ein Limit gibt das sich auf 1 beschränkt,
    Streamer wird gleich nochmal verbessert, habe da noch eine Methode ;)

    if(IsPlayerInRangeOfPoint(playerid, 2.0, -2111.2424, -444.1721, 38.7344);


    Somit würdest du dem Code sagen das hier ende ist somit würde es keine Aktion geben was in dieser Handlung ziemlich unlogisch erscheint


    if(IsPlayerInRangeOfPoint(playerid, 2.0, -2111.2424, -444.1721, 38.7344))

    Da die Funktionen jede MS aufgerufen werden sprich immer wieder das würde wie bei einer unendlichen While schleife enden irgendwann würde der Server hängen bleiben sprich
    zurückhängen, das wiederum löst laggs aus , bei mehreren Spielern wirkt sich das ganze schon gravierend aus

    Code
    switch/Case


    • Das sogenannte Schubladen System um zwischen mehreren Werten zu wechseln zudem bietet diese Funktion mehr Übersicht & spart einem einige Zeilen

    switch(wert)
    {
    case 'a': { /*Bereich / Code Kommando Reihenfolge */ } // Typ Char = Zeichen wie man sieht a
    case 1..4: // wenn Wert einen Wert von 1 bis 4 enthält
    case "blabla": // Wenn der Wert eine Array ist kann man zudem noch auf eine bestimmten Text prüfen
    case 4,7,8: // Wenn Wert 4 7 oder 8


    }



    for(;;;)
    for(new var = Startwert;var<Wert /* Wenn var kleiner Wert , halt ne Anweisung */;var++ /* Aktion */)

    Hallo Leute,


    gibt nicht viel zum Thema zu sagen, ich möchte euch meinen kleinen Checkpoint Streamer vorstellen,
    Streamer deswegen da in Sa-mp eine Limit von einem CP herrscht, meiner Meinung nach zu umständlich und wenig


    Funktionen des Streamers


    AddCheckpoint(Float:size,Float:x,Float:y,Float:z,VirtualWorld = 0,InteriorID = 0,Float:distancex = (MAX_DISTANCE))

    • Erstellt einen Checkpoint
    • Dazu kann die VW & das Interior festgelegt werden


    KillCheckpoint(id)

    • Checkpoint löschen


    cp_streamer()

    • Muss in ,,OnGameModeInit´´ damit der Streamer Aktiviert wird


    kill_streamer()

    • Streamer ausschalten


    CpStreamDisconnect(playerid)

    • Muss in OnPlayerDisconnect damit der Datenspeicher entleert wird ( Für den Spieler )


    public bOnCheckpointStreamIn(playerid,cpid)

    • Eine neue Callback
    • Gibt an welcher CP geladen wurde für welchen Spieler


    public bOnPlayerEnterCheckpoint(playerid,cpid)

    • Eine weitere Callback
    • Gibt an welchen CP der Spieler Betritt


    Ich weiß es ist nichts schweres aber für die Leute die es brauchen wird es sicherlich nützlich sein, zudem bietet der Bereich ,,CP Streamer´´
    eine größere Auswahl zwischen mehreren Methoden.


    Wünsche euch viel Spaß damit, bei auffallenden Fehlern einfach hier melden.


    P.s. Dieser Streamer verwendet einen Timer, wer hier was wegen OnPlayerUpdate erwähnen sollte, sollte wissen das diese Funktion laggs unter Linux auslöst & da
    ich selber einen Linux Server nutze ist es einfach suboptimal für mich sprich die Funktion tut es aber nicht so wie sie soll.


    Hab mir nun mal was neues ausgedacht bzw. sollte so gehen* UPDATE : Der Streamer zeigt den nun den Checkpoint an der dem Spieler nächsten ist, sprich wird noch mal durch gerechnet, so sollten Checkpoints auch laden wenn sie nahe beieinander liegen *Der Maximale Totale Radius kann selber eingestellt werden sprich der Radius in dem die Berechnung durchgeführt werden soll

    • Bau dir einen kleinen Streamer, sollte kein Ding sein
    • Bau ein ID System ein
    • Benutze mehrere CP's gleichzeitig

    Sprich Checkpoint wird in bestimmter Distanz gesetzt & Zerstört sobald die Entfernung zu groß ist,
    dann setzt du ein paar Variablen & fragst ab & setzt je nach dem

    Code
    /event - Den Event Ort festlegen
    /gotoevent - Zum Event Ort durch den Event Eingang
    /evententer - Eingang festlegen


    Nein das Ausrufezeichen zeigt dem Code das er das Ergebnis ins Gegenteil wandeln soll

    Ich dachte du wolltest nen Dynamisches Eingang, hier nochmal alles mit Extra Senf


    new Float:ePos[3],
    Float:nPos[3];


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp("/evententer", cmdtext, true))
    {
    GetPlayerPos(playerid,ePos[0],ePos[1],ePos[2]);
    return SendClientMessage(playerid,0x00FF00FF,"Event wurde markiert.");
    }
    if(!strcmp("/gotoevent", cmdtext, true))
    {
    if(!IsPlayerInRangeOfPoint(playerid,1.2,ePos[0],ePos[1],ePos[2]))return SendClientMessage(playerid,0xFF0000FF,"Falscher Ort!");
    return SetPlayerPos(playerid,ePos[0],ePos[1],ePos[2]);
    }
    if(!strcmp("/event", cmdtext, true))return GetPlayerPos(playerid,nPos[0],nPos[1],nPos[2]);
    return 0;
    }

    new Float:pointX,
    Float:pointY,
    Float:pointZ;
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp("/markevent", cmdtext, true))
    {
    GetPlayerPos(playerid,pointX,pointY,pointZ);
    return SendClientMessage(playerid,0x00FF00FF,"Event wurde markiert.");
    }
    if(!strcmp("/gotoevent", cmdtext, true))
    {
    if(!IsPlayerInRangeOfPoint(playerid,1.2,pointX,pointY,pointZ))return SendClientMessage(playerid,0xFF0000FF,"Falscher Ort!");
    return SetPlayerPos(playerid,X,Y,Z); // Deine Koordinaten....
    }
    return 0;
    }


    Sollte so aussehen