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

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
C-подобный:
#include <cstrike>
public void OnPluginStart()
{
    HookEvent("player_spawn", EventSpawn);
}

public Action EventSpawn(Event hEvent, const chat sEvent, bool bdb)
{
    int client = GetClientOfUserId(hEvent.GetInt("userid"));
    if(client && IsClientInGame(client) && !IsFakeClient(client))
    {
//        int ent = GetPlayerWeaponSlot(client, CS_SLOT_PRIMARY;
//        if(ent != -1)
//        {
//            char buff[32];
//            GetEntityClassname(ent, buff, sizeof(buff));
//            if(!strcmp(buff, "weapon_awp"))
//            {
//                CS_DropWeapon(client, ent, true, false);
//                RemoveEntity(ent);
//            }
//        } удалять AWP
        for(int i = 0; i <= 4 ; i++)
        {
           if(GetPlayerWeaponSlot(client, i) != -1)
           {
                CS_DropWeapon(client, i, true, false);
                RemoveEntity(i);          //удалять все оружия в инвентаре
           }
        }
        GetItem(knife, client);
        GetItem(glock, client);
    }
}

void GetItem(char[] item, int client)
{
    float pos[3];
    char buff[32];
    GetClientAbsOrigin(client, pos);
    Format(buff, sizeof(buff), "weapon_%s", item);
    int i = CreateEntityByName(buff);
    if(i < 1) return;
    DispatchKeyValueVector(i, "origin", pos);
    DispatchKeyValue(i, "spawnflags", "1");
    DispatchSpawn(i);
}

Какое оружие?

Palonez
Будь добр,сделай пожалуйста чтоб просто авп удалось только.
Этот вариант пробовал,не компилился даже.
Заранее благодарю!​

 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@-=|УЧЕНИК|=-, закомментируй строки 23 - 30, а строки 12 - 22 - раскомментируй (и закомментируй сообщение "удалять AWP" на строке 22).
Будет удалять авп.

Должно выйти вот примерно так:
C-подобный:
#include <cstrike>
#include <sdktools_functions>

public void OnPluginStart()
{
    HookEvent("player_spawn", EventSpawn);
}

public void EventSpawn(Event event, const char[] name, bool bdb)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(client && IsClientInGame(client) && !IsFakeClient(client))
    {
        int ent = GetPlayerWeaponSlot(client, CS_SLOT_PRIMARY);
        if(ent != -1)
        {
            char buff[12];
            GetEntityClassname(ent, buff, sizeof(buff));
            if(!strcmp(buff[7], "awp"))
            {
                CS_DropWeapon(client, ent, true, false);
                RemoveEntity(ent);
            }
        }
        GetItem(client, "knife");
        GetItem(client, "glock");
    }
}

stock void GetItem(int client, char[] item)
{
    char buff[16];
    Format(buff, sizeof(buff), "weapon_%s", item);
    int i = CreateEntityByName(buff);
    if(i < 1) return;

    float pos[3];
    GetClientAbsOrigin(client, pos);
    DispatchKeyValueVector(i, "origin", pos);
    DispatchKeyValue(i, "spawnflags", "1");
    DispatchSpawn(i);
}
 
Последнее редактирование:

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
@-=|УЧЕНИК|=-, закомментируй строки 23 - 30, а строки 12 - 22 - раскомментируй (и закомментируй сообщение "удалять AWP" на строке 22).
Будет удалять авп.

Должно выйти вот примерно так:
C-подобный:
#include <cstrike>

public void OnPluginStart()
{
    HookEvent("player_spawn", EventSpawn);
}

public void EventSpawn(Event event, const char name, bool bdb)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(client && IsClientInGame(client) && !IsFakeClient(client))
    {
        int ent = GetPlayerWeaponSlot(client, CS_SLOT_PRIMARY);
        if(ent != -1)
        {
            char buff[12];
            GetEntityClassname(ent, buff, sizeof(buff));
            if(!strcmp(buff[7], "awp"))
            {
                CS_DropWeapon(client, ent, true, false);
                RemoveEntity(ent);
            }
        }
        GetItem(client, "knife");
        GetItem(client, "glock");
    }
}

stock void GetItem(int client, char[] item)
{
    char buff[16];
    Format(buff, sizeof(buff), "weapon_%s", item);
    int i = CreateEntityByName(buff);
    if(i < 1) return;

    float pos[3];
    GetClientAbsOrigin(client, pos);
    DispatchKeyValueVector(i, "origin", pos);
    DispatchKeyValue(i, "spawnflags", "1");
    DispatchSpawn(i);
}
Ну если твой вариант,то ошибки при компиляции.
Версия 34 если что,сразу не указал.
AWP_DELET.sp
C:\Users\plugins\Desktop\AWP_DELET.sp(6) : error 100: function prototypes do not match
C:\Users\plugins\Desktop\AWP_DELET.sp(14) : error 017: undefined symbol "GetPlayerWeaponSlot"
C:\Users\plugins\Desktop\AWP_DELET.sp(34) : error 017: undefined symbol "CreateEntityByName"
C:\Users\plugins\Desktop\AWP_DELET.sp(39) : error 017: undefined symbol "DispatchKeyValueVector"
C:\Users\plugins\Desktop\AWP_DELET.sp(40) : error 017: undefined symbol "DispatchKeyValue"
C:\Users\plugins\Desktop\AWP_DELET.sp(41) : error 017: undefined symbol "DispatchSpawn"

