Skocz do zawartości
wisnia834

Przerobienie pluginu z Nazwą DNS w nicku

Rekomendowane odpowiedzi

Cześć, dopiero zaczynam się bawić w SM. Niestety wiele mi brakuje do pisania i pełnego edytowania innych pluginów. 

 

Chciałbym zedytować ten plugin (na dole), tak - żeby:

  • Kiedy gracz ma w nicku dany (ustawiane w cfg) DNS (daną frazę, dany link - cokolwiek co zechce)  to daje w pierwszej rundzie jednemu losowemu graczowi , który ma tą frazę - flagę do końca mapy (ustawiane w cfg - domyślnie a) - Czyli VIP'a. Nowa mapa, nowy gracz dostaje flagę.
  • Wiadomość, że (tu sobie poprzestawiam) Ten gracz został wylosowany na VIP'a
  • Każdemu, kto ma w nicku daną frazę j/w - daje (ustawiane o ile się da a domyślnie) +15% kasy za zabicie itd. Powiedzmy, takie pocieszenie dla tych co nie dostali VIP'a.
  • No i żeby dało się wyłączać obie te funkcję. Żeby działały dwie na raz, albo tylko pierwsza albo tylko druga.

 

W sumie.. To co już jest w pluginie to można wywalić, żadnego "menu z tag'ami" bym nie chciał i żadnego dostawania nowej waluty i dodatkowych broni. 😄 Nie wiem czy nie proszę o napisanie całkowicie nowego pluginu.. 

 

Ewentualnie edytować plugin @Brum Brum żeby dodać te funkcje. Opakować losowanie VIP'a w if'a no i z tą kasą opcja. Dodaje dwa pluginy.

Bo na razie plugin @Brum Brum daje losowemu graczowi daną flagę i temu kto ma nazwę sieci w nicku ma 2x szanse. Jednak wolałbym to co jest w kropkach na górze. Niestety nie umiem sam 😄 

 

KOD GOLDMEMBER.SP

Spoiler
#include <sourcemod>
#include <sdktools>
#include <store>
#include <clientprefs>
#include <cstrike>

ConVar CreditsAdder;
ConVar CreditsTime;
ConVar sm_nospec = null;
Handle TimeAuto = null;
Handle g_hGoldTagCookie;

#define DNS "AWP.LALEAGANE.RO"  // YOUR SERVER'S DNS 
#define PL_VERSION "1.0"        // Don't edit this

public Plugin myinfo = 
{
	name = "GoldMember (DNS Benefits)",
	author = "xSLOW",
	description = "Benefits for having DNS in STEAM Name",
	version = PL_VERSION,
	url = "www.xslow.xyz"
};

public void OnPluginStart()
{
	g_hGoldTagCookie = RegClientCookie("GoldTagCookie", "GoldTagCookie", CookieAccess_Protected);
	RegConsoleCmd("sm_goldtag", menutag);

	CreditsAdder = CreateConVar("sm_goldmember_credits", "10", "Credits to give per X time, if player has DNS in name.", FCVAR_NOTIFY);
	CreditsTime = CreateConVar("sm_goldmember_credits_time", "180", "Time in seconds to give the credits.", FCVAR_NOTIFY);
	sm_nospec = CreateConVar("sm_nospec", "1", "0 = ALL PLAYERS and 1 = ONLY CT/T",	_, true, 0.0, true, 1.0);
	HookConVarChange(CreditsTime, Change_CreditsTime);

	HookEvent("player_spawn", Event_OnPlayerSpawn);
}


