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

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254
@DENZEL519, ты скомпиленый пытался ставить, что ли?
 

DENZEL519

Работаю через AI !
Сообщения
644
Реакции
494
@Grey83, Да, не компилится sp.
C-подобный:
// C:\Users\OneDrive\╨рсюўшщ ёЄюы\scripting\sm_translator.sp(238) : error 105: cannot find method or property StringMap.ContainsKey
// C:\Users\OneDrive\╨рсюўшщ ёЄюы\scripting\sm_translator.sp(247) : error 105: cannot find method or property StringMap.ContainsKey
 

7pElllHuK

Участник
Сообщения
1,654
Реакции
639
Всем доброе утро, подскажите пожалуйста, как можно реализовать данное событие в 34 ксс:
Игрок %s обезвредил бомбу за 0,00%s сек. до взрыва.
 

KiKiEEKi

🏆 🥇
Сообщения
653
Реакции
518
Всем доброе утро, подскажите пожалуйста, как можно реализовать данное событие в 34 ксс:
Игрок %s обезвредил бомбу за 0,00%s сек. до взрыва.
Доброе Утро
Сообщения автоматически склеены:

Всем доброе утро, подскажите пожалуйста, как можно реализовать данное событие в 34 ксс:
Игрок %s обезвредил бомбу за 0,00%s сек. до взрыва.
Кодом или условием ?
Давай условием:

1) Получаем время взрыва бомбы, храним в переменой
2) Получаем событие когда кт минирует с4 и от него делает далее
3) когда прекращает, также минусуем,
4) И в туда сюда милионер показываем друг, сам понимаешь ты шаришь)
 

7pElllHuK

Участник
Сообщения
1,654
Реакции
639
Доброе Утро
Сообщения автоматически склеены:


Кодом или условием ?
Давай условием:

1) Получаем время взрыва бомбы, храним в переменой
2) Получаем событие когда кт минирует с4 и от него делает далее
3) когда прекращает, также минусуем,
4) И в туда сюда милионер показываем друг, сам понимаешь ты шаришь)
Желательно кодом для наглядности)
 

NeLifeASkazka

Участник
Сообщения
141
Реакции
79
Желательно кодом для наглядности)
code:
float fTime;
public void OnPluginStart(){
    HookEvent("bomb_begindefuse", OnBomb);
    HookEvent("bomb_planted", OnBomb);
}
public void OnBomb(Event event, const char[] name, bool dontBroadcast){
    if(name[5] == 'p'){ //bomb_planted
        fTime = GetGameTime();
    }
    else if(name[5] == 'd'){ // bomb_begindefuse
        if((GetGameTime() - fTime) < 5.0) // показывать время до взрыва когда остается 5 секунд
            PrintToChatAll("%.1f", 35.0 - (GetGameTime() - fTime));
    }
}
 

7pElllHuK

Участник
Сообщения
1,654
Реакции
639
code:
float fTime;
public void OnPluginStart(){
    HookEvent("bomb_begindefuse", OnBomb);
    HookEvent("bomb_planted", OnBomb);
}
public void OnBomb(Event event, const char[] name, bool dontBroadcast){
    if(name[5] == 'p'){ //bomb_planted
        fTime = GetGameTime();
    }
    else if(name[5] == 'd'){ // bomb_begindefuse
        if((GetGameTime() - fTime) < 5.0) // показывать время до взрыва когда остается 5 секунд
            PrintToChatAll("%.1f", 35.0 - (GetGameTime() - fTime));
    }
}
Спасибо большое, сейчас попробую
Сообщения автоматически склеены:

code:
float fTime;
public void OnPluginStart(){
    HookEvent("bomb_begindefuse", OnBomb);
    HookEvent("bomb_planted", OnBomb);
}
public void OnBomb(Event event, const char[] name, bool dontBroadcast){
    if(name[5] == 'p'){ //bomb_planted
        fTime = GetGameTime();
    }
    else if(name[5] == 'd'){ // bomb_begindefuse
        if((GetGameTime() - fTime) < 5.0) // показывать время до взрыва когда остается 5 секунд
            PrintToChatAll("%.1f", 35.0 - (GetGameTime() - fTime));
    }
}
Все работает, спасибо еще раз
 
Последнее редактирование:

7pElllHuK

Участник
Сообщения
1,654
Реакции
639
Добрый вечер, подскажите пожалуйста, как проверить какой у игрока включен режим стрельбы с glock18 или Famas (по 3 пули или по 1), игра ксс34
 

