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

7pElllHuK

Участник
Сообщения
1,654
Реакции
639
Потому что если 2/7200 = float число 0.00027777777 а вы вывод делаете int (%i)
Так будет корректно
Пример кода:
int iTime = 7200;
int iTest = iTime/2;
PrintToChatAll("%i", iTest);
Спасибо, помогло. ТОлько сейчас дошло что я 2 делил на 7200, а не 7200 на 2. Еще раз спасибо!!
 

Yurka_Bear

Участник
Сообщения
61
Реакции
4
Здравствуйте. Помогите с плагином пожалуйста, он не работает.
L 01/20/2024 - 20:06:20: Error log file session closed.
L 01/20/2024 - 20:06:20: SourceMod error session started
L 01/20/2024 - 20:06:20: Info (map "gg_tokyo_museum_v34") (file "errors_20240120.log")
L 01/20/2024 - 20:06:20: [SM] Native "HookEvent" reported: Game event "cs_win_panel_round" does not exist
L 01/20/2024 - 20:06:20: [SM] Displaying call stack trace for plugin "gungame_assist.smx":
L 01/20/2024 - 20:06:20: [SM] [0] Line 36, gungame_assist.sp::OnPluginStart()
 

Вложения

  • gungame_assist.sp
    8.7 КБ · Просмотры: 23
Последнее редактирование:

7pElllHuK

Участник
Сообщения
1,654
Реакции
639
Здравствуйте. Помогите с плагином пожалуйста, он не работает.
L 01/20/2024 - 20:06:20: Error log file session closed.
L 01/20/2024 - 20:06:20: SourceMod error session started
L 01/20/2024 - 20:06:20: Info (map "gg_tokyo_museum_v34") (file "errors_20240120.log")
L 01/20/2024 - 20:06:20: [SM] Native "HookEvent" reported: Game event "cs_win_panel_round" does not exist
L 01/20/2024 - 20:06:20: [SM] Displaying call stack trace for plugin "gungame_assist.smx":
L 01/20/2024 - 20:06:20: [SM] [0] Line 36, gungame_assist.sp::OnPluginStart()
Я так понимаю плагин ставите на CSS v34, а там нет такого события как "cs_win_panel_round". + вы не скинули исходник, так что тут в принципе помочь больше нечем
 

babka68

Участник
Сообщения
2,137
Реакции
978
Здравствуйте. Помогите с плагином пожалуйста, он не работает.
L 01/20/2024 - 20:06:20: Error log file session closed.
L 01/20/2024 - 20:06:20: SourceMod error session started
L 01/20/2024 - 20:06:20: Info (map "gg_tokyo_museum_v34") (file "errors_20240120.log")
L 01/20/2024 - 20:06:20: [SM] Native "HookEvent" reported: Game event "cs_win_panel_round" does not exist
L 01/20/2024 - 20:06:20: [SM] Displaying call stack trace for plugin "gungame_assist.smx":
L 01/20/2024 - 20:06:20: [SM] [0] Line 36, gungame_assist.sp::OnPluginStart()
попробуйте так
 

Вложения

  • gungame_assist.sp
    8.7 КБ · Просмотры: 19

Yurka_Bear

Участник
Сообщения
61
Реакции
4
Работает, спасибо! Еще просьба будет небольшая. Можете сделать, чтоб уровень давался автоматом, когда достигнешь нужное колич. очков? А то там надо команду прописывать, когда набрал очки.
 

babka68

