Написание плагинов

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Rezder, это потому что
PHP:
if(timer != INVALID_HANDLE)

        KillTimer(timer);
Либо убивай через delete, либо приравенивай после убийства к null.
И в таймере перед return Plugin_Stop; тоже приравнивай хэндл таймера к null.
 

Rezder

Участник
Сообщения
153
Реакции
8
@Rezder, это потому что
PHP:
if(timer != INVALID_HANDLE)

        KillTimer(timer);
Либо убивай через delete, либо приравенивай после убийства к null.
И в таймере перед return Plugin_Stop; тоже приравнивай хэндл таймера к null.
А можешь написать именно как будет выглядеть?)
Позязя
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Rezder, вот так:
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_functions>
#include <sdktools_gamerules>
#include <sdktools_tempents>
#include <sdktools_tempents_stocks>

static const int	RED[]			= {255, 0, 0, 200};
static const char	MODEL_CHICKEN[]	= "models/chicken/chicken.mdl";

Handle timer;
bool bombCanBounce, bHooked;
int g_iBeamSprite;
float fMin, fMax, fCD;

public Plugin myinfo =
{
	name		= "[CS:GO] Bouncing Bombs",
	author		= "Arkarr (rewritten by Grey83)",
	description	= "Make the C4 bounce everywhere !",
	version		= "1.0.1",
	url			= "https://steamcommunity.com/groups/grey83ds"
};

public void OnPluginStart()
{
	EngineVersion g_Game = GetEngineVersion();
	if(g_Game != Engine_CSGO && g_Game != Engine_CSS)
		SetFailState("This plugin is for CSGO/CSS only.");

	ConVar CVar;
	(CVar = CreateConVar("sm_c4bounce_mini_power", "300.0", "Set the minimal power that the bomb can bounce.", _, true)).AddChangeHook(CVarChanged_Min);
	fMin = CVar.FloatValue;

	(CVar = CreateConVar("sm_c4bounce_maxi_power", "360.0", "Set the maximal power that the bomb can bounce.", _, true)).AddChangeHook(CVarChanged_Max);
	fMax = CVar.FloatValue;

	(CVar = CreateConVar("sm_c4bounce_sec_between_bounces", "0.9", "Ammount of seconds before each bounce. 0 = disable bounces", _, true)).AddChangeHook(CVarChanged_CD);
	fCD = CVar.FloatValue;
}

public void CVarChanged_Min(ConVar CVar, const char[] oldValue, const char[] newValue)
{
	fMin = CVar.FloatValue;
}

public void CVarChanged_Max(ConVar CVar, const char[] oldValue, const char[] newValue)
{
	fMax = CVar.FloatValue;
}

public void CVarChanged_CD(ConVar CVar, const char[] oldValue, const char[] newValue)
{
	fCD = CVar.FloatValue;
}

public void OnMapStart()
{
	if(GameRules_GetProp("m_bMapHasBombTarget"))
	{
		g_iBeamSprite = PrecacheModel("materials/sprites/laserbeam.vmt");
		PrecacheModel(MODEL_CHICKEN);
		if(bHooked) return;

		HookEvent("bomb_dropped", EVENT_BombDropped, EventHookMode_PostNoCopy);
		HookEvent("bomb_pickup", EVENT_BombPickUp, EventHookMode_PostNoCopy);
		HookEvent("round_end", EVENT_BombPickUp, EventHookMode_PostNoCopy);
		bHooked = true;
	}
	else if(bHooked)
	{
		UnhookEvent("bomb_dropped", EVENT_BombDropped, EventHookMode_PostNoCopy);
		UnhookEvent("bomb_pickup", EVENT_BombPickUp, EventHookMode_PostNoCopy);
		UnhookEvent("round_end", EVENT_BombPickUp, EventHookMode_PostNoCopy);
		bHooked = false;
	}
}

public void OnClientDisconnect(int client)
{
	for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i))
	{
		bombCanBounce = true;
		return;
	}
	bombCanBounce = false;
}

public void EVENT_BombPickUp(Handle event, const char[] name, bool dontBroadcast)
{
	bombCanBounce = false;
}

public void EVENT_BombDropped(Handle event, const char[] name, bool dontBroadcast)
{
	if(!FloatCompare(fCD, 0.0)) return;

	int iC4 = -1;
	while((iC4 = FindEntityByClassname(iC4, "weapon_c4")) != INVALID_ENT_REFERENCE)
		if(IsValidEntity(iC4))
		{
			bombCanBounce = true;
			SetEntityModel(iC4, MODEL_CHICKEN);
			BounceC4(iC4);
			break;
		}
}

stock void BounceC4(int iC4, int iClient = 0)
{
	if(timer) delete timer;
	if(bombCanBounce)
		timer = CreateTimer(fCD, TMR_Bounce, iC4, TIMER_REPEAT);
}

