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

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
Появляется проблема, (если стоят плагины типа round end sound) :

Последнему игроку убившего врага не воспроизводиться музыка. как будто "play %s" все перебивает...
В следующий раз указывай ссылку на плагин с которым возникает конфликт.

Есть еще такой вариант:
PHP:
#include <sourcemod>
#include <sdktools_sound>

#define g_sSound "*buttons/bell1.wav"
//static const char g_sSound[] = "*buttons/bell1.wav";

public void OnPluginStart()
{
    HookEvent("player_death", view_as<EventHook>(PlayerDeath), EventHookMode_Pre);
}

public void OnMapStart()
{
    PrecacheSound(g_sSound, true);
}

void PlayerDeath(Event hEvent)
{
    EmitSoundToClient(GetClientOfUserId(hEvent.GetInt("attacker")), g_sSound);
    //ClientCommand(GetClientOfUserId(hEvent.GetInt("attacker")), "play %s", g_sSound);
}
 

Truyn

King of clowns
Сообщения
1,591
Реакции
749
какая игра, какая версия SM? Должно блочить на SM1.7+
+jump это и есть обычный прыжок (сам посмотри в клиенте по пути ...\cfg\config.cfg), разве что можно сделать кулдаун на использование команды, чтобы не срабатывало чаще, чем пропишешь в конфигеможно: просто удаляешь проверку buttons & IN_LEFT
Это сложно реализовать?
--- Добавлено позже ---
какая игра, какая версия SM? Должно блочить на SM1.7+
и не блочит на sm 1.9 csgo.
--- Добавлено позже ---
можно: просто удаляешь проверку buttons & IN_LEFT
Было бы хорошо так.Может как то по другому можно заблочить,ибо ваш вариант не работает :(
 

Туник

Участник
Сообщения
1,281
Реакции
263
Может кто поправить модуль [VIP] Mute Gag Silence чтобы была возможность не только отключать чат и микро, но и включать!
 

alexmy

Участник
Сообщения
284
Реакции
13
Всем привет. Вообщем вопрос такой. Когда игрока опьяняет перс. Остаётся один HP у игрока. Что может быть срабатывать что игроку дается больше 65000 здоровье. Без костыля что я пометил вот такое бывает. в Чём проблема?
PHP:
public Action Toxin_Timer(Handle timer, any target)
{
    if(IsClientInGame(target) && GetClientTeam(target) == 2)
    {
        if(--Toxin[target] >= 0)
        {
            if(GetEntProp(target, Prop_Send, "m_iHealth") <= 1) //Костыль
            {
                SetEntProp(target, Prop_Send, "m_isIncapacitated", 1);
                SetEntProp(target, Prop_Send, "m_iHealth", 300);
            }
            SetEntityHealth(target, GetClientHealth(target) - 1); //Наказание кол-во ХП
            EmitSoundToAll(SOUND_RABIES, target);
            PrintHintText(target, "Жди, Синька скоро выйдет =): %d", Toxin[target]);
            
            float pos[3];
            GetClientAbsOrigin(target, pos);
            
            float angs[3];
            GetClientEyeAngles(target, angs);
            angs[2] = ToxinAngle[GetRandomInt(0,100) % 20];
            TeleportEntity(target, pos, angs, NULL_VECTOR);
            int clients[2];
            clients[0] = target;
            Handle message = StartMessageEx(g_FadeUserMsgId, clients, 1);
            BfWriteShort(message, 255);
            BfWriteShort(message, 255);
            BfWriteShort(message, (0x0002));
            BfWriteByte(message, GetRandomInt(0,255));
            BfWriteByte(message, GetRandomInt(0,255));
            BfWriteByte(message, GetRandomInt(0,255));
            BfWriteByte(message, 128);
            EndMessage();
            return Plugin_Continue;
        }
        
        float pos[3];
        GetClientAbsOrigin(target, pos);
        float angs[3];
        GetClientEyeAngles(target, angs);
        
        angs[2] = 0.0;
        TeleportEntity(target, pos, angs, NULL_VECTOR);
        int clients[2];
        clients[0] = target;
        Handle message = StartMessageEx(g_FadeUserMsgId, clients, 1);
        BfWriteShort(message, 1536);
        BfWriteShort(message, 1536);
        BfWriteShort(message, (0x0001 | 0x0010));
        BfWriteByte(message, 0);
        BfWriteByte(message, 0);
        BfWriteByte(message, 0);
        BfWriteByte(message, 0);
        EndMessage();
        PrintHintText(target, "Ну всё, Синька прошла :D");
    }
    return Plugin_Stop;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Это сложно реализовать?
не слишком
Может как то по другому можно заблочить, ибо ваш вариант не работает :(
ну раз не работает, то только телепортацией, как выше предлагали
А вообще могу набросать тестовый плагин, который в панельке (справа или в центре) или в худе будет показывать какие кнопки нажаты. Может просто кнопки не отлавливаются, т.к. метод блокировки для других клавиш в одном из моих плагинов уже несколько лет работает.
--- Добавлено позже ---
@arbigon, глянул код плагина по ссылке: плагин позволяет как выключать, так и включать чат и/или микрофон
--- Добавлено позже ---
@alexmy, вот в этом: SetEntityHealth(target, GetClientHealth(target) - 1);
Нужно делать проверку на количество ХП
Кстати SetEntProp(target, Prop_Send, "m_iHealth", 300); - это тоже, что и SetEntityHealth(target, 300);
PHP:
            if(GetEntProp(target, Prop_Send, "m_iHealth") <= 1) //Костыль
            {
                SetEntProp(target, Prop_Send, "m_isIncapacitated", 1);
                SetEntProp(target, Prop_Send, "m_iHealth", 300);
            }
            SetEntityHealth(target, GetClientHealth(target) - 1); //Наказание кол-во ХП
поменяй на
PHP:
            int hp = GetClientHealth(target)
            if(hp > 1) SetEntityHealth(target, hp--); //Наказание кол-во ХП
 
Последнее редактирование:

Туник

Участник
Сообщения
1,281
Реакции
263
@Grey83, подскажи как тогда правильно прописать чтобы всё заработало
"MuteGagSilence"
{
"ru" "Чат/Микрофон"
"en" "Mute/Gag/Silence"
"fi" "Chatti/Mikrofoni"
}

Если прописать так то только отключить всё, либо чат,или только микро,или все сразу, включить такого нет.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@arbigon, а при чём тут название раздела в випке?
В плагине менюшка так выглядит:
PHP:
    SetMenuTitle(g_hTypeMenu, "Тип:\n \n");
    AddMenuItem(g_hTypeMenu, "1", "Чат");
    AddMenuItem(g_hTypeMenu, "2", "Микрофон");
    AddMenuItem(g_hTypeMenu, "3", "Чат и Микрофон");
 

Туник

Участник
Сообщения
1,281
Реакции
263
@Grey83, да но в этих разделах во всех только отключить чат-микро-или все сразу, я же говорю что в пунктах нет возможности включать!
 

smxnet

Участник
Сообщения
80
Реакции
4
Привет ребят помогите найти плагин или кто может написать небольшой плагин суть в том что бы в конце раунда забирать awp у игроков удалять что бы в следующем раунде awp у игрока не было и он покупал его заново что бы не оставалась с предыдущего раунда заранее благодарю (cs source steam)
 

acrobite

Участник
Сообщения
182
Реакции
33
Прошу чутка фиксануть код.
При коннекте игрока ИНОГДА анонс захода игрока дублируется.
При дисконнекте игрока у меня не указывается причина дисконнекта, попросил бы и "reason" удалить с кода)
Заранее спасибо=)
PHP:
#include <csgo_colors>

#pragma semicolon 1
#pragma newdecls required

public Plugin myinfo =
{
    name = "Simple Connect Info",
    author = "Tonki_Ton",
    description = "",
    version = "1.1",
    url = ""
}

public void OnPluginStart()
{
    HookEvent("player_disconnect", Event_PlayerDisconnect, EventHookMode_Pre);

    LoadTranslations("simple_connect_info.phrases");
}

public void OnClientPostAdminCheck(int client)
{
    CGOPrintToChatAll("%t", "ClientConnected", client);
}

public Action Event_PlayerDisconnect(Event event, const char[] name, bool dontBroadcast)
{
    event.BroadcastDisabled = true;
    char reason[256];
  
    event.GetString("reason", reason, 256);

    CGOPrintToChatAll("%t",  "ClientDisconnected", GetClientOfUserId(event.GetInt("userid")), reason);
}
 

x330122

Участник
Сообщения
357
Реакции
152
Есть у кого-нибудь SendProxy Manager для TF2 ? Текущий форк от SlidyBat на гите выдает ошибку:
C-подобный:
16] <FAILED> file "sendproxy.ext.2.tf2.so": extensions/sendproxy.ext.2.tf2.so: undefined symbol: _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv
 

