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

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Бьёт ошибку в error-логах хоть ты тресни.
L 03/09/2020 - 14:51:37: [SM] Exception reported: Client 2 is not connected
L 03/09/2020 - 14:51:37: [SM] Blaming: AntiVPN.smx
L 03/09/2020 - 14:51:37: [SM] Call stack trace:
L 03/09/2020 - 14:51:37: [SM] [0] GetClientAuthId
L 03/09/2020 - 14:51:37: [SM] [1] Line 131, AntiVPN.sp::HttpResponseCallback

Может кто знает как исправить?

C-подобный:
void HttpResponseCallback(bool success, const char[] error, System2HTTPRequest request, System2HTTPResponse response, HTTPRequestMethod method)
{
    if(success)
    {
        char[] content = new char[response.ContentLength + 1];
        response.GetContent(content, response.ContentLength + 1);
        char steamid[28], name[100], ip[30];
        DataPack pack = request.Any;
        pack.Reset();
        pack.ReadString(ip, sizeof(ip));
        int client = pack.ReadCell();
        delete pack;
        GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid));
        GetClientName(client, name, sizeof(name));
        int buffer_len = strlen(name) * 2 + 1;
        char[] newname = new char[buffer_len];
        SQL_EscapeString(g_db, name, newname, buffer_len);
        int proxy;
       
        if (StrEqual(content, "Y"))
        {
            VPNBlock_Log(0, client, ip);
            KickClient(client, "%t", "VPN Kick");
            proxy = 1;
        }
        else
        {
            proxy = 0;
        }
        char query[300];
        Format(query, sizeof(query), "INSERT INTO `AntiVPN`(`playername`, `steamid`, `lastupdated`, `ip`, `proxy`) VALUES('%s', '%s', '%d', '%s', '%d');", newname, steamid, GetTime(), ip, proxy);
        g_db.Query(queryI, query);
    }
    else
    {
        if (!g_written)
        {
            g_written = true;
            VPNBlock_Log(1);
        }
    }
}
Оффтоп
 

Amirsz

Релаксируем... Ну хотя бы пытаемся
Сообщения
261
Реакции
81
Бьёт ошибку в error-логах хоть ты тресни.
L 03/09/2020 - 14:51:37: [SM] Exception reported: Client 2 is not connected
L 03/09/2020 - 14:51:37: [SM] Blaming: AntiVPN.smx
L 03/09/2020 - 14:51:37: [SM] Call stack trace:
L 03/09/2020 - 14:51:37: [SM] [0] GetClientAuthId
L 03/09/2020 - 14:51:37: [SM] [1] Line 131, AntiVPN.sp::HttpResponseCallback

Может кто знает как исправить?

C-подобный:
void HttpResponseCallback(bool success, const char[] error, System2HTTPRequest request, System2HTTPResponse response, HTTPRequestMethod method)
{
    if(success)
    {
        char[] content = new char[response.ContentLength + 1];
        response.GetContent(content, response.ContentLength + 1);
        char steamid[28], name[100], ip[30];
        DataPack pack = request.Any;
        pack.Reset();
        pack.ReadString(ip, sizeof(ip));
        int client = pack.ReadCell();
        delete pack;
        GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid));
        GetClientName(client, name, sizeof(name));
        int buffer_len = strlen(name) * 2 + 1;
        char[] newname = new char[buffer_len];
        SQL_EscapeString(g_db, name, newname, buffer_len);
        int proxy;
      
        if (StrEqual(content, "Y"))
        {
            VPNBlock_Log(0, client, ip);
            KickClient(client, "%t", "VPN Kick");
            proxy = 1;
        }
        else
        {
            proxy = 0;
        }
        char query[300];
        Format(query, sizeof(query), "INSERT INTO `AntiVPN`(`playername`, `steamid`, `lastupdated`, `ip`, `proxy`) VALUES('%s', '%s', '%d', '%s', '%d');", newname, steamid, GetTime(), ip, proxy);
        g_db.Query(queryI, query);
    }
    else
    {
        if (!g_written)
        {
            g_written = true;
            VPNBlock_Log(1);
        }
    }
}
Оффтоп
IsClientConnected(int client)
Добавь проверку.
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
Теперь даже не компилится :D
Клёвая ошибка!
Ну ладно, без рофлика (спустя 5 минуток написал):
Ошибку показать слабо? И где у тебя вообще HTTP-запрос отправляется? Может у тебя игрок даже не успел подключиться.
 
