←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Zmiana danych w osobnym pliku a nie w .sma


Best Answer cedrik17 02.08.2013 15:31

Dzięki chłopaki  ^D^

 

Można zamknąć.

Go to the full post
Locked

  • +
  • -
cedrik17's Photo 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ć?

Quote

GT Team's Photo GT Team 02.08.2013

Można to przerobić, by wczytywało z pliku
Quote

  • +
  • -
BlackPerfum's Photo BlackPerfum 02.08.2013

Chcesz mieć stałą liczbę rs`ów czy zmienną?

Quote

  • +
  • -
cedrik17's Photo 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.
Quote

GT Team's Photo GT Team 02.08.2013

Ok, zrobilem Ci to, tylko haczyk taki, że nie sprawdzałem, masz tu .sma
/* 
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
Quote

  • +
  • -
BlackPerfum's Photo 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 :D

 

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ł :D


Edited by BlackPerfum, 02.08.2013 15:18.
Quote

  • +
  • -
Best Answer cedrik17's Photo cedrik17 02.08.2013

Dzięki chłopaki  ^D^

 

Można zamknąć.

Quote
Locked