А если допустим сделать так,взял пример из другова плагина,то все работает и компилится.
Как будет правильно конечно не знаю)
 

Вложения

  • 7.png
    7.png
    18.7 КБ · Просмотры: 29
Последнее редактирование:

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Ну если твой вариант,то ошибки при компиляции.
Версия 34 если что,сразу не указал.
AWP_DELET.sp
C:\Users\plugins\Desktop\AWP_DELET.sp(6) : error 100: function prototypes do not match
C:\Users\plugins\Desktop\AWP_DELET.sp(14) : error 017: undefined symbol "GetPlayerWeaponSlot"
C:\Users\plugins\Desktop\AWP_DELET.sp(34) : error 017: undefined symbol "CreateEntityByName"
C:\Users\plugins\Desktop\AWP_DELET.sp(39) : error 017: undefined symbol "DispatchKeyValueVector"
C:\Users\plugins\Desktop\AWP_DELET.sp(40) : error 017: undefined symbol "DispatchKeyValue"
C:\Users\plugins\Desktop\AWP_DELET.sp(41) : error 017: undefined symbol "DispatchSpawn"

А если допустим сделать так,взял пример из другова плагина,то все работает и компилится.
Как будет правильно конечно не знаю)
Потому что нужно в самом начале тулс библиотеку подключить:
C-подобный:
#include <sdktools>
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Потому что нужно в самом начале тулс библиотеку подключить:
C-подобный:
#include <sdktools>
Это я делал сразу,когда появились ошибки.
Ну с ним потом была одна ошибка,которая относится к
HookEvent("player_spawn", EventSpawn);
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Это я делал сразу,когда появились ошибки.
Ну с ним потом была одна ошибка,которая относится к
HookEvent("player_spawn", EventSpawn);
Ты сразу сюды кидай ошибки, на месте решим. Толку говорить, что ошибки есть и не предоставлять их?
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
@-=|УЧЕНИК|=-, закомментируй строки 23 - 30, а строки 12 - 22 - раскомментируй (и закомментируй сообщение "удалять AWP" на строке 22).
Будет удалять авп.

Должно выйти вот примерно так:
C-подобный:
#include <cstrike>

public void OnPluginStart()
{
    HookEvent("player_spawn", EventSpawn);
}

public void EventSpawn(Event event, const char name, bool bdb)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(client && IsClientInGame(client) && !IsFakeClient(client))
    {
        int ent = GetPlayerWeaponSlot(client, CS_SLOT_PRIMARY);
        if(ent != -1)
        {
            char buff[12];
            GetEntityClassname(ent, buff, sizeof(buff));
            if(!strcmp(buff[7], "awp"))
            {
                CS_DropWeapon(client, ent, true, false);
                RemoveEntity(ent);
            }
        }
        GetItem(client, "knife");
        GetItem(client, "glock");
    }
}

stock void GetItem(int client, char[] item)
{
    char buff[16];
    Format(buff, sizeof(buff), "weapon_%s", item);
    int i = CreateEntityByName(buff);
    if(i < 1) return;

    float pos[3];
    GetClientAbsOrigin(client, pos);
    DispatchKeyValueVector(i, "origin", pos);
    DispatchKeyValue(i, "spawnflags", "1");
    DispatchSpawn(i);
}
Если так делать с
#include <sdktools>
То ошибка одна при компиляции

AWP_DELET.sp
C:\Users\plugins\Desktop\AWP_DELET.sp(7) : error 100: function prototypes do not match
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
public void EventSpawn(Event event, const char[] name, bool bdb)
Из за одних скобок шибка)
Да все работает нормально.
Подскажи еще пожалуйста как добавить,точнее куда,чтоб писалось в чат что авп удалено.
PrintToChat(client, "AWP БЫЛО УДАЛЕНО,ТАК-КАК ОГРАНИЧЕНО");
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Из за одних скобок шибка)
Да все работает нормально.
Подскажи еще пожалуйста как добавить,точнее куда,чтоб писалось в чат что авп удалено.
PrintToChat(client, "AWP БЫЛО УДАЛЕНО,ТАК-КАК ОГРАНИЧЕНО");
После функции RemoveEntity можешь
 

over_trax

