[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
-
-
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))
-
-
[wiki]SendClientMessage[/wiki]
'color' ist ein Integer, deine Variable 'farbe' ist aber ein String.
#edit:
Weiß einer zufällig, wie ich einen 3DTextLabel außerhalb der Map (<-3000, >3000) anzeigen kann?
-
Weiß einer zufällig, wie ich einen 3DTextLabel außerhalb der Map (<-3000, >3000) anzeigen kann?
Das geht nicht..bau deine Interiors einfach über der Map

Und..wenn es was mit wasser zu tun haben soll...versuchs näher an die Map zu setzen

-
