Skocz do zawartości
Brum Brum

[CS:GO] Losowy VIP

Rekomendowane odpowiedzi

  • Lubię to! 4
  • Kocham to 1
  • Dobry pomysł! 1

Opis: Po X rundach losuje osobę, która dostanie darmowego vipa do końca mapy. Możemy ustawić od ilu graczy od której rundy. Możemy również dać większą szansę graczom, którzy posiadają daną nazwę w nicku (wszystko zmieniamy w cvarach). Możemy również dać daną flagę.

 

KOD:
 

Spoiler

#include <sdktools>

#pragma semicolon 1
#pragma newdecls required

ConVar gc_RandomVIP, gc_VIPFlag, gc_MinPlayers, gc_MOD_TAG;
ConVar gc_EnableWebsite, gc_Website;
char MOD_TAG[64], WEB[64];

int g_iRound;

ArrayList pula_graczy;

public Plugin myinfo = 
{
	name = "ADEPT --> Losowy VIP",
	description = "Autorski Plugin StudioADEPT.net", 
	author = "Brum Brum", 
	version = "1.0", 
	url = "http://www.StudioADEPT.net/forum", 
};

public void OnPluginStart()
{
	pula_graczy = new ArrayList();
	gc_RandomVIP = CreateConVar("sm_vip_random_round", "5", "Runda w której ma wylosować vipa (rozgrzewka nie jest brana pod uwagę)");
	gc_VIPFlag = CreateConVar("sm_vip_random_flag", "o", "Flaga którą ma otrzymać vip");
	gc_MinPlayers = CreateConVar("sm_vip_random_player", "2", "Minimalna ilość graczy do wylosowania vipa");
	gc_EnableWebsite = CreateConVar("sm_vip_random_website_enable", "1", "Zwiększa szanse graczom, który zawierają nazwe sieci w nicku(Wymagany cvar niżej)");
	gc_Website = CreateConVar("sm_vip_random_website_name", "StudioADEPT.net", "Nazwa sieci zwiększająca szanse na losowego vipa");
	gc_MOD_TAG = CreateConVar("sm_vip_random_tag", "ADEPT", "TAG pokazywany na czacie");
	gc_MOD_TAG.AddChangeHook(MOD_TAGNameChanged);
	gc_MOD_TAG.GetString(MOD_TAG, sizeof(MOD_TAG));
	gc_Website.AddChangeHook(WEBNameChanged);
	gc_Website.GetString(WEB, sizeof(WEB));
	HookEvent("round_start", Event_RoundStart);
	HookEvent("cs_win_panel_match", RestartRound);
	AutoExecConfig(true, "ADEPT_LosowyVIP");
}

public void MOD_TAGNameChanged(ConVar convar, const char[] oldValue, const char[] newValue)
{
	Format(MOD_TAG, sizeof(MOD_TAG), newValue);
}
public void WEBNameChanged(ConVar convar, const char[] oldValue, const char[] newValue)
{
	Format(WEB, sizeof(WEB), newValue);
}

public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
	if (IsWarmup())return;
	
	int Runda = gc_RandomVIP.IntValue;
	int MinPlayers = gc_MinPlayers.IntValue;
	int Players = GetPlayerCount();
	
	g_iRound++;
	if (g_iRound == Runda) {	
		if (Players >= MinPlayers)GetRandomVIP();
		else PrintToChatAll("\x01\x0B★ \x07[%s -> Losowy VIP]\x04 Jest zbyt mało graczy aby wylosować VIPa!", MOD_TAG);
	}
}

public Action RestartRound(Event event, const char[] name, bool dontBroadcast)
{
	g_iRound = 0;
}

void GetRandomVIP()
{
	int Random = GetRandomPlayer();
	PrintToChatAll("\x01\x0B★ \x07[%s -> Losowy VIP]\x04 Trwa losowanie VIP'a...", MOD_TAG);
	PrintToChatAll("\x01\x0B★ \x07[%s -> Losowy VIP]\x04 Trwa losowanie VIP'a...", MOD_TAG);
	PrintToChatAll("\x01\x0B★ \x07[%s -> Losowy VIP]\x04 Trwa losowanie VIP'a...", MOD_TAG);
	if (Random)
	{
		PrintToChatAll("\x01\x0B★ \x07[%s -> Losowy VIP]\x04 Losowym VIP'em zostaje \x02%N\x04 Gratulujemy!", MOD_TAG, Random);
		SetUserFlagBits(Random, GetUserFlagBits(Random) | GetFlag());
	}
	else PrintToChatAll("\x01\x0B★ \x07[%s -> Losowy VIP]\x04 Nie można wylosować VIP`a ponieważ na serwerze są same VIPY!", MOD_TAG);
}

