Иконка ресурса

[VIP] Instruments 1.5.2

DOVE

GLite Inc.
Сообщения
296
Реакции
54
Оффтоп
 

Truyn

King of clowns
Сообщения
1,591
Реакции
749

xek

Рыба клоун
Сообщения
1,652
Реакции
636
Оружие выдается, но нельзя его кинуть в противника
 

DismoraL

Участник
Сообщения
183
Реакции
47
Выдаётся прошлый инструмент, если выбрать пункт "Ничего".


C-подобный:
Metamod:Source 1.10.7-dev
SourceMod (1.9.0.6274)

[VIP] Core (3.0 R) by R1KO
[VIP] Instruments (1.5.1 [PUBLIC])
 

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #68
Пользователь Faya™ обновил ресурс [VIP] Instruments новой записью:

Фикс

Исправлен "баг" если установить параметр "ничего" то при перезаходе выдает предыдущее оружие.

Узнать больше об этом обновлении...
--- Добавлено позже ---
Выдаётся прошлый инструмент, если выбрать пункт "Ничего".


C-подобный:
Metamod:Source 1.10.7-dev
SourceMod (1.9.0.6274)

[VIP] Core (3.0 R) by R1KO
[VIP] Instruments (1.5.1 [PUBLIC])
Тоже заметил это)
Фикс в 1.5.2
 

m0rbit

Участник
Сообщения
720
Реакции
159
А можно делать сразу две версии тогда?) Одну без метательных ножей.

А еще лучше сделать возможность самому разрешать/запрещать инструменты
Мне вот например ножи не нужны. Но я не могу теперь фикс поставить) Ибо в нём ножи.
 

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #70
А можно делать сразу две версии тогда?) Одну без метательных ножей.

А еще лучше сделать возможность самому разрешать/запрещать инструменты
Мне вот например ножи не нужны. Но я не могу теперь фикс поставить) Ибо в нём ножи.
Разделение делать я не буду, не хочу, и не хочу:D
--- Добавлено позже ---
Версия 1.5.2 без метательного ножа
PHP:
/*
/    Версия 1.0
/        Релиз
/    Версия 1.1
/        Оптимизация кода
/        Убрана поддержка изменения урона
/    Версия 1.2
/        Оптимизация кода v2
/        Добавлена поддержка изменения урона
/    Версия 1.3
/        Оптимизация кода v3
/    Версия 1.4
/        Оптимизация кода v4
/        Исправлен баг когда не вип игрок метая инструмент наносил измененный урон
/    Версия 1.5
/        Оптимизация кода v5
/        Добавлена поддержка мультиязычной меню
/        Добавлено новое метательное оружие (метательный нож)
/        Добавлена возможность подобрать свой инструмент после выкидывания "Instruments_To_Lift"
/        Добавлена возможность заблокировать выкидывание инструмента "Instruments_Throw_Out"
/        Исправлен баг когда не вип игрок метая инструмент наносил измененный урон
/    Версия 1.5.1
/        Дописана полная выгрузка модуля, для корректной выгрузки загрузки модуля
/    Версия 1.5.2
/        Исправлен "баг" если установить параметр "ничего" то при перезаходе выдает предыдущее оружие.
*/

#include <vip_core>
#include <sdktools>
#include <sdkhooks>
#include <clientprefs>

#pragma semicolon 1
#pragma newdecls required

static const char g_szFeature[][] = {"Instruments", "Instruments_Throw_Out", "Instruments_To_Lift"};

int m_hMyWeapons, m_iItemDefinitionIndex, g_iInstruments[MAXPLAYERS + 1];
char g_szInstruments[MAXPLAYERS + 1][24];
Handle hCookie;

public Plugin myinfo =
{
    name        = "[VIP] Instruments",
    author        = "Faya™ (DS: Faya™#8514)",
    version        = "1.5.2 [PUBLIC]",
    url            = "http://hlmod.ru"
};

public void OnPluginStart()
{
    HookEvent("player_spawn", ePS);
    hCookie = RegClientCookie("VIP_Instruments_test", "VIP_Instruments_test", CookieAccess_Protected);

    m_hMyWeapons = FindSendPropInfo("CBasePlayer", "m_hMyWeapons");
    m_iItemDefinitionIndex = FindSendPropInfo("CEconEntity", "m_iItemDefinitionIndex");

    if(VIP_IsVIPLoaded()) VIP_OnVIPLoaded();

    for(int i = 1; i <= MaxClients; i++)
        if(IsClientInGame(i) && !IsClientSourceTV(i))
        {
            OnClientPutInServer(i);
            VIP_OnVIPClientLoaded(i);
        }

    LoadTranslations("vip_instruments.phrases");
}

