Checkpoint auf bestimmter Distanz nochmal setzen & bei zu großer Entfernung wieder zerstören
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
-
Mach das über die Funktion
forward SFArena();
damit das ganz deklariert wird
-
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 -
Timer niemals auf 1 Ms setzen , 1000 ms reichen schon
-
- 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 wenigFunktionen 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
-
SetPlayerCheckpoint
Ansonsten schau einfach ins Wiki, steht doch das der Cp Speziell für einen Spieler gesetzt wird
-
Dazu gibt es eine Callback wie Ed_Hardy bereits erwähnt

-
- 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 -
-
Kann sein aber jeder Dateizugriff kostet Zeit sprich deinen Ressourcen wird das ganze nicht gut tun
-
-
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
-
-