Последнее редактирование:

Sleep

Участник
Сообщения
389
Реакции
143
Привет всем, есть плагин на выдачу оружия, он заменяет оружие в слоте игрока, но проблема в том, что старое оружие не удаляется,а просто сбрасывается под ноги, так вот,как сделать так.чтобы старое оружие после замены просто пропадало?
C-подобный:
#include <sourcemod>
#include <sdktools>
#pragma semicolon 1

#define MAX_WEAPONS        27

public Plugin:myinfo = {
    name = "Give Weapon",
    author = "Kiske",
    description = "Give a weapon to a player from a command",
    version = "1.0.1",
    url = "http://www.sourcemod.net/"
};

new const String:g_weapons[MAX_WEAPONS][] = {
    "weapon_ak47", "weapon_aug", "weapon_awp", "weapon_deagle", "weapon_elite", "weapon_famas", "weapon_fiveseven", "weapon_flashbang",
    "weapon_g3sg1", "weapon_galil", "weapon_glock", "weapon_hegrenade", "weapon_m249", "weapon_m4a1",
    "weapon_mac10", "weapon_tmp", "weapon_mp5navy", "weapon_p228", "weapon_p90", "weapon_sg550",
    "weapon_sg552", "weapon_smokegrenade", "weapon_scout", "weapon_ump45", "weapon_usp", "weapon_m3",
    "weapon_xm1014"
};

public OnPluginStart()
{
    RegAdminCmd("sm_weapons", smWeapon, ADMFLAG_BAN, "- <target> <weaponname>");
    RegAdminCmd("sm_weaponlist", smWeaponList, ADMFLAG_BAN, "- list of the weapon names");
}

