Skocz do zawartości

Rekomendowane odpowiedzi

O Pluginie:

  • Plugin umożliwia ustawienie własnej piosenki MVP.

 

Komendy:

  • !mvp - Główne menu.
  • !music - Główne menu.
  • !muzyka - Główne menu.
  • !kit - Główne menu.
  • !kits - Główne menu.

 

Instalacja:

  • Plik .smx wrzucamy do: addons/sourcemod/plugins/
  • Plik .sp wrzucamy do: addons/sourcemod/scripting/
  • Folder pawel_mvp wrzucamy do : csgo/sound/

 

Dodatkowe informacje:

  • Plugin został napisany od zera przeze mnie.
  • Nie pozwalam na udostępnianie pluginu na innych forach niż Go-Code.pl
  • Proszę o nie usuwanie informacji o autorze pluginu oraz gdzie można go pobrać. Chciałbym, aby plugin trafił do jak największej ilości osób.

 

Kod:

Spoiler
/* [ Includes ] */
#include <sourcemod>
#include <sdktools>
#include <multicolors>
#include <clientprefs>

/* [ Compiler Options ] */
#pragma newdecls required
#pragma semicolon 1

/* [ Defines ] */
#define PluginTag_Info 			"★ {lightred}[ MVP Music ]{default}"
#define LoopClients(%1)			for(int %1 = 1; %1 < MaxClients; %1++) if(IsValidClient(%1))
#define MaxCvars				32

/* [ Handles ] */
Handle g_hCookie1, g_hCookie2, g_hCookie3;

/* [ ArrayLists ] */
ArrayList g_arSounds[4]; // 0 - Sounds | 1 - Name | 2 - File | 3 - Flags 

/* [ Integers ] */
int g_iSound[MAXPLAYERS + 1];
int g_iCvar[MaxCvars];

/* [ Booleans ] */
bool g_bFirstConnect[MAXPLAYERS + 1];

/* [ Floats ] */
float g_fVolume[MAXPLAYERS + 1];

/* [ Plugin Author and Informations ] */
public Plugin myinfo =  {
	name = "[CS:GO] Pawel - [ Mvp Music ]", 
	author = "Pawel", 
	description = "Własna muzyka Mvp dla każdego gracza.", 
	version = "2.0", 
	url = "https://steamcommunity.com/id/pawelsteam"
};

/* [ Plugin Startup ] */
public void OnPluginStart() {
	/* [ Client Commands ] */
	RegConsoleCmd("sm_mvp", Mvp_Command, "Menu główne.");
	RegConsoleCmd("sm_music", Mvp_Command, "Menu główne.");
	RegConsoleCmd("sm_muzyka", Mvp_Command, "Menu główne.");
	RegConsoleCmd("sm_kit", Mvp_Command, "Menu główne.");
	RegConsoleCmd("sm_kits", Mvp_Command, "Menu główne.");
	
	/* [ Events ] */
	HookEvent("round_mvp", Event_RoundMvp);
	
	/* [ Cookies ] */
	g_hCookie1 = RegClientCookie("mvp_connect", "", CookieAccess_Private);
	g_hCookie2 = RegClientCookie("mvp_music", "", CookieAccess_Private);
	g_hCookie3 = RegClientCookie("mvp_volume", "", CookieAccess_Private);
	
	/* [ Create Arrays ] */
	CreateArrays();
	
	/* [ Check Players ] */
	LoopClients(i) {
		OnClientPutInServer(i);
		if (AreClientCookiesCached(i))
			OnClientCookiesCached(i);
	}
}

/* [ Standard Actions ] */
public void OnMapStart() {
	LoadConfig();
}

public void OnClientAuthorized(int client, const char[] sAuthId) {
	Reset(client);
}

public void OnClientPutInServer(int client) {
	g_bFirstConnect[client] = true;
}

public void OnClientCookiesCached(int client) {
	char sBuffer[32];
	GetClientCookie(client, g_hCookie1, sBuffer, sizeof(sBuffer));
	g_bFirstConnect[client] = view_as<bool>(StringToInt(sBuffer));
	if (!g_bFirstConnect[client]) {
		Reset(client);
		return;
	}
	GetClientCookie(client, g_hCookie1, sBuffer, sizeof(sBuffer));
	g_iSound[client] = StringToInt(sBuffer);
	GetClientCookie(client, g_hCookie2, sBuffer, sizeof(sBuffer));
	g_fVolume[client] = StringToFloat(sBuffer);
}