public void OnMapStart()
{
	TimeAuto = CreateTimer(GetConVarFloat(CreditsTime), CheckPlayers, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
        PrintToChatAll(" \x03This server is running xSLOW'S DNS Benefits [%s]. Add \x04%s\x03 to your name to get free benefits.", PL_VERSION ,DNS);
}


public void Event_OnPlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	char sBuffer[12];
	
	if (client == 0 || IsFakeClient(client))
	{
		return;
	}
	
        if(HasDNS(client) == true)
        {
            PrintToChat(client, " ✪︎ \x01You're getting FREE \x03ARMOR & CREDITS & !GOLDTAG\x01 for being a \x10GoldMember♛");
            GiveArmor(client);
        }
            else
            {
	            PrintToChat(client, " ✪︎ \x01Add \x07'%s' \x01to your NAME to get \x10GoldMember♛ \x03(FREE ARMOR & CREDITS & !GOLDTAG)", DNS);
            }

        if(IsClientValid(client) && HasDNS(client) == true)
        {
            int choosed;
            GetClientCookie(client,g_hGoldTagCookie,sBuffer,sizeof(sBuffer))
            choosed = StringToInt(sBuffer);
            if (IsClientInGame(client)&&(IsClientValid(client)))
            {
                if(choosed == 1)
                {
                    CS_SetClientClanTag(client, "GoldMember♛");    
                }
                else
                if(choosed == 2)
                {
                    CS_SetClientClanTag(client, "GoldMember®");
                }
                else
                if(choosed == 3)
                {
                    CS_SetClientClanTag(client, "GoldMember♥");
                }
                else
                if(choosed == 4)
                {
                    CS_SetClientClanTag(client, "Avicii™");
                }
                else
                if(choosed == 5)
                {
                    CS_SetClientClanTag(client, "theGΦD♰︎");
                }
                else
                if(choosed == 6)
                {
                    CS_SetClientClanTag(client, "TheReaper☠︎︎");
                }
                else
                if(choosed == 7)
                {
                    CS_SetClientClanTag(client, "BΦ$$♚︎");
                }				
                else
                if(choosed == 8)
                {
                    CS_SetClientClanTag(client, "Radioactive ☢︎");
                }
                else
                if(choosed == 9)
                {
                    CS_SetClientClanTag(client, "➀︎Ⓣ︎Ⓐ︎Ⓟ︎");
                }
                else
                if(choosed == 10)
                {
                    CS_SetClientClanTag(client, "◉◡◉");
                }		
                else
                if(choosed == 11)
                {
                    CS_SetClientClanTag(client, "❍ᴥ❍");
                }
                if(choosed == 12)
                {
                    CS_SetClientClanTag(client, "sNipeR ❖");    
                }
                else
                if(choosed == 13)
                {
                    CS_SetClientClanTag(client, "Star ❖");
                }
                else
                if(choosed == 14)
                {
                    CS_SetClientClanTag(client, "spArk ❖");
                }
                else
                if(choosed == 15)
                {
                    CS_SetClientClanTag(client, "CiΦaRa ❖");
                }
                else
                if(choosed == 16)
                {
                    CS_SetClientClanTag(client, "mOeTTT ❖");
                }
                else
                if(choosed == 17)
                {
                    CS_SetClientClanTag(client, "DestroyeR ❖");
                }
                else
                if(choosed == 18)
                {
                    CS_SetClientClanTag(client, "NΦ ЅCΦP3 ❖");
                }				
                else
                if(choosed == 19)
                {
                    CS_SetClientClanTag(client, "NΦΦB ❖");
                }
                else
                if(choosed == 20)
                {
                    CS_SetClientClanTag(client, "milmΦi ❖");
                }									
            }
        }
}


