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

A

Altaj

Возможно событие срабатывает до того, как игрок заходит на сервер.
Лучше хукать заход игрока и проигрывать звук. Аля Welcome Sound.
Welcome Sound проигрывает звук при заходе игрока на сервер, а мне нужно, чтобы проигрывался в первом раунде после разминки. Это разные вещи.
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
Welcome Sound проигрывает звук при заходе игрока на сервер, а мне нужно, чтобы проигрывался в первом раунде после разминки. Это разные вещи.
Ну так ты излагай свои мысли правильно.

В первом раунде новой карты должен проигрываться звук.
Про разминку речи не шло, а это кардинально меняет дело.
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
Шло или не шло. Что с разминкой, что без нее плагин не работает.
Так попробуй:

PHP:
#include <sdktools_stringtables>
#include <sdktools_sound>

#pragma semicolon 1
#pragma newdecls required


char g_sPath[PLATFORM_MAX_PATH];

public void OnPluginStart()
{
    ConVar CVAR;
    CVAR = CreateConVar("music", "music/example.mp3", "Choose the path of the music");
    CVAR.GetString(g_sPath, sizeof(g_sPath));
    Format(g_sPath, sizeof(g_sPath), "*%s", g_sPath);
    
    AutoExecConfig(true, "mapstart_music");
    HookUserMessage(GetUserMessageId("WarmupHasEnded"), OnWarmUpEnd, false);
}

public void OnMapStart()
{
    char dl_path[PLATFORM_MAX_PATH];
    FormatEx(dl_path, sizeof(dl_path), "sound/%s", g_sPath[1]);
    AddFileToDownloadsTable(dl_path);
    PrecacheSound(g_sPath[1]);
}

public Action OnWarmUpEnd(UserMsg iMsgID, Protobuf hMsg, const int[] iPlayers, int iPlayersNum, bool bReliable, bool bInit)
{
    EmitSomething(g_sPath);
}

void EmitSomething(const char[] sPath)    // Не спрашивайте зачем
{
    EmitSoundToAll(sPath);
}
 

SHKIPPERBEAST2

Участник
Сообщения
119
Реакции
17
Здравствуйте, хочу сделать плагин, который бы проигрывал звук всем, если кто-то сгорел на молотове или зажигательной гранате. Подскажите, как отловить это событие, пожалуйста =)

Игра CS:GO
 
Последнее редактирование:
A

Altaj

Так попробуй:

PHP:
#include <sdktools_stringtables>
#include <sdktools_sound>

#pragma semicolon 1
#pragma newdecls required


char g_sPath[PLATFORM_MAX_PATH];

public void OnPluginStart()
{
    ConVar CVAR;
    CVAR = CreateConVar("music", "music/example.mp3", "Choose the path of the music");
    CVAR.GetString(g_sPath, sizeof(g_sPath));
    Format(g_sPath, sizeof(g_sPath), "*%s", g_sPath);
   
    AutoExecConfig(true, "mapstart_music");
    HookUserMessage(GetUserMessageId("WarmupHasEnded"), OnWarmUpEnd, false);
}

public void OnMapStart()
{
    char dl_path[PLATFORM_MAX_PATH];
    FormatEx(dl_path, sizeof(dl_path), "sound/%s", g_sPath[1]);
    AddFileToDownloadsTable(dl_path);
    PrecacheSound(g_sPath[1]);
}

public Action OnWarmUpEnd(UserMsg iMsgID, Protobuf hMsg, const int[] iPlayers, int iPlayersNum, bool bReliable, bool bInit)
{
    EmitSomething(g_sPath);
}

void EmitSomething(const char[] sPath)    // Не спрашивайте зачем
{
    EmitSoundToAll(sPath);
}
Не работает. Ладно, бессмысленно все это. Спасибо за попытки.
 

SHKIPPERBEAST2

Участник
Сообщения
119
Реакции
17
Здравствуйте, хочу сделать плагин, который бы проигрывал звук всем, если кто-то сгорел на молотове или зажигательной гранате. Подскажите, как отловить это событие, пожалуйста =)