public Action:smWeapon(id, args)
{
    if(args < 2)
    {
        ReplyToCommand(id, "[SM] Usage: sm_weapons <name | #userid> <weaponname>");
        return Plugin_Handled;
    }
    
    decl String:sArg[256];
    decl String:sTempArg[32];
    decl String:sWeaponName[32];
    decl String:sWeaponNameTemp[32];
    decl iL;
    decl iNL;
    
    GetCmdArgString(sArg, sizeof(sArg));
    iL = BreakString(sArg, sTempArg, sizeof(sTempArg));
    
    if((iNL = BreakString(sArg[iL], sWeaponName, sizeof(sWeaponName))) != -1)
    iL += iNL;
    
    new i;
    new iValid = 0;
    
    if(StrContains(sWeaponName, "weapon_") == -1)
    {
        FormatEx(sWeaponNameTemp, 31, "weapon_");
        StrCat(sWeaponNameTemp, 31, sWeaponName);
        
        strcopy(sWeaponName, 31, sWeaponNameTemp);
    }
    
    for(i = 0; i < MAX_WEAPONS; ++i)
    {
        if(StrEqual(sWeaponName, g_weapons[i]))
        {
            iValid = 1;
            break;
        }
    }
    
    if(!iValid)
    {
        ReplyToCommand(id, "[SM] The weaponname (%s) isn't valid", sWeaponName);
        return Plugin_Handled;
    }
    
    decl String:sTargetName[MAX_TARGET_LENGTH];
    decl sTargetList[1];
    decl bool:bTN_IsML;
    
    new iTarget = -1;
    
    if(ProcessTargetString(sTempArg, id, sTargetList, 1, COMMAND_FILTER_ALIVE|COMMAND_FILTER_NO_MULTI, sTargetName, sizeof(sTargetName), bTN_IsML) > 0)
    iTarget = sTargetList[0];
    if(IsFakeClient(iTarget))
    {
        ReplyToCommand(id, "[SM] Bot isn't support");
    }
    
    if(iTarget != -1 && !IsFakeClient(iTarget))
    {       
        new iWeapon1 = GetPlayerWeaponSlot(iTarget, 0);
        new iWeapon2 = GetPlayerWeaponSlot(iTarget, 1);
        new iWeapon3 = GetPlayerWeaponSlot(iTarget, 3);
        decl String:buffer1[32];
        decl String:buffer2[32];
        decl String:buffer3[32];
        
        if(iWeapon1 != -1)
        {
            GetEntityClassname(iWeapon1, buffer1, 32);
            RemovePlayerItem(iTarget, iWeapon1);            
        }
        if(iWeapon2 != -1)
        {
            GetEntityClassname(iWeapon2, buffer2, 32);
            RemovePlayerItem(iTarget, iWeapon2);
        }
        if(iWeapon3 != -1)
        {
            GetEntityClassname(iWeapon3, buffer3, 32);
            RemovePlayerItem(iTarget, iWeapon3);
        }       
        
        GivePlayerItem(iTarget, sWeaponName);
        
        if((iWeapon1 != -1) && !(StrEqual(buffer1, sWeaponName)))
        {                       
            GivePlayerItem(iTarget, buffer1);
        }
        if(iWeapon2 != -1 && !(StrEqual(buffer2, sWeaponName)))
        {                       
            GivePlayerItem(iTarget, buffer2);
        }
        if(iWeapon3 != -1 && !(StrEqual(buffer3, sWeaponName)))
        {                       
            GivePlayerItem(iTarget, buffer3);
        }
    }   
    return Plugin_Handled;
}

public Action:smWeaponList(id, args)
{
    new i;
    for(i = 0; i < MAX_WEAPONS; ++i)
    ReplyToCommand(id, "%s", g_weapons[i]);
    
    ReplyToCommand(id, "");
    ReplyToCommand(id, "* No need to put weapon_ in the <weaponname>");
    
    return Plugin_Handled;
}
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
Бьёт ошибку в error-логах хоть ты тресни.
L 03/09/2020 - 14:51:37: [SM] Exception reported: Client 2 is not connected
L 03/09/2020 - 14:51:37: [SM] Blaming: AntiVPN.smx
L 03/09/2020 - 14:51:37: [SM] Call stack trace:
L 03/09/2020 - 14:51:37: [SM] [0] GetClientAuthId
L 03/09/2020 - 14:51:37: [SM] [1] Line 131, AntiVPN.sp::HttpResponseCallback

Может кто знает как исправить?

C-подобный:
void HttpResponseCallback(bool success, const char[] error, System2HTTPRequest request, System2HTTPResponse response, HTTPRequestMethod method)
{
    if(success)
    {
        char[] content = new char[response.ContentLength + 1];
        response.GetContent(content, response.ContentLength + 1);
        char steamid[28], name[100], ip[30];
        DataPack pack = request.Any;
        pack.Reset();
        pack.ReadString(ip, sizeof(ip));
        int client = pack.ReadCell();
        delete pack;
        GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid));
        GetClientName(client, name, sizeof(name));
        int buffer_len = strlen(name) * 2 + 1;
        char[] newname = new char[buffer_len];
        SQL_EscapeString(g_db, name, newname, buffer_len);
        int proxy;
     
        if (StrEqual(content, "Y"))
        {
            VPNBlock_Log(0, client, ip);
            KickClient(client, "%t", "VPN Kick");
            proxy = 1;
        }
        else
        {
            proxy = 0;
        }
        char query[300];
        Format(query, sizeof(query), "INSERT INTO `AntiVPN`(`playername`, `steamid`, `lastupdated`, `ip`, `proxy`) VALUES('%s', '%s', '%d', '%s', '%d');", newname, steamid, GetTime(), ip, proxy);
        g_db.Query(queryI, query);
    }
    else
    {
        if (!g_written)
        {
            g_written = true;
            VPNBlock_Log(1);
        }
    }
}
Оффтоп


