Skocz do zawartości
szogun

[Rozwiązane] Blokowanie broni do x graczy

Rekomendowane odpowiedzi

Siemka, potrzebuje wsparca z racji że nie mam punktu zaczepienia jak sobie dodać do owego kodu blokowanie x broni do czasu gdy na serwerze nie zostanie przekroczona x graczy

 

#include <sourcemod>
#include <cstrike>

#pragma semicolon 1
#pragma newdecls required

int g_iAwp[3];
int g_iAug[3];
int g_iSsg[3];
public void OnPluginStart()
{
	HookEvent("round_start", Event_RoundStart);
}

public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
	g_iAwp[0] = 0;
	g_iAug[0] = 0;
	g_iSsg[0] = 0;
}

public Action CS_OnBuyCommand(int client, const char[] weapon)
{
	if (StrEqual(weapon, "awp"))
	{
		if (GetClientTeam(client) == CS_TEAM_CT)
		{
			if (IsPlayerVIP(client))
			{
				if (g_iAwp[0] >= 2)
				{
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01AWP");
					return Plugin_Handled;
				}
			}
			else
			{
				if (g_iAwp[0] >= 1) {
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01AWP");
					return Plugin_Handled;
				}
			}
			g_iAwp[0]++;
		}
	}

	if (StrEqual(weapon, "awp"))
	{
		if (GetClientTeam(client) == CS_TEAM_T)
		{
			if (IsPlayerVIP(client))
			{
				if (g_iAwp[0] >= 2)
				{
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01AWP");
					return Plugin_Handled;
				}
			}
			else
			{
				if (g_iAwp[0] >= 1) {
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01AWP");
					return Plugin_Handled;
				}
			}
			g_iAwp[0]++;
		}
	}

	if (StrEqual(weapon, "aug"))
	{
		if (GetClientTeam(client) == CS_TEAM_CT)
		{
			if (IsPlayerVIP(client))
			{
				if (g_iAug[0] >= 2)
				{
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01AUG'A");
					return Plugin_Handled;
				}
			}
			else
			{
				if (g_iAug[0] >= 1) {
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01AUG'A");
					return Plugin_Handled;
				}
			}
			g_iAug[0]++;
		}
	}
	
	if (StrEqual(weapon, "sg556"))
	{
		if (GetClientTeam(client) == CS_TEAM_T)
		{
			if (IsPlayerVIP(client))
			{
				if (g_iSsg[0] >= 2)
				{
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01SSG");
					return Plugin_Handled;
				}
			}
			else
			{
				if (g_iSsg[0] >= 1) {
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01SSG");
					return Plugin_Handled;
				}
			}
			g_iSsg[0]++;
		}
	}

	if (StrEqual(weapon, "scar20"))
	{
		PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02Kupowanie tej broni jest zablokowane!");
		return Plugin_Handled;
	}
	
	if (StrEqual(weapon, "g3sg1"))
	{
		
		PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02Kupowanie tej broni jest zablokowane!");
		return Plugin_Handled;
	}
	return Plugin_Continue;
}

stock bool IsPlayerVIP(int client)
{
	if (GetUserFlagBits(client) & ADMFLAG_RESERVATION)return true;
	if (GetUserFlagBits(client) & ADMFLAG_ROOT)return true;
	
	return false;
}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
1 hour ago, szogun said:

Siemka, potrzebuje wsparca z racji że nie mam punktu zaczepienia jak sobie dodać do owego kodu blokowanie x broni do czasu gdy na serwerze nie zostanie przekroczona x graczy

 


#include <sourcemod>
#include <cstrike>

#pragma semicolon 1
#pragma newdecls required

int g_iAwp[3];
int g_iAug[3];
int g_iSsg[3];
public void OnPluginStart()
{
	HookEvent("round_start", Event_RoundStart);
}

public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
	g_iAwp[0] = 0;
	g_iAug[0] = 0;
	g_iSsg[0] = 0;
}