Участник
Сообщения
1,451
Реакции
488
нужен простой плагин, который будет повышать урон одной из команд
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
нужен простой плагин, который будет повышать урон одной из команд
Тип того
C++:
#include <sdkhooks>

#define DAMAGE 1000.0
#define    TEAM 3    // 3-КТ | 2-Т

public void OnClientPostAdminCheck(int client)
{
    SDKHook(client, SDKHook_OnTakeDamage, HOOKCB);
}

public Action HOOKCB(int victim, int& attacker, int& inflictor, float& damage, int& damagetype)
{
    if(IsPlayerAlive(attacker) && GetClientTeam(attacker) == TEAM && attacker)
    {
        damage = DAMAGE;
        return Plugin_Changed;
    }
    return Plugin_Continue;
}


C-подобный:
#include <sdkhooks>

#define DAMAGE 1000.0

enum {
    UNCONNECTED = 0,
    SPEC,
    T,
    CT
}

public void OnClientPostAdminCheck(int client)
{
    SDKHook(client, SDKHook_OnTakeDamage, HOOKCB);
}

public Action HOOKCB(int victim, int& attacker, int& inflictor, float& damage, int& damagetype)
{
    if(IsPlayerAlive(attacker) && GetClientTeam(attacker) == CT && attacker)
    {
        damage = DAMAGE;
        return Plugin_Changed;
    }
    return Plugin_Continue;
}
 
Последнее редактирование:

over_trax

Участник
Сообщения
1,451
Реакции
488
Тип того
C++:
#include <sdkhooks>

#define DAMAGE 1000.0
#define    TEAM 3    // 3-КТ | 2-Т

public void OnClientPostAdminCheck(int client)
{
    SDKHook(client, SDKHook_OnTakeDamage, HOOKCB);
}

public Action HOOKCB(int victim, int& attacker, int& inflictor, float& damage, int& damagetype)
{
    if(IsPlayerAlive(attacker) && GetClientTeam(attacker) == TEAM && attacker)
    {
        damage = DAMAGE;
        return Plugin_Changed;
    }
    return Plugin_Continue;
}


C-подобный:
#include <sdkhooks>

#define DAMAGE 1000.0

enum {
    UNCONNECTED = 0,
    SPEC,
    T,
    CT
}

public void OnClientPostAdminCheck(int client)
{
    SDKHook(client, SDKHook_OnTakeDamage, HOOKCB);
}

public Action HOOKCB(int victim, int& attacker, int& inflictor, float& damage, int& damagetype)
{
    if(IsPlayerAlive(attacker) && GetClientTeam(attacker) == CT && attacker)
    {
        damage = DAMAGE;
        return Plugin_Changed;
    }
    return Plugin_Continue;
}
первый проверил - работает
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Привет всем!
Как то давненько мне переделывали плагин,щас решил глянуть его.
Вроде работает все нормально.
Изначально крашило сервер,сервер даже не запускался.
Добавил: PrecacheModel("models/error.mdl",true);
В краш перестал уходить.
Ну проблема щас другая.
В консоль хостинга очень сильно спамит.
Подскажите что нужно добавить,чтоб не было этого спама в консоле?
Версия игры 34.
Заранее благодарю.
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
 

Вложения

  • HappyNewYear_HP.sp
    9.9 КБ · Просмотры: 3

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Привет всем!
Как то давненько мне переделывали плагин,щас решил глянуть его.
Вроде работает все нормально.
Изначально крашило сервер,сервер даже не запускался.
Добавил: PrecacheModel("models/error.mdl",true);
В краш перестал уходить.
Ну проблема щас другая.
В консоль хостинга очень сильно спамит.
Подскажите что нужно добавить,чтоб не было этого спама в консоле?
Версия игры 34.
Заранее благодарю.
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Setting CBaseEntity to non-brush model models/error.mdl
Забить на него(ошибку)
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
На плагин или ошибку)
Сообщения автоматически склеены:

Забить на него(ошибку)
Забить можно,если бы она была редко)
Ну она спамит прям бесконечно.
Я так понимаю,что вариантов тут не много.
Либо ваше нет)
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@-=|УЧЕНИК|=-, разве что вылавливать любой браш на карте и использовать его модель. =)
Сообщения автоматически склеены:

ещё можно попробовать просто не назначать модель
Сообщения автоматически склеены:

Это вообще просто предупреждение и ничего больше:
 
Последнее редактирование:

Temlik

Участник
Сообщения
668
Реакции
174
Не получается заблокировать события (последним пробовал выбрасывание бомбы)
C-подобный:
public void OnPluginStart()
{
    HookEvent("bomb_dropped", Event_BombDropped, EventHookMode_Pre);
}

public Action Event_BombDropped(Event event, const char[] name, bool dontBroadcast)
{
    return Plugin_Handled;
}
 
Сверху Снизу