public void OnPluginEnd()
{
    if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "VIP_UnregisterFeature") == FeatureStatus_Available)
    {
        VIP_UnregisterFeature(g_szFeature[0]);
        VIP_UnregisterFeature(g_szFeature[1]);
        VIP_UnregisterFeature(g_szFeature[2]);
    }
}

public void VIP_OnVIPLoaded()
{
    VIP_RegisterFeature(g_szFeature[0], FLOAT, SELECTABLE, OnSelectItem);
    VIP_RegisterFeature(g_szFeature[1], BOOL, HIDE);
    VIP_RegisterFeature(g_szFeature[2], BOOL, HIDE);
}

public void OnClientPutInServer(int iClient)
{
    g_szInstruments[iClient][0] = 0;
    g_szInstruments[iClient][7] = 0;
    if(!IsFakeClient(iClient)) SDKHook(iClient, SDKHook_WeaponCanUse, CallBack_SDKHook_WCU);
    SDKHook(iClient, SDKHook_OnTakeDamageAlive, CallBack_SDKHook_OTDA);
}

public void VIP_OnVIPClientLoaded(int iClient)
{
    if(VIP_GetClientFeatureStatus(iClient, g_szFeature[0]))
    {
        char szBuffer[24];
        GetClientCookie(iClient, hCookie, szBuffer, sizeof szBuffer);
        if(szBuffer[0]) strcopy(g_szInstruments[iClient], sizeof g_szInstruments[], szBuffer);
        else
        {
            g_szInstruments[iClient][0] = 0;
            g_szInstruments[iClient][7] = 0;
        }
    }
}

public void OnClientDisconnect(int iClient)
{
    if(!IsFakeClient(iClient)) SetClientCookie(iClient, hCookie, g_szInstruments[iClient]);
}

public bool OnSelectItem(int iClient, const char[] szFeature)
{
    OpenMenu(iClient);

    return false;
}

void OpenMenu(int iClient)
{
    Handle hMenu = CreateMenu(CallBack_Menu, MenuAction_End|MenuAction_Cancel|MenuAction_Select);
    char szBuffer[64];
    FormatEx(szBuffer, sizeof szBuffer, "%t\n ", "MENU_TITLE");
    SetMenuTitle(hMenu, szBuffer);
    SetMenuExitBackButton(hMenu, true);

    FormatEx(szBuffer, sizeof szBuffer, "%t\n ", "MENU_NOTHING", g_szInstruments[iClient][0] == 0 ? "MENU_ON" : "MENU_OFF");
    AddMenuItem(hMenu, "", szBuffer);

    FormatEx(szBuffer, sizeof szBuffer, "%t", "MENU_AXE", g_szInstruments[iClient][7] == 'a' ? "MENU_ON" : "MENU_OFF");
    AddMenuItem(hMenu, "weapon_axe", szBuffer);

    FormatEx(szBuffer, sizeof szBuffer, "%t", "MENU_HAMMER", g_szInstruments[iClient][7] == 'h' ? "MENU_ON" : "MENU_OFF");
    AddMenuItem(hMenu, "weapon_hammer", szBuffer);

    FormatEx(szBuffer, sizeof szBuffer, "%t", "MENU_SPANNER", g_szInstruments[iClient][7] == 's' ? "MENU_ON" : "MENU_OFF");
    AddMenuItem(hMenu, "weapon_spanner", szBuffer);

    DisplayMenu(hMenu, iClient, MENU_TIME_FOREVER);
}

public int CallBack_Menu(Menu hMenu, MenuAction eAction, int iClient, int iItem)
{
    switch(eAction)
    {
        case MenuAction_End: CloseHandle(hMenu);
        case MenuAction_Cancel: if(iItem == MenuCancel_ExitBack) VIP_SendClientVIPMenu(iClient);
        case MenuAction_Select:
        {
            if(iItem == 0) g_szInstruments[iClient][7] = 0;
            GetMenuItem(hMenu, iItem, g_szInstruments[iClient], sizeof g_szInstruments[]);

            OpenMenu(iClient);
        }
    }

    return 0;
}