KiKiEEKi

🏆 🥇
Сообщения
653
Реакции
518
Добрый вечер, подскажите пожалуйста, как проверить какой у игрока включен режим стрельбы с glock18 или Famas (по 3 пули или по 1), игра ксс34
GetEntProp(iEnt, Prop_Send, "m_bBurstMode"); - включен ли режим очередью
 

7pElllHuK

Участник
Сообщения
1,654
Реакции
639
Всем доброй ночи, подскажите пожалуйста, почему раунд завершается ДО взрыва бомбы, по идее должен заканчиваться ПОСЛЕ взрыва.
C-подобный:
bool g_bExploded;

public void OnPluginStart()
{
    HookEvent("round_start",     Events_Round,     EventHookMode_PostNoCopy);
    HookEvent("round_end",         Events_Round,   EventHookMode_PostNoCopy);
    HookEvent("bomb_exploded",     Event_Bomb,     EventHookMode_Pre);
}

public void Event_Bomb(Event hEvent, const char[] sName, bool bBdontBroadcast)
{
    switch (sName[5])
    {
        case 'e':
        {
            g_bExploded = true;
            PrintToChatAll("Бомба взорвалась, g_bExploded == %i", g_bExploded);
        }
    }
}

public Action Events_Round(Event hEvent, const char[] sName, bool bBdontBroadcast)
{
    switch (sName[6])
    {
        case 's':
        {
            PrintToChatAll("Раунд начался");
            g_bExploded = false;
        }
        case 'e':  PrintToChatAll("Раунд закончился, g_bExploded == %i", g_bExploded);
    }
}
Если можно как-то установить значение переменно g_bExploded на true перед завершением раунда, то подскажите пожалуйста как это сделать. У меня в голове только вариант с таймером, делать отсчет до взрыва бомбы и за 1 сек до взрыва переключать переменную
 

KiKiEEKi

🏆 🥇
Сообщения
653
Реакции
518
Всем доброй ночи, подскажите пожалуйста, почему раунд завершается ДО взрыва бомбы, по идее должен заканчиваться ПОСЛЕ взрыва.
C-подобный:
bool g_bExploded;

public void OnPluginStart()
{
    HookEvent("round_start",     Events_Round,     EventHookMode_PostNoCopy);
    HookEvent("round_end",         Events_Round,   EventHookMode_PostNoCopy);
    HookEvent("bomb_exploded",     Event_Bomb,     EventHookMode_Pre);
}

public void Event_Bomb(Event hEvent, const char[] sName, bool bBdontBroadcast)
{
    switch (sName[5])
    {
        case 'e':
        {
            g_bExploded = true;
            PrintToChatAll("Бомба взорвалась, g_bExploded == %i", g_bExploded);
        }
    }
}

public Action Events_Round(Event hEvent, const char[] sName, bool bBdontBroadcast)
{
    switch (sName[6])
    {
        case 's':
        {
            PrintToChatAll("Раунд начался");
            g_bExploded = false;
        }
        case 'e':  PrintToChatAll("Раунд закончился, g_bExploded == %i", g_bExploded);
    }
}
Если можно как-то установить значение переменно g_bExploded на true перед завершением раунда, то подскажите пожалуйста как это сделать. У меня в голове только вариант с таймером, делать отсчет до взрыва бомбы и за 1 сек до взрыва переключать переменную

Как вариант можно так

C-подобный:
public Action CS_OnTerminateRound(float& delay, CSRoundEndReason& reason)
{
    switch(reason)
    {
        case CSRoundEnd_TargetBombed: {
            PrintToChatAll("BOMB!");
        }
    }
    return Plugin_Continue;
}
 

7pElllHuK

Участник
Сообщения
1,654
Реакции
639
Как вариант можно так

C-подобный:
public Action CS_OnTerminateRound(float& delay, CSRoundEndReason& reason)
{
    switch(reason)
    {
        case CSRoundEnd_TargetBombed: {
            PrintToChatAll("BOMB!");
        }
    }
    return Plugin_Continue;
}
Спасибо большое, замечательно работает
 

7pElllHuK