bool HaveFlag(int client)
{
	int flag = GetFlag();
	
	if (GetUserFlagBits(client) & flag)return true;
	else return false;
}

int GetRandomPlayer()
{
	
	pula_graczy.Clear();
	for (int i = 1; i < MaxClients; i++)
	{
		if (IsValidClient(i))
		{
			if (gc_EnableWebsite.BoolValue) {
				if (!HaveFlag(i) && HaveWebSite(i)) {
					pula_graczy.Push(i);
					pula_graczy.Push(i);
				}
				else if (!HaveFlag(i) && !HaveWebSite(i))pula_graczy.Push(i);
			}
			else
			{
				if (!HaveFlag(i))pula_graczy.Push(i);
			}
		}
	}
	if (pula_graczy.Length == 0)return 0;
	
	return pula_graczy.Get(GetRandomInt(0, pula_graczy.Length - 1));
}

bool HaveWebSite(int client)
{
	if (!IsValidClient(client))return false;
	
	char name[MAX_NAME_LENGTH];
	GetClientName(client, name, sizeof(name));
	
	if (StrContains(name, WEB, true) != -1)return true;
	else return false;
}

int GetPlayerCount()
{
	int count;
	for (int i = 1; i <= MaxClients; i++) {
		if (IsValidClient(i))count++;
	}
	
	return count;
}

int GetFlag()
{
	char flag[10];
	gc_VIPFlag.GetString(flag, sizeof(flag));
	
	return ReadFlagString(flag);
}

public bool IsValidClient(int client)
{
	if (!(1 <= client <= MaxClients) || !IsClientInGame(client) || !IsClientConnected(client) || IsFakeClient(client) || IsClientSourceTV(client))
		return false;
	
	return true;
}

bool IsWarmup()
{
	int warmup = GameRules_GetProp("m_bWarmupPeriod", 4, 0);
	if (warmup == 1)return true;
	else return false;
} 

 

 

W razie błędów standardowo napisz o tym w komentarzu. 

 

ADEPT_LosowyVIP.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 Brum Brum
Zmiana sposobu sprawdzania flag.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Lubię to! 2

Lepszy sposób na sprawdzenie czy gracz posiada daną flagę.

 

int GetFlag()
{
	char flag[10];
	gc_VIPFlag.GetString(flag, sizeof(flag));
	
	return ReadFlagString(flag);
}

 

Edit: Również nie ma potrzeby deklarować dynamicznej tablicy globalnie, gdyż tylko niepotrzebnie zajmuje pamięć.

 

Dobrym nawykiem jest również.

 

bool IsWarmup()
{
	return (GameRules_GetProp("m_bWarmupPeriod") == 1);
}
bool IsValidClient(int iClient)
{
	return (1 <= iClient <= MaxClients && IsClientInGame(iClient) && IsClientConnected(iClient) && !IsFakeClient(iClient) && !IsClientSourceTV(iClient));
}
bool HaveWebSite(int client)
{
    if (!IsValidClient(client)) return false;

    char name[MAX_NAME_LENGTH];
    GetClientName(client, name, sizeof(name));

    return (StrContains(name, WEB) != -1);
}
bool HaveFlag(int client)
{
	int flag = GetFlag();
	
	return view_as<bool>(GetUserFlagBits(client) & flag);
}

 

Nierówność przy pętli przechodzącej przez wszystkich graczy ma być domknięta.

for (int i = 1; i <= MaxClients; i++)

 

 

Edytowane przez Master

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Uuuu, a jak ten ktosiński wyjdzie i wróci, bo np mama potknie się o kabel od internetu?

Zapisuj ID gracza i jak ktoś wchodzi to sprawdzaj, czy to ten gracz 😛

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

U mnie na serwerze jest taki problem ze gdy gracz dostanie losowego vipa dziala tylko na 1 runde o co moze chodzic ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
54 minuty temu, gejmer napisał:

U mnie na serwerze jest taki problem ze gdy gracz dostanie losowego vipa dziala tylko na 1 runde o co moze chodzic ?