Игра CS:GO


Вот такой плагин есть, чтобы при убийстве с ножа был звук, как переделать его под молотов?
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools>

public Plugin myinfo =
{
    name = "Knife Kill Sound",
    author = "xxxxx",
    version = "1.0",
    url = ""
};

static const char g_szPath[PLATFORM_MAX_PATH] = "sound/knife/kaban.mp3";
static const char g_szPlay[PLATFORM_MAX_PATH] = "*knife/kaban.mp3";

public void OnMapStart()
{
    AddFileToDownloadsTable(g_szPath);
    PrecacheSound(g_szPlay, true);
}

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

public Action Event_PlayerDeath(Event hEvent, const char[] sEvName, bool bDonBroadcast)
{
    char szWeapon[34];
    hEvent.GetString("weapon", szWeapon, sizeof(szWeapon));
    if(!StrContains(szWeapon, "knife"))
    {
        EmitSoundToAll(g_szPlay);
    }
}
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@SHKIPPERBEAST2,
PHP:
#pragma semicolon 1
#pragma newdecls required 

#include <sdktools>

public Plugin myinfo = {
    name = "Knife Kill Sound",
    author = "xxxxx",
    version = "1.0",
    url = ""
};

static const char g_szPath[PLATFORM_MAX_PATH] = "sound/knife/kaban.mp3";

static const char g_szPlay[PLATFORM_MAX_PATH] = "*knife/kaban.mp3";

public void OnMapStart() { 
    AddFileToDownloadsTable(g_szPath);
    PrecacheSound(g_szPlay, true);
}

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

public Action Event_PlayerDeath(Event hEvent, const char[] sEvName, bool bDonBroadcast) {
    char szWeapon[34];
    hEvent.GetString("weapon", szWeapon, sizeof(szWeapon));

    if(StrContains(szWeapon, "molotov") != -1 || StrContains(szWeapon, "incgrenade") != -1) {
        EmitSoundToAll(g_szPlay);
    }
}
 

watti

Участник
Сообщения
2
Реакции
2
Привет! Я хочу уметь точно просчитывать траекторию гранаты по заданным стартовым координатам. В Интернете есть плагин, написанный на основе утекших исходников Source. В CS:S он дает 100% точность, однако в CS:GO я обнаружил случай при котором возникает погрешность. Необходимо это исправить.

Более подробное описание:
Скриншот // предсказываемая траектория отмечена шариком на конце
Погрешность возникает при столкновении с землей в случае когда угол падения больше чем 30 градусов. При этом угол меньше 30 градусов работает ОК - погрешность либо отсутствует, либо незаметна.

Кусочек кода обрабатывающий отскок
 

WTF#MLG

Эффект кузи!
Сообщения
365
Реакции
142
1)Сделай пожалуйста плагин на изменение !motd то бишь !rules !donate и тебе в худ выписывается там донат из группы вк или правила из группы вк так же
2)Сделай сверху справа худ гл администратор и надпись чтоб можно было настроить и менялась она чтоб .
------------------
Надеюсь сделаешь) Жду ответ.
--- Добавлено позже ---
Или подскажите плагины эти.
 

Dreizehnt