kilroy

:clown:
Сообщения
1,065
Реакции
606
Есть у кого-нибудь SendProxy Manager для TF2 ? Текущий форк от SlidyBat на гите выдает ошибку:
C-подобный:
16] <FAILED> file "sendproxy.ext.2.tf2.so": extensions/sendproxy.ext.2.tf2.so: undefined symbol: _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv
Из этого репозитория пробовал? TheByKotik/sendproxy тут вроде как с геймдатой, а у SlidyBat её нету.
 

alexmy

Участник
Сообщения
284
Реакции
13
Всем привет, может кто мне объяснить почему так:
PHP:
public Action Event_PlayerActivate(Event event, const char [] name, bool dontBroadcast)
{
    newMapActivatedPlayers++; //Так считает
    int client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (client && !IsFakeClient(client))
    {
        int team = GetClientTeam(client);
        if (GetHumanInGamePlayerCount() > 4 && newMapActivatedPlayers > 4 && (team != TEAM_SURVIVORS || team == TEAM_SPECTATORS || team == 0))
        {
            SpawnFakeClient();
            CreateTimer(10.0, Timer_PutClientToSurvivorTeam, GetClientSerial(client), TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
        }
    }
    return Plugin_Continue;
}
а вот так не считает:
PHP:
public Action Event_PlayerActivate(Event event, const char [] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (client && !IsFakeClient(client))
    {
        newMapActivatedPlayers++; //Так нет
        int team = GetClientTeam(client);
        if (GetHumanInGamePlayerCount() > 4 && newMapActivatedPlayers > 4 && (team != TEAM_SURVIVORS || team == TEAM_SPECTATORS || team == 0))
        {
            SpawnFakeClient();
            CreateTimer(10.0, Timer_PutClientToSurvivorTeam, GetClientSerial(client), TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
        }
    }
    return Plugin_Continue;
}
Если важно события использую player_activate
 

x330122

Участник
Сообщения
357
Реакции
152
Всем привет, может кто мне объяснить почему так:
PHP:
public Action Event_PlayerActivate(Event event, const char [] name, bool dontBroadcast)
{
    newMapActivatedPlayers++; //Так считает
    int client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (client && !IsFakeClient(client))
    {
        int team = GetClientTeam(client);
        if (GetHumanInGamePlayerCount() > 4 && newMapActivatedPlayers > 4 && (team != TEAM_SURVIVORS || team == TEAM_SPECTATORS || team == 0))
        {
            SpawnFakeClient();
            CreateTimer(10.0, Timer_PutClientToSurvivorTeam, GetClientSerial(client), TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
        }
    }
    return Plugin_Continue;
}
а вот так не считает:
PHP:
public Action Event_PlayerActivate(Event event, const char [] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (client && !IsFakeClient(client))
    {
        newMapActivatedPlayers++; //Так нет
        int team = GetClientTeam(client);
        if (GetHumanInGamePlayerCount() > 4 && newMapActivatedPlayers > 4 && (team != TEAM_SURVIVORS || team == TEAM_SPECTATORS || team == 0))
        {
            SpawnFakeClient();
            CreateTimer(10.0, Timer_PutClientToSurvivorTeam, GetClientSerial(client), TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
        }
    }
    return Plugin_Continue;
}
Если важно события использую player_activate
newMapActivatedPlayers += 1; ?
 

Rezder

Участник
Сообщения
153
Реакции
8
Ребят, помогите пожалуйста, в программировании не силён, кто сможет фиксануть эту ошибку?
L 05/01/2019 - 15:27:32: [SM] Exception reported: Invalid timer handle 1b7e0339 (error 3)
L 05/01/2019 - 15:27:32: [SM] Blaming: C4Bounce.smx
L 05/01/2019 - 15:27:32: [SM] Call stack trace:
L 05/01/2019 - 15:27:32: [SM] [0] KillTimer
L 05/01/2019 - 15:27:32: [SM] [1] Line 95, E:\^\C4Bounce.sp::BounceC4
L 05/01/2019 - 15:27:32: [SM] [2] Line 77, E:\^\C4Bounce.sp::EVENT_BombDropped
Понял только что связанно с убийством таймера, после того как он уже был убит и не вернулся в исходное состояние, но как такое намутить хз)
После смены раунда происходит.
--- Добавлено позже ---
@R1KO Поможешь?)
 

Вложения

  • C4Bounce.sp
    3.7 КБ · Просмотры: 7
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
newMapActivatedPlayers += 1;
эта запись эквивалентна вот этой: newMapActivatedPlayers++;
--- Добавлено позже ---
(team != TEAM_SURVIVORS || team == TEAM_SPECTATORS || team == 0)
: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;
}
 
Последнее редактирование:

skywalker

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