Prawdopodobnie masz jakiś plugin, który nadpisuje flagi co rundę. Pokaż listę pluginów ( sm plugins list ) 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
  01 "Weapons & Knives" (1.5.0) by kgns | oyunhost.net
  02 "SourceBans++: Admin Config Loader" (1.6.3) by AlliedModders LLC, SourceBans++ Dev Team
  03 "Fun Votes" (1.10.0.6454) by AlliedModders LLC
  04 "Team Balancer Manager" (0.9.2) by Sebul
  05 "Chat-Processor" (2.2.1) by Drixevel
  06 "Name Links Remover" (1.0.13) by root
  07 "AFK Manager" (4.3.0) by Rothgar
  08 "Basic Info Triggers" (1.10.0.6454) by AlliedModders LLC
  09 "Admin ESP management" (0.1) by MAGNET
  10 "[CS:GO] SpawnTools7" (1.0.1) by meng & IDDQD
  11 "Server Info" (1.1.0) by EmreBulut
  12 "Advanced Admin ESP" (1.3.6) by Mitch
  13 "Sound Commands" (1.10.0.6454) by AlliedModders LLC
  14 "Server Info" (1.1.0) by EmreBulut
  15 "Player Commands" (1.10.0.6454) by AlliedModders LLC
  16 "SourceBans++ Report Plugin" (1.6.3) by RumbleFrog, SourceBans++ Dev Team
  17 "csgotokens.com token changer" (1.2.1) by Adi - live4net
  18 "Menu Vipa"
  19 "SourceBans++: SourceComms" (1.6.3) by Alex, SourceBans++ Dev Team
  20 "ADEPT --> Losowy VIP" (1.0) by Brum Brum
  21 "SourceBans++: Main Plugin" (1.6.3) by SourceBans Development Team, SourceBans++ Dev Team
  22 "Basic Chat" (1.10.0.6454) by AlliedModders LLC
  23 "Basic Comm Control" (1.10.0.6454) by AlliedModders LLC
  24 "[CS:GO] Menu Pomocy" (1.0) by ProfilSteam
  25 "ServerAdvertisements3" (3.1.3) by ESK0
  26 "[CS:GO] Menu Pomocy" (1.0) by ProfilSteam
  27 "Gloves" (1.0.3) by kgns | oyunhost.net
  28 " BlockTeamChange" (0.1) by Brum Brum
  29 "Anti-Flood" (1.10.0.6454) by AlliedModders LLC
  30 "Admin Help" (1.10.0.6454) by AlliedModders LLC
  31 "zostales_zabity_przez.smx"
  32 "[CS:GO/CSS] AbNeR Round End Sounds" (3.6.2) by AbNeR_CSS
  33 "[CS:GO] Yamakashi - [ yRanks ]" (1.4) by Yamakashi
  34 <Error> "BanId Fix" (0.5) by SM9();
  35 "Fix Hint Color Messages" (1.0.1) by Phoenix (˙·٠●Феникс●٠·˙) and Franc1sco Franug
  36 "[CSGO] Zaawansowany system VIP na serwery CSGO" (1.6) by Mesharsky
  37 "SourceBans++: Bans Checker" (1.6.3) by psychonic, Ca$h Munny, SourceBans++ Dev Team
  38 "[CS:GO] FreeVip" (1.2) by Yamakashi
  39 "Client Preferences" (1.10.0.6454) by AlliedModders LLC
  40 "Reserved Slots" (1.10.0.6454) by AlliedModders LLC
  41 "[CSS/CS:GO] AbNeR ResetScore" (1.5fix) by AbNeR_CSS
  42 "cennik Vipa
  43 "[Source 2013] Custom Chat Colors" (3.1.0 CP) by Dr. McKay, Fixed up by Keith Warren (Drixevel)
  44 "Menu Vipa" (1.0)
  45 "Simple ukryj" (1.0) by Potatoz
  46 "Admin File Reader" (1.10.0.6454) by AlliedModders LLC
  47 "blokada.smx"
  48 "Server Info" (1.1.0) by EmreBulut
  49 "Server Info" (1.1.0) by EmreBulut
  50 "Fun Commands" (1.10.0.6454) by AlliedModders LLC
  51 "hextags" (1.47) by Hexah
  52 "Server Info" (1.1.0) by EmreBulut
  53 "Chat Processor - Simple Chat Processor Wrapper" (1.0.0) by Keith Warren (Shaders Allen)
  54 "Basic Votes" (1.10.0.6454) by AlliedModders LLC
  55 "Basic Commands" (1.10.0.6454) by AlliedModders LLC
  56 "Nextmap" (1.10.0.6454) by AlliedModders LLC
  57 "SourceBans++: SourceSleuth" (1.6.3) by ecca, SourceBans++ Dev Team
  58 "Bombsite Limiter" (1.2.3) by Tomasz 'anacron' Motylinski
  59 "Admin Menu" (1.10.0.6454) by AlliedModders LLC
  60 <Failed> "Chat Colors CSGO" (1.4) by Pheonix (˙·٠●Феникс●٠·˙)

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