C++:
void HttpResponseCallback(bool success, const char[] error, System2HTTPRequest request, System2HTTPResponse response, HTTPRequestMethod method)
{
    if(success)
    {
        char[] content = new char[response.ContentLength + 1];
        response.GetContent(content, response.ContentLength + 1);
        char steamid[28], name[100], ip[30];
        DataPack pack = request.Any;
        pack.Reset();
        pack.ReadString(ip, sizeof(ip));
        int client = pack.ReadCell();
        delete pack;
        if(!IsClientConnected(client)) return;
        GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid));
        GetClientName(client, name, sizeof(name));
        int buffer_len = strlen(name) * 2 + 1;
        char[] newname = new char[buffer_len];
        SQL_EscapeString(g_db, name, newname, buffer_len);
        int proxy;
     
        if (StrEqual(content, "Y"))
        {
            VPNBlock_Log(0, client, ip);
            KickClient(client, "%t", "VPN Kick");
            proxy = 1;
        }
        else
        {
            proxy = 0;
        }
        char query[300];
        Format(query, sizeof(query), "INSERT INTO `AntiVPN`(`playername`, `steamid`, `lastupdated`, `ip`, `proxy`) VALUES('%s', '%s', '%d', '%s', '%d');", newname, steamid, GetTime(), ip, proxy);
        g_db.Query(queryI, query);
    }
    else
    {
        if (!g_written)
        {
            g_written = true;
            VPNBlock_Log(1);
        }
    }
}
 

goldfish

Участник
Сообщения
6
Реакции
0
Здравствуйте, извините если не в том разделе вопрос.

Как вывести игроку эту подсказку (играить в роли..) после подключения игрока и захвата бота?
Безымянный.png


дело в том, что после более чем 5 игроков сервер уже не переключает игроков в спектры к ботам, в этом случае в спектры кидает плагин (мультислот) но после этого игрок уже сидит в спектрах без этой подсказки, и так есть способы включить принудительно этот интервейс?

Так же заодно хотел бы узнать иногда появляется сверху вотакой интерфейс сверху и там что-то написано (уже не помню :D вроде что-то типо "команда выживших") вот как этот интерфейс заставит отобразиться и при каких условияъ он будет отображаться?
Безымянный.png


Спасибо
 
Последнее редактирование модератором:

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
C++:
void HttpResponseCallback(bool success, const char[] error, System2HTTPRequest request, System2HTTPResponse response, HTTPRequestMethod method)
{
    if(success)
    {
        char[] content = new char[response.ContentLength + 1];
        response.GetContent(content, response.ContentLength + 1);
        char steamid[28], name[100], ip[30];
        DataPack pack = request.Any;
        pack.Reset();
        pack.ReadString(ip, sizeof(ip));
        int client = pack.ReadCell();
        delete pack;
        if(!IsClientConnected(client)) return;
        GetClientAuthId(client, AuthId_Steam2, steamid, sizeof(steamid));
        GetClientName(client, name, sizeof(name));
        int buffer_len = strlen(name) * 2 + 1;
        char[] newname = new char[buffer_len];
        SQL_EscapeString(g_db, name, newname, buffer_len);
        int proxy;
    
        if (StrEqual(content, "Y"))
        {
            VPNBlock_Log(0, client, ip);
            KickClient(client, "%t", "VPN Kick");
            proxy = 1;
        }
        else
        {
            proxy = 0;
        }
        char query[300];
        Format(query, sizeof(query), "INSERT INTO `AntiVPN`(`playername`, `steamid`, `lastupdated`, `ip`, `proxy`) VALUES('%s', '%s', '%d', '%s', '%d');", newname, steamid, GetTime(), ip, proxy);
        g_db.Query(queryI, query);
    }
    else
    {
        if (!g_written)
        {
            g_written = true;
            VPNBlock_Log(1);
        }
    }
}
Спасибо, но уже пофиксил:)
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
Так что, всё же есть хоть у кого-то идеи по уменьшению размера спрайта? Спрайт 1024х1024 гигантский, scale ни в свойствах, ни в vmt не помог (либо я кривуля)
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Так что, всё же есть хоть у кого-то идеи по уменьшению размера спрайта? Спрайт 1024х1024 гигантский, scale ни в свойствах, ни в vmt не помог (либо я кривуля)
Через это пробовали?
C++:
int iScaleOfsset = GetEntSendPropOffs(ent, "m_flModelScale", true);
if(iScaleOfsset != -1)
{
    SetEntDataFloat(ent, iScaleOfsset, new_scale, true);
}
Оффтоп
 

