Angepinnt [SAMMELTHREAD] Kleine Scripting Fragen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Allrounder18 schrieb:

    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...


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Die sind so:

    #define COLOR_CHAT 0x505050DD
    #define COLOR_FADE1 0x505050FF
    #define COLOR_FADE2 0x50505095
    #define COLOR_FADE3 0x50505060
    #define COLOR_FADE4 0x50505032

    Edit: Das SendClientToChat

    Quellcode

    1. stock SendClientToChat(color, string[], playerid = -1)
    2. {
    3. new count, length = 72;
    4. for(new i, l = strlen(string); i != l; i++) {
    5. if(string[i] == '{' && string[i+7] == '}')count += 8;
    6. }
    7. if(strlen(string) > (length+count)) {
    8. new text[2][152];
    9. strmid(text[0], string, 0, length+count);
    10. strmid(text[1], string, length+count, strlen(string));
    11. format(text[0], 152, "{FFFFFF}%s...", text[0]);
    12. format(text[1], 152, "...%s", text[1]);
    13. if(~playerid) {
    14. SendClientMessage(playerid, color, text[0]);
    15. SendClientMessage(playerid, color, text[1]);
    16. } else {
    17. SendClientMessageToAll(color, text[0]);
    18. SendClientMessageToAll(color, text[1]);
    19. }
    20. return 1;
    21. }
    22. if(~playerid) SendClientMessage(playerid, color, string);
    23. else SendClientMessageToAll(color, string);
    24. return 1;
    25. }
    Alles anzeigen
  • Neu

    reaL. schrieb:

    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:

    C-Quellcode

    1. const Float:distance=5.0; //5m vor dem Blitzer wird er geblitzt
    2. new Float:x = Blitzer[id][x] + distance * floatsin(-Blitzer[id][rotation], degrees);
    3. new Float:y = Blitzer[id][y] + distance * floatcos(-Blitzer[id][rotation], degrees);
    4. if(IsPlayerInRangeOfPoint(playerid,5.0,x,y,Blitzer[id][z]))
    5. {
    6. //Blitz
    7. }
    @Allrounder18
    Ich hab nach mehr defines gefragt gehabt..lies nochmal genau..


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Neu

    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.

    Quellcode

    1. public OnPlayerText(playerid, text[])
    2. {
    3. new Float:x, Float:y, Float:z;
    4. GetPlayerPos(playerid, x, y, z);
    5. new text1[2][128],inputtext[128],msg[152];
    6. if(strlen(inputtext) > 128)
    7. {
    8. strmid(text1[0],inputtext,0,127,128);
    9. strmid(text1[1],inputtext,128,strlen(inputtext),128);
    10. }
    11. format(msg, 152, "%s sagt: {FFFFFF}%s...",RemoveUnderscore(SpielerDaten[playerid][player_RPName]), text1[0]);
    12. format(msg, 152, "...%s",text1[1]);
    13. new chat_color;
    14. for(new i=0; i<MAX_PLAYERS; i++)
    15. {
    16. if(!SpielerDaten[playerid][player_Eingeloggt])continue;
    17. if(!IsPlayerInRangeOfPoint(i, CHAT_RADIUS, x, y, z))continue;
    18. new Float:distance = GetPlayerDistanceFromPoint(i, x, y, z);
    19. if(distance < CHAT_RADIUS / CHAT_FADES)
    20. {
    21. chat_color = COLOR_CHAT;
    22. }
    23. else if(distance < CHAT_RADIUS / CHAT_FADES * 2)
    24. {
    25. chat_color = COLOR_FADE1;
    26. }
    27. else if(distance < CHAT_RADIUS / CHAT_FADES * 3)
    28. {
    29. chat_color = COLOR_FADE2;
    30. }
    31. else if(distance < CHAT_RADIUS / CHAT_FADES * 4)
    32. {
    33. chat_color = COLOR_FADE3;
    34. }
    35. else if(distance <= CHAT_RADIUS / CHAT_FADES * 5)
    36. {
    37. chat_color = COLOR_FADE4;
    38. }
    39. SendClientMessage(i, chat_color, msg);
    40. }
    41. return 0;
    42. }
    Alles anzeigen
    So habe ich es versucht, jedoch kommt egal was ich schreibe nur ...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Allrounder18 ()

  • Neu

    Allrounder18 schrieb:

    Hier die fehlenden Defines
    Deine Defines sind falsch.

    PAWN-Quellcode

    1. #define COLOR_FADE1 0x505050FF
    2. #define COLOR_FADE2 0x50505095
    3. #define COLOR_FADE3 0x50505060
    4. #define COLOR_FADE4 0x50505032


    Du 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.


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Neu

    Allrounder18 schrieb:

    @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 = 50

    Nur 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_FADE4 B0B0B0 dann ist diese wesentlich heller.

    Kannst ja mal mit den Werten rumspielen: html-color-codes.info/old/colorpicker.html


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Neu

    Die Farben zeigt er mir ja an aber ich mein folgendes

    Allrounder18 schrieb:

    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.

    PAWN-Quellcode

    1. public OnPlayerText(playerid, text[])
    2. {
    3. new Float:x, Float:y, Float:z;
    4. GetPlayerPos(playerid, x, y, z);
    5. new text1[2][128],inputtext[128],msg[152];
    6. if(strlen(inputtext) > 128)
    7. {
    8. strmid(text1[0],inputtext,0,127,128);
    9. strmid(text1[1],inputtext,128,strlen(inputtext),128);
    10. }
    11. format(msg, 152, "%s sagt: {FFFFFF}%s...",RemoveUnderscore(SpielerDaten[playerid][player_RPName]), text1[0]);
    12. format(msg, 152, "...%s",text1[1]);
    13. new chat_color;
    14. for(new i=0; i<MAX_PLAYERS; i++)
    15. {
    16. if(!SpielerDaten[playerid][player_Eingeloggt])continue;
    17. if(!IsPlayerInRangeOfPoint(i, CHAT_RADIUS, x, y, z))continue;
    18. new Float:distance = GetPlayerDistanceFromPoint(i, x, y, z);
    19. if(distance < CHAT_RADIUS / CHAT_FADES)
    20. {
    21. chat_color = COLOR_CHAT;
    22. }
    23. else if(distance < CHAT_RADIUS / CHAT_FADES * 2)
    24. {
    25. chat_color = COLOR_FADE1;
    26. }
    27. else if(distance < CHAT_RADIUS / CHAT_FADES * 3)
    28. {
    29. chat_color = COLOR_FADE2;
    30. }
    31. else if(distance < CHAT_RADIUS / CHAT_FADES * 4)
    32. {
    33. chat_color = COLOR_FADE3;
    34. }
    35. else if(distance <= CHAT_RADIUS / CHAT_FADES * 5)
    36. {
    37. chat_color = COLOR_FADE4;
    38. }
    39. SendClientMessage(i, chat_color, msg);
    40. }
    41. return 0;
    42. }
    Alles anzeigen
    So habe ich es versucht, jedoch kommt egal was ich schreibe nur ...

  • Neu

    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...


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Neu

    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?

    PAWN-Quellcode

    1. if(distance < CHAT_RADIUS / CHAT_FADES)
    2. {
    3. chat_color = COLOR_CHAT;
    4. chat_color2 = VIOLETT;
    5. }
    Color_Chat für den Chat und VIOLETT für die /me?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Allrounder18 ()

  • Neu

    Allrounder18 schrieb:

    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.


    Allrounder18 schrieb:

    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: forum.sa-mp.com/showthread.php?p=4055845

    Und sogar ein Beispiel für dein Problem: forum.sa-mp.com/showpost.php?s…a07&p=4079880&postcount=7

    Aber kannst du ja entscheiden xD


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Neu

    Allrounder18 schrieb:


    PAWN-Quellcode

    1. stock SendClientToChat(color, string[], playerid = -1)
    2. {
    3. new count, length = 72;
    4. for(new i, l = strlen(string); i != l; i++) {
    5. if(string[i] == '{' && string[i+7] == '}')count += 8;
    6. }
    7. if(strlen(string) > (length+count)) {
    8. new text[2][152];
    9. strmid(text[0], string, 0, length+count);
    10. strmid(text[1], string, length+count, strlen(string));
    11. format(text[0], 152, "{FFFFFF}%s...", text[0]);
    12. format(text[1], 152, "...%s", text[1]);
    13. if(~playerid) {
    14. SendClientMessage(playerid, color, text[0]);
    15. SendClientMessage(playerid, color, text[1]);
    16. } else {
    17. SendClientMessageToAll(color, text[0]);
    18. SendClientMessageToAll(color, text[1]);
    19. }
    20. return 1;
    21. }
    22. if(~playerid) SendClientMessage(playerid, color, string);
    23. else SendClientMessageToAll(color, string);
    24. return 1;
    25. }
    Alles anzeigen
    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??
  • Neu

    Allrounder18 schrieb:

    C-Quellcode

    1. format(text[0], 152, "{FFFFFF}%s...", text[0]);
    2. format(text[1], 152, "...%s", text[1]);
    Schreib das mal so:

    PAWN-Quellcode

    1. format(text[0], 152, "%s...", text[0]);
    2. 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.


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. X/
  • Neu

    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


    PAWN-Quellcode

    1. format(text[0], 152, "%s...", text[0]);
    2. format(text[1], 152, "...%s", text[1]);
    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?

    @Kaliber

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Allrounder18 ()

  • Neu

    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 ?

    PAWN-Quellcode

    1. ocmd:abschleppen(playerid,params[])
    2. {
    3. if(pInfo[playerid][fraktion]!=4)return noaccess
    4. if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,GRAU,"Du bist nicht in einem Towtruck.");
    5. if(!IsPlayerInRangeOfPoint(playerid,200.0,2839.6499,965.5730,10.7500))return SendClientMessage(playerid,GRAU,"Du bist nicht an der Ordnungsamt Base.");
    6. new vid;
    7. if(sscanf(params, "d", vid))return SendClientMessage(playerid, WEIß,"Verwendung: /abschleppen (ID) - /dl Zeigt die ID's");
    8. if(GetVehicleTrailer(GetPlayerVehicleID(playerid))!=vid)return SendClientMessage(playerid, GRAU, "Das Fahrzeug ist nicht getowt.");
    9. if(IsFrakCar[vid]==1)return SendClientMessage(playerid, GRAU, "Fahrzeuge einer Fraktion können nicht abgeschleppt werden.");
    10. new count=0;
    11. for(new i=0; i<GetMaxPlayers(); i++)
    12. {
    13. if(!PlayerOnline(i))continue;
    14. if(vid==PlayerCar[i][slot1])
    15. {
    16. CarAbgeschleppt[playerid][0]=1;
    17. if(HatNeon[vid]!=0)
    18. {
    19. DestroyObject(Neon[vid][0]);
    20. DestroyObject(Neon[vid][1]);
    21. }
    22. DestroyVehicle(vid);
    23. PlayerCar[i][slot1]=INVALID_VEHICLE_ID;
    24. pInfo[playerid][payday]+=1000;
    25. count++;
    26. break;
    27. }
    28. else if(vid==PlayerCar[i][slot2])
    29. {
    30. CarAbgeschleppt[playerid][1]=1;
    31. if(HatNeon[vid]!=0)
    32. {
    33. DestroyObject(Neon[vid][0]);
    34. DestroyObject(Neon[vid][1]);
    35. }
    36. DestroyVehicle(vid);
    37. PlayerCar[i][slot2]=INVALID_VEHICLE_ID;
    38. pInfo[playerid][payday]+=1000;
    39. count++;
    40. break;
    41. }
    42. else if(vid==PlayerCar[i][slot3])
    43. {
    44. CarAbgeschleppt[playerid][2]=1;
    45. if(HatNeon[vid]!=0)
    46. {
    47. DestroyObject(Neon[vid][0]);
    48. DestroyObject(Neon[vid][1]);
    49. }
    50. DestroyVehicle(vid);
    51. PlayerCar[i][slot3]=INVALID_VEHICLE_ID;
    52. pInfo[playerid][payday]+=1000;
    53. count++;
    54. break;
    55. }
    56. }
    57. if(count==0)return SendClientMessage(playerid, GRAU, "Du kannst dieses Fahrzeug nicht abschleppen.");
    58. SendClientMessage(playerid,HBLAU,"Du hast das Fahrzeug abgeschleppt. +1.000$ werden dir am PayDay gutgeschrieben.");
    Alles anzeigen

    Teamspeak: 54.37.93.39
    Control-Panel: Klick !



  • Neu

    C-Quellcode

    1. new string1[300];
    2. format(string,sizeof(string),"Gehalt(Brutto): {grün}+$%d{FFFFFF} Steuern: {rot}-$%d",pInfo[playerid][pGehalt],pInfo[playerid][pSteuern]);
    3. 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

    Ich weiß, dass ich weiß, dass ich nichts weiß.
  • Neu

    BrightLeaN schrieb:

    C-Quellcode

    1. new string1[300];
    2. format(string,sizeof(string),"Gehalt(Brutto): {grün}+$%d{FFFFFF} Steuern: {rot}-$%d",pInfo[playerid][pGehalt],pInfo[playerid][pSteuern]);
    3. 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
    Spontan würden mir da zwei Möglichkeiten einfallen:

    1. 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"))
    2. Altbekannter weg, in dem du die Farbe vor dem format bereits ermittelst:

      Quellcode

      1. new farbCode[8];
      2. if(pInfo[playerid][pGehalt] == 0} format(farbCode, 8, "rot");
      3. else format(farbCode, 8, "grün");
    Beides jeweils analog zu pSteuern.