public Action TMR_Bounce(Handle tmr, any iC4)
{
	if(!IsValidEntity(iC4) || !bombCanBounce)
	{
		timer = null;
		return Plugin_Stop;
	}

	static float angles[3];
	angles[0] = GetRandomFloat(-180.0, 180.0);
	angles[1] = GetRandomFloat(-180.0, 180.0);
	angles[2] = GetRandomFloat(fMin, fMax);
	TeleportEntity(iC4, NULL_VECTOR, NULL_VECTOR, angles);
	TE_SetupBeamFollow(iC4, g_iBeamSprite, 0, 0.8, 1.0, 1.0, 1, RED);
	TE_SendToAll();
	return Plugin_Continue;
}
 

Вложения

  • C4Bounce.sp
    3.7 КБ · Просмотры: 1

alexmy

Участник
Сообщения
284
Реакции
13
эта запись эквивалентна вот этой: newMapActivatedPlayers++;
--- Добавлено позже ---
:blink:
--- Добавлено позже ---
а почему не используешь его userid?
--- Добавлено позже ---
@alexmy, для дебага попробуй вот так:
PHP:
public Action Event_PlayerActivate(Event event, const char [] name, bool dontBroadcast)
{
    int client = GetEventInt(event, "userid");
    PrintToServer("\nPlayerActivate:\nUId: %i", client);
    client = GetClientOfUserId(client);
    PrintToServer("Client: %N (%i)", client, client);
    if(client && !IsFakeClient(client))
    {
        newMapActivatedPlayers++; //Так нет
        PrintToServer("The player is not a fake\nActivatedPlayers = %i\n", newMapActivatedPlayers);
        if(GetHumanInGamePlayerCount() > 4 && newMapActivatedPlayers > 4 && GetClientTeam(client) != TEAM_SURVIVORS)
        {
            SpawnFakeClient();
            CreateTimer(10.0, Timer_PutClientToSurvivorTeam, GetClientSerial(client), TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
        }
    }
    else PrintToServer("The player is a fake\n");
    return Plugin_Continue;
}
Увы и так не считает.=( Отладку всю выводит кроме PrintToServer("The player is not a fake\nActivatedPlayers = %i\n", newMapActivatedPlayers);
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@alexmy, хз, что у тебя не так
У меня на КСС выдаёт это:
C-подобный:
Client "Grey83" connected (192.168.1.101:27014).
Server waking up from hibernation

PlayerActivate:
UId: 2
Client: Grey83 (1)
The player is not a fake
ActivatedPlayers = 1

Game will not start until both teams have players.
Dropped Grey83 from server (Disconnect by user.)
Server is hibernating
Client "Grey83" connected (192.168.1.101:27014).
Server waking up from hibernation

PlayerActivate:
UId: 3
Client: Grey83 (1)
The player is not a fake
ActivatedPlayers = 2

Game will not start until both teams have players.
Dropped Grey83 from server (Disconnect by user.)
Server is hibernating
Client "Grey83" connected (192.168.1.101:27014).
Server waking up from hibernation

PlayerActivate:
UId: 4
Client: Grey83 (1)
The player is not a fake
ActivatedPlayers = 3
 

Вложения

  • test.sp
    967 байт · Просмотры: 5

alexmy

Участник
Сообщения
284
Реакции
13
@alexmy, хз, что у тебя не так
У меня на КСС выдаёт это:
C-подобный:
Client "Grey83" connected (192.168.1.101:27014).
Server waking up from hibernation

PlayerActivate:
UId: 2
Client: Grey83 (1)
The player is not a fake
ActivatedPlayers = 1

Game will not start until both teams have players.
Dropped Grey83 from server (Disconnect by user.)
Server is hibernating
Client "Grey83" connected (192.168.1.101:27014).
Server waking up from hibernation

PlayerActivate:
UId: 3
Client: Grey83 (1)
The player is not a fake
ActivatedPlayers = 2

Game will not start until both teams have players.
Dropped Grey83 from server (Disconnect by user.)
Server is hibernating
Client "Grey83" connected (192.168.1.101:27014).
Server waking up from hibernation

PlayerActivate:
UId: 4
Client: Grey83 (1)
The player is not a fake
ActivatedPlayers = 3
С телефона не могу, дома буду попробую твой код с отладкай.
 

Mr.Black

Участник
Сообщения
145
Реакции
61
Привет. Нужен плагин, который сможет отловить смену сторон (когда проходит половина от всех раундов или половина от всего времени на одну карту). Пробовал делать по раундам и по времени, но если есть другие варианты, был бы крайне признателен за код.
 

Туник

Участник
Сообщения
1,281
Реакции
263
Может кто помочь сделать убийство с ножа + сопровождение звуком из этого плагина, звук идет только тому кто убил, и кого убили! Данный плагин сопровождает звук убийства с носкопа!

C-подобный:
#pragma semicolon 1
#include <emitsoundany>
#include <csgo_colors>

#pragma newdecls required // let's go new syntax!

public Plugin myinfo =
{
    name = "[CS:GO] NoScope sound Reload",
    author = "Hejter & Murenich",
    version = "0.4",
    url = "HLmod.ru"
};

public void OnPluginStart()
{
    HookEvent("player_death", Event_PlayerDeath);
}

public void OnMapStart()
{
    AddFileToDownloadsTable("sound/misc/kruto.mp3");
    PrecacheSoundAny("misc/kruto.mp3");
}

public void Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    int attacker = GetClientOfUserId(event.GetInt("attacker"));
 
    if (client && IsClientInGame(client))
    {
        if (attacker != 0 && IsClientInGame(attacker))
        {
            if (attacker != client)
            {
                char weapon[32];
                GetEventString(event, "weapon", weapon, sizeof(weapon));
                if (!GetEntProp(attacker, Prop_Send, "m_bIsScoped") && (strcmp(weapon, "awp", false) == 0 || strcmp(weapon, "ssg08", false) == 0))
                {
                    CGOPrintToChatAll("{RED}[Arbigon] {GREEN}%N {DEFAULT}убил без прицела {LIME}%N", attacker, client);
                    EmitSoundToClientAny(attacker, "misc/kruto.mp3"); // Проигрывает звук убившему.
                    EmitSoundToClientAny(client, "misc/kruto.mp3"); // Проигрывает звук убившему.
                }
            }
        }
    }
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@arbigon, тебе нужно заменить эту проверку: if (!GetEntProp(attacker, Prop_Send, "m_bIsScoped") && (strcmp(weapon, "awp", false) == 0 || strcmp(weapon, "ssg08", false) == 0))
Красное - убрать, зелёное - заменить
 

Mensi1337

Участник
Сообщения
242
Реакции
16
Доброе утро, возможно ли отследить no zoom в cs:s v34?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Mensi1337, понятия не имею: у меня нет клиента и сервера cs:s v34 (но думаю, что это вполне возможно)
Попробуй плагины которые оповещают об убийствах с no zoom: они обычно проверяют угол обзора (FOV) у убийцы в момент убийства.
 

skywalker

Участник
Сообщения
1,153
Реакции
263
Кто нибудь знает путь к новым скинам из запретной зоны?
 

Mensi1337

Участник
Сообщения
242
Реакции
16
@Mensi1337, понятия не имею: у меня нет клиента и сервера cs:s v34 (но думаю, что это вполне возможно)
Попробуй плагины которые оповещают об убийствах с no zoom: они обычно проверяют угол обзора (FOV) у убийцы в момент убийства.
Вот в теме плагин есть: оповещает что убил в чате - nozoom, но тема rip и плагин не сделали для v34
 

Mensi1337

Участник
Сообщения
242
Реакции
16
Поставил его - в консоль пишет что игра не подходит "Native "SetFailState" reported: Plugin supports CSS and CS:GO only.", убрал проверку на игру - заработал, но показывает сообщение при любом убийстве, то есть с дигла убью - показывает
 

Вложения

  • noscope_gotcha.sp
    1.8 КБ · Просмотры: 3

Kir|26

Участник
Сообщения
27
Реакции
4
Всем привет! Ребят, необходимы два плагина, один где-то был на просторах интернета, но никак не могу найти (selfmute вроде) только как на скрине. Другой блокирует такие команды как: sm plugins, ping, sm_help, с выводом твоего сообщения типа: Команда запрещена и т.п. Не знаю может они приват. Буду очень признателен! css v34, sm-1.6.3
 

Вложения

  • de_dust20002.jpg
    de_dust20002.jpg
    19.2 КБ · Просмотры: 52

kilroy

:clown:
Сообщения
1,065
Реакции
606
Всем привет! Ребят, необходимы два плагина, один где-то был на просторах интернета, но никак не могу найти (selfmute вроде) только как на скрине. Другой блокирует такие команды как: sm plugins, ping, sm_help, с выводом твоего сообщения типа: Команда запрещена и т.п. Не знаю может они приват. Буду очень признателен! css v34, sm-1.6.3
sm_help можешь отключить убрав плагин adminhelp.smx .
ping и status - AntiSpam [Status and Ping] CS:S v.34 (Status_Protect)
sm plugins - слышал, что @Danyas продавал блокировку этой команды под 34ку, попробуй с ним связаться.
SelfMute - возможно то, что нужно AlliedModders - View Single Post - [ANY] SelfMute [v1.0, 2013-05-11]
 

Kir|26

Участник
Сообщения
27
Реакции
4
sm_help можешь отключить убрав плагин adminhelp.smx .
ping и status - AntiSpam [Status and Ping] CS:S v.34 (Status_Protect)
sm plugins - слышал, что @Danyas продавал блокировку этой команды под 34ку, попробуй с ним связаться.
SelfMute - возможно то, что нужно AlliedModders - View Single Post - [ANY] SelfMute [v1.0, 2013-05-11]
Спасибо за помощь! Вот selfmute я находил обычный, этот вроде переделанный. Там одна команда всего !vm, надо где-то ещё поискать
 
Сверху Снизу