x330122

Участник
Сообщения
357
Реакции
152
Так что, всё же есть хоть у кого-то идеи по уменьшению размера спрайта? Спрайт 1024х1024 гигантский, scale ни в свойствах, ни в vmt не помог (либо я кривуля)
Сохранить .VTF файл с размером 512x512 попробуй.
1584182981390.png
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
Спрайт же, а не декаль. Но попробую.

Сохранить .VTF файл с размером 512x512 попробуй.
Факт остаётся фактом: спрайт будет гигантский, пробовал и 256х256, всё же больше, но и пикселит уже сильно. 128х128 более-менее, но так же пиксели.

Через это пробовали?
Вот про это я к слову забыл. Возможно есть такое и оно работает.
Использовал DispatchKeyValue(sprite, "scale", "0.0625");
Получал значения через flScale, вроде бы значения были такие же (но не хотели как надо). В общем буду пробовать!
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
RusJJ, при создании env_sprite (ent= CreateEntityByName("env_sprite")) делаешь DispatchKeyValue(ent, "scale", "0.1"); перед DispatchSpawn(ent);
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
@Grey83, ну это само собой.
Просто дело в том, что размеры, которые можно: 0.125, 0.25, 0.5, 1.0
Почему-то другие игнорируются, а если точнее - заменяются ближним из одного сверху.
0.0625 меньше в 2 раза, чем 0.125, но не работает - слишком большой. Попробовал сейчас $scale 0.0625 в VMT, отпишусь
1584190635381.png


P.S. $scale в VMT не работает вообще никак :(
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
@Grey83, ну это само собой.
Просто дело в том, что размеры, которые можно: 0.125, 0.25, 0.5, 1.0
Почему-то другие игнорируются, а если точнее - заменяются ближним из одного сверху.
0.0625 меньше в 2 раза, чем 0.125, но не работает - слишком большой. Попробовал сейчас $scale 0.0625 в VMT, отпишусь
Посмотреть вложение 54005

P.S. $scale в VMT не работает вообще никак :(
C++:
AcceptEntityInput(ent, "SetScale", ent, ent, NEW_SCALE_FLOAT);
Взято с env_sprite_oriented - Valve Developer Community
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
iLoco, если нужно поменять размер спрайта после его создания, то можно и так.
А как это делать в момент создания я уже написал.
 

RAIN182

Участник
Сообщения
411
Реакции
55
Где достать годный плагин фейковые игроки для csgo ? Да и что бы в браузере игры они отображались . Такой есть ?
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
А как это делать в момент создания я уже написал.
Использовал DispatchKeyValue(sprite, "scale", "0.0625");
Просто дело в том, что размеры, которые можно: 0.125, 0.25, 0.5, 1.0
Почему-то другие игнорируются, а если точнее - заменяются ближним из одного сверху.
В любом случае буду пробовать изменять по-другому, как подсказал @iLoco, хотя через flSpriteScale не работало так же.
 
Сверху Снизу