public void ePS(Event event, const char[] name, bool dontBroadcast)
{
    int iClient = GetClientOfUserId(GetEventInt(event, "userid"));
    if(VIP_IsClientFeatureUse(iClient, g_szFeature[0]))
    {
        int iWeapon;
        for(int i; i < 64; i++)
        {
            iWeapon = GetEntDataEnt2(iClient, m_hMyWeapons+i*4);
            if(iWeapon != -1 && IsValidEntity(iWeapon))
                switch(GetEntData(iWeapon, m_iItemDefinitionIndex))
                {
                    case 75, 76, 78: return;
                }
        }
        if(g_szInstruments[iClient][0] != 0)
        {
            g_iInstruments[iClient] = GivePlayerItem(iClient, g_szInstruments[iClient]);
            EquipPlayerWeapon(iClient, g_iInstruments[iClient]);
        }
    }
}

public Action CallBack_SDKHook_OTDA(int iVictim, int& iAttacker, int& iInflictor, float& fDamage, int& iDamagetype, int& iWeapon, float fDamageForce[3], float fDamagePosition[3])
{
    if(iVictim > 0 && iVictim <= MaxClients && iAttacker > 0 && iAttacker <= MaxClients && iWeapon == -1 && VIP_IsClientVIP(iAttacker) && g_szInstruments[iAttacker][0] != 0 && (fDamage == 60.0 || fDamage == 30.0) && iDamagetype & 4224)
    {
        fDamage = VIP_GetClientFeatureFloat(iAttacker, g_szFeature[0]);

        return Plugin_Changed;
    }

    return Plugin_Continue;
}

public Action CallBack_SDKHook_WCU(int iClient, int iWeapon)
{
    if(iWeapon != 1 && VIP_IsClientFeatureUse(iClient, g_szFeature[2]) && g_iInstruments[iClient] == iWeapon)
        switch(GetEntData(iWeapon, m_iItemDefinitionIndex))
        {
            case 75, 76, 78: EquipPlayerWeapon(iClient, iWeapon);
        }

    return Plugin_Continue;
}

public Action OnPlayerRunCmd(int iClient, int& iButtons)
{
    if(iButtons & IN_ATTACK2)
        if(!VIP_IsClientFeatureUse(iClient, g_szFeature[1]))
        {
            static int iWeapon; static char szWeapon[24];
            iWeapon = GetEntPropEnt(iClient, Prop_Send, "m_hActiveWeapon");
            if(iWeapon != 1 && IsValidEdict(iWeapon))
            {
                GetEdictClassname(iWeapon, szWeapon, sizeof szWeapon);
                if(!strcmp(szWeapon[7], "melee"))
                {
                    iButtons &= ~IN_ATTACK2;
                    return Plugin_Changed;
                }
            }
        }

    return Plugin_Continue;
}
 

Вложения

  • VIP_Instruments.smx
    8.3 КБ · Просмотры: 23

m0rbit

Участник
Сообщения
720
Реакции
159
Я имею ввиду было бы удобно если бы можно было через тот же конфиг самому указывать какие инструменты доступны игроку
 

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #72
Я имею ввиду было бы удобно если бы можно было через тот же конфиг самому указывать какие инструменты доступны игроку
Ну так я ответил, я не буду, не хочу потому что, мб когда то и сделаю...
 

Туник

Участник
Сообщения
1,281
Реакции
263
@Faya™, есть проблема с выдачей при использовании плагина на ножи от Феникса, есть ли возможность совместить это, и чтобы при выборе допустим топора нож пропадал, а не появлялся в инвенторе топор и взять его нельзя!
 

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #74
@Faya™, есть проблема с выдачей при использовании плагина на ножи от Феникса, есть ли возможность совместить это, и чтобы при выборе допустим топора нож пропадал, а не появлялся в инвенторе топор и взять его нельзя!
(если я правильно тебя понял) Ты имеешь введу что, у тебя топор + нож, и ты не можешь взять нож или топор в руку?
Если так то, (я точно не помню как оно делается напишу как помню) что бы взять топор нужно нажать 3, а если хочешь взять нож, то нужно колесиком мышки покрутить. Это уже фича ксго.
Если это не то про сто ты пишешь, то я тебя не понял.
 

Туник

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

Faya™

Жуестер
Сообщения
867
Реакции
457
  • Автор ресурса
  • #76
@Faya™, эмм типо чтобы топор взять надо f3 нажать, ок попробую я по старинке колесом делаю или на q последнее оружие, так-как всего на аим сервере 2 оружия, и не парился никогда f кнопками!
да причем тут f, я про кнопку 3
 

xek

Рыба клоун
Сообщения
1,652
Реакции
636
Возможно добавить квар на задержку использования в начале раунда?
 

KonveeR

Hanzo hasashi
Сообщения
1,639
Реакции
667
Так что нить про кулаки известно?
Есть ли вообще модуль для VIP с кулаками?
 
Сверху Снизу