W tym poradniku pokaze w jaki sposob dodac wlasny kolor hud na zyczenie gracza.
Pierw gdzies na gorze dodajemy:
new hud_gracza[MAX_PLAYERS+1], hud_klasy_gracza[MAX_PLAYERS+1][MAX_CLASS+1] new String:nazwy_hud[][] = { "#ADFF2F", // 0 "#ADFF2F", // 1 "#008000", // 2 "#FFFF00", // 3 "#FFFFFF", // 4 "#FFA500", // 5 "#FF0000", // 6 "#1E90FF", // 7 "#00FFFF", // 8 "#808000", // 9 "#9400D3", // 10 "#8B4513", // 11 "#FF00FF" // 12 }; new String:opis_hud[][] = { "Domyslny", // 0 "Zielonozolty", // 1 "Zielony", // 2 "Zolty", // 3 "Bialy", // 4 "Pomaranczowy ", // 5 "Czerwony", // 6 "Niebieski", // 7 "Morski", // 8 "Oliwkowy", // 9 "Fioletowy", // 10 "Brazowy", // 11 "Rozowy" // 12 };
teraz szukamy:
public OnClientPutInServer(client) {
i dodajemy do srodka:
hud_gracza[client] = 0;
oraz zamieniamy:
for(new i = 1; i < sizeof nazwy_klas; i ++) { poziom_klasy_gracza[client][i] = 1; doswiadczenie_klasy_gracza[client][i] = 0; inteligencja_klasy_gracza[client][i] = 0; zdrowie_klasy_gracza[client][i] = 0; obrazenia_klasy_gracza[client][i] = 0; wytrzymalosc_klasy_gracza[client][i] = 0; kondycja_klasy_gracza[client][i] = 0; }
na:
for(new i = 1; i < sizeof nazwy_klas; i ++) { poziom_klasy_gracza[client][i] = 1; doswiadczenie_klasy_gracza[client][i] = 0; inteligencja_klasy_gracza[client][i] = 0; zdrowie_klasy_gracza[client][i] = 0; obrazenia_klasy_gracza[client][i] = 0; wytrzymalosc_klasy_gracza[client][i] = 0; kondycja_klasy_gracza[client][i] = 0; hud_klasy_gracza[client][i] = 0; }
nastepnie przechodzimy do:
public Action:DataBaseConnect() {
i zamieniamy
SQL_FastQuery(sql, "CREATE TABLE IF NOT EXISTS `codmod` (`id` INT(11) NOT NULL AUTO_INCREMENT, `steamid` VARCHAR(48) NOT NULL, `klasa` VARCHAR(48) NOT NULL, `lvl` INT(11) DEFAULT 1, `xp` INT(14), `inteligencja` INT(9), `zdrowie` INT(9), `obrazenia` INT(9), `wytrzymalosc` INT(9), `kondycja` INT(9), PRIMARY KEY (`id`), UNIQUE KEY `klasaid` (`klasa`,`steamid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;");
na
SQL_FastQuery(sql, "CREATE TABLE IF NOT EXISTS `codmod` (`id` INT(11) NOT NULL AUTO_INCREMENT, `steamid` VARCHAR(48) NOT NULL, `klasa` VARCHAR(48) NOT NULL, `lvl` INT(11) DEFAULT 1, `xp` INT(14), `inteligencja` INT(9), `zdrowie` INT(9), `obrazenia` INT(9), `wytrzymalosc` INT(9), `kondycja` INT(9), `hudkolor` INT(9), PRIMARY KEY (`id`), UNIQUE KEY `klasaid` (`klasa`,`steamid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;");
teraz szukamy:
public Action:ZapiszDane(client) {
i zamieniamy
Format(tmp, sizeof(tmp), "INSERT INTO `codmod` (`steamid`, `klasa`, `lvl`, `xp`, `inteligencja`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `kondycja`) VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d, %d) ON DUPLICATE KEY UPDATE `lvl`=VALUES(`lvl`), `xp`=VALUES(`xp`), `inteligencja`=VALUES(`inteligencja`), `zdrowie`=VALUES(`zdrowie`), `obrazenia`=VALUES(`obrazenia`), `wytrzymalosc`=VALUES(`wytrzymalosc`), `kondycja`=VALUES(`kondycja`);", authid, nazwy_klas[klasa_gracza[client]], poziom_gracza[client], doswiadczenie_gracza[client], inteligencja_gracza[client], zdrowie_gracza[client], obrazenia_gracza[client], wytrzymalosc_gracza[client], kondycja_gracza[client]);
na
Format(tmp, sizeof(tmp), "INSERT INTO `codmod` (`steamid`, `klasa`, `lvl`, `xp`, `inteligencja`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `kondycja`, `hudkolor`) VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d, %d, %d) ON DUPLICATE KEY UPDATE `lvl`=VALUES(`lvl`), `xp`=VALUES(`xp`), `inteligencja`=VALUES(`inteligencja`), `zdrowie`=VALUES(`zdrowie`), `obrazenia`=VALUES(`obrazenia`), `wytrzymalosc`=VALUES(`wytrzymalosc`), `kondycja`=VALUES(`kondycja`), `hudkolor`=VALUES(`hudkolor`);", authid, nazwy_klas[klasa_gracza[client]], poziom_gracza[client], doswiadczenie_gracza[client], inteligencja_gracza[client], zdrowie_gracza[client], obrazenia_gracza[client], wytrzymalosc_gracza[client], kondycja_gracza[client], hud_gracza[client]);
nastepnie przechodzimy do:
public Action:WczytajDane(client, klasa) {
i pod
kondycja_gracza[client] = kondycja_klasy_gracza[client][klasa];
dodajemy
hud_gracza[client] = hud_klasy_gracza[client][klasa];
i znow szukamy:
public Action:Prethink(client) {
i zamieniamy
PrintHintText(client, "[Klasa: <b>%s</b>]\n[Xp: <b>%0.1f</b>/<b>100.0%%</b> | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]", nazwy_klas[klasa_gracza[client]], procent_gracza, poziom_gracza[client], nazwy_itemow[informacje_itemu_gracza[client][0]], moc_itemu[client]);
na
PrintHintText(client, "<font color='%s'>[Klasa: <b>%s</b>]\n[Xp: <b>%0.1f</b>/<b>100.0%%</b> | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]</font>", nazwy_hud[hud_gracza[client]], nazwy_klas[klasa_gracza[client]], procent_gracza, poziom_gracza[client], nazwy_itemow[informacje_itemu_gracza[client][0]], moc_itemu[client]);
oraz (opcjonalnie)
PrintHintText(client, "[Klasa: <b>%s</b>]\n[Xp: <b>%0.1f</b>/<b>100.0%%</b> | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]</font>", nazwy_klas[klasa_gracza[target]], procent_gracza, poziom_gracza[target], nazwy_itemow[informacje_itemu_gracza[target][0]], moc_itemu[target]);
na
PrintHintText(client, "<font color='%s'>[Klasa: <b>%s</b>]\n[Xp: <b>%0.1f</b>/<b>100.0%%</b> | Lv: <b>%i</b>]\n[Item: <b>%s</b> [<b>%i%%</b>]]</font>", nazwy_hud[hud_gracza[target]], nazwy_klas[klasa_gracza[target]], procent_gracza, poziom_gracza[target], nazwy_itemow[informacje_itemu_gracza[target][0]], moc_itemu[target]);
teraz gdzies na koncu dodajemy:
public Action:HudMenu(client) { if(klasa_gracza[client]) { if(IsPlayerAlive(client)) { new String:lista[512]; new Handle:menu = CreateMenu(HudMenu_Handler); SetMenuTitle(menu, "HudKolor:"); for(new i = 1; i < sizeof nazwy_hud; i ++) { Format(lista, sizeof(lista), "%s", opis_hud[i]); AddMenuItem(menu, "1", lista); } DisplayMenu(menu, client, 250); } else PrintToChat(client, "[COD:MW] Musisz byc zywy aby moc zmienic kolor hud!"); } else PrintToChat(client, "[COD:MW] Musisz miec wybrana klase aby moc zmienic kolor hud!"); } public HudMenu_Handler(Handle:classhandle, MenuAction:action, client, Position) { if(action == MenuAction_Select) { new String:Item[32]; GetMenuItem(classhandle, Position, Item, sizeof(Item)); Position++; if(StrEqual(Item, "1")) { if(!zapisz_dane[client]) zapisz_dane[client] = 1; hud_gracza[client] = Position; PrintToChat(client, "[COD:MW] Zmieniles kolor swojego hud na %s.", opis_hud[Position]); HudMenu(client); } } else if(action == MenuAction_End) CloseHandle(classhandle); }
nastepnie przechodzimy do:
public Action:Komendy(client, args) {
i gdzies w srodku pod public WyrzucItem dodajemy:
else if(strcmp(text, "/hud", false) == 0 || strcmp(text, "/kolor", false) == 0) HudMenu(client);
teraz szukamy:
public Action:WybierzKlase(client) {
i pod
kondycja_klasy_gracza[client][klasa_g] = kondycja_gracza[client];
dodajemy
hud_klasy_gracza[client][klasa_g] = hud_gracza[client];
nastepnie zamieniamy
Format(tmp, sizeof(tmp), "SELECT `lvl`, `xp`, `inteligencja`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `kondycja`, `klasa` FROM `codmod` WHERE steamid = '%s';", authid);
na
Format(tmp, sizeof(tmp), "SELECT `lvl`, `xp`, `inteligencja`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `kondycja`, `hudkolor`, `klasa` FROM `codmod` WHERE steamid = '%s';", authid);
nastepnie zamieniamy caly:
public WybierzKlase2(Handle:owner, Handle:query, const String:error[], any:client) {
na
public WybierzKlase2(Handle:owner, Handle:query, const String:error[], any:client) { if(query == INVALID_HANDLE) { LogError("Load error: %s", error); return; } if(SQL_GetRowCount(query)) { new poziom = 1, doswiadczenie = 0, inteligencja = 0, zdrowie = 0, obrazenia = 0, wytrzymalosc = 0, kondycja = 0, hud = 0; new String:klasa[512]; while(SQL_MoreRows(query)) { while(SQL_FetchRow(query)) { poziom = SQL_FetchInt(query, 0); doswiadczenie = SQL_FetchInt(query, 1); inteligencja = SQL_FetchInt(query, 2); zdrowie = SQL_FetchInt(query, 3); obrazenia = SQL_FetchInt(query, 4); wytrzymalosc = SQL_FetchInt(query, 5); kondycja = SQL_FetchInt(query, 6); hud = SQL_FetchInt(query, 7); SQL_FetchString(query, 8, klasa, sizeof(klasa)); for(new i = 1; i < sizeof nazwy_klas; i ++) { if(StrEqual(nazwy_klas[i], klasa)) { poziom_klasy_gracza[client][i] = poziom; doswiadczenie_klasy_gracza[client][i] = doswiadczenie; inteligencja_klasy_gracza[client][i] = inteligencja; zdrowie_klasy_gracza[client][i] = zdrowie; obrazenia_klasy_gracza[client][i] = obrazenia; wytrzymalosc_klasy_gracza[client][i] = wytrzymalosc; kondycja_klasy_gracza[client][i] = kondycja; hud_klasy_gracza[client][i] = hud; } } } } } WybierzKlaseMenu(client); polaczony_raz[client] = 0; }
Jezeli zrobiles wszystko tak jak wyzej to powinienes miec dzialajaca zmiane koloru hud na zyczenie.
Uwaga, jezeli modyfikujesz swoj zapis, musisz usunac aktualny plik zapisu lub go zmodyfikowac poprzez dodanie nowej kolumny do pliku. Jezeli tego nie zrobisz serwer bedzie wyswietlac bledy.
I teraz jak zmodyfikowac liste kolorow, wszystkie zmiany wprowadzasz w:
new String:nazwy_hud[][] =
oraz w opisie danego koloru. Powyzsze kolory to tylko moja propozycja, kolor mozna sobie wybrac dowolny jak i tresc do kolorowania.