public void OnClientDisconnect(int client) {
	if (AreClientCookiesCached(client)) {
		char sBuffer[32];
		Format(sBuffer, sizeof(sBuffer), "%d", view_as<int>(g_bFirstConnect[client]));
		SetClientCookie(client, g_hCookie1, sBuffer);
		Format(sBuffer, sizeof(sBuffer), "%d", g_iSound[client]);
		SetClientCookie(client, g_hCookie2, sBuffer);
		Format(sBuffer, sizeof(sBuffer), "%.2f", g_fVolume[client]);
		SetClientCookie(client, g_hCookie3, sBuffer);
	}
	Reset(client);
	g_bFirstConnect[client] = false;
}

public void OnMapEnd() {
	ClearArrays();
}

public void OnPluginEnd() {
	LoopClients(i)
	OnClientDisconnect(i);
	ClearArrays();
}

/* [ Commands ] */
public Action Mvp_Command(int client, int args) {
	char sBuffer[256], sName[128];
	g_arSounds[1].GetString(g_iSound[client], sName, sizeof(sName));
	Format(sBuffer, sizeof(sBuffer), "[ ★ Piosenki MVP » Menu Główne ★ ]\n ");
	Format(sBuffer, sizeof(sBuffer), "%s\n➪ Witaj, %N!", sBuffer, client);
	Format(sBuffer, sizeof(sBuffer), "%s\n➪ Aktualna piosenka: %s\n ", sBuffer, sName);
	Menu menu = new Menu(Mvp_Handler);
	menu.SetTitle(sBuffer);
	menu.AddItem("", "»Wybierz piosenkę");
	menu.AddItem("", "»Ustaw głośność\n ");
	menu.Display(client, MENU_TIME_FOREVER);
}

public int Mvp_Handler(Menu menu, MenuAction action, int client, int position) {
	switch (action) {
		case MenuAction_Select:CreateMenus(client, position);
		case MenuAction_End:delete menu;
	}
}

void CreateMenus(int client, int type) {
	char sBuffer[256], sName[128], sFlags[16], sItem[32];
	switch (type) {
		case 0: {
			Format(sBuffer, sizeof(sBuffer), "[ ★ Piosenki MVP » Lista ★ ]\n ");
			Format(sBuffer, sizeof(sBuffer), "%s\n➪ Wybierz interesujący Cię utwór.\n ", sBuffer);
			Menu menu = new Menu(List_Handler);
			menu.SetTitle(sBuffer);
			for (int i = 0; i < g_arSounds[0].Length; i++) {
				g_arSounds[1].GetString(i, sName, sizeof(sName));
				g_arSounds[3].GetString(i, sFlags, sizeof(sFlags));
				Format(sBuffer, sizeof(sBuffer), "» %s", sName);
				IntToString(i, sItem, sizeof(sItem));
				menu.AddItem(sItem, sBuffer, CheckDrawType(client, sFlags, i));
			}
			if (menu.ItemCount == 0)
				menu.AddItem("", "» Właściciel serwera nie dodał żadnej piosenki :c\n ", ITEMDRAW_DISABLED);
			menu.ExitBackButton = true;
			menu.Display(client, MENU_TIME_FOREVER);
		}
		case 1: {
			Format(sBuffer, sizeof(sBuffer), "[ ★ Piosenki MVP » Zmiana Głośności ★ ]\n ");
			Format(sBuffer, sizeof(sBuffer), "%s\n➪ Głośność: %.2f\n ", sBuffer, g_fVolume[client]);
			Menu menu = new Menu(Volume_Handler);
			menu.SetTitle(sBuffer);
			menu.AddItem("0.05", "» +0.05");
			menu.AddItem("0.1", "» +0.1");
			menu.AddItem("0.05", "» -0.05");
			menu.AddItem("0.1", "» -0.1");
			menu.AddItem("0.0", "» Wycisz");
			menu.ExitBackButton = true;
			menu.Display(client, MENU_TIME_FOREVER);
		}
	}
}

public int List_Handler(Menu menu, MenuAction action, int client, int position) {
	switch (action) {
		case MenuAction_Select: {
			char sItem[32], sName[128];
			menu.GetItem(position, sItem, sizeof(sItem));
			int sound = StringToInt(sItem);
			g_arSounds[1].GetString(sound, sName, sizeof(sName));
			
			g_iSound[client] = sound;
			CPrintToChat(client, "%s Piosenka {lime}%s{default} została ustawiona.", PluginTag_Info, sName);
			CreateMenus(client, 0);
		}
		case MenuAction_Cancel: {
			if (position == MenuCancel_ExitBack)
				Mvp_Command(client, 0);
		}
		case MenuAction_End:delete menu;
	}
}

