SendClientToChat
Ahhhhja...
ganz kurz nur zum Testen, verwende mal SendClientMessage, geht es dann?
SendClientToChat
Ahhhhja...
ganz kurz nur zum Testen, verwende mal SendClientMessage, geht es dann?
Es sollte doch so sein, wenn ich was schreibe, dass die Farbe je weiter der andere Spieler von mir entfernt ist sich bei ihm die Farbe des Namens ändert. Dies ist aber bei uns nicht so.
Die Farbe..des Namens in der Chat-Nachricht...jaa..
Wie sind denn so deine defines von CHAT_RADIUS und CHAT_FADES und COLOR_FADE1 usw...
Habe es mal an 2 Blitzern aufprobiert.
Habe doch gesagt, in der Funktion auch das GetPlayerFacingAngle austauschen mit GetVehicleZAngle...
Wie mache ich hier, dass sich nicht je weitrman weg ist die Nachricht farblich verändert sondern der Name?
Was meinst du damit?
Der Name ist doch das einzige was sich verfärbt...die Chat-Nachricht selbst ist doch schon immer weiß?!
Offensichtlich wird OnPlayerSpawn ...mit den richtigen Koordinaten aufgerufen...
wo ist jetzt dein Problem?
Wenn die Position nicht gesetzt wird...liegt es offenbar nicht daran, sondern, dass du sie danach wieder anders setzt oder so...
Keine Ahnung, was du da machst.
OnPlayerSpawn wird nicht aufgerufen
Wie OnPlayerSpawn wird nicht aufgerufen?
Wie soll er dann auch Spawnen?
Befindet er sich beim Register etwa im SpectateModus?
Dann schreib mal unter OnUserRegister, anstatt SpawnPlayer TogglePlayerSpectating(playerid, false);
Aber wirklich nur, wenn er im Spectate Modus ist.
Ansonsten, hast du irgendwo einen anderen Fehler, wenn das nicht aufgerufen wird...wie falsche Hooks o.ä.
Direkt danach?
Oder beim Einloggen?
printe mal die Werte unter OnPlayerSpawn.
Schau ob alles aufgerufen wird, wie sehen die Werte nach dem Register aus?
Veränderst du die?
Wird alles richtig geladen?
...wiiir können leider nicht hellsehen
Wird denn OnUserRegister sicher davor aufgerufen?
Was steht unter SaveUserStats?
Sagt crashdetect etwas?
format(SpielerDaten[playerid][player_LastLoginZeit], 50, "%d:%d:%d",Time[0],Time[1],Time[2]);
Einfach:
format(SpielerDaten[playerid][player_LastLoginZeit], 50, "%02d:%02d:%02d",Time[0],Time[1],Time[2]);
hat jemand einen Plan was ich Flasch mache ?
Was heißt denn Bin am Blitzer vor?
Wieso stimmt das denn nicht?
Er blitzt doch nur auf einer Seite...wenn es die falsche Seite ist, dreh einfach den Winkel:
GetPlayerFacingAngle(playerid, pY);
pY = floatround(pY + 180.0) % 360;
1. Wieso funktioniert du Funktion, du gibst keine String-Größe an?
2. Es ist klar definiert, dass nur ein Unterstrich im Namen vorkommen darf, oder?
Dann könntest du die Funktion einfach so schreiben:
stock RemoveUnderscore(const text[MAX_PLAYER_NAME+1])
{
new i = strfind(text,"_");
if(i == -1) return text;
new string[MAX_PLAYER_NAME+1];
strcat(string,text),string[i] = ' ';
return string;
}
Mit der Funktion ist auch sichergestellt, dass du nicht zu große Arrays verwendest oder zu kleine
Und bei deinem Callback kommst du durcheinander (der Fehler liegt bei den String-Variablen), weil du alles darein packst.
Aber das ist doch eine eigene Funktion, die du an anderer Stelle eventuell wieder verwenden kannst, lager sie doch einfach aus.
Schreib es so:
public OnPlayerText(playerid, text[])
{
new string[128];
format(string, sizeof(string), "%s sagt: {FFFFFF}%s", RemoveUnderscore(SpielerDaten[playerid][player_RPName]), text);
SendRangeColorMessage(playerid, string);
return 0;
}
stock SendRangeColorMessage(playerid,const string[])
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
for(new i=GetPlayerPoolSize(),chat_color,Float:distance; i!=-1; i--)
{
if(!SpielerDaten[i][player_Eingeloggt] || !IsPlayerInRangeOfPoint(i, CHAT_RADIUS, x, y, z)) continue;
distance = GetPlayerDistanceFromPoint(i, x, y, z);
if(distance < CHAT_RADIUS / CHAT_FADES)
{
chat_color = COLOR_CHAT;
}
else if(distance < CHAT_RADIUS / CHAT_FADES * 2)
{
chat_color = COLOR_FADE1;
}
else if(distance < CHAT_RADIUS / CHAT_FADES * 3)
{
chat_color = COLOR_FADE2;
}
else if(distance < CHAT_RADIUS / CHAT_FADES * 4)
{
chat_color = COLOR_FADE3;
}
else if(distance <= CHAT_RADIUS / CHAT_FADES * 5)
{
chat_color = COLOR_FADE4;
}
SendClientMessage(i, chat_color, string);
}
return 1;
}
Alles anzeigen
PS: Falls du die Funktion oben verwendest und einen Fehler erhälst wegen der Array Size, im Enum muss die Größe von player_RPName exakt MAX_PLAYER_NAME+1 sein.
so besser?
1. Nein nicht den Code aus dem pwn Tag jetzt da einfach rein kopieren, da jegliche Formatierung zuvor zerstört wurde.
2. Wähle bei dem Code Tag die Sprache mit aus (C) oder wenn du es als Tag direkt schreiben magst: [code=c]
3. Du musst den Code jetzt noch einmal aus deinem Skript kopieren und da einfügen, damit die Formatierung beibehalten wird
Bitte nicht den [pwn] Tag nutzen, der verschiebt sich nämlich wie du siehst, sobald du den Beitrag bearbeitest oder sonst was machst.
Immer nur den Code Tag verwenden, ansonsten ist das wirklich nur schwer möglich dir zu helfen
Blöde Frage, aber um was für eine Art von Server handelt es sich denn eigentlich?
Reallife/Roleplay/Dm/Stunt/Fun?
Und existiert schon ein Skript?
Und was ist das Konzept?
GetPlayerFacingAngle(playerid, pY);
Ich weiß nicht, ob hier die richtige Angle verwendet wird..deshalb sagte ich, teste das alles und printe dir die Werte..musst du halt schauen
Eventuell mal:
GetVehicleZAngle(GetPlayerVehicleID(playerid), pY);
probieren
Wo liegt mein Fehler ?
Hmmm
So einfach kannst du das nicht dynamisch abfragen...
Wie du nämlich siehst, sobald der Winkel über 360 ist stimmt die Logik nicht mehr und sobald es kleiner als 0 ist ebenso.
2 Möglichkeiten:
1. Du bestimmt für den Blitzer exakt die Winkel und gibst diese als zusätzliche Parameter an und prüfst das darüber...
2. Du nutzt eine Funktion die das berücksichtigt und abdeckt.
Hier wurde mal eine gepostet: https://forum.sa-mp.com/showpost.php?p=3065655&postcount=2
Und hier: https://pastebin.com/AzXJc7Lm
Die Funktion heißt da: IsPlayerFacingPoint
Kanst ja mal ein bisschen rumprobieren und damit spielen
Man könnte in der theorie ja eine arena erstellen wo er sich befinden muss oder etwa nicht?
Dann könnte das ja auch klappen?
Natürlich
Gibt viele Möglichkeiten das zu machen...
Kannst auch einfach Checken ob das Auto zu dem Biz gehört...
Meinst ungefähr so wüsste sonst den weg nicht weiter das Business befindet sich da und wen er in den umkreis ist kann er ja kaufen?
Zum Beispiel so
Musst nur schauen, dass in diesem 50m Radius, nicht zufällig noch ein anderes Autohaus liegt
Du weißt ja, an welchem Biz er sich das Auto gekauft hat, als er es sich kauft...
Du hast also 2 Möglichkeiten...
Entweder du speicherst das in einem PVar und fügst das da einfach ein..
oooder du prüfst die Positionen von dem Biz und checkst, an welchem er sich befindet..und hast so die ID.
Wie kann ich am besten ein Erfahrungslevel System erstellen, wo die User Erfahrungspunkte bekommen und dadurch das Level steigt ?
Das kommt darauf an, wie sie diese Erfahrungspunkte erhalten sollen.
Aber üblicherweise passiert das ja über dein "PayDay".
Du kannst also einfach eine Spieler-Variable wie das Level machen, die nennst du dann z.b. pExp.
//Damit gibst du an, dass der Spieler Pro Level 4 XP braucht
//Also um auf Level 2 zu kommen 4
//Um auf level 3 zu kommen 8
//Um auf Level 4 zu kommen 16
//Kannst den Faktor natürlich beliebig Variieren
stock GetXPNeeded(playerid)
{
return 4*SpielerInfo[playerid][pLevel];
}
Dann gibst du dem Spieler pro PayDay einfach immer einen Xp..
Also meinst du einfach nur abfragen ob das Auto in die Richtung fährt über die Z Rotation ?
Jaa...das ist doch das, was du wissen wolltest
Darüber kannst du prüfen, ob das Auto auf den Blitzer zu fährt...oder eben nicht
Den Widerspruch hört man schon raus
Da ist kein Widerspruch, du benutzt es nicht.
Du hast die Variablen deklariert und gibst ihnen einen Wert.
Aber du fragst den Wert ja nirgends ab, also benutzt du die Variable nicht, du weist ihnen nur einen Wert zu
Irgendwie wird die Kilometer Anzeige "über dem Weißen angezeigt"
Du musst das TextDraw als letztes erstellen mit dem Blitzer, dann wird es auch über allen angezeigt
Habe eine andere frage wie mache ich das dass der Blitzer den Spieler angucken muss ?
Wäre es nicht einfacher....den Blitzer Trigger point nur auf der einen Spur zu halten, wo er auch in die Richtung fährt?
Ansonsten kannst du das anhand der [wiki]GetVehicleZAngle[/wiki] ja einfach prüfen, in welche Richtung das Auto zeigen sollte, damit der Blitzer reagiert