public Action CS_OnBuyCommand(int client, const char[] weapon)
{
	if (StrEqual(weapon, "awp"))
	{
		if (GetClientTeam(client) == CS_TEAM_CT)
		{
			if (IsPlayerVIP(client))
			{
				if (g_iAwp[0] >= 2)
				{
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01AWP");
					return Plugin_Handled;
				}
			}
			else
			{
				if (g_iAwp[0] >= 1) {
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01AWP");
					return Plugin_Handled;
				}
			}
			g_iAwp[0]++;
		}
	}

	if (StrEqual(weapon, "awp"))
	{
		if (GetClientTeam(client) == CS_TEAM_T)
		{
			if (IsPlayerVIP(client))
			{
				if (g_iAwp[0] >= 2)
				{
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01AWP");
					return Plugin_Handled;
				}
			}
			else
			{
				if (g_iAwp[0] >= 1) {
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01AWP");
					return Plugin_Handled;
				}
			}
			g_iAwp[0]++;
		}
	}

	if (StrEqual(weapon, "aug"))
	{
		if (GetClientTeam(client) == CS_TEAM_CT)
		{
			if (IsPlayerVIP(client))
			{
				if (g_iAug[0] >= 2)
				{
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01AUG'A");
					return Plugin_Handled;
				}
			}
			else
			{
				if (g_iAug[0] >= 1) {
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01AUG'A");
					return Plugin_Handled;
				}
			}
			g_iAug[0]++;
		}
	}
	
	if (StrEqual(weapon, "sg556"))
	{
		if (GetClientTeam(client) == CS_TEAM_T)
		{
			if (IsPlayerVIP(client))
			{
				if (g_iSsg[0] >= 2)
				{
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01SSG");
					return Plugin_Handled;
				}
			}
			else
			{
				if (g_iSsg[0] >= 1) {
					PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02W tej rundzie zostały osiągniety limit kupna \x01SSG");
					return Plugin_Handled;
				}
			}
			g_iSsg[0]++;
		}
	}

	if (StrEqual(weapon, "scar20"))
	{
		PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02Kupowanie tej broni jest zablokowane!");
		return Plugin_Handled;
	}
	
	if (StrEqual(weapon, "g3sg1"))
	{
		
		PrintToChat(client, "\x01[\x04RESTRICT\x01] \x02Kupowanie tej broni jest zablokowane!");
		return Plugin_Handled;
	}
	return Plugin_Continue;
}

stock bool IsPlayerVIP(int client)
{
	if (GetUserFlagBits(client) & ADMFLAG_RESERVATION)return true;
	if (GetUserFlagBits(client) & ADMFLAG_ROOT)return true;
	
	return false;
}

 

 

int GetClientCount(bool inGameOnly)

int GetClientCount(true)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Podesłałem mu na PW skróconą wersję, kompletnie nie testowałem, a nie wrzucę tu bo nie jestem jej pewien - wróciłem na szybciocha do domu i nawet butów nie zdjąłem 😄 

Jak stestuje i będzie śmigało poprawnie, no to wkleję tutaj kod .sp 🙂

Udostępnij tę odpowiedź


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

 


#include <sourcemod>
#include <cstrike>

#pragma semicolon 1
#pragma newdecls required

#define TAG "\x01[\x04RESTRICT\x01]\x02 "
char RestrictedWeapons[][] = {
    "awp", "aug", "sg556"
};
char definitelyBlockedWeapons[][] = {
    "scar20", "g3sg1"
};
int RestrictedWeaponsLimit[] = {
    2, 2, 2
};
int RestrictedWeaponsPlayerLimit[] = {
    10, 10, 10
};

int g_iWeapons[sizeof(RestrictedWeapons)] = 0;

public void OnPluginStart()
{
	HookEvent("round_start", Event_RoundStart);
	RegConsoleCmd("sm_checkwelim", CheckMate);
}
public Action CheckMate(int client, int args) {
    for(int i = 0; i < sizeof(RestrictedWeapons); i++)
        PrintToChat(client, "%s, %i ilosc, %i limit, %i limit graczy", RestrictedWeapons[i], g_iWeapons[i], RestrictedWeaponsLimit[i], RestrictedWeaponsPlayerLimit[i]);
}
public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
    for(int i = 0; i < sizeof(g_iWeapons); i++) {
        g_iWeapons[i] = 0;
    }
}

