im server.log
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
-
Es wird kein Fehler ausgegeben.
Funktioniert der Befehl denn, oder kommt nur "Unknown Command" und sonst passiert nichts? -
Kommt nur Unknow Command sonst passiert rein garnichts
-
Hast du noch einen anderen Command Prozessor im Code, außer ocmd?
Setze bitte mal einen Print direkt als erstes vor die erste if-Abfrage im Befehl.
Wird diese im Server Log angezeigt? Wenn nein, dann wird der Befehl gar nicht aufgerufen, das heißt er wird durch irgendetwas anderes (z.B. einen anderen Command Prozessor) blockiert. -
Hey, hab glaub schon mal hier wegen dem Problem geschrieben.
Es geht um SetPlayerMarkerForPlayer. Es sollen nur Marker für Spieler gesetzt werden die sich im selben Team befinden (GetPlayerTeam).
Folgendes Problem: Manchmal erhalten die Teammitglieder auch Marker aber manchmal nicht
Hab das mit einem Timer geschrieben der nach 1 Sekunde die Marker setzen soll.
Code (runtergebrochen) :
public OnPlayerSpawn(playerid){
SetTimerEx("ShowFactionTeamMarker", 1000, 0, "i", playerid);
return 1;
}forward ShowFactionTeamMarker(playerid);
public ShowFactionTeamMarker(playerid){
for(new i = 0; i < MAX_PLAYERS; i++){
if(!IsPlayerConnected(i))continue;
if(GetPlayerTeam(playerid) == GetPlayerTeam(i)){
SetPlayerMarkerForPlayer(playerid, i, 0xFF00FFFF);
SetPlayerMarkerForPlayer(i, playerid, 0xFF00FFFF);
}
}
return 1;
} -
Manchmal erhalten die Teammitglieder auch Marker aber manchmal nicht
Hmm, ist schwer dir da so zu helfen, da der Code eigentlich korrekt aussieht.
Du musst einfach mal mit prints prüfen, ob das auch immer aufgerufen wird und ob GetPlayerTeam auch immer das richtige Ergebnis liefert
-
Warum gibt es eigentlich 2 include Ordner? Im Hauptordner & im Pawno Ordner.
Wenn ich ein neues include einfüge, in welchen Ordner soll es dann? -
Warum gibt es eigentlich 2 include Ordner? Im Hauptordner & im Pawno Ordner.
Wenn ich ein neues include einfüge, in welchen Ordner soll es dann?Includes müssen nur in den pawno Ordner für dein PAWNO / andere IDE. Der Include Ordner in deinem Serververzeichnis kann gelöscht werden
-
War das nicht irgendwie so, dass man nur bei bestimmten Wetter-IDs das Blaulicht des Copcars sehen kann? Welche IDs waren das nochmal?
Danke im Voraus. -
-
Welche IDs waren das nochmal?
Wetter ID 2 funktioniert. Die anderen müsstest du ausprobieren.
-
Eine frage:
Ist es ratsam so etwas zu machen, also von der performance her?
public OnPlayerConnect(playerid){
SetTimerEx("OnSomethingToDo", 1000, "i", playerid);
return 1;
}Im Moment ist das der einzige Ansatz, der mein Problem löst.
-
Ist halt für jeden Spieler der den Server betritt ein Timer.
Was hast du denn genau vor?
-
Es sollen für Spieler die im selbem Team sind (GetPlayerTeam) Marker gesetzt werden (SetPlayerMarkerForPlayer). Siehe ein paar Posts weiter oben.
Hab es schon bei OnPlayerSpawn versucht aber es ist buggy. (laut SA-MP Forum funktioniert das auch nicht vernünftig in dem Callback, frag mich nicht wieso)
-
SetTimerEx("OnSomethingToDo", 1000, "i", playerid);
Wiederholend oder einmalig? Das fehlt hier nämlich.
Einmalig wäre so:
SetTimerEx("OnSomethingToDo", 1000, false, "i", playerid);
Das ist von der Performance überhaupt kein Problem, da es ja nur ein Aufruf ist, das spielt keine Rolle wann und wo du den machst.Wiederholend wäre so:
SetTimerEx("OnSomethingToDo", 1000, true, "i", playerid);
Da würde allerdings ein einziger Timer mehr Sinn machen, mit einem Loop durch alle Spieler.Bei der genannten Anforderung gehe ich aber davon aus, dass es sich um einen einmaligen Aufruf handelt, sprich die erste Variante.
-
Wiederholend oder einmalig? Das fehlt hier nämlich.
Einmalig wäre so:
SetTimerEx("OnSomethingToDo", 1000, false, "i", playerid);
Das ist von der Performance überhaupt kein Problem, da es ja nur ein Aufruf ist, das spielt keine Rolle wann und wo du den machst.Wiederholend wäre so:
SetTimerEx("OnSomethingToDo", 1000, true, "i", playerid);
Da würde allerdings ein einziger Timer mehr Sinn machen, mit einem Loop durch alle Spieler.Bei der genannten Anforderung gehe ich aber davon aus, dass es sich um einen einmaligen Aufruf handelt, sprich die erste Variante.
Leider die zweite Variante. Der Timer soll Loopen. Habe es jetzt so implementiert, dass der Timer nur beim betreten der Arena (DM Script) erstellt wird und gelöscht wenn der Spieler die Arena verlässt.
Somit läuft der Timer nicht permanent (?). -
Jemand eine Ahnung, wie ich die anklickbare Größe der Boxen einfach herausfinden kann? Die ganzen Tutorials hier zu, sind mir echt zu kompliziert.
GUI_Login[playerid][3] = CreatePlayerTextDraw(playerid, 459.745239, 253.500000, "usebox");
PlayerTextDrawLetterSize(playerid, GUI_Login[playerid][3], 0.000000, 2.340741);
PlayerTextDrawTextSize(playerid, GUI_Login[playerid][3], 331.587097, 0.000000);
PlayerTextDrawAlignment(playerid, GUI_Login[playerid][3], 1);
PlayerTextDrawColor(playerid, GUI_Login[playerid][3], 0);
PlayerTextDrawUseBox(playerid, GUI_Login[playerid][3], true);
PlayerTextDrawBoxColor(playerid, GUI_Login[playerid][3], 0);
PlayerTextDrawSetShadow(playerid, GUI_Login[playerid][3], 0);
PlayerTextDrawSetOutline(playerid, GUI_Login[playerid][3], 0);
PlayerTextDrawFont(playerid, GUI_Login[playerid][3], 0);
PlayerTextDrawSetSelectable(playerid, GUI_Login[playerid][3], 1); -
Habe schon lange nicht mehr mit TextDraws gearbeitet, aber soweit ich mich erinnern kann musst du mit PlayerTextDrawTextSize(playerid, GUI_Login[playerid][3], 331.587097, 0.000000); den anklickbaren Bereich definieren.
In deinem Fall ist die Höhe bei 0.0. -
Habe schon lange nicht mehr mit TextDraws gearbeitet, aber soweit ich mich erinnern kann musst du mit PlayerTextDrawTextSize(playerid, GUI_Login[playerid][3], 331.587097, 0.000000); den anklickbaren Bereich definieren.
In deinem Fall ist die Höhe bei 0.0.Richtig, so weit bin ich auch schon. Aber meines Wissens nach ist es nicht getan, lediglich die Y Achse für die Höhe zu ändern.
-