Zmiana danych w osobnym pliku a nie w .sma
Best Answer cedrik17 02.08.2013 15:31
cedrik17
02.08.2013
Mam roundsound byqq-a:
http://amxx.pl/pastebin/pzsf00ardlov/
Chciałbym nazwy mp3-jek i tytułów ustawiać w osobnym pliku na serwerze a nie kompilować za każdym razem.
new nutki[][] = { "sound/OnlyDD2/Sierpien2013/1z12.mp3", "sound/OnlyDD2/Sierpien2013/2z12.mp3", "sound/OnlyDD2/Sierpien2013/3z12.mp3", "sound/OnlyDD2/Sierpien2013/4z12.mp3", "sound/OnlyDD2/Sierpien2013/5z12.mp3", "sound/OnlyDD2/Sierpien2013/6z12.mp3", "sound/OnlyDD2/Sierpien2013/7z12.mp3", "sound/OnlyDD2/Sierpien2013/8z12.mp3", "sound/OnlyDD2/Sierpien2013/9z12.mp3", "sound/OnlyDD2/Sierpien2013/10z12.mp3", "sound/OnlyDD2/Sierpien2013/11z12.mp3", "sound/OnlyDD2/Sierpien2013/12z12.mp3" };
new title[][] = { "Tytul1", "Tytul2", "Tytul3", "Tytul4", "Tytul5", "Tytul6", "Tytul7", "Tytul8", "Tytul9", "Tytul10", "Tytul11", "Tytul12" };
Jak mogę to zrobić?
cedrik17
02.08.2013
Rozumiem, że miałem się nauczyć wszystkiego z twojego postu, tak się jednak nie stało. Jak to zrobić najprościej, może jakiś przykład?
@up
zmienną, tytułów też analogicznie.
Edited by cedrik17, 02.08.2013 14:42.
GT Team 02.08.2013
/* Plugin generated by AMXX-Studio RoundSound by byQQ ala kju kju CT i TT maja takie same nutki, ustalamy je nizej Dziekuje, dobranoc! *** Yea ! All rights reserved */ #include // #define RAND #define MAX_MUSIC 25 new nutki[MAX_MUSIC][64] new title[MAX_MUSIC][33] new tag[33] new bool: g_odtwarzac[33]; new bylo_juz; new SayText; public plugin_precache() { Load_Database() for(new i = 0; i < sizeof(nutki); i++) { if(file_exists(nutki[i])) { precache_generic(nutki[i]); } else { log_amx("[RSound] Nie ma dzwieku %s", nutki[i]); } } } public plugin_init() { register_plugin("Round Sound", "1.4b", "byQQ"); register_event("SendAudio", "muzyka", "a", "2&%!MRAD_terwin", "2&%!MRAD_ctwin"); register_clcmd("say /roundsound", "chce"); SayText = get_user_msgid("SayText"); set_task(180.0, "informacja", _, _, _, "b"); } public Load_Database() { new text[256], music[64], desc[33], len for(new i; i < read_file("addons/amxmodx/configs/roundsound.ini", i, text, charsmax(text), len);i++) { parse(text, music, 63, desc, 32) remove_quotes(music) remove_quotes(desc) if(i == 0) { copy(tag, 32, music) // Tag } if( i > 0) { copy(nutki[i-1], 63, music) copy(title[i-1], 32, desc) } } } public client_connect(id) { g_odtwarzac[id] = true; } public informacja() { msg(0, "%s!g Wpisz /roundsound by wlaczyc/wylaczyc roundsound", tag); } public muzyka() { new players[32], num, i, nutka; get_players(players, num); #if defined RAND while((nutka = random_num(0, charsmax(nutki))) == bylo_juz) { } #else if(bylo_juz >= charsmax(nutki)) bylo_juz = 0; else bylo_juz++; #endif nutka = bylo_juz; for (i = 0; i < num; i++) { new id = players[i]; if(g_odtwarzac[id]) { msg(id, "%s!g Gramy teraz: !t%s.", tag, title[nutka]); client_cmd(id, "mp3 stop; wait; stopsound"); playsound(id, nutki[nutka]); } } return PLUGIN_HANDLED; } public chce(id) { msg(id, "%s!g RoundSound zostal %s", tag, g_odtwarzac[id] ? "wylaczony" : "wlaczony"); g_odtwarzac[id] = !g_odtwarzac[id]; } stock playsound(id, const dzwiek[]) { if(contain(dzwiek, ".mp3") != -1) { client_cmd(id, "mp3 play %s", dzwiek); } else { client_cmd(id, "spk %s", dzwiek); } } stock msg(const id, const string[], {Float, Sql, Resul,_}:...) { new msgs[191], players[32], count = 1; vformat(msgs, sizeof msgs - 1, string, 3); replace_all(msgs,190,"!g","^4"); replace_all(msgs,190,"!y","^1"); replace_all(msgs,190,"!t","^3"); if(id) players[0] = id; else get_players(players,count,"ch"); new index; for (new i = 0 ; i < count ; i++) { index = players[i]; message_begin(MSG_ONE_UNRELIABLE, SayText, _, index); write_byte(index); write_string(msgs); message_end(); } }Include to takie jakie byly, jezeli ucielo, i stworz plik w folderze addons/amxmodx/configs/ pod nazwa "roundsound.ini" bez cudzyslowow i wklej tę zawartość do tego pliku
"!tTytul piosenki:" "sound/OnlyDD2/Sierpien2013/1z12.mp3" "Tytul1" "sound/OnlyDD2/Sierpien2013/2z12.mp3" "Tytul2" "sound/OnlyDD2/Sierpien2013/3z12.mp3" "Tytul3" "sound/OnlyDD2/Sierpien2013/4z12.mp3" "Tytul4" "sound/OnlyDD2/Sierpien2013/5z12.mp3" "Tytul5" "sound/OnlyDD2/Sierpien2013/6z12.mp3" "Tytul6" "sound/OnlyDD2/Sierpien2013/7z12.mp3" "Tytul7" "sound/OnlyDD2/Sierpien2013/8z12.mp3" "Tytul8" "sound/OnlyDD2/Sierpien2013/9z12.mp3" "Tytul9" "sound/OnlyDD2/Sierpien2013/10z12.mp3" "Tytul10" "sound/OnlyDD2/Sierpien2013/11z12.mp3" "Tytul11" "sound/OnlyDD2/Sierpien2013/12z12.mp3" "Tytul12"Pierwsza linijka to "Tag" a potem to sie polapiesz, nie moze byc zadnech akapitow, 1 linjka to tag a 2 to 1 piosenka potem tytul, następnie 3 linjka to 2 piosneka i tytul itd.. w pliku w #define MAX_MUSIC ustawiasz max liczbe piosenek
BlackPerfum
02.08.2013
A więc pokaże ci w krótki sposób jak odczytać rs`y z pliku i wpakować je do zmiennej dynamicznej
Tworzymy zmienną globalną typu Array
new Array:Uchwyt, Array:Uchwyt2
Teraz wczytanie pliku:
public plugin_cfg() { new szFilename[ 128 ] // Zmienna z scieżką do pliku get_configsdir( szFilename, 127 ) // Pobieramy ścieżkę do addons/amxmodx/configs add( szFilename, 127, "/Twoja_nazwa_pliku.ini" )// "Twoja_nazwa_pliku.ini" to twój plik nazwe zmień na jaką chcesz if(!file_exists(szFilename)) { set_fail_state("Plugin zostanie wylaczony z powodu braku pliku Twoja_nazwa_pliku.ini") // Gdyby pliku nie było plugin się wyłącza return PLUGIN_CONTINUE } new iFile = fopen( szFilename, "rt" ); // Otwieram plik if( !iFile ) { set_task(10.0,"plugin_cfg") // Jeśli jakiś proces używa pliku to taskiem opóźniam czas ponownego otwarcia return PLUGIN_CONTINUE } new szData[ 50 ], iPos; // Zliczam ile ma tu być lini while(!feof( iFile )) { fgets( iFile, szData, 2 ); if( !szData[ 0 ] || szData[ 0 ] == '^n'|| szData[ 0 ] == ';'|| szData[ 0 ] == '/' && szData[ 1 ] == '/' ) continue // Omijam nie potrzebne linie iPos++; } // Po zliczeniu tworze zmienną dynamiczną Uchwyt = ArrayCreate(50,iPos)// 50 to maxymalna długość ścieżki(możesz dać większą) Uchwyt2 = ArrayCreate(20,iPos)// 20 to maxymalna długość tytulu (możesz dać większą) fseek(iFile, 0, 0)//Ustawiam wskaźnik na początek pliku new sciezka[50],tytul[20] //A teraz odczytuje while(!feof( iFile )) { fgets( iFile, szData, 49 ); // Pobieram całą linię if( !szData[ 0 ] || szData[ 0 ] == '^n'|| szData[ 0 ] == ';'|| szData[ 0 ] == '/' && szData[ 1 ] == '/' ) continue // Omijam nie potrzebne linie split( szData, sciezka, 49, tytul, 19, " ") trim(tytul) trim(sciezka) ArrayPushString(Uchwyt,sciezka) // wpakowuje do zmiennej dynamicznej po kolei ścieżki twojich nut ArrayPushString(Uchwyt2,tytul) // wpakowuje do zmiennej dynamicznej po kolei tytuly twojich nut } fclose( iFile ) //Zamykam plik if(!ArraySize(Uchwyt)) set_fail_state("Plugin zostanie wylaczony z powodu braku map w pliku Twoja_nazwa_pliku.ini") //Jeśli w tym pliku nie ma żadnego tekstu (wykluczam ominięty) to wyłączam plugin return PLUGIN_CONTINUE }
Przykładowy odczyt ze zmiennej dynamicznej:
new string[50],tytul[20]; ArrayGetString(Uchwyt,index,string,49)// index to nr. ścieżki ArrayGetString(Uchwyt2,index,tytul,19)// index to nr. tytułu
A w pliku to ma wyglądać miej więcej tak:
sound/OnlyDD2/Sierpien2013/1z12.mp3 Tytuł sound/OnlyDD2/Sierpien2013/2z12.mp3 Tytuł sound/OnlyDD2/Sierpien2013/3z12.mp3 Tytuł
Nie zapomnij stworzyć pliku w którym będą ścieżki do nut (w tym folderze: "addons/amxmodx/configs") !!!
// Oj sorki nie zauważyłem że już ktoś napisał
Edited by BlackPerfum, 02.08.2013 15:18.