public int Volume_Handler(Menu menu, MenuAction action, int client, int position) {
	switch (action) {
		case MenuAction_Select: {
			char sItem[32];
			menu.GetItem(position, sItem, sizeof(sItem));
			float fValue = StringToFloat(sItem);
			switch (position) {
				case 0, 1: {
					g_fVolume[client] += fValue;
					if (g_fVolume[client] > 1.0)
						g_fVolume[client] = 1.0;
				}
				case 2, 3: {
					g_fVolume[client] -= fValue;
					if (g_fVolume[client] < 0.0)
						g_fVolume[client] = 0.0;
				}
				case 4:g_fVolume[client] = 0.0;
			}
			CreateMenus(client, 1);
		}
		case MenuAction_Cancel: {
			if (position == MenuCancel_ExitBack)
				Mvp_Command(client, 0);
		}
		case MenuAction_End:delete menu;
	}
}

/* [ Events ] */
public Action Event_RoundMvp(Event event, const char[] sName, bool bDontBroadcast) {
	int client = GetClientOfUserId(event.GetInt("userid"));
	if (!IsValidClient(client))return Plugin_Continue;
	
	if (g_iSound[client] == 0 && g_iCvar[0] == 1 && g_arSounds[0].Length > 1)
		RandomSound();
	else if (g_iSound[client] > 0) {
		char sSound[128], sFile[128];
		g_arSounds[1].GetString(g_iSound[client], sSound, sizeof(sSound));
		g_arSounds[2].GetString(g_iSound[client], sFile, sizeof(sFile));
		CPrintToChatAll("%s Aktualnie leci piosenka {lime}%s{default}, która należy do {lime}%N{default}.", PluginTag_Info, sSound, client);
		LoopClients(i) {
			PrecacheSound(sFile, true);
			EmitSoundToClient(i, sFile, _, _, _, _, g_fVolume[i]);
		}
	}
	return Plugin_Continue;
}

/* [ Helpers ] */
void LoadConfig() {
	char sPath[PLATFORM_MAX_PATH], sBuffer[128];
	BuildPath(Path_SM, sPath, sizeof(sPath), "configs/Mvp_Music.cfg");
	KeyValues kv = new KeyValues("Pawel Mvp Music - Config");
	if (!kv.ImportFromFile(sPath)) {
		if (!FileExists(sPath)) {
			if (GenerateConfig())
				LoadConfig();
			else
				SetFailState("[ X Mvp Music -> Config X ] Nie udało się utworzyć pliku konfiguracyjnego!");
			delete kv;
			return;
		}
		else {
			LogError("[ X Mvp Music -> Config X ] Aktualny plik konfiguracyjny jest uszkodzony! Trwa tworzenie nowego...");
			if (GenerateConfig())
				LoadConfig();
			else
				SetFailState("[ X Mvp Music -> Config X ] Nie udało się utworzyć pliku konfiguracyjnego!");
			delete kv;
			return;
		}
	}
	if (kv.JumpToKey("Ustawienia")) {
		g_iCvar[0] = kv.GetNum("random_sound");
	}
	kv.GoBack();
	if (kv.JumpToKey("Piosenki")) {
		kv.GotoFirstSubKey();
		g_arSounds[0].Push(g_arSounds[0].Length + 1);
		g_arSounds[1].PushString("Brak");
		g_arSounds[2].PushString("");
		g_arSounds[3].PushString("");
		do {
			g_arSounds[0].Push(g_arSounds[0].Length + 1);
			kv.GetSectionName(sBuffer, sizeof(sBuffer));
			g_arSounds[1].PushString(sBuffer);
			kv.GetString("file_path", sBuffer, sizeof(sBuffer));
			g_arSounds[2].PushString(sBuffer);
			if (StrContains(sBuffer, ".mp3") != -1) {
				char sFile[128];
				Format(sFile, sizeof(sFile), "sound/%s", sBuffer);
				AddFileToDownloadsTable(sFile);
			}
			kv.GetString("flags", sBuffer, sizeof(sBuffer));
			g_arSounds[3].PushString(sBuffer);
		}
		while (kv.GotoNextKey());
		kv.GoBack();
	}
	kv.GoBack();
}