Доминик
Сообщения
1,160
Реакции
798
@Grey83, наткнулся на правку Show Damage от Dr.Api, возможно есть ещё какая-то версия? 1.2.0 урон не показывает совсем. В исходнике работу видно, думаю с таймером проблема решилась т.к. лог чистый по этому поводу, но вот HUD`а нет.
 

SHKIPPERBEAST2

Участник
Сообщения
119
Реакции
17
@SHKIPPERBEAST2,
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools>

public Plugin myinfo = {
    name = "Knife Kill Sound",
    author = "xxxxx",
    version = "1.0",
    url = ""
};

static const char g_szPath[PLATFORM_MAX_PATH] = "sound/knife/kaban.mp3";

static const char g_szPlay[PLATFORM_MAX_PATH] = "*knife/kaban.mp3";

public void OnMapStart() {
    AddFileToDownloadsTable(g_szPath);
    PrecacheSound(g_szPlay, true);
}

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

public Action Event_PlayerDeath(Event hEvent, const char[] sEvName, bool bDonBroadcast) {
    char szWeapon[34];
    hEvent.GetString("weapon", szWeapon, sizeof(szWeapon));

    if(StrContains(szWeapon, "molotov") != -1 || StrContains(szWeapon, "incgrenade") != -1) {
        EmitSoundToAll(g_szPlay);
    }
}

Сейчас затестил, не работает :(
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Dreizehnt, пока не занимался. Может где-то в логикк проверок ошибка.
Был бы сервак на котором можно потестить, то делал бы быстрее. А без теста толку мало в переписывании.
 

Felton

Участник
Сообщения
799
Реакции
59
C-подобный:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools_entoutput>
#include <sdktools_entinput>

public Plugin:myinfo =
{
    name    = "Open Door Time",
    author    = "wS / Schmidt",
    version    = "1.0",
    url        = "http://world-source.ru/"
};

new Handle:open_door_time;
new Handle:g_AddOutput_Array;

public OnPluginStart()
{
    open_door_time = CreateConVar("open_door_time", "1.0", "Через сколько секунд закрываются двери после открытия", _, true, 0.0);
    g_AddOutput_Array = CreateArray(1);

    new const String:doors[][] =
    {
        "func_door",
        "func_door_rotating",
        "momentary_door",
        "prop_door_rotating"
    };

    new doors_count = sizeof(doors);
    for (new i = 0; i < doors_count; i++)
    {
        HookEntityOutput(doors[i], "OnFullyOpen", EntityOutput:Event_DoorOpen);
    }

    HookEvent("round_start", round_start, EventHookMode_PostNoCopy);
}

public round_start(Handle:event, const String:name[], bool:silent)
{
    ClearArray(g_AddOutput_Array);
}

public Event_DoorOpen(const String:output[], door, activator, Float:delay)
{
    if (FindValueInArray(g_AddOutput_Array, door) == -1)
    {
        decl String:Info[65];
        new Float:fSec = GetConVarFloat(open_door_time);

        Format(Info, 65, "OnUser3 !self:Unlock::%f:0",    fSec);
        SetVariantString(Info); AcceptEntityInput(door, "AddOutput");

        Format(Info, 65, "OnUser3 !self:Close::%f:0",    fSec);
        SetVariantString(Info); AcceptEntityInput(door, "AddOutput");

        PushArrayCell(g_AddOutput_Array, door);
    }

    AcceptEntityInput(door, "Lock");
    AcceptEntityInput(door, "FireUser3");
}
Поправьте плагин пожалуйста.Взял сдесь но коменты не доступны
[CS: Source] - Open Door Time
Выставил время 60 секунд.Двери были открыты как и положена 60 секунд.Потом двери закрылись и я не смог их открыть тоже 60 секунд.Можно поправить плагин?Что бы после того как двери закрылись я мог тут же их опять открыть а не ждать это время.Сервер Counter-Strike Source v.34
Бывает оч. надо когда ведёш залогов.
Автор говорит надо удалить 61 строчку.Я в этом не разбераюсь.Покажите на примере что удалить?
Заранее спасибо!
 
Последнее редактирование:

Dreizehnt

Доминик
Сообщения
1,160
Реакции
798
@Dreizehnt, пока не занимался. Может где-то в логикк проверок ошибка.
Был бы сервак на котором можно потестить, то делал бы быстрее. А без теста толку мало в переписывании.
Серверы могу предоставить, если будет время и желание дописать :)
 

Felton

Участник
Сообщения
799
Реакции
59
@R1KO
Спасибо за совет но так вообще разници нет что с плагином что без него поставил 60 секунд а двери всё равно раньше закрвыаются.
Да ну его этот плагин.......Даже если он и заработл бы нормально это же нарушение игравого процесса кто знает как поведёт себя потом сервер?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Tony, у Феникса же есть в его WS поддержка Випки Рико.
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
Сверху Снизу