Участник
Сообщения
2,137
Реакции
978
Работает, спасибо! Еще просьба будет небольшая. Можете сделать, чтоб уровень давался автоматом, когда достигнешь нужное колич. очков? А то там надо команду прописывать, когда набрал очки.
наверное так и задумано, что бы можно было обменивать
C-подобный:
Изначально этот мод был предназначен для сценариев событий GunGame. Портирован на SourceMod. Полностью переписан, фактически исходный код из оригинала не использовался и даже не просматривался.
Это мой первый плагин для SourceMod. Поэтому, пожалуйста, оставляйте комментарии к моему коду.
Очки помощи работают следующим образом:
Вы зарабатываете очки в процентах от урона, нанесенного другим игрокам.
Вы зарабатываете эти очки только в том случае, если игрок, которому вы нанесли урон, не убит вами, за любые другие способы смерти начисляются очки.
Вы можете обменять очки за уровень, используя !redeem "sm_redeem" и !respawn "sm_respawn" для возрождения.
По умолчанию вы не можете выкупить гранату или нож, вы можете добавить дополнительное оружие в черный список.
При смерти игрока каждому игроку, нанесшему урон мертвому игроку, отправляется сообщение, в котором сообщается, сколько очков вы заработали, кто умер и сколько у вас осталось.
 

Yurka_Bear

Участник
Сообщения
61
Реакции
4
наверное так и задумано, что бы можно было обменивать
C-подобный:
Изначально этот мод был предназначен для сценариев событий GunGame. Портирован на SourceMod. Полностью переписан, фактически исходный код из оригинала не использовался и даже не просматривался.
Это мой первый плагин для SourceMod. Поэтому, пожалуйста, оставляйте комментарии к моему коду.
Очки помощи работают следующим образом:
Вы зарабатываете очки в процентах от урона, нанесенного другим игрокам.
Вы зарабатываете эти очки только в том случае, если игрок, которому вы нанесли урон, не убит вами, за любые другие способы смерти начисляются очки.
Вы можете обменять очки за уровень, используя !redeem "sm_redeem" и !respawn "sm_respawn" для возрождения.
По умолчанию вы не можете выкупить гранату или нож, вы можете добавить дополнительное оружие в черный список.
При смерти игрока каждому игроку, нанесшему урон мертвому игроку, отправляется сообщение, в котором сообщается, сколько очков вы заработали, кто умер и сколько у вас осталось.
Да, я понимаю. Но хотелось бы переделать. Чтоб автоматом давался уровень, когда набрал нужное количество бонусов, вот и попросил.
 

babka68

Участник
Сообщения
2,137
Реакции
978
Да, я понимаю. Но хотелось бы переделать. Чтоб автоматом давался уровень, когда набрал нужное количество бонусов, вот и попросил.
тогда от этого плагина по-моему толком ничего не останется, наверное проще написать под ваши нужды новый, нужно смотреть инклуд gungame и смотреть что да как
 

Yurka_Bear

Участник
Сообщения
61
Реакции
4
тогда от этого плагина по-моему толком ничего не останется, наверное проще написать под ваши нужды новый, нужно смотреть инклуд gungame и смотреть что да как
Понял вас. Еще раз спасибо за помощь.
 

7pElllHuK

Участник
Сообщения
1,654
Реакции
639
Привет, ребят. Помогите, кто может. Надо добавить в код плагина проверку на ботов, что бы ботам не выдавала автоматически вип статус. (сервер cs source steam)

C-подобный:
#pragma semicolon 1
//#pragma newdecls required

#include <sourcemod>
#include <vip>

public void OnClientPutInServer(int client)
{
    CreateTimer(3.0, TimerCheckVip, client);
}

public Action TimerCheckVip(Handle timer, int client)
{
    if(client && !IsClientVip(client))
    {
        SetVipUsersGroups(client, "", 60, "", true);
    }
}
C-подобный:
#include <sourcemod>
#include <vip>

public void OnClientPutInServer(int client)
{
    CreateTimer(3.0, TimerCheckVip, client);
}

public Action TimerCheckVip(Handle timer, int client)
{
    if(!IsFackeClient(client) && !IsClientVip(client))
    {
        SetVipUsersGroups(client, "", 60, "", true);
    }
}
 

danil253467

💘Italo-Disco One Love💘
Сообщения
109
Реакции
67
error 017: undefined symbol "IsFackeClient"
Сообщения автоматически склеены:


а понял лишняя c
Сообщения автоматически склеены:


в общем ботам перестала выдавать мне выдала но в логах еrror

