Jump to content
assignment_ind Existing user? Sign In

Sign In



person_add Sign Up
Go-Code.pl - Support SourceMod i Pluginy CS:GO
Sign in to follow this  
Brum Brum

[CS:GO] Losowy VIP

Recommended Posts

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!

Edited by Brum Brum
Zmiana sposobu sprawdzania flag.
  • Lubię to! 4
  • Dobry pomysł! 1

Share this post


Link to post
Share on other sites

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++)

 

 

Edited by Master
  • Lubię to! 2

Share this post


Link to post
Share on other sites

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 😛

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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 ) 

Share this post


Link to post
Share on other sites
  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 (˙·٠●Феникс●٠·˙)

 

Share this post


Link to post
Share on other sites

@gejmer nie widzę nic takiego, ale spróbuj usunąć freevip'a i zobacz czy bez niego wszystko działa poprawnie. 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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.

  • Lubię to! 1

Share this post


Link to post
Share on other sites

Mam flage z i juz kilka razy dostalem vipa :/

Share this post


Link to post
Share on other sites
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 

  • Lubię to! 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
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;
}

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.


O NAS Jesteśmy społecznością łączącą ludzi, którzy dzielą pasję poznawania CS:GO od strony programistycznej. Posiadamy duże zaplecze merytoryczne i zawsze cieszymy się, gdy dołączają do nas osoby gotowe do nauki. Gwarantujemy, że z odrobiną wytrwałości i otwartym umysłem bardzo szybko napiszesz swój pierwszy plugin. Zapraszamy! 🙂
Szablon wykonany z dużą ilością przez cyberpixelz / Mesharsky / Sitefuture
Forum dumnie napędzane przez: Invision Power Services, Inc.
×
×
  • Create New...