[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
-
-
Kann mir das jemand mal erklären? Ich möchte die Chatfarbe ändern doch erhalte immer wieder ein Error
C// Send them welcome messages SendClientMessage(playerid, -1, ""COL_PRIM"It's {FFFFFF}Bulletproof"COL_PRIM". Your bullets are fruitless. You can't take it down!"); SendClientMessage(playerid, -1, ""COL_PRIM"Get started: {FFFFFF}/help "COL_PRIM"and {FFFFFF}/cmds"); SendClientMessage(playerid, -1, ""COL_PRIM"Don't miss our updates: {FFFFFF}/checkversion"); SendClientMessage(playerid, -1, ""COL_PRIM"Check {FFFFFF}/changelog "COL_PRIM"out to see what's up with this version!"); SendClientMessage(playerid, -1, ""COL_PRIM"Developers: {FFFFFF}Whitetiger"COL_PRIM" & {FFFFFF}[KHK]Khalid"COL_PRIM""); new str[128]; format(str,sizeof(str),""COL_PRIM"Server limits: Min FPS = {FFFFFF}%d "COL_PRIM"| Max Ping = {FFFFFF}%d "COL_PRIM"| Max PL = {FFFFFF}%.2f", Min_FPS, Max_Ping, Float:Max_Packetloss); SendClientMessage(playerid, -1, str);
Ich änder COL_PRIM immer zu GRUEN um und erhalte diese Errors. Ja, Grün ist oben definiert, so : #define GRUEN 0x00FF5AFF
Errors:
C:\Users\Dave\Desktop\Bulletproof-Gamemode-0.1-RC2-1\gamemodes\bulletproof.pwn(158) : error 001: expected token: "-string end-", but found "-identifier-"
C:\Users\Dave\Desktop\Bulletproof-Gamemode-0.1-RC2-1\gamemodes\bulletproof.pwn(158) : warning 215: expression has no effect
C:\Users\Dave\Desktop\Bulletproof-Gamemode-0.1-RC2-1\gamemodes\bulletproof.pwn(158) : error 001: expected token: ";", but found "-string-"
C:\Users\Dave\Desktop\Bulletproof-Gamemode-0.1-RC2-1\gamemodes\bulletproof.pwn(158) : warning 215: expression has no effect
C:\Users\Dave\Desktop\Bulletproof-Gamemode-0.1-RC2-1\gamemodes\bulletproof.pwn(158) : error 001: expected token: ";", but found ")"
C:\Users\Dave\Desktop\Bulletproof-Gamemode-0.1-RC2-1\gamemodes\bulletproof.pwn(158) : fatal error 107: too many error messages on one lineCompilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
-
Versuch es mit "#COL_PRIM"
-
-
Schau dir an wie COL_PRIM definiert ist, dann wirst du sofort sehen, warum es nicht klappt.
-
-
-
Ja das versuche ich wenn's mit diesem Schritt nicht klappt. Habe die Include mal hier geöffnet:
C
Alles anzeigen/* Gamemode colors: teams, messages... etc */ #include "modules\header\colors.txt" SetTeamDefaultColors() { TextColor[ATTACKER] = "{FF0033}"; TextColor[ATTACKER_SUB] = "{FFAAAA}"; TextColor[DEFENDER] = "{3344FF}"; TextColor[DEFENDER_SUB] = "{AAAAFF}"; TextColor[REFEREE] = "{FFFF88}"; TDC[NON] = "~p~"; TDC[ATTACKER] = "~r~~h~"; TDC[ATTACKER_SUB] = "~r~~h~~h~"; TDC[DEFENDER] = "~b~~h~~h~"; TDC[DEFENDER_SUB] = "~b~~h~~h~~h~"; TDC[REFEREE] = "~y~~h~"; return 1; } SaveThemeSettings() { new query[128]; format(query, sizeof(query), "UPDATE `Configs` SET `Value` = '%s' WHERE `Option` = 'MainTextColour'", DB_Escape(MAIN_TEXT_COLOUR)); db_free_result(db_query(sqliteconnection, query)); format(query, sizeof(query), "UPDATE `Configs` SET `Value` = %d WHERE `Option` = 'MainBackgroundColour'", MAIN_BACKGROUND_COLOUR); db_free_result(db_query(sqliteconnection, query)); return 1; } ChangeTheme(playerid, listitem) { switch(listitem) { case 0: // White (Background) & Black (Text) { format(MAIN_TEXT_COLOUR, sizeof MAIN_TEXT_COLOUR, "~l~"); MAIN_BACKGROUND_COLOUR = 0xEEEEEE11; } case 1: // Black (Background) & White (Text) { format(MAIN_TEXT_COLOUR, sizeof MAIN_TEXT_COLOUR, "~w~"); MAIN_BACKGROUND_COLOUR = 0x00000011; } case 2: // White (Background) & Red (Text) { format(MAIN_TEXT_COLOUR, sizeof MAIN_TEXT_COLOUR, "~r~"); MAIN_BACKGROUND_COLOUR = 0xEEEEEE11; } case 3: // Black (Background) & Red (Text) { format(MAIN_TEXT_COLOUR, sizeof MAIN_TEXT_COLOUR, "~r~"); MAIN_BACKGROUND_COLOUR = 0x00000011; } case 4: // White (Background) & Blue (Text) { format(MAIN_TEXT_COLOUR, sizeof MAIN_TEXT_COLOUR, "~b~"); MAIN_BACKGROUND_COLOUR = 0xEEEEEE11; } case 5: // Black (Background) & Blue (Text) { format(MAIN_TEXT_COLOUR, sizeof MAIN_TEXT_COLOUR, "~b~"); MAIN_BACKGROUND_COLOUR = 0x00000011; } case 6: // White (Background) & Green (Text) { format(MAIN_TEXT_COLOUR, sizeof MAIN_TEXT_COLOUR, "~g~"); MAIN_BACKGROUND_COLOUR = 0xEEEEEE11; } case 7: // Black (Background) & Green (Text) { format(MAIN_TEXT_COLOUR, sizeof MAIN_TEXT_COLOUR, "~g~"); MAIN_BACKGROUND_COLOUR = 0x00000011; } case 8: // White (Background) & Purple (Text) { format(MAIN_TEXT_COLOUR, sizeof MAIN_TEXT_COLOUR, "~p~"); MAIN_BACKGROUND_COLOUR = 0xEEEEEE11; } case 9: // Black (Background) & Purple (Text) { format(MAIN_TEXT_COLOUR, sizeof MAIN_TEXT_COLOUR, "~p~"); MAIN_BACKGROUND_COLOUR = 0x00000011; } } SaveThemeSettings(); SendClientMessageToAll(-1, sprintf("%s has set up a new theme colour. Server is restarting so the changes can take effect.", Player[playerid][Name])); SendRconCommand("gmx"); return 1; }
Und by the way, was für eine Code Hervorhebung soll ich immer benutzen? -
Müsste dann in dieser Datei stehen:
modules\header\colors.txtZwecks der Hervorhebnung: C passt, solange PAWN noch nicht da ist.
-
-
-
Wie überprüfe ich, ob mein inputtext ein Pawn HEX Code ist?
Anhand der Form wohl, aber wie genau weiß ich nicht. -
Du könntest ja eine Funktion bauen, ähnlich wie "isNumeric".
Also du willst doch "FF0088" "0x88FDA0" und solche Strings auslesen oder nicht?C
Alles anzeigen#include a_samp main() {} public OnGameModeInit() { printf("%b : %s",IsHex("0FF8FF"),"0FF8FF"); printf("%b : %s",IsHex("AddC55"),"AddC55"); printf("%b : %s",IsHex("0xFF8800FF"),"0xFF8800FF"); printf("%b : %s",IsHex("AASDFASD"),"AASDFASD"); printf("%b : %s",IsHex("x0FF"),"x0FF"); /* OUTPUT: [18:43:23] 1 : 0FF8FF [18:43:23] 1 : AddC55 [18:43:23] 1 : 0xFF8800FF [18:43:23] 0 : AASDFASD [18:43:23] 0 : x0FF */ } stock IsHex(string[]) { for(new index = 0; index < strlen(string); index++) { if((index == 0 && string[index] == '0') || (index == 1 && string[index] == 'x') || (string[index] >= '0' && string[index] <= '9') || (string[index] >= 'A' && string[index] <= 'F') || (string[index] >= 'a' && string[index] <= 'f')) continue; else return false; } return true; }
-
Du könntest ja eine Funktion bauen, ähnlich wie "isNumeric".
Also du willst doch "FF0088" "0x88FDA0" und solche Strings auslesen oder nicht?C
Alles anzeigen#include a_samp main() {} public OnGameModeInit() { printf("%b : %s",IsHex("0FF8FF"),"0FF8FF"); printf("%b : %s",IsHex("AddC55"),"AddC55"); printf("%b : %s",IsHex("0xFF8800FF"),"0xFF8800FF"); printf("%b : %s",IsHex("AASDFASD"),"AASDFASD"); printf("%b : %s",IsHex("x0FF"),"x0FF"); /* OUTPUT: [18:43:23] 1 : 0FF8FF [18:43:23] 1 : AddC55 [18:43:23] 1 : 0xFF8800FF [18:43:23] 0 : AASDFASD [18:43:23] 0 : x0FF */ } stock IsHex(string[]) { for(new index = 0; index < strlen(string); index++) { if((index == 0 && string[index] == '0') || (index == 1 && string[index] == 'x') || (string[index] >= '0' && string[index] <= '9') || (string[index] >= 'A' && string[index] <= 'F') || (string[index] >= 'a' && string[index] <= 'f')) continue; else return false; } return true; }
Sowas hab ich mir vorgestellt. Nur sollte das Format 0xFFFFFFFF abgeprüft werden
-
@Apokrate
Also der Code, den ich gesendet habe, der nimmt alle HEX Formate.
Sowohl FF8800 als auch 0xFF8800 wären gültig.Hier nochmal eine Alternative. Einfach 'strict_0x' auf 'true' setzen, dann werden nur noch Hexadezimale Zahlen gewertet, welche auch mit '0x' anfangen.
Source Code + Test:
C
Alles anzeigen#include a_samp main() {} public OnGameModeInit() { printf("[strict=0] %b : %s",IsHex("0FF8FF", false),"0FF8FF"); printf("[strict=0] %b : %s",IsHex("AddC55", false),"AddC55"); printf("[strict=0] %b : %s",IsHex("0xFF8800FF", false),"0xFF8800FF"); printf("[strict=0] %b : %s",IsHex("AASDFASD", false),"AASDFASD"); printf("[strict=0] %b : %s",IsHex("x0FF", false),"x0FF"); print("===================="); printf("[strict=1] %b : %s",IsHex("0FF8FF", true),"0FF8FF"); printf("[strict=1] %b : %s",IsHex("AddC55", true),"AddC55"); printf("[strict=1] %b : %s",IsHex("0xFF8800FF", true),"0xFF8800FF"); printf("[strict=1] %b : %s",IsHex("AASDFASD", true),"AASDFASD"); printf("[strict=1] %b : %s",IsHex("x0FF", true),"x0FF"); /* OUTPUT: [20:52:08] [strict=0] 1 : 0FF8FF [20:52:08] [strict=0] 1 : AddC55 [20:52:08] [strict=0] 1 : 0xFF8800FF [20:52:08] [strict=0] 0 : AASDFASD [20:52:08] [strict=0] 0 : x0FF [20:52:08] ==================== [20:52:08] [strict=1] 0 : 0FF8FF [20:52:08] [strict=1] 0 : AddC55 [20:52:08] [strict=1] 1 : 0xFF8800FF [20:52:08] [strict=1] 0 : AASDFASD [20:52:08] [strict=1] 0 : x0FF */ } stock IsHex(string[], bool:strict_0x = false) { if(strict_0x && (string[0] != '0' || string[1] != 'x')) return false; for(new index = strict_0x ? 2 : 0; index < strlen(string); index++) { if((index == 0 && string[index] == '0') || (index == 1 && string[index] == 'x') || (string[index] >= '0' && string[index] <= '9') || (string[index] >= 'A' && string[index] <= 'F') || (string[index] >= 'a' && string[index] <= 'f')) continue; else return false; } return true; }
-
@Apokrate
Also der Code, den ich gesendet habe, der nimmt alle HEX Formate.
Sowohl FF8800 als auch 0xFF8800 wären gültig.Hier nochmal eine Alternative. Einfach 'strict_0x' auf 'true' setzen, dann werden nur noch Hexadezimale Zahlen gewertet, welche auch mit '0x' anfangen.
Source Code + Test:
C
Alles anzeigen#include a_samp main() {} public OnGameModeInit() { printf("[strict=0] %b : %s",IsHex("0FF8FF", false),"0FF8FF"); printf("[strict=0] %b : %s",IsHex("AddC55", false),"AddC55"); printf("[strict=0] %b : %s",IsHex("0xFF8800FF", false),"0xFF8800FF"); printf("[strict=0] %b : %s",IsHex("AASDFASD", false),"AASDFASD"); printf("[strict=0] %b : %s",IsHex("x0FF", false),"x0FF"); print("===================="); printf("[strict=1] %b : %s",IsHex("0FF8FF", true),"0FF8FF"); printf("[strict=1] %b : %s",IsHex("AddC55", true),"AddC55"); printf("[strict=1] %b : %s",IsHex("0xFF8800FF", true),"0xFF8800FF"); printf("[strict=1] %b : %s",IsHex("AASDFASD", true),"AASDFASD"); printf("[strict=1] %b : %s",IsHex("x0FF", true),"x0FF"); /* OUTPUT: [20:52:08] [strict=0] 1 : 0FF8FF [20:52:08] [strict=0] 1 : AddC55 [20:52:08] [strict=0] 1 : 0xFF8800FF [20:52:08] [strict=0] 0 : AASDFASD [20:52:08] [strict=0] 0 : x0FF [20:52:08] ==================== [20:52:08] [strict=1] 0 : 0FF8FF [20:52:08] [strict=1] 0 : AddC55 [20:52:08] [strict=1] 1 : 0xFF8800FF [20:52:08] [strict=1] 0 : AASDFASD [20:52:08] [strict=1] 0 : x0FF */ } stock IsHex(string[], bool:strict_0x = false) { if(strict_0x && (string[0] != '0' || string[1] != 'x')) return false; for(new index = strict_0x ? 2 : 0; index < strlen(string); index++) { if((index == 0 && string[index] == '0') || (index == 1 && string[index] == 'x') || (string[index] >= '0' && string[index] <= '9') || (string[index] >= 'A' && string[index] <= 'F') || (string[index] >= 'a' && string[index] <= 'f')) continue; else return false; } return true; }
Dieser Code lässt aber auch 0x123 zu.
Hab ich eben getestet -
0x123 ist ja auch eine Hexadezimale Zahl Geht ja von '0' bis 'F'
0x123 = 291
Wenn du eine bestimme Länge möchtest, musst du halt noch gleichzeitig mit [wiki]strlen[/wiki] arbeiten.
Sonst bau halt noch eine "len" Funktion rein
Für eine RGBA Farbe müsstest du dann (logischerweise) len = 10 angeben.C
Alles anzeigenstock IsHex(string[], bool:strict_0x = false, len = -1) { if(len != -1 && (strlen(string) != len)) return false; if(strict_0x && (string[0] != '0' || string[1] != 'x')) return false; for(new index = strict_0x ? 2 : 0; index < strlen(string); index++) { if((index == 0 && string[index] == '0') || (index == 1 && string[index] == 'x') || (string[index] >= '0' && string[index] <= '9') || (string[index] >= 'A' && string[index] <= 'F') || (string[index] >= 'a' && string[index] <= 'f')) continue; else return false; } return true; }
-
0x123 ist ja auch eine Hexadezimale Zahl Geht ja von '0' bis 'F'
0x123 = 291
Wenn du eine bestimme Länge möchtest, musst du halt noch gleichzeitig mit [wiki]strlen[/wiki] arbeiten.
Ich wollte es halt so machen, dass man einen Pawn HEX Code eingibt, welcher dann gespeichert wird.
Weiß halt nur nicht, wie ich dem Spieler dann "sage", dass er keinen gültigen angegeben hat. -
-
Ja, das hab ich ja
Gibt mir 0x123 aber auch eine Farbe wieder? -
Ne, wenn du eine Farbe möchtest, muss es (je nachdem) im RBG- (6 Stellen) oder RGBA-Format (8 Stellen) sein.
Ich habe vorhin meine Antwort editiert, aber hier nochmal. Du kannst einfach den Parameter "len" in der Funktion hinzufügen (damit es einfach bleibt).C
Alles anzeigenstock IsHex(string[], bool:strict_0x = false, len = -1) { if(len != -1 && (strlen(string) != len)) return false; if(strict_0x && (string[0] != '0' || string[1] != 'x')) return false; for(new index = strict_0x ? 2 : 0; index < strlen(string); index++) { if((index == 0 && string[index] == '0') || (index == 1 && string[index] == 'x') || (string[index] >= '0' && string[index] <= '9') || (string[index] >= 'A' && string[index] <= 'F') || (string[index] >= 'a' && string[index] <= 'f')) continue; else return false; } return true; }
Und deine Abfrage machst du dann einfach so (entweder len = 8 (RGB) oder len = 10 (RGBA))