// tagmenu
public tagmenu(Handle:menu, MenuAction:action, iClient, param2)
{
    switch (action)
    {
        case MenuAction_Select:
        {
            decl String:sBuffer[12];
            int i = 9;

            switch(param2)
            {
                case 0:
                {
                    i=0;
                    CS_SetClientClanTag(iClient, "");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);                       
                }
                case 1:
                {
                    i=1;
                    CS_SetClientClanTag(iClient, "GoldMember♛");
                    IntToString(i, sBuffer, sizeof(sBuffer));        
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 2:
                {
                    i=2;
                    CS_SetClientClanTag(iClient, "GoldMember®");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 3:
                {
                    i=3;
                    CS_SetClientClanTag(iClient, "GoldMember♥");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 4:
                {
                    i=4;
                    CS_SetClientClanTag(iClient, "Avicii™");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 5:
                {
                    i=5;
                    CS_SetClientClanTag(iClient, "theGΦD♰︎");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 6:
                {
                    i=6;
                    CS_SetClientClanTag(iClient, "TheReaper☠︎︎");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 7:
                {
                    i=7;
                    CS_SetClientClanTag(iClient, "BΦ$$♚︎");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 8:
                {
                    i=8;
                    CS_SetClientClanTag(iClient, "Radioactive ☢︎");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 9:
                {
                    i=9;
                    CS_SetClientClanTag(iClient, "➀︎Ⓣ︎Ⓐ︎Ⓟ︎");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 10:
                {
                    i=10;
                    CS_SetClientClanTag(iClient, "◉◡◉");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }					
                case 11:
                {
                    i=11;
                    CS_SetClientClanTag(iClient, "❍ᴥ❍");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }	
                case 12:
                {
                    i=12;
                    CS_SetClientClanTag(iClient, "sNipeR ❖");
                    IntToString(i, sBuffer, sizeof(sBuffer));        
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 13:
                {
                    i=13;
                    CS_SetClientClanTag(iClient, "Star ❖");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 14:
                {
                    i=14;
                    CS_SetClientClanTag(iClient, "spArk ❖");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 15:
                {
                    i=15;
                    CS_SetClientClanTag(iClient, "CiΦaRa ❖");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 16:
                {
                    i=16;
                    CS_SetClientClanTag(iClient, "mOeTTT ❖");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 17:
                {
                    i=17;
                    CS_SetClientClanTag(iClient, "DestroyeR ❖");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 18:
                {
                    i=18;
                    CS_SetClientClanTag(iClient, "NΦ ЅCΦP3 ❖");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 19:
                {
                    i=19;
                    CS_SetClientClanTag(iClient, "NΦΦB ❖");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }
                case 20:
                {
                    i=20;
                    CS_SetClientClanTag(iClient, "milmΦi ❖");
                    IntToString(i, sBuffer, sizeof(sBuffer));
                    SetClientCookie(iClient, g_hGoldTagCookie, sBuffer);
                }	
            }
        }
 
        case MenuAction_End:
            CloseHandle(menu);
 
    }
    return 0;
}

// Menu Tag
public Action menutag(client, args)
{
    if((HasDNS(client)))
    {
        GoldTag(client);
    }

    else
    {
        PrintToChat(client, " ✪︎ \x01Add \x07'%s' \x01to your NAME to get \x10GoldMember♛ \x03(FREE ARMOR & CREDITS & !GOLDTAG)", DNS);
    }
}

// GoldTag menu
public GoldTag(client)
{
    new Handle:menu = CreateMenu(tagmenu);
    SetMenuTitle(menu, "Menu TAG GoldMember");
 
    AddMenuItem(menu, "none", "No TaG");
    AddMenuItem(menu, "goldmember1", "GoldMember♛");
    AddMenuItem(menu, "goldmember2", "GoldMember®");
    AddMenuItem(menu, "goldmember3", "GoldMember♥");
    AddMenuItem(menu, "avicii", "Avicii™");
    AddMenuItem(menu, "dumnezeu","theGΦD♰︎");
    AddMenuItem(menu, "reaper", "TheReaper☠︎︎")
    AddMenuItem(menu, "asul","BΦ$$♚︎")
    AddMenuItem(menu, "radioactiv","Radioactive ☢︎");
    AddMenuItem(menu, "1tap","➀︎Ⓣ︎Ⓐ︎Ⓟ︎")
    AddMenuItem(menu, "cioara", "◉◡◉");
    AddMenuItem(menu, "moet", "❍ᴥ❍");
    AddMenuItem(menu, "sniper", "sNipeR ❖");
    AddMenuItem(menu, "stars", "Star ❖");
    AddMenuItem(menu, "spark", "spArk ❖");
    AddMenuItem(menu, "cioara", "CiΦaRa ❖");
    AddMenuItem(menu, "moet", "mOeTTT ❖");
    AddMenuItem(menu, "destroyer", "DestroyeR ❖");
    AddMenuItem(menu, "noscope", "NΦ ЅCΦP3 ❖");
    AddMenuItem(menu, "noob", "NΦΦB ❖");
    AddMenuItem(menu, "milmoi", "milmΦi ❖");
    DisplayMenu(menu, client, MENU_TIME_FOREVER);
   
}


// Verify if player has DNS in name
bool:HasDNS(client)
{
    char PlayerName[32];
    GetClientName(client, PlayerName, sizeof(PlayerName));

    if(StrContains(PlayerName, DNS, false) > -1)
    {  
        return true;
    }
    else
    return false;
}

// Give armor function
void GiveArmor(client)
{
	GivePlayerItem(client, "item_kevlar");
	GivePlayerItem(client, "item_assaultsuit");
	SetEntProp(client, Prop_Send, "m_ArmorValue", 100);
	SetEntProp(client, Prop_Send, "m_bHasHelmet", true);
}


// Verify is the client is valid
stock bool IsClientValid(int client)
{
    if (client >= 1 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client) && !IsFakeClient(client))
        return true;
    return false;
}

// Checking players
public Action CheckPlayers(Handle timer)
{
	for (int i = 1; i <= MaxClients; i++)
	{
		if(IsClientInGame(i) && !IsFakeClient(i))
		{
			addcredits(i);
		}
	}
	
	return Plugin_Continue;
}

// add credits function
public void addcredits(int client)
{
	if (HasDNS(client) == true)
	{
		if(!(sm_nospec.IntValue == 1 && GetClientTeam(client) < 2)) 
		{
			Store_SetClientCredits(client, Store_GetClientCredits(client) + GetConVarInt(CreditsAdder));
			PrintToChat(client, "✪︎ You're getting \x07%i more credits \x01for being a \x10GoldMember♛︎", GetConVarInt(CreditsAdder));
		}
	}
}

public void OnClientPostAdminCheck(int client)
{
	if (IsFakeClient(client))
		return;

}

public void Change_CreditsTime(Handle cvar, const char[] oldVal, const char[] newVal)
{
	if (TimeAuto != null)
	{
		KillTimer(TimeAuto);
		TimeAuto = null;
	}

	TimeAuto = CreateTimer(GetConVarFloat(CreditsTime), CheckPlayers, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

 

 

KOD LosowyVIP BRUM BURM

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;
} 

 

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

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 wisnia834

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Powinno działać:

Spoiler
#include <sdktools>

#pragma semicolon 1
#pragma newdecls required

ConVar gc_RandomVIP, gc_VIPFlag, gc_MinPlayers, gc_MOD_TAG, gc_MoneyForKill;
ConVar gc_Website;
ConVar gc_RandomVipType;
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", "1", "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_Website = CreateConVar("sm_vip_random_website_name", "StudioADEPT.net", "Fraza wymagana w nicku.");
	gc_MOD_TAG = CreateConVar("sm_vip_random_tag", "ADEPT", "TAG pokazywany na czacie");
	gc_MoneyForKill = CreateConVar("sm_vip_money_for_kill", "340", "Ilość pieniędzy za killa z frazą w nicku");
	gc_RandomVipType = CreateConVar("sm_vip_type", "1", "1 - Losowanie Vip'a dla wszystkich 2 - Losowanie Vip'a dla osób z frazą w nicku.");
	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);
	HookEvent("player_death", Event_PlayerDeath);
	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 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 Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
	int attacker = GetClientOfUserId(event.GetInt("attacker"));
	if(!IsValidClient(attacker)) return Plugin_Continue;

	int money = GetEntProp(attacker, Prop_Send, "m_iAccount");
	
	if(!HaveFlag(attacker) && HaveWebSite(attacker))
		SetEntProp(attacker, Prop_Send, "m_iAccount", money + gc_MoneyForKill.IntValue;);
		
	return Plugin_Continue;
}

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_RandomVipType.IntValue == 1)
			{
				if(!HaveFlag(i))
					pula_graczy.Push(i);
			}
			else if(gc_RandomVipType.IntValue == 2)
			{
				if(!HaveFlag(i) && HaveWebSite(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;
} 

 

 

Edytowane przez Yamakashi

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W jednym miejscu było za dużo " ; " po skasowaniu tylko to wyskakuje 😄 Jak skasuje sie z 68 linijki samo Event to zostaje pierwszy error

(39) : error 017: undefined symbol "RestartRound"
(68) : error 021: symbol already defined: "Event_RoundStart"

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Spoiler
#include <sdktools>

#pragma semicolon 1
#pragma newdecls required

ConVar gc_RandomVIP, gc_VIPFlag, gc_MinPlayers, gc_MOD_TAG, gc_MoneyForKill;
ConVar gc_Website;
ConVar gc_RandomVipType;
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", "1", "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_Website = CreateConVar("sm_vip_random_website_name", "StudioADEPT.net", "Fraza wymagana w nicku.");
	gc_MOD_TAG = CreateConVar("sm_vip_random_tag", "ADEPT", "TAG pokazywany na czacie");
	gc_MoneyForKill = CreateConVar("sm_vip_money_for_kill", "340", "Ilość pieniędzy za killa z frazą w nicku");
	gc_RandomVipType = CreateConVar("sm_vip_type", "1", "1 - Losowanie Vip'a dla wszystkich 2 - Losowanie Vip'a dla osób z frazą w nicku.");
	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);
	HookEvent("player_death", Event_PlayerDeath);
	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;
}

public Action Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
	int attacker = GetClientOfUserId(event.GetInt("attacker"));
	if(!IsValidClient(attacker)) return Plugin_Continue;

	int money = GetEntProp(attacker, Prop_Send, "m_iAccount");
	
	if(!HaveFlag(attacker) && HaveWebSite(attacker))
		SetEntProp(attacker, Prop_Send, "m_iAccount", money + gc_MoneyForKill.IntValue);
		
	return Plugin_Continue;
}

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_RandomVipType.IntValue == 1)
			{
				if(!HaveFlag(i))
					pula_graczy.Push(i);
			}
			else if(gc_RandomVipType.IntValue == 2)
			{
				if(!HaveFlag(i) && HaveWebSite(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;
}

 

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ok dopiero teraz miałem czas przetestować.

 

Dodawanie kasy z DNS w nicku działa ideolo.

Losowanie VIP'a działa tylko raz przy pierwszym uruchomieniu serwera ze skryptem. Potem trzeba usunąć skrypt i plik cfg - i wgrać znowu - żeby znowu zadziałał. Nie ważne czy jest ustawione 1(losowane dla wszystkich) albo 2(losowane dla tych z dns). Po prostu nie ma losowania

 

@Yamakashi

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