L 01/21/2024 - 20:19:54: [SM] Call stack trace:
L 01/21/2024 - 20:19:54: [SM] [0] IsFakeClient
L 01/21/2024 - 20:19:54: [SM] [1] Line 11, D:\DISK D\MyFiles\scripting\sm_autovip.sp::TimerCheckVip
L 01/21/2024 - 20:19:54: [SM] Exception reported: Client 11 is not connected
L 01/21/2024 - 20:19:54: [SM] Blaming: sm_autovip.smx
L 01/21/2024 - 20:19:54: [SM] Call stack trace:
L 01/21/2024 - 20:19:54: [SM] [0] IsFakeClient
L 01/21/2024 - 20:19:54: [SM] [1] Line 11, D:\DISK D\MyFiles\scripting\sm_autovip.sp::TimerCheckVip
L 01/21/2024 - 20:19:56: [SM] Exception reported: Client index 2 is invalid
L 01/21/2024 - 20:19:56: [SM] Blaming: vip.smx
L 01/21/2024 - 20:19:56: [SM] Call stack trace:
L 01/21/2024 - 20:19:56: [SM] [0] ThrowNativeError
L 01/21/2024 - 20:19:56: [SM] [1] Line 1490, vip.sp::Native_SetVipUsersGroups
L 01/21/2024 - 20:19:56: [SM] [3] SetVipUsersGroups
L 01/21/2024 - 20:19:56: [SM] [4] Line 13, D:\DISK D\MyFiles\scripting\sm_autovip.sp::TimerCheckVip
C-подобный:
#include <vip>

public void OnClientPutInServer(int client)
{
    CreateTimer(3.0, TimerCheckVip, client);
}