bool GenerateConfig() {
	char sPath[PLATFORM_MAX_PATH];
	BuildPath(Path_SM, sPath, sizeof(sPath), "configs/Mvp_Music.cfg");
	KeyValues kv = new KeyValues("Pawel Mvp Music - Config");
	if (kv.JumpToKey("Ustawienia", true)) {
		kv.SetString("random_sound", "1");
		kv.GoBack();
	}
	kv.Rewind();
	bool result = kv.ExportToFile(sPath);
	delete kv;
	return result;
}

int CheckDrawType(int client, char[] sFlag, int sound) {
	if (g_iSound[client] == sound)return ITEMDRAW_DISABLED;
	if (GetUserFlagBits(client) & ADMFLAG_ROOT)return ITEMDRAW_DEFAULT;
	if (GetUserFlagBits(client) & ReadFlagString(sFlag))return ITEMDRAW_DEFAULT;
	if (StrEqual(sFlag, ""))return ITEMDRAW_DEFAULT;
	
	return ITEMDRAW_DISABLED;
}

bool IsValidClient(int client) {
	if (client <= 0)return false;
	if (client > MaxClients)return false;
	if (!IsClientConnected(client))return false;
	if (IsFakeClient(client))return false;
	if (IsClientSourceTV(client))return false;
	return IsClientInGame(client);
}

void CreateArrays() {
	for (int i = 0; i < 4; i++)
	g_arSounds[i] = new ArrayList(128);
}

void ClearArrays() {
	for (int i = 0; i < 4; i++)
	g_arSounds[i].Clear();
}

void Reset(int client) {
	g_iSound[client] = 0;
	g_fVolume[client] = 1.0;
}

void RandomSound() {
	int random = GetRandomInt(0, g_arSounds[0].Length - 2);
	char sFile[128];
	g_arSounds[2].GetString(random, sFile, sizeof(sFile));
	LoopClients(i) {
		PrecacheSound(sFile, true);
		EmitSoundToClient(i, sFile, _, _, _, _, g_fVolume[i]);
	}
}

/* [ Timers ] */
public Action Timer_AuthorInfo(Handle timer) {
	CPrintToChatAll("%s Plugin został napisany przez {lime}Pawła{default}.", PluginTag_Info);
	CPrintToChatAll("%s Plugin jest udostepniony za darmo na {lime}Go-Code.pl{default}.", PluginTag_Info);
} 

 

 

Download

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Więcej jeszcze pamięci zaalokuj tym pluginem xd

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Widziałem gdzieś ten plugin już... dobry pomysł wrzucić takie cuś na 5vs5 serwer?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
1 godzinę temu, xM3FiX | CS4F napisał:

Widziałem gdzieś ten plugin już... dobry pomysł wrzucić takie cuś na 5vs5 serwer?

Jeśli masz mało plugin albo inaczej, pluginy ci nie jedzą ramu jak ^^ lub google chrome to wrzucaj śmiało 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W obecnej formie ja również odradzam używania pluginu, niestety ale w obecnej formie jest on za bardzo zasobożerny 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
13 godzin temu, szogun napisał:

W obecnej formie ja również odradzam używania pluginu, niestety ale w obecnej formie jest on za bardzo zasobożerny 

Pukawka daje radę 😉

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Done, przerobione pod tablice dynamiczne.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Dasz nowy link do pobrania? 

EDIT: już działa

Edytowane przez Masiak

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

witam gdy wchodze na serwer pobieranie staje na 2019-07-06 jak to naprawic

 

Download file 'sound/mvp_yamakashi/2019-07-06.mp3' ignored. File uploads are disabled!
 

Edytowane przez Nfourmi

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Witam, przy probie dodania swojej piosenki, plugin niedziala, przed wlozeniem piosenki, wszystko dziala idealnie.

Mozesz mi jakos pomoc?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
7 godzin temu, laleh napisał:

Witam, przy probie dodania swojej piosenki, plugin niedziala, przed wlozeniem piosenki, wszystko dziala idealnie.

Mozesz mi jakos pomoc?

error logi pokaż.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Witam, czy da się ustawić tak żeby w każdej rundzie grało nawet jak ktoś MVP piosenki sobie nie ustawi żeby losowa leciała? I czy to jest zintegrowane z abnerres? @Paweł Jeśli możesz to pomóż 🙂

Edytowane przez rzuf

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

mam taki coś w errorlogach, ale pplugin działa