da rade zrobic cos z tym by osoba ktora posiada vip nie brala udziału w losowaniu ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
W dniu 11.12.2019 o 09:58, gejmer napisał:

da rade zrobic cos z tym by osoba ktora posiada vip nie brala udziału w losowaniu ?

 

Z tego co widzę w kodzie, to osoby z VIPem, są wykluczone z losowania.

Udostępnij tę odpowiedź


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

Mam flage z i juz kilka razy dostalem vipa 😕

Bo flaga z ma wszystkie flagi ale przy sprawdzeniu nie jest brany klient pod uwagę z tą flaga 

Brum nie zrobił warunku by wykluczać adminów bądź roota. Jego błąd 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
W dniu 15.12.2019 o 23:59, Brum Brum napisał:

Hmm faktycznie zapomniałem dodać sprawdzanie flagi z, w przyszłej aktualizacji poprawię

 

 

Można prosić o poprawkę, aby nie brało osób pod uwagę, którzy posiadają flagę "Z" root?

Udostępnij tę odpowiedź


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

 

 

Można prosić o poprawkę, aby nie brało osób pod uwagę, którzy posiadają flagę "Z" root?

Zamień to 

bool HaveFlag(int client)
{
	int flag = GetFlag();
	
	if (GetUserFlagBits(client) & flag)return true;
	else return false;
}

na to

bool HaveFlag(int client)
{
	int flag = GetFlag();
	
	if (GetUserFlagBits(client) & ADMFLAG_ROOT)return true;
	if (GetUserFlagBits(client) & flag)return true;	

	return false;
}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Lubię to! 2
Napisano (edytowane)

Tutaj przesyłam wersję, która zadziała na serwerach, które korzystają z timelimit, typu: deathrun, speedrun, surf. W pliku gamemode_*_server.cfg ustawcie mp_buytime na ilość sekund, po której ma być losowanie VIPa po rozpoczęciu nowej mapy.

Edit: Usunąłem zbędną część kodu.

 

 

ADEPT_LosowyVIP.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 bali2k

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
//// ADEOT_LosowyVIP.sp
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(75) : error 001: expected token: ";", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(75) : error 010: invalid function or declaration
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(91) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(91) : error 001: expected token: ";", but found "("
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(98) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(98) : error 001: expected token: ";", but found "("
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(113) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(113) : error 001: expected token: ";", but found "("
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(120) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(120) : error 001: expected token: ";", but found "("
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(127) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(127) : error 001: expected token: ";", but found "("
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(140) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(140) : error 010: invalid function or declaration
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(152) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(152) : error 010: invalid function or declaration
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(152 -- 162) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(152 -- 162) : fatal error 127: too many error messages on one line
//

Przy kompilacji taki oto błąd. Kompiluję ponieważ chcę wprowadzić zmiany na sprawdzanie flagi root, o której mówił @Brum Brum

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
2 godziny temu, cyziek napisał:

//// ADEOT_LosowyVIP.sp
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(75) : error 001: expected token: ";", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(75) : error 010: invalid function or declaration
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(91) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(91) : error 001: expected token: ";", but found "("
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(98) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(98) : error 001: expected token: ";", but found "("
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(113) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(113) : error 001: expected token: ";", but found "("
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(120) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(120) : error 001: expected token: ";", but found "("
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(127) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(127) : error 001: expected token: ";", but found "("
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(140) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(140) : error 010: invalid function or declaration
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(152) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(152) : error 010: invalid function or declaration
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(152 -- 162) : error 001: expected token: "(", but found "-identifier-"
// D:\sourcemodek\addons\sourcemod\scripting\include\clients.inc(152 -- 162) : fatal error 127: too many error messages on one line
//

Przy kompilacji taki oto błąd. Kompiluję ponieważ chcę wprowadzić zmiany na sprawdzanie flagi root, o której mówił @Brum Brum

Pokaż swój przerobiony kod.

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ę...