public Action TimerCheckVip(Handle timer, int client)
{
    if(client > 0 && client <= MaxClients && !IsFakeClient(client) && !IsClientVip(client))
    {
        SetVipUsersGroups(client, "", 60, "", true);
    }
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254
чтобы ботам не выдавала автоматически вип статус
...
Client 11 is not connected
C-подобный:
#pragma semicolon 1

#include <vip>

#pragma newdecls required

public void OnClientPutInServer(int client)
{
    if(!IsFakeClient(client)) CreateTimer(3.0, TimerCheckVip, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
}

public Action TimerCheckVip(Handle timer, int client)
{
    if((client = GetClientOfUserId(client)) && IsClientInGame(client) && !IsClientVip(client))
        SetVipUsersGroups(client, "", 60, "", true);

    return Plugin_Stop;
}
 

7pElllHuK

Участник
Сообщения
1,654
Реакции
639
спасибо error логи ушли но появилась такая вещь вот вип я себе удалил перезапустили сервер захожу смотрю в таб клан тега нет что вип а должен потом захожу в саму вип и там только чат тег из всех флагов то есть все флаги пропали потом смотрю и пропал пункт управления випкой потом выхожу полностью из клиента игры захожу обратно потом на сервер и все на месте может подскажешь или подскажите почему так стало
расставьте знаки препинания, ничего не понятно. Кто куда, зачем, почему
 

babka68

Участник
Сообщения
2,137
Реакции
978
Привет, ребят! Еще раз вот вопрос такой, подскажите, как вот подправить плагин. А то вот когда надпись выходит играть за бота и ник бота такой то, то она выходит не только когда мертвый, но и когда просто бежишь живой и она по центру. А нужно только когда не живой. (сервер cs source steam)

C-подобный:
#include <cstrike>
#include <sdktools>
#pragma semicolon 1
#pragma newdecls required

public Plugin myinfo =  {
    name = "Bot Replacer",
    author = "SenatoR, babka68",
    description = "Игрок может сыграть вместо бота",
    version = "1.2",
    url = "https://vk.com/zakazserver68, hlmod.ru"
}

Handle CheckSpecTimer[MAXPLAYERS + 1];
int BotAmount[MAXPLAYERS + 1], g_iAmountBot, g_iPriceBot;
bool g_bShow_Message_Hud, g_bType_Kick;

public void OnPluginStart() {
    //HookEvent("round_start", EventRoundStart);
    HookEvent("round_end", EventRoundEnd);
    ConVar cvar;
    cvar = CreateConVar("sm_bot_replacer_amount", "20", "Сколько раз за раунд игрок может сыграть вместо бота?", _, true, 0.0, true, 20.0);
    cvar.AddChangeHook(CVarChanged_Amount_Bot);
    g_iAmountBot = cvar.IntValue;
  
    cvar = CreateConVar("sm_bot_replacer_price", "1", "Сколько стоит сыграть за бота?", _, true, 0.0, true, 16000.0);
    cvar.AddChangeHook(CVarChanged_Price_Bot);
    g_iPriceBot = cvar.IntValue;
  
    cvar = CreateConVar("sm_bot_replacer_showhud", "1", "Показывать сообщение, что можно играть за бота?", _, true, 0.0, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Show_Message_Hud);
    g_bShow_Message_Hud = cvar.BoolValue;
  
    cvar = CreateConVar("sm_bot_replacer_typekick", "0", "0 - Кикнуть бота, 1 - Удалить бота", _, true, 0.0, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Type_Kick);
    g_bType_Kick = cvar.BoolValue;
  
    AutoExecConfig(true, "sm_bot_replacer");
}

public void CVarChanged_Amount_Bot(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_iAmountBot = cvar.IntValue;
}

public void CVarChanged_Price_Bot(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_iPriceBot = cvar.IntValue;
}

public void CVarChanged_Show_Message_Hud(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_bShow_Message_Hud = cvar.BoolValue;
}

public void CVarChanged_Type_Kick(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_bType_Kick = cvar.BoolValue;
}

public void OnClientPostAdminCheck(int client) {
    if (!IsFakeClient(client) && g_bShow_Message_Hud)
        CheckSpecTimer[client] = CreateTimer(1.0, Spec_Timer, client, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
}

public Action Spec_Timer(Handle timer, any client) {
int i = 0;
i = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
if (i > 0 && IsFakeClient(i) && GetClientTeam(client) == GetClientTeam(i)) {
PrintHintText(client, "Нажмите E чтобы играть за бота %N", i);
PrintToChat(client, "Press E to play for bot %N", i);
}
}

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon) {
    if (buttons & IN_USE && !IsPlayerAlive(client)) {
        int i = 0;
        i = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
        int price = g_iPriceBot;
        int cash = GetEntProp(client, Prop_Send, "m_iAccount");
        if (i > 0 && IsFakeClient(i) && GetClientTeam(client) == GetClientTeam(i) && BotAmount[client] < g_iAmountBot && price <= cash) {
            SetEntProp(client, Prop_Send, "m_iAccount", cash - price);
            int health = GetClientHealth(i);
            int armor = GetClientArmor(i);
            float pos[3];
            GetClientAbsOrigin(i, pos);
            if (g_bType_Kick)
                ServerCommand("bot_kick %N", i);
            else
                KickClient(i);
            CS_RespawnPlayer(client);
            SetEntityHealth(client, health);
            SetEntProp(client, Prop_Data, "m_ArmorValue", armor);
            TeleportEntity(client, pos, NULL_VECTOR, NULL_VECTOR);
            BotAmount[client]++;
        }
    }
}

public void EventRoundEnd(Event event, const char[] name, bool dontBroadcast) {
    for (int i = 1; i <= MaxClients; i++) {
        BotAmount[i] = 0;
    }
}

public void OnClientDisconnect(int client) {
    if (CheckSpecTimer[client] != null) {
        KillTimer(CheckSpecTimer[client]);
        CheckSpecTimer[client] = null;
    }
}
Сообщения автоматически склеены:


Ну вот, закинул плагин. Я прописан в випке как админ. Вот я перезапустил сервер, захожу. Вип у меня нету. Вот он выдает его. Я открываю вип меню и вижу только слово настройки управления там нет. А если удаляю вип статус через файлы в ftp, потом меняю карту, выдаю себе вип через управления системой. там все ок.
Вечером напомните, нужно добавить 1 проверку, пока что занят(
 
Сверху Снизу