Ich hab jetzt mit SendClientMessage(i,chat_color,string); probiert, jedoch geht das leider auch nicht.
[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
-
-
Habe das System Jetzt so und es ist immernoch wie oben beschrieben
Keine Ahnung, ich bin aktuell zu faul die Funktion selbst zu testen.
Kannst ja auch einfach sowas machen:
Cconst Float:distance=5.0; //5m vor dem Blitzer wird er geblitzt new Float:x = Blitzer[id][x] + distance * floatsin(-Blitzer[id][rotation], degrees); new Float:y = Blitzer[id][y] + distance * floatcos(-Blitzer[id][rotation], degrees); if(IsPlayerInRangeOfPoint(playerid,5.0,x,y,Blitzer[id][z])) { //Blitz }
@Allrounder18
Ich hab nach mehr defines gefragt gehabt..lies nochmal genau.. -
Ich hab ne Lösung gefunden, wie es funktioniert.
Jedoch möchte ich nun haben, dass wenn die Zeile zu lange ist ein Umbruch kommt und in der näcsten Zeile der Text weitergeht.
Code
Alles anzeigenpublic OnPlayerText(playerid, text[]) { new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z); new text1[2][128],inputtext[128],msg[152]; if(strlen(inputtext) > 128) { strmid(text1[0],inputtext,0,127,128); strmid(text1[1],inputtext,128,strlen(inputtext),128); } format(msg, 152, "%s sagt: {FFFFFF}%s...",RemoveUnderscore(SpielerDaten[playerid][player_RPName]), text1[0]); format(msg, 152, "...%s",text1[1]); new chat_color; for(new i=0; i<MAX_PLAYERS; i++) { if(!SpielerDaten[playerid][player_Eingeloggt])continue; if(!IsPlayerInRangeOfPoint(i, CHAT_RADIUS, x, y, z))continue; new Float: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, msg); } return 0; }
So habe ich es versucht, jedoch kommt egal was ich schreibe nur ...
-
Hier die fehlenden Defines
Deine Defines sind falsch.
#define COLOR_FADE1 0x505050FF
#define COLOR_FADE2 0x50505095
#define COLOR_FADE3 0x50505060
#define COLOR_FADE4 0x50505032Du veränderst nur den Alpha_Wert die Farbe selbst bleibt gleich.
Wie soll sich da also was ändern?
Musst die Farben selbst heller bzw dunkler machen, so wie du magst.
-
-
@Kaliber wie meint du das? Ich hab oben was reinedtiert.
Das hat nichts mit der Funktion zu tuen, die funktioniert einwandfrei.
Der Punkt ist, du nutzt in den Defines immer die selbe Farbe...
Überall nur 0x505050
R = 50
G = 50
B = 50Nur die Alpha Werte änderst du, aber die haben keine Auswirkungen auf die Farbe.
Also ändere die R, G oder B Werte...
Schreib also zum Beispiel bei COLOR_FADE4B0B0B0 dann ist diese wesentlich heller.
Kannst ja mal mit den Werten rumspielen: https://html-color-codes.info/old/colorpicker.html
-
Die Farben zeigt er mir ja an aber ich mein folgendes
Jedoch möchte ich nun haben, dass wenn die Zeile zu lange ist ein Umbruch kommt und in der näcsten Zeile der Text weitergeht.
Code
Alles anzeigenpublic OnPlayerText(playerid, text[]) { new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z); new text1[2][128],inputtext[128],msg[152]; if(strlen(inputtext) > 128) { strmid(text1[0],inputtext,0,127,128); strmid(text1[1],inputtext,128,strlen(inputtext),128); } format(msg, 152, "%s sagt: {FFFFFF}%s...",RemoveUnderscore(SpielerDaten[playerid][player_RPName]), text1[0]); format(msg, 152, "...%s",text1[1]); new chat_color; for(new i=0; i<MAX_PLAYERS; i++) { if(!SpielerDaten[playerid][player_Eingeloggt])continue; if(!IsPlayerInRangeOfPoint(i, CHAT_RADIUS, x, y, z))continue; new Float: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, msg); } return 0; }
So habe ich es versucht, jedoch kommt egal was ich schreibe nur ...
-
Wieso machst du so einen Quatsch?
1. Hast du wieder alle Funktionen zerstört und alles darein gepackt.
2. Hast du die Logik zerstört und machst da kompletten Blödsinn.
Wieso nutzt du nicht wie vorher die Funktion die du schon hattest...
Da war doch alles korrekt, bis auf die Farben, aber das lag an deinen defines...
-
Was meinst du mit Quatsch?
1. Hab ich es so gemacht, weil ich mit der Funktion ja nur genau die Nachricht machen kann udn ich dis aber auch bei /me machen mlchte mt violettfarben
2. Was genau meinst du?
Edit: ginge s folgendermaßen?
Color_Chat für den Chat und VIOLETT für die /me?
-
2. Was genau meinst du?
Na, was glaubst du warum der Code nicht funktioniert?
Weil die Code Logik zerstört ist.
Die Funktion SendClientToChat hingegen funktioniert, also nutze sie doch einfach.
mt violettfarben
Dann ändern sich doch nur die Farben.
Ja, klar kannst du es so machen, wie in deinem Beispiel
Es ginge auch noch anders, z.B. mit intelligentem shiften.
Da gibt es ein schönes Include: https://forum.sa-mp.com/showthread.php?p=4055845
Und sogar ein Beispiel für dein Problem: https://forum.sa-mp.com/showpo…a07&p=4079880&postcount=7
Aber kannst du ja entscheiden xD
-
Code
Alles anzeigenstock SendClientToChat(color, string[], playerid = -1) { new count, length = 72; for(new i, l = strlen(string); i != l; i++) { if(string[i] == '{' && string[i+7] == '}')count += 8; } if(strlen(string) > (length+count)) { new text[2][152]; strmid(text[0], string, 0, length+count); strmid(text[1], string, length+count, strlen(string)); format(text[0], 152, "{FFFFFF}%s...", text[0]); format(text[1], 152, "...%s", text[1]); if(~playerid) { SendClientMessage(playerid, color, text[0]); SendClientMessage(playerid, color, text[1]); } else { SendClientMessageToAll(color, text[0]); SendClientMessageToAll(color, text[1]); } return 1; } if(~playerid) SendClientMessage(playerid, color, string); else SendClientMessageToAll(color, string); return 1; }
Wenn ich es mit der Funktion mache, dann is der name in der erstenzeile und der text weiß und die 2. zeile wo ur text steht in den graufarben. Was mus ich da ändern, damit name in grufarben und der rest alles weiß ist??
-
Schreib das mal so:
format(text[0], 152, "%s...", text[0]);
format(text[1], 152, "{FFFFFF}...%s", text[1]);Musst halt noch ne Abfrage einbauen, ob das bei dem ME auch so sein soll oder nicht.
-
danke, funktioniert.
Was muss ich bei SendClientToChat ändern, damit ich SendRangeColorMessage( für verschiedenen Chats mit verschiedenen Faben nehmen kann? zb wie oben geschrieben der chat in grautänen und /me in violetttönen?Edit: bei /me solls wieder so sein
Edit: Problem hat sich erledigt.
Was muss ich machen wenn ich ein % schreibe, dass anstatt von # das % kommt im Text?
Muss ich dass dann zu OnPlayer Text geben? -
Hey,
vielleicht kann mir jemand helfen ?Ich möchte, dass wenn das Ordnungsamt ein Fahrzeug abgeschleppt hat, dass der Spieler dann eine Nachricht bekommt das sein Fahrzeug abgeschleppt wurde..
Wie stelle ich das an ?ocmd:abschleppen(playerid,params[])
{
if(pInfo[playerid][fraktion]!=4)return noaccess
if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,GRAU,"Du bist nicht in einem Towtruck.");
if(!IsPlayerInRangeOfPoint(playerid,200.0,2839.6499,965.5730,10.7500))return SendClientMessage(playerid,GRAU,"Du bist nicht an der Ordnungsamt Base.");
new vid;
if(sscanf(params, "d", vid))return SendClientMessage(playerid, WEIß,"Verwendung: /abschleppen (ID) - /dl Zeigt die ID's");if(GetVehicleTrailer(GetPlayerVehicleID(playerid))!=vid)return SendClientMessage(playerid, GRAU, "Das Fahrzeug ist nicht getowt.");
if(IsFrakCar[vid]==1)return SendClientMessage(playerid, GRAU, "Fahrzeuge einer Fraktion können nicht abgeschleppt werden.");new count=0;
for(new i=0; i<GetMaxPlayers(); i++)
{
if(!PlayerOnline(i))continue;
if(vid==PlayerCar[i][slot1])
{
CarAbgeschleppt[playerid][0]=1;
if(HatNeon[vid]!=0)
{
DestroyObject(Neon[vid][0]);
DestroyObject(Neon[vid][1]);
}
DestroyVehicle(vid);
PlayerCar[i][slot1]=INVALID_VEHICLE_ID;
pInfo[playerid][payday]+=1000;
count++;
break;
}
else if(vid==PlayerCar[i][slot2])
{
CarAbgeschleppt[playerid][1]=1;
if(HatNeon[vid]!=0)
{
DestroyObject(Neon[vid][0]);
DestroyObject(Neon[vid][1]);
}
DestroyVehicle(vid);
PlayerCar[i][slot2]=INVALID_VEHICLE_ID;
pInfo[playerid][payday]+=1000;
count++;
break;
}
else if(vid==PlayerCar[i][slot3])
{
CarAbgeschleppt[playerid][2]=1;
if(HatNeon[vid]!=0)
{
DestroyObject(Neon[vid][0]);
DestroyObject(Neon[vid][1]);
}
DestroyVehicle(vid);
PlayerCar[i][slot3]=INVALID_VEHICLE_ID;
pInfo[playerid][payday]+=1000;
count++;
break;
}
}
if(count==0)return SendClientMessage(playerid, GRAU, "Du kannst dieses Fahrzeug nicht abschleppen.");
SendClientMessage(playerid,HBLAU,"Du hast das Fahrzeug abgeschleppt. +1.000$ werden dir am PayDay gutgeschrieben."); -
C
new string1[300]; format(string,sizeof(string),"Gehalt(Brutto): {grün}+$%d{FFFFFF} Steuern: {rot}-$%d",pInfo[playerid][pGehalt],pInfo[playerid][pSteuern]); SendClientMessage(playerid,-1,string1);
Ich habe jetzt einmal in einer SendClientMessage Gehalt und Steuern als Beispiel jetzt genommen
Wie frage ich ab ob die Zahl über 0 oder unter 0 ist?Ist der Gehalt gleich 0 soll er rot angezeigt werden sind die Steuern dann auch gleich 0 soll der Wert grün angezeigt werden.
Ist der Gehalt über 0 soll er grün angezeigt werden sind die Steuern dann über 0 soll es rot angezeigt werden.Hier sind 2 abfragen, weil es auch andere Steuern gibt das heißt, dass wenn Gehalt 0 ist die Steuern oft nicht 0 sind.
Ist mir grade ein Rätsel, aufgrund der 2 Abfragen -
C
new string1[300]; format(string,sizeof(string),"Gehalt(Brutto): {grün}+$%d{FFFFFF} Steuern: {rot}-$%d",pInfo[playerid][pGehalt],pInfo[playerid][pSteuern]); SendClientMessage(playerid,-1,string1);
Ich habe jetzt einmal in einer SendClientMessage Gehalt und Steuern als Beispiel jetzt genommen
Wie frage ich ab ob die Zahl über 0 oder unter 0 ist?Ist der Gehalt gleich 0 soll er rot angezeigt werden sind die Steuern dann auch gleich 0 soll der Wert grün angezeigt werden.
Ist der Gehalt über 0 soll er grün angezeigt werden sind die Steuern dann über 0 soll es rot angezeigt werden.Hier sind 2 abfragen, weil es auch andere Steuern gibt das heißt, dass wenn Gehalt 0 ist die Steuern oft nicht 0 sind.
Ist mir grade ein Rätsel, aufgrund der 2 AbfragenSpontan würden mir da zwei Möglichkeiten einfallen:
- Ternärer Operator. Die Syntax ist ungefähr BEDINGUNG ? trifft zu : trifft nicht zu . Demnach würde es dann so aussehen (pInfo[playerid][pGehalt] == 0 ? ("rot") : ("grün"))
- Altbekannter weg, in dem du die Farbe vor dem format bereits ermittelst:
Beides jeweils analog zu pSteuern.
-
-
Danke dir @Douq
Jetzt hätte ich nur das Problem, wie ich dies jetzt im String anzeigen lasse.
So wäre es nicht machbar (oder?), wie soll ich es stattdessen machen?Außerdem erscheinen hier Errors, die ich mir nicht erklären kann.
Cnew GehaltFarbe[8]; if(pInfo[playerid][pGehalt] == 0} format(GehaltFarbe, 8, "+rot"); else format(GehaltFarbe, 8, "+grün"); new Steuernfarbe[8]; if(pInfo[playerid][pGehalt] == 0} format(Steuernfarbe, 8, "+rot"); else format(Steuernfarbe, 8, "+grün"); new string1[300]; format(string1,sizeof(string1),"Gehalt: %d, Steuern: &d",GehaltFarbe, Steuernfarbe); SendClientMessage(playerid,-1,string1);
Code(1200) : error 001: expected token: ")", but found "}" (1200) : error 029: invalid expression, assumed zero (1201) : error 029: invalid expression, assumed zero (1203) : error 001: expected token: ")", but found "}" (1203) : error 029: invalid expression, assumed zero (1204) : error 029: invalid expression, assumed zero
-
Danke dir @Douq
Jetzt hätte ich nur das Problem, wie ich dies jetzt im String anzeigen lasse.
So wäre es nicht machbar (oder?), wie soll ich es stattdessen machen?Außerdem erscheinen hier Errors, die ich mir nicht erklären kann.
Cnew GehaltFarbe[8]; if(pInfo[playerid][pGehalt] == 0} format(GehaltFarbe, 8, "+rot"); else format(GehaltFarbe, 8, "+grün"); new Steuernfarbe[8]; if(pInfo[playerid][pGehalt] == 0} format(Steuernfarbe, 8, "+rot"); else format(Steuernfarbe, 8, "+grün"); new string1[300]; format(string1,sizeof(string1),"Gehalt: %d, Steuern: &d",GehaltFarbe, Steuernfarbe); SendClientMessage(playerid,-1,string1);
Code(1200) : error 001: expected token: ")", but found "}" (1200) : error 029: invalid expression, assumed zero (1201) : error 029: invalid expression, assumed zero (1203) : error 001: expected token: ")", but found "}" (1203) : error 029: invalid expression, assumed zero (1204) : error 029: invalid expression, assumed zero
Codenew GehaltFarbe[8]; if(pInfo[playerid][pGehalt] == 0) format(GehaltFarbe, 8, "+rot"); else format(GehaltFarbe, 8, "+grün"); new Steuernfarbe[8]; if(pInfo[playerid][pGehalt] == 0) format(Steuernfarbe, 8, "+rot"); else format(Steuernfarbe, 8, "+grün"); new string1[300]; format(string1,sizeof(string1),"Gehalt: %d, Steuern: &d",GehaltFarbe, Steuernfarbe); SendClientMessage(playerid,-1,string1);
Versuchs mal so du hast die falschen Klammern verwendet. -
Was muss ich machen, wenn ich bei /admins angezeigt bekommen möchte , das der Admin Duty ist
Also folgendermaßen Projektleitung Allrounder18 Im Dienst. So sieht es im Dialog aus.
Ich habe wenn ich aduty bin ein [ARP] vor dem Namen stehn, dadurch kennt mein System dass ich online bin. Wie kann ich das fixen?Code
Alles anzeigenpublic AdminList(playerid) { new string[1000],header[1001],adminrang,name[MAX_PLAYER_NAME],pID; new rows; cache_get_row_count(rows); for(new i=0;i<rows;i++) { cache_get_value_name_int(i,"Admin",adminrang); cache_get_value_name(i,"Name",name,255); pID = GetPlayerIdFromName(name); if(adminrang > 2 && adminrang < 8) { format(string, sizeof(string), "%s\n%s\t%s\t%s",string, GetAdminName(adminrang), name, GetPlayerStatus(pID)); format(header,sizeof(header),"{FFFFFF}Rang\t{FFFFFF}Name\t{FFFFFF}Onlinestatus\n%s",string); } } ShowPlayerDialog(playerid, DIALOG_ADMINS, DIALOG_STYLE_TABLIST_HEADERS, "{FF0000}Austrian Roleplay {FFFFFF}- Team",header,"{FFFFFF}Abbrechen",""); return 1; }
-