L 06/02/2020 - 13:13:26: [SM]   [1] Line 159, D:\ServerPlugins\yKompilator\MVP_Music.sp::Event_RoundMVP
L 06/02/2020 - 13:15:09: [SM] Exception reported: Invalid index -1 (count: 20)
L 06/02/2020 - 13:15:09: [SM] Blaming: MVP_Music.smx
L 06/02/2020 - 13:15:09: [SM] Call stack trace:
L 06/02/2020 - 13:15:09: [SM]   [0] ArrayList.GetString
L 06/02/2020 - 13:15:09: [SM]   [1] Line 159, D:\ServerPlugins\yKompilator\MVP_Music.sp::Event_RoundMVP
L 06/02/2020 - 13:16:58: SourceMod error session started

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

witam mam problem ponieważ nie działa to na serwerze mozan wybrac ale piosenka nie gra

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Dodałem własne nutki i nie działa w ogóle ich nie pobiera, zmieniłem nazwe folderu w pluginie, tak samo jak ścieżki w pliku MvpMusic tytuły się zmieniły muzyki nie odtwarza, ktoś coś? @Paweł

W logach wszystko ok: L 08/22/2020 - 18:13:28: [mvp.smx] [✔ MVP MUSIC ✔]    | Załadowano 19 piosenek z configu!

mvp.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Edytowane przez chomik

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W ciągu kilku dni pojawi się aktualizacja pluginu, w której zoptymalizuje plugin, poszerzę go o cvary oraz naprawię wszystkie dotychczasowe błędy.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

e

3 godziny temu, chomik napisał:

Dodałem własne nutki i nie działa w ogóle ich nie pobiera, zmieniłem nazwe folderu w pluginie, tak samo jak ścieżki w pliku MvpMusic tytuły się zmieniły muzyki nie odtwarza, ktoś coś? @Paweł

W logach wszystko ok: L 08/22/2020 - 18:13:28: [mvp.smx] [✔ MVP MUSIC ✔]    | Załadowano 19 piosenek z configu!

mvp.sp 14 kB · 0 pobrań
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Jeżeli się nie pobiera to jest coś nie tak w cfg, sprawdź dobrze. U mnie wszystko działało do momentu wprowdzenia nowych piostenek które były hmmm "za głośne"

Muzyka może nie grać jak ma więcej niż 44100hz jak ma 48000 to się może pobierać lecz na serwerze nie bedzie grać, przerabiałem ten problem.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Update #1 

  • Dodano Cvar
  • Optymalizacja kodu.
  • Poprawienie występujących błędów.
  • Download w głównym poście.

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Plugin mi serwer crashuje ktoś ma pomysł?
Errory

Cytat

L 10/25/2020 - 10:25:05: [SM] Call stack trace:
L 10/25/2020 - 10:25:05: [SM]   [0] ArrayList.GetString
L 10/25/2020 - 10:25:05: [SM]   [1] Line 159, D:\ServerPlugins\yKompilator\MVP_Music.sp::Event_RoundMVP
L 10/25/2020 - 10:32:02: [SM] Exception reported: Invalid index -1 (count: 49)
L 10/25/2020 - 10:32:02: [SM] Blaming: MVP_Music.smx
L 10/25/2020 - 10:32:02: [SM] Call stack trace:
L 10/25/2020 - 10:32:02: [SM]   [0] ArrayList.GetString
L 10/25/2020 - 10:32:02: [SM]   [1] Line 159, D:\ServerPlugins\yKompilator\MVP_Music.sp::Event_RoundMVP

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
57 minut temu, Danski napisał:

Plugin mi serwer crashuje ktoś ma pomysł?
Errory

 

1. Czy korzystasz z najnowszej wersji pluginu? 

2. Jeżeli tak to czy go edytowałeś  (wstaw kod źródłowy)?

3. Jeżeli nie to zacznij korzystać z najnowszej wersji.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Crashuje jedynie jak próbuje nutke swoją dodać. Przy orginalnych piosenkach działa normalnie jedynie próbowałem 1 nutke dodać swoją to miałem problemy. Korzystam z najnowszej.

Edytowane przez Danski

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
28 minut temu, Paweł napisał:

1. Czy korzystasz z najnowszej wersji pluginu? 

2. Jeżeli tak to czy go edytowałeś  (wstaw kod źródłowy)?

3. Jeżeli nie to zacznij korzystać z najnowszej wersji.

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić obrazków. Dodaj lub załącz obrazki z adresu URL.


×
×
  • Dodaj nową pozycję...