public Action CS_OnBuyCommand(int client, const char[] weapon)
{
    int playersCount = GetPlayers();
    for(int i = 0; i < sizeof(RestrictedWeapons); i++) {
        if(StrContains(weapon, RestrictedWeapons[i]) != -1) {
            if(playersCount < RestrictedWeaponsPlayerLimit[i] && !IsPlayerVIP(client)) {
                PrintToChat(client, "%s Jest za mało osób, żeby móc kupić %s.", TAG, RestrictedWeapons[i]);
                return Plugin_Handled;
            }
            
            if(g_iWeapons[i] >= RestrictedWeaponsLimit[i]) {
                PrintToChat(client, "%s W tej rundzie zostały osiągnięty limit kupna \x01%s", TAG, RestrictedWeapons[i]);
                return Plugin_Handled;
            }
            else {
                if(g_iWeapons[i] == 1) {
                    if(!IsPlayerVIP(client)) {
                        PrintToChat(client, "%s W tej rundzie zostały osiągnięty limit kupna \x01%s", TAG, RestrictedWeapons[i]);
                        return Plugin_Handled;
                    }
                }
            }
            g_iWeapons[i] ++;
            break;
        }
        else {
            for(int k = 0; k < sizeof(definitelyBlockedWeapons); k++) {
                if(StrContains(weapon, definitelyBlockedWeapons[k]) != -1) {
                    PrintToChat(client, "%s Kupowanie tej broni jest zablokowane!", TAG);
                }
            }
        }
    }
    return Plugin_Continue;
}

int GetPlayers() {
    int iPlayersCount = 0;
    for(int i = 1; i < MaxClients; i++) {
        if(IsClientInGame(i))
            iPlayersCount ++;
    }
    return iPlayersCount;
}

stock bool IsPlayerVIP(int client)
{
	if (GetUserFlagBits(client) & ADMFLAG_RESERVATION)return true;
	if (GetUserFlagBits(client) & ADMFLAG_ROOT)return true;
	
	return false;
}

 

 

 

VIP(flaga a)

- VIP'a nie dotyczy restrykcja OD ilu graczy można kupić daną broń

- VIP może kupić broń, gdy jest więcej niż 1 kupiona, max z tablicy (nie robiłem konfiguracji bo to dedykowany plug w zasadzie)

 

No i tyle by było chyba 😛 

Edytowane przez SUPER TIMOR

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
2 hours ago, SUPER TIMOR said:
 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Hide contents

 



#include <sourcemod>
#include <cstrike>

#pragma semicolon 1
#pragma newdecls required

#define TAG "\x01[\x04RESTRICT\x01]\x02 "
char RestrictedWeapons[][] = {
    "awp", "aug", "sg556"
};
char definitelyBlockedWeapons[][] = {
    "scar20", "g3sg1"
};
int RestrictedWeaponsLimit[] = {
    2, 2, 2
};
int RestrictedWeaponsPlayerLimit[] = {
    10, 10, 10
};

int g_iWeapons[sizeof(RestrictedWeapons)] = 0;

public void OnPluginStart()
{
	HookEvent("round_start", Event_RoundStart);
	RegConsoleCmd("sm_checkwelim", CheckMate);
}
public Action CheckMate(int client, int args) {
    for(int i = 0; i < sizeof(RestrictedWeapons); i++)
        PrintToChat(client, "%s, %i ilosc, %i limit, %i limit graczy", RestrictedWeapons[i], g_iWeapons[i], RestrictedWeaponsLimit[i], RestrictedWeaponsPlayerLimit[i]);
}
public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
    for(int i = 0; i < sizeof(g_iWeapons); i++) {
        g_iWeapons[i] = 0;
    }
}

public Action CS_OnBuyCommand(int client, const char[] weapon)
{
    int playersCount = GetPlayers();
    for(int i = 0; i < sizeof(RestrictedWeapons); i++) {
        if(StrContains(weapon, RestrictedWeapons[i]) != -1) {
            if(playersCount < RestrictedWeaponsPlayerLimit[i] && !IsPlayerVIP(client)) {
                PrintToChat(client, "%s Jest za mało osób, żeby móc kupić %s.", TAG, RestrictedWeapons[i]);
                return Plugin_Handled;
            }
            
            if(g_iWeapons[i] >= RestrictedWeaponsLimit[i]) {
                PrintToChat(client, "%s W tej rundzie zostały osiągnięty limit kupna \x01%s", TAG, RestrictedWeapons[i]);
                return Plugin_Handled;
            }
            else {
                if(g_iWeapons[i] == 1) {
                    if(!IsPlayerVIP(client)) {
                        PrintToChat(client, "%s W tej rundzie zostały osiągnięty limit kupna \x01%s", TAG, RestrictedWeapons[i]);
                        return Plugin_Handled;
                    }
                }
            }
            g_iWeapons[i] ++;
            break;
        }
        else {
            for(int k = 0; k < sizeof(definitelyBlockedWeapons); k++) {
                if(StrContains(weapon, definitelyBlockedWeapons[k]) != -1) {
                    PrintToChat(client, "%s Kupowanie tej broni jest zablokowane!", TAG);
                }
            }
        }
    }
    return Plugin_Continue;
}

int GetPlayers() {
    int iPlayersCount = 0;
    for(int i = 1; i < MaxClients; i++) {
        if(IsClientInGame(i))
            iPlayersCount ++;
    }
    return iPlayersCount;
}

stock bool IsPlayerVIP(int client)
{
	if (GetUserFlagBits(client) & ADMFLAG_RESERVATION)return true;
	if (GetUserFlagBits(client) & ADMFLAG_ROOT)return true;
	
	return false;
}

 

 

 

VIP(flaga a)

- VIP'a nie dotyczy restrykcja OD ilu graczy można kupić daną broń

- VIP może kupić broń, gdy jest więcej niż 1 kupiona, max z tablicy (nie robiłem konfiguracji bo to dedykowany plug w zasadzie)

 

No i tyle by było chyba 😛 

Ogólnie więcej pętli się  nie dało? XD 

Zliczasz graczy pętlą a nawet ja w poście dałem jak pobrać graczyy xD 

Udostępnij tę odpowiedź


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

O proszę, nie znałem tej funkcji 😛 pomyślałem zatem, że to customowa sugestia, takie nakierowanie 😛 rzeczywiście tę jedną pętlę można by zamienić na tę funkcję, ale w sumie to nic poza tym 😛 no, chyba że chcesz ifować w kółko, jak w pierwszym poście 😛 

 

 

@daffyy poza tym, tam jest 1 pętla w pętli, poza tym to chyba nie jest dużo? 😮 

 

nowy kod (XD)

 

Spoiler

#include <sourcemod>
#include <cstrike>

#pragma semicolon 1
#pragma newdecls required

#define TAG "\x01[\x04RESTRICT\x01]\x02 "
char RestrictedWeapons[][] = {
    "awp", "aug", "sg556"
};
char definitelyBlockedWeapons[][] = {
    "scar20", "g3sg1"
};
int RestrictedWeaponsLimit[] = {
    2, 2, 2
};
int RestrictedWeaponsPlayerLimit[] = {
    10, 10, 10
};

int g_iWeapons[sizeof(RestrictedWeapons)] = 0;

public void OnPluginStart()
{
	HookEvent("round_start", Event_RoundStart);
	RegConsoleCmd("sm_checkwelim", CheckMate);
}
public Action CheckMate(int client, int args) {
    for(int i = 0; i < sizeof(RestrictedWeapons); i++)
        PrintToChat(client, "%s, %i ilosc, %i limit, %i limit graczy", RestrictedWeapons[i], g_iWeapons[i], RestrictedWeaponsLimit[i], RestrictedWeaponsPlayerLimit[i]);
}
public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
    for(int i = 0; i < sizeof(g_iWeapons); i++) {
        g_iWeapons[i] = 0;
    }
}

public Action CS_OnBuyCommand(int client, const char[] weapon)
{
    int playersCount = GetClientCount(true);
    for(int i = 0; i < sizeof(RestrictedWeapons); i++) {
        if(StrContains(weapon, RestrictedWeapons[i]) != -1) {
            if(playersCount < RestrictedWeaponsPlayerLimit[i] && !IsPlayerVIP(client)) {
                PrintToChat(client, "%s Jest za mało osób, żeby móc kupić %s.", TAG, RestrictedWeapons[i]);
                return Plugin_Handled;
            }
            
            if(g_iWeapons[i] >= RestrictedWeaponsLimit[i]) {
                PrintToChat(client, "%s W tej rundzie zostały osiągnięty limit kupna \x01%s", TAG, RestrictedWeapons[i]);
                return Plugin_Handled;
            }
            else {
                if(g_iWeapons[i] == 1) {
                    if(!IsPlayerVIP(client)) {
                        PrintToChat(client, "%s W tej rundzie zostały osiągnięty limit kupna \x01%s", TAG, RestrictedWeapons[i]);
                        return Plugin_Handled;
                    }
                }
            }
            g_iWeapons[i] ++;
            break;
        }
        else {
            for(int k = 0; k < sizeof(definitelyBlockedWeapons); k++) {
                if(StrContains(weapon, definitelyBlockedWeapons[k]) != -1) {
                    PrintToChat(client, "%s Kupowanie tej broni jest zablokowane!", TAG);
                }
            }
        }
    }
    return Plugin_Continue;
}

stock bool IsPlayerVIP(int client)
{
	if (GetUserFlagBits(client) & ADMFLAG_RESERVATION)return true;
	if (GetUserFlagBits(client) & ADMFLAG_ROOT)return true;
	
	return false;
}

 

 

Edytowane przez SUPER TIMOR

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
W dniu 7.03.2020 o 21:48, SUPER TIMOR napisał:

O proszę, nie znałem tej funkcji 😛 pomyślałem zatem, że to customowa sugestia, takie nakierowanie 😛 rzeczywiście tę jedną pętlę można by zamienić na tę funkcję, ale w sumie to nic poza tym 😛 no, chyba że chcesz ifować w kółko, jak w pierwszym poście 😛 

 

 

@daffyy poza tym, tam jest 1 pętla w pętli, poza tym to chyba nie jest dużo? 😮 

 

nowy kod (XD)

 

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


#include <sourcemod>
#include <cstrike>

#pragma semicolon 1
#pragma newdecls required

#define TAG "\x01[\x04RESTRICT\x01]\x02 "
char RestrictedWeapons[][] = {
    "awp", "aug", "sg556"
};
char definitelyBlockedWeapons[][] = {
    "scar20", "g3sg1"
};
int RestrictedWeaponsLimit[] = {
    2, 2, 2
};
int RestrictedWeaponsPlayerLimit[] = {
    10, 10, 10
};

int g_iWeapons[sizeof(RestrictedWeapons)] = 0;

public void OnPluginStart()
{
	HookEvent("round_start", Event_RoundStart);
	RegConsoleCmd("sm_checkwelim", CheckMate);
}
public Action CheckMate(int client, int args) {
    for(int i = 0; i < sizeof(RestrictedWeapons); i++)
        PrintToChat(client, "%s, %i ilosc, %i limit, %i limit graczy", RestrictedWeapons[i], g_iWeapons[i], RestrictedWeaponsLimit[i], RestrictedWeaponsPlayerLimit[i]);
}
public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
    for(int i = 0; i < sizeof(g_iWeapons); i++) {
        g_iWeapons[i] = 0;
    }
}

public Action CS_OnBuyCommand(int client, const char[] weapon)
{
    int playersCount = GetClientCount(true);
    for(int i = 0; i < sizeof(RestrictedWeapons); i++) {
        if(StrContains(weapon, RestrictedWeapons[i]) != -1) {
            if(playersCount < RestrictedWeaponsPlayerLimit[i] && !IsPlayerVIP(client)) {
                PrintToChat(client, "%s Jest za mało osób, żeby móc kupić %s.", TAG, RestrictedWeapons[i]);
                return Plugin_Handled;
            }
            
            if(g_iWeapons[i] >= RestrictedWeaponsLimit[i]) {
                PrintToChat(client, "%s W tej rundzie zostały osiągnięty limit kupna \x01%s", TAG, RestrictedWeapons[i]);
                return Plugin_Handled;
            }
            else {
                if(g_iWeapons[i] == 1) {
                    if(!IsPlayerVIP(client)) {
                        PrintToChat(client, "%s W tej rundzie zostały osiągnięty limit kupna \x01%s", TAG, RestrictedWeapons[i]);
                        return Plugin_Handled;
                    }
                }
            }
            g_iWeapons[i] ++;
            break;
        }
        else {
            for(int k = 0; k < sizeof(definitelyBlockedWeapons); k++) {
                if(StrContains(weapon, definitelyBlockedWeapons[k]) != -1) {
                    PrintToChat(client, "%s Kupowanie tej broni jest zablokowane!", TAG);
                }
            }
        }
    }
    return Plugin_Continue;
}

stock bool IsPlayerVIP(int client)
{
	if (GetUserFlagBits(client) & ADMFLAG_RESERVATION)return true;
	if (GetUserFlagBits(client) & ADMFLAG_ROOT)return true;
	
	return false;
}

 

 

