Skocz do zawartości
Limitowany

[Rozwiązane] Problem spam czatu

Rekomendowane odpowiedzi

Witam znalazłem na dysku taki stary kodzik:

 

Spoiler
#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>

#pragma semicolon 1
#pragma newdecls required

#define NAME "Bonus za nick"
#define AUTHOR "Marshall"
#define DESCRIPTION "Kevlar co rundę za dodanie nazwy sieci do nicku"
#define VERSION "1.0"
#define WEBSITE "https://steamcommunity.com/id/marshallmsl/"

ConVar gcv_Reklama;
char g_sReklama[128];

public Plugin myinfo =  {
	name = NAME, 
	author = AUTHOR, 
	description = DESCRIPTION, 
	version = VERSION, 
	url = WEBSITE, 
};

public void OnPluginStart() 
{
	
	HookEvent("player_spawn", msl_eSpawn);
	HookEvent("round_start", msl_eStart);
	gcv_Reklama = CreateConVar("sm_nazwa_strony", "Csowicze.pl");
	GetConVarString(gcv_Reklama, g_sReklama, sizeof(g_sReklama));
	HookConVarChange(gcv_Reklama, ZmianaCvar);
}

public int ZmianaCvar(Handle convar, const char[] oldValue, const char[] newValue) 
{
	if (convar == gcv_Reklama)
	{
		strcopy(g_sReklama, sizeof(g_sReklama), newValue);
	}
}

public Action msl_eStart(Handle event, const char[] name, bool dontBroadcast) 
{
	char sName[128];
	for (int i = 1; i <= MaxClients; i++)
	if (IsClientInGame(i) && GetClientTeam(i) > 1) 
	{
		GetClientName(i, sName, 128);
		if (StrContains(sName, g_sReklama, false) > -1)
		{
			if ((GetTeamScore(CS_TEAM_T) + GetTeamScore(CS_TEAM_CT)) == 0)SetEntProp(i, Prop_Send, "m_ArmorValue", 100, 1);
			if ((GetTeamScore(CS_TEAM_T) + GetTeamScore(CS_TEAM_CT)) > 0)SetEntProp(i, Prop_Send, "m_ArmorValue", 100, 1);			
		}
	}
}

public Action msl_eSpawn(Handle event, const char[] name, bool dontBroadcast) 
{
	char sName[128];
	for (int i = 1; i <= MaxClients; i++)
	if (IsClientInGame(i) && GetClientTeam(i) > 1) 
	{
		GetClientName(i, sName, 128);
		if (StrContains(sName, g_sReklama, false) > -1) 
		{
			PrintToChat(i, " \x02❃ \x09BONUS ZA NICK \x02❃ \x01Otrzymałeś darmowy Kevlar za dodanie  \x02%s \x01nicku steam!", g_sReklama);
		}
		else PrintToChat(i, " \x02❃ \x09BONUS ZA NICK \x02❃ \x01Dodaj do nicku na steam  \x02%s \x01aby otrzymać darmowy kevlar co rundę!", g_sReklama); 
	}
} 

 

 

Domyślnie plugin działa tak, że po dodaniu nazwy sieci do niccku dostajemy darmowy kevlar.

 

Znalazłem kod, stwierdziłem, że go skompiluje i wsadze na serwer.

 

Plugin działa ale nie do konca poprawnie czyli dodaje kevlar za daną fraze w nicku ale na początku każdej rundy zawsze pokazywała się informacja, że dostaaliśmy darmowy kevlar za dodanie do nicku nazwy sieci i tyle. 

 

Teraz sytuacja wygląda tak, że na początku każdej rundy zamiast jednorazowego wpisu na czacie zostaje on zaspanowyany tym zwrotem chyba z 30 razy.

 

Dałby radę ktoś poprawić kodzik tak aby z powrotem na początku rundy informacja o kevlarze pokazywała się raz a nie spamowała cały say?

 

Wydaje mi się że błąd tkwi gdzies tutaj lecz nie potrafię go dokładniej zlokalizować: 

 

Spoiler

 

public Action msl_eSpawn(Handle event, const char[] name, bool dontBroadcast) 
{
    char sName[128];
    for (int i = 1; i <= MaxClients; i++)
    if (IsClientInGame(i) && GetClientTeam(i) > 1) 
    {
        GetClientName(i, sName, 128);
        if (StrContains(sName, g_sReklama, false) > -1) 
        {
            PrintToChat(i, " \x02❃ \x09BONUS ZA NICK \x02❃ \x01Otrzymałeś darmowy Kevlar za dodanie  \x02%s \x01nicku steam!", g_sReklama);
        }
        else PrintToChat(i, " \x02❃ \x09BONUS ZA NICK \x02❃ \x01Dodaj do nicku na steam  \x02%s \x01aby otrzymać darmowy kevlar co rundę!", g_sReklama); 
    }

 

Dzieki za pomoc

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość

Jasne. Dobry wycinek kodu wstawiłeś. W tym momencie przy spawnie puszczasz pętlę w dość niezrozumiały sposób. Wypadałoby to zrobić tak:

 

public Action msl_eSpawn(Handle event, const char[] name, bool dontBroadcast) 
{
    int client = GetClientOfUserId(GetEventInt(event, "userid"));  
    if (IsClientInGame(client) && GetClientTeam(client) > 1) 
    {
        char sName[32];
        GetClientName(client, sName, 128);
        if (StrContains(sName, g_sReklama, false) > -1) 
        {
            PrintToChat(client, " \x02❃ \x09BONUS ZA NICK \x02❃ \x01Otrzymałeś darmowy Kevlar za dodanie  \x02%s \x01nicku steam!", g_sReklama);
        }
        else PrintToChat(client, " \x02❃ \x09BONUS ZA NICK \x02❃ \x01Dodaj do nicku na steam  \x02%s \x01aby otrzymać darmowy kevlar co rundę!", g_sReklama); 
    }
} 

Różnica dość widoczna, więc nie będę się na ten temat rozpisywał 😛

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiadomość wygenerowana automatycznie

 

Problem został rozwiązany

Jeżeli się z tym nie zgadzasz, raportuj ten post

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