Участник
Сообщения
1,654
Реакции
639
Добрый день. Подскажите пожалуйста, почему выдает ошибку:
L 08/28/2024 - 13:58:14: [SM] Exception reported: Invalid WeaponID passed for this game
L 08/28/2024 - 13:58:14: [SM] Blaming: test.smx
L 08/28/2024 - 13:58:14: [SM] Call stack trace:
L 08/28/2024 - 13:58:14: [SM] [0] CS_GetWeaponPrice
L 08/28/2024 - 13:58:14: [SM] [1] Line 14, D:\ONEdRIVE\Desktop\�����������\1.11 scripting\test.sp::CS_OnCSWeaponDrop
C-подобный:
#include <cstrike>

int g_iCountDropWeapon[MAXPLAYERS + 1],
    g_iWeaponDropValue[MAXPLAYERS + 1];

public void OnPluginStart()
{
    HookEvent("round_start", Events_Round, EventHookMode_PostNoCopy);
}

public Action CS_OnCSWeaponDrop(int iClient, int iIndex)
{
    g_iCountDropWeapon[iClient]++;
    int iMoney = CS_GetWeaponPrice(iClient, view_as<CSWeaponID>(iIndex)); (ТУТ ОШИБКА)
    g_iWeaponDropValue[iClient] += iMoney;
}

public void OnClientDisconnect(int iClient)
{
    g_iCountDropWeapon[iClient] = g_iWeaponDropValue[iClient] = 0;
}

public Action Events_Round(Event hEvent, const char[] sName, bool bDontBroadcast)
{
    for (int i = 1; i <= MaxClients; i++)
    {
        g_iCountDropWeapon[i] = g_iWeaponDropValue[i] = 0;
    }
}

Пример использования функции CS_GetWeaponPrice(iClient, view_as<CSWeaponID>(iIndex)); брал из weapon_restrict, там ошибки нет, у меня есть
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254
@7pElllHuK, у тебя там должен быть индекс оружия, а не индекс энтити, насколько я понимаю.
 

NeLifeASkazka

Участник
Сообщения
141
Реакции
79
Добрый день. Подскажите пожалуйста, почему выдает ошибку:
L 08/28/2024 - 13:58:14: [SM] Exception reported: Invalid WeaponID passed for this game
L 08/28/2024 - 13:58:14: [SM] Blaming: test.smx
L 08/28/2024 - 13:58:14: [SM] Call stack trace:
L 08/28/2024 - 13:58:14: [SM] [0] CS_GetWeaponPrice
L 08/28/2024 - 13:58:14: [SM] [1] Line 14, D:\ONEdRIVE\Desktop\�����������\1.11 scripting\test.sp::CS_OnCSWeaponDrop
C-подобный:
#include <cstrike>

int g_iCountDropWeapon[MAXPLAYERS + 1],
    g_iWeaponDropValue[MAXPLAYERS + 1];

public void OnPluginStart()
{
    HookEvent("round_start", Events_Round, EventHookMode_PostNoCopy);
}

public Action CS_OnCSWeaponDrop(int iClient, int iIndex)
{
    g_iCountDropWeapon[iClient]++;
    int iMoney = CS_GetWeaponPrice(iClient, view_as<CSWeaponID>(iIndex)); (ТУТ ОШИБКА)
    g_iWeaponDropValue[iClient] += iMoney;
}

public void OnClientDisconnect(int iClient)
{
    g_iCountDropWeapon[iClient] = g_iWeaponDropValue[iClient] = 0;
}

public Action Events_Round(Event hEvent, const char[] sName, bool bDontBroadcast)
{
    for (int i = 1; i <= MaxClients; i++)
    {
        g_iCountDropWeapon[i] = g_iWeaponDropValue[i] = 0;
    }
}

Пример использования функции CS_GetWeaponPrice(iClient, view_as<CSWeaponID>(iIndex)); брал из weapon_restrict, там ошибки нет, у меня есть

Попробуй так:

code:
public Action CS_OnCSWeaponDrop(int iClient, int iIndex){
    g_iCountDropWeapon[iClient]++;

    int iDefinitionIndex = GetEntProp(iIndex, Prop_Send, "m_iItemDefinitionIndex");
    
    CSWeaponID cs_WeaponId = CS_ItemDefIndexToID(iDefinitionIndex);
    
    if(cs_WeaponId != CSWeapon_NONE){
        int iMoney = CS_GetWeaponPrice(iClient, cs_WeaponId);
        g_iWeaponDropValue[iClient] += iMoney;
    }

    return Plugin_Continue;
}
 
Сверху Снизу