Warunków więcej niż włosów u mnie na głowie, zapychacie pamięć zbędnie. Przy bardziej rozbudowanych projektach dostaniecie kopa na czoło od testerów 😄

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@dev1 jeśli mógłbym Cię prosić, żebyś wyraził się konkretniej - co gdzie można by czym zastąpić, albo napisał to po prostu po swojemu. Byłbym bardzo wdzięczny, chciałbym się czegoś nauczyć. 😛 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@laki123h świetnie że umiesz pisać, ale jeszcze jakby to zdanie miało jakikolwiek sens to byłoby prawie super.

Czego konkretnie, AWPki? W ogóle?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Chodzi mi o to czy dalo by rade zrobic zeby zwykyl gracz nie mogl jeszcze podnosic awpy 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ta :

Spoiler

#include <sourcemod>
#include <cstrike>
#include <sdkhooks>

#pragma semicolon 1
#pragma newdecls required

#define TAG "\x01[\x04RESTRICT\x01]\x02 "
char RestrictedWeapons[][] = {
    "awp", "aug", "sg556"
};
char definitelyBlockedWeapons[][] = {
    "scar20", "g3sg1"
};
int RestrictedWeaponsLimit[] = {
    2, 2, 2
};
int RestrictedWeaponsPlayerLimit[] = {
    10, 10, 10
};

int g_iWeapons[sizeof(RestrictedWeapons)] = 0;

public void OnPluginStart()
{
	HookEvent("round_start", Event_RoundStart);
	RegConsoleCmd("sm_checkwelim", CheckMate);
}
public Action CheckMate(int client, int args) {
    for(int i = 0; i < sizeof(RestrictedWeapons); i++)
        PrintToChat(client, "%s, %i ilosc, %i limit, %i limit graczy", RestrictedWeapons[i], g_iWeapons[i], RestrictedWeaponsLimit[i], RestrictedWeaponsPlayerLimit[i]);
}
public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
    for(int i = 0; i < sizeof(g_iWeapons); i++) {
        g_iWeapons[i] = 0;
    }
}
public void OnClientPutInServer(int client)
{
    SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);
}
public void OnClientDisconnect(int client)
{
    SDKUnhook(client, SDKHook_WeaponCanUse, WeaponCanUse);
}

public Action WeaponCanUse(int client, int weapon)
{
    if(!IsClientInGame(client) || !IsPlayerAlive(client))
        return Plugin_Continue;

    char weapons[32];
    GetEdictClassname(weapon, weapons, sizeof(weapons));
    
    if(StrEqual(weapons, "weapon_awp") && IsPlayerVIP(client))
        return Plugin_Continue;

    return Plugin_Handled;
}
public Action CS_OnBuyCommand(int client, const char[] weapon)
{
    int playersCount = GetClientCount(true);
    for(int i = 0; i < sizeof(RestrictedWeapons); i++) {
        if(StrContains(weapon, RestrictedWeapons[i]) != -1) {
            if(playersCount < RestrictedWeaponsPlayerLimit[i] && !IsPlayerVIP(client)) {
                PrintToChat(client, "%s Jest za mało osób, żeby móc kupić %s.", TAG, RestrictedWeapons[i]);
                return Plugin_Handled;
            }
            
            if(g_iWeapons[i] >= RestrictedWeaponsLimit[i]) {
                PrintToChat(client, "%s W tej rundzie zostały osiągnięty limit kupna \x01%s", TAG, RestrictedWeapons[i]);
                return Plugin_Handled;
            }
            else {
                if(g_iWeapons[i] == 1) {
                    if(!IsPlayerVIP(client)) {
                        PrintToChat(client, "%s W tej rundzie zostały osiągnięty limit kupna \x01%s", TAG, RestrictedWeapons[i]);
                        return Plugin_Handled;
                    }
                }
            }
            g_iWeapons[i] ++;
            break;
        }
        else {
            for(int k = 0; k < sizeof(definitelyBlockedWeapons); k++) {
                if(StrContains(weapon, definitelyBlockedWeapons[k]) != -1) {
                    PrintToChat(client, "%s Kupowanie tej broni jest zablokowane!", TAG);
                }
            }
        }
    }
    return Plugin_Continue;
}

stock bool IsPlayerVIP(int client)
{
	if (GetUserFlagBits(client) & ADMFLAG_RESERVATION)return true;
	if (GetUserFlagBits(client) & ADMFLAG_ROOT)return true;
	
	return false;
}

 

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W sumie to prawda X-D

 

Chodzi Ci o to, że limit na AWP obowiązuje tylko VIP'ów, a gracze nie mogą jej kompletnie kupić? Ani podnieść z ziemii? Opisz dokładnie czego oczekujesz w prostych słowach jak najszerzej.. ._.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Chodzi mi o to ze vipy moga brac awp podnosic i kupic a gracz nie moze totalnie ani podniesc ani kupic

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Spoiler

#include <sourcemod>
#include <cstrike>
#include <sdkhooks>

#pragma semicolon 1
#pragma newdecls required

#define TAG "\x01[\x04RESTRICT\x01]\x02 "
char RestrictedWeapons[][] = {
    "awp", "aug", "sg556"
};
char definitelyBlockedWeapons[][] = {
    "scar20", "g3sg1"
};
int RestrictedWeaponsLimit[] = {
    2, 2, 2
};
int RestrictedWeaponsPlayerLimit[] = {
    10, 10, 10
};

int g_iWeapons[sizeof(RestrictedWeapons)] = 0;

public void OnPluginStart()
{
	HookEvent("round_start", Event_RoundStart);
	RegConsoleCmd("sm_checkwelim", CheckMate);
}
public Action CheckMate(int client, int args) {
    for(int i = 0; i < sizeof(RestrictedWeapons); i++)
        PrintToChat(client, "%s, %i ilosc, %i limit, %i limit graczy", RestrictedWeapons[i], g_iWeapons[i], RestrictedWeaponsLimit[i], RestrictedWeaponsPlayerLimit[i]);
}
public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
    for(int i = 0; i < sizeof(g_iWeapons); i++) {
        g_iWeapons[i] = 0;
    }
}
public void OnClientPutInServer(int client)
{
    SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);
}
public void OnClientDisconnect(int client)
{
    SDKUnhook(client, SDKHook_WeaponCanUse, WeaponCanUse);
}

public Action WeaponCanUse(int client, int weapon)
{
    if(!IsClientInGame(client) || !IsPlayerAlive(client))
        return Plugin_Continue;

    char weapons[32];
    GetEdictClassname(weapon, weapons, sizeof(weapons));
    
    if(StrEqual(weapons, "weapon_awp") && !IsPlayerVIP(client))
        return Plugin_Handled;

    return Plugin_Continue;
}
public Action CS_OnBuyCommand(int client, const char[] weapon)
{
    if(!IsPlayerVIP(client) && StrEqual(weapon, "weapon_awp")) {
        PrintToChat(client, "%s Niestety, ta broń jest dla Ciebie nieosiągalna. Zapytaj laki123h dlaczego!", TAG);
        return Plugin_Handled;
    }
    int playersCount = GetClientCount(true);
    for(int i = 0; i < sizeof(RestrictedWeapons); i++) {
        if(StrContains(weapon, RestrictedWeapons[i]) != -1) {
            if(playersCount < RestrictedWeaponsPlayerLimit[i] && !IsPlayerVIP(client)) {
                PrintToChat(client, "%s Jest za mało osób, żeby móc kupić %s.", TAG, RestrictedWeapons[i]);
                return Plugin_Handled;
            }
            
            if(g_iWeapons[i] >= RestrictedWeaponsLimit[i]) {
                PrintToChat(client, "%s W tej rundzie zostały osiągnięty limit kupna \x01%s", TAG, RestrictedWeapons[i]);
                return Plugin_Handled;
            }
            else {
                if(g_iWeapons[i] == 1) {
                    if(!IsPlayerVIP(client)) {
                        PrintToChat(client, "%s W tej rundzie zostały osiągnięty limit kupna \x01%s", TAG, RestrictedWeapons[i]);
                        return Plugin_Handled;
                    }
                }
            }
            g_iWeapons[i] ++;
            break;
        }
        else {
            for(int k = 0; k < sizeof(definitelyBlockedWeapons); k++) {
                if(StrContains(weapon, definitelyBlockedWeapons[k]) != -1) {
                    PrintToChat(client, "%s Kupowanie tej broni jest zablokowane!", TAG);
                }
            }
        }
    }
    return Plugin_Continue;
}

stock bool IsPlayerVIP(int client)
{
	if (GetUserFlagBits(client) & ADMFLAG_RESERVATION)return true;
	if (GetUserFlagBits(client) & ADMFLAG_ROOT)return true;
	
	return false;
}

 

 

 

Daj znaka czy działa. Trochę od buta to napisałem bez głębszego namysłu, ale to próba pomocy za darmo podczas ćwiczeń także uszanuj xD

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

×
×
  • Dodaj nową pozycję...