[EXTENSION] [CS:GO] PTaH - V1.0.1 (Старый PHooks)

Тема в разделе "Расширения", создана пользователем komashchenko, 6 дек 2015.

  1. komashchenko

    komashchenko

    Сообщения:
    479
    Симпатии:
    420
    PTaH - P Tools and Hooks

    PHP:
    #if defined _PTaH_included
      #endinput
    #endif
    #define _PTaH_included


    #define AF_UNSPEC    0
    #define AF_INET    2
    #define AF_INET6    10

    #define INET_ADDRSTRLEN 16
    #define INET6_ADDRSTRLEN 46


    enum PTaH_HookType
    {
        
    Hook,
        
    UnHook
    };

    enum PTaH_Hook
    {
        
    PTaH_GiveNamedItem 0,
        
    PTaH_GiveNamedItemPre,
        
    PTaH_WeaponCanUse,
        
    PTaH_SetPlayerModel,
        
    PTaH_SetPlayerModelPre,
        
    PTaH_ConsolePrint,
        
    PTaH_MapContentList,
        
    PTaH_OnClientConnect,
        
    PTaH_ExecuteStringCommand,
        
    PTaH_ServerConsolePrint
    };

    enum EStickerAttributeType
    {
        
    StickerID,
        
    WearProgress,
        
    PatternScale,
        
    PatternRotation
    };

    methodmap CEconItemDefinition
    {
        
    //!!!!!!!!!!!!!!!!!!!!! CEconItemDefinition не является Handle, CloseHandle() - НЕ НУЖЕН !!!!!!!!!!!!!!!!!!!!!
        //!!!!!!!!!!!!!!!!!!!!! Всегда проверяйте, не равен ли CEconItemDefinition - NULL ( if(ItemDefinition) ) !!!!!!!!!!!!!!!!!!!!!

        /**
         *    Получает DefinitionIndex.
         *    -
         * @return    Возвращает DefinitionIndex.
         *    -
         * @error CEconItemDefinition == NULL.
        */
        
    public native int GetDefinitionIndex();
     
        
    /**
         *    Получает LoadoutSlot.
         * @param def            значение по умолчанию.
         *    -
         * @return    Возвращает LoadoutSlot.
         *    -
         * @error CEconItemDefinition == NULL.
        */
        
    public native int GetLoadoutSlot(int def = -1);
     
        
    /**
         *    Получает колиество слотов под Sticker.
         *    -
         * @return    Возвращает StickerSlotsCount.
         *    -
         * @error CEconItemDefinition == NULL.
        */
        
    public native int GetNumSupportedStickerSlots();
    };

    methodmap CEconItemView
    {
        
    //!!!!!!!!!!!!!!!!!!!!! CEconItemView не является Handle, CloseHandle() - НЕ НУЖЕН !!!!!!!!!!!!!!!!!!!!!
        //!!!!!!!!!!!!!!!!!!!!! Всегда проверяйте, не равен ли CEconItemDefinition - NULL ( if(ItemDefinition) ) !!!!!!!!!!!!!!!!!!!!!
        //!!!!!!!!!!!!!!!!!!!!! Если игрок выйдет с сервера то после вызова функции для полученого CEconItemView (PTaH_GetEconItemViewFromWeapon ет относиться если iEnt будет уничтожена) вы получете Crash сервера !!!!!!!!!!!!!!!!!!!!!
     
        /**
         *    Получает индекс скина оружия.
         *    -
         * @return    Возвращает PaintKitIndex.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public native int GetCustomPaintKitIndex();
     
        
    /**
         *    Получает смещение скина оружия.
         *    -
         * @return    Возвращает PaintKitSeed.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public native int GetCustomPaintKitSeed();
     
        
    /**
         *    Получает качество скина оружия.
         * @param def            значение по умолчанию.
         *    -
         * @return    Возвращает PaintKitWear.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public native float GetCustomPaintKitWear(float def = -1.0);
     
        
    /**
         *    Получает значение атрибута по номеру слота Sticker.
         * @param iSlot            индекс слота.
         * @param ESAT            атрибут.
         * @param def            значение по умолчанию.
         *    -
         * @return    Возвращает StickerAttribute.
         *    -
         * @error CEconItemView == NULL.
         * -
         * StickerID - возращает int, def тоже нужно передавать int
         * WearProgress, PatternScale, PatternRotation - возращает float, def тоже нужно передавать float
        */
        
    public native any GetStickerAttributeBySlotIndex(int iSlotEStickerAttributeType ESATany def);
     
        
    /**
         *    Провека: Можно ли обменивать оружие
         *    -
         * @return    Возвращает Tradable.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public native bool IsTradable();
     
        
    /**
         *    Проверка: Можно ли продать оружие - http://steamcommunity.com/market/
         *    -
         * @return    Возвращает Marketable.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public native bool IsMarketable();
     
        
    /**
         *    Получает ItemDefinition.
         *    -
         * @return    Возвращает CEconItemDefinition.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public native CEconItemDefinition GetItemDefinition();
     
        
    /**
         *    Получает AccountID владельца скина (сверить можно по GetSteamAccountID).
         *    -
         * @return    Возвращает AccountID.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public native int GetAccountID();
     
        
    /**
         *    Получает индекс владельца оружия.
         *    -
         * @return    Возвращает iClient.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public int GetClientIndex()
        {
            
    int AccountID this.GetAccountID();
            for (
    int i 1<= MaxClientsi++) if(IsClientInGame(i) && AccountID == GetSteamAccountID(i)) return i;
            return 
    0;
        }
     
        
    /**
         *    Получает кастюмный ли ItemView.
         *    -
         * @return    Возвращает IsCustom.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public bool IsCustomItemView()
        {
            return 
    this.GetAccountID() != true:false;
        }
     
        
    /**
         *    Получает Quality скина.
         *    -
         * @return    Возвращает Quality.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public native int GetQuality();
     
        
    /**
         *    Получает Rarity скина.
         *    -
         * @return    Возвращает Rarity.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public native int GetRarity();
     
        
    /**
         *    Получает Flags скина.
         *    -
         * @return    Возвращает Flags.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public native int GetFlags();
     
        
    /**
         *    Получает Origin скина.
         *    -
         * @return    Возвращает Origin.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public native int GetOrigin();
     
        
    /**
         *    Получает Неймтег скина.
         * @param sBuf            строка.
         * @param iLen            размер строки (максимальная длина, которая может быть - 161).
         *    -
         * @return    Возвращает длину Неймтега.
         *    -
         * @error CEconItemView == NULL.
        */
        
    public native int GetCustomName(char[] sBufint iLen);
     
        
    /**
         *    Получает количество StatTrak.
         *    -
         * @return    Возвращает количество StatTrak (если StatTrak = -1 значит его нет).
         *    -
         * @error CEconItemView == NULL.
        */
        
    public native int GetStatTrakKill();
    };

    methodmap AddrInfo
    {
        
    //!!!!!!!!!!!!!!!!!!!!! AddrInfo is not Handle, CloseHandle() - NOT NEEDED !!!!!!!!!!!!!!!!!!!!!
        //!!!!!!!!!!!!!!!!!!!!! Always check, if not wounded AddrInfo - NULL ( if(AddrInfo) ) !!!!!!!!!!!!!!!!!!!!!
     
        /**
         *    Получает версию IP адреса (AF_INET или AF_INET6).
         *    -
         * @return    AF_INET или AF_INET6.
         *    -
         * @error AddrInfo == NULL.
        */
        
    property int Family
        
    {
            public 
    native get();
        }
     
        
    /**
         *    Записывает IP адрес в строку.
         *    -
         * @noreturn
         *    -
         * @error AddrInfo == NULL.
        */
        
    public native void GetIP(char[] sBufferint len);
     
        
    /**
         *    Получает AddrInfo следующего IP.
         *    -
         * @return    AddrInfo.
         *    -
         * @error AddrInfo == NULL.
        */
        
    property AddrInfo NextIP
        
    {
            public 
    native get();
        }
     
        
    /**
         *    Очищает выделенную по AddrInfo память (!!! очищать нужно только основной AddrInfo, AddrInfo полученный с NextIP очищать не нужно !!!).
         *    -
         * @noreturn
         *    -
         * @error AddrInfo == NULL.
        */
        
    public native void ClearMem();
    };


    typeset PTaHCB
    {
        
    /** GiveNamedItem
         *
         *    Вызывается когда игрок получает предмет.
         *    -
         * @param iClient            Индекс игрока.
         * @param sClassname        Класснейм предмета.
         * @param Item                Кастюмизация предмета.
         * @param iEnt                Индекс Ентити предмета.
         *    -
         * @noreturn
        */
        
    function void (int iClient, const char[] sClassname, const CEconItemView Itemint iEnt);
     
        
    /** GiveNamedItemPre
         *
         *    Вызывается перед выдачей предмета.
         *    -
         * @param iClient            Индекс игрока.
         * @param sClassname        Класснейм оружия.
         * @param Item                Кастюмизация предмета.
         *    -
         * @return    Возврат Plugin_Stop или Plugin_Handled остановит выдачу предмета. Возврат Plugin_Continue разрешит выдачу предмета без изменений. Возврат Plugin_Changed разрешит выдачу примета с изминениями.
        */
        
    function Action (int iClientchar sClassname[64], CEconItemView &Item);
     
        
    /** WeaponCanUse
         *
         *    Вызывается когда игрок пытается поднять предмет.
         *    -
         * @param iClient            Индекс игрока.
         * @param iEnt                Индекс Ентити предмета.
         * @param CanUse            Для возврата без изменений.
         *    -
         * @return    Возврат false запретит подъем предмета. Возврат CanUse вернет ответ без изменений. Возврат true разрешит подъем предмета.
        */
        
    function bool (int iClientint iEntbool CanUse);
     
        
    /** SetPlayerModel
         *
         *    Вызывается после смены модели игроку.
         *    -
         * @param iClient            Индекс игрока.
         * @param sModel            Путь к модели.
         *    -
         * @noreturn
        */
        
    function void (int iClient, const char[] sModel);
     
        
    /** SetPlayerModelPre
         *
         *    Вызывается перед сменой модели игроку.
         *    -
         * @param iClient            Индекс игрока.
         * @param sModel            Путь к текущей модели игрока.
         * @param sNewModel            Путь к новой модели.
         *    -
         * @return    Возврат Plugin_Stop или Plugin_Handled остановит смену модели. Возврат Plugin_Continue разрешит смену модели без изменений. Возврат Plugin_Changed разрешит смену на измененную модель.
        */
        
    function Action (int iClient, const char[] sModelchar sNewModel[128]);
     
        
    /** ConsolePrint/ExecuteStringCommand
         * ConsolePrint
         *
         *    Вызывается перед выводом сообщения в консоль игроку.
         *    -
         * @param iClient            Индекс игрока.
         * @param sMessage            Текст сообщения.
         *    -
         * @return    Возврат Plugin_Stop или Plugin_Handled запретит вывод сообщения. Возврат Plugin_Continue разрешит вывод сообщения без изменений. Возврат Plugin_Changed разрешит вывод измененного сообщения.
         *    -
         * ExecuteStringCommand
         *
         *    Вызывается перед выполнением команды игрока на сервере.
         *    -
         * @param iClient            Индекс игрока.
         * @param sMessage            Команда.
         *    -
         * @return    Возврат Plugin_Stop или Plugin_Handled запретит выполнение. Возврат Plugin_Continue разрешит выполнение без изменений. Возврат Plugin_Changed разрешит выполнение с изенениями.
        */
        
    function Action (int iClientchar sMessage[512]);
     
        
    /** MapContentList
         *
         *    Вызывается перед созданием контента карты который будет добавлен в скачку(AddFileToDownloadsTable не вызывает данное событие).
         *    -
         * @param sFile                Путь к файлу который будет добавлен в скачку.
         *    -
         * @return    Возврат Plugin_Stop или Plugin_Handled запретит добавление контента в скачку. Возврат Plugin_Continue разрешит добавление контента в скачку без изменений. Возврат Plugin_Changed разрешит добавление контента в скачку с изменением.
        */
        
    function Action (char sFile[128]); 
     
        
    /** OnClientConnect
         *
         *    Вызывается перед авторизацией клиента на сервере.
         *    -
         * @param sName                Никнейм клиента.
         * @param sPassword            Пароль который он ввел.
         * @param sIp                IP клиента.
         * @param sSteamID            SteamID (2 версии) клиента.
         * @param rejectReason        Причина неавторизации.
         *    -
         * @return    Возврат Plugin_Stop или Plugin_Handled запретит авторизацию клиента. Возврат Plugin_Continue разрешит авторизацию без изменений. Возврат Plugin_Changed разрешит авторизацию с изменением.
        */
        
    function Action (const char[] sNamechar sPassword[128], const char[] sIp, const char[] sSteamIDchar rejectReason[512]);
     
        
    /** ServerConsolePrint
         *
         *    Вызывается перед выводом сообщение в консоль сервера (Будьте аккуратны при роботе с сообщениями).
         *    -
         * @param sMessage                Сообщение которое печатается в консоль сервера.
         *    -
         * @return    Возврат Plugin_Stop или Plugin_Handled запретит вывод сообщения. Возврат Plugin_Continue разрешит вывод без изменений.
        */
        
    function Action (const char[] sMessage);
    };

    /**
    *    Активирует хук.
    * @param type                    Тип хука.
    * @param hk                    Hook/UnHook.
    * @param callback                Обратный вызов.
    *    -
    * @return    Возвращает true в случае удачи, иначе false.
    */
    native bool PTaH(PTaH_Hook hkPTaH_HookType typePTaHCB callback);

    /**
    *    Получает CEconItemDefinition из ClassName оружия.
    * @param sClassName                    ClassName оружия.
    *    -
    * @return    Возвращает CEconItemDefinition.
    */
    native CEconItemDefinition PTaH_GetItemDefinitionByName(const char[] sClassName);

    /**
    *    Получает CEconItemView оружия клиента.
    * @param iClient                    Индекс клиента.
    * @param iTeam                        Индекс команды.
    * @param iLoadoutSlot                Индекс слота оружия.
    *    -
    * @return    Возвращает CEconItemDefinition.
    *    -
    * @error невалдный iClient, !(2 <= iTeam <= 3).
    */
    native CEconItemView PTaH_GetItemInLoadout(int iClientint iTeamint iLoadoutSlot);

    /**
    *    Получает CEconItemView оружия.
    * @param iEnt                    Индекс оружия.
    *    -
    * @return    Возвращает CEconItemDefinition.
    *    -
    * @error невалдный iEnt, iEnt не является оружием.
    */
    native CEconItemView PTaH_GetEconItemViewFromWeapon(int iEnt);

    /**
    *    Выдает игроку предмет с указанным CEconItemView.
    * @param iClient                Индекс игрока.
    * @param sClassname            Класнейм предмета.
    * @param Item                    Кастюмизация предмета.
    *    -
    * @return    Возвращает индекс предмета.
    *    -
    * @error невалдный iClient.
    */
    native int PTaH_GivePlayerItem(int iClient, const char[] sClassnameCEconItemView Item);

    /**
    *    Получает md5 hash файла.
    * @param sFile                    Путь к файлу.
    * @param sBuffer                Строка куда будет записан hash.
    * @param len                    Длина строки.
    *    -
    * @return    Возвращает true в случаи успеха.
    *    -
    * @error sFile не существует.
    */
    native bool PTaH_MD5File(const char[] sFilechar[] sBufferint len);

    /**
    *    Получает AddrInfo по хост имени.
    * @param sHostName                Имя хоста.
    * @param family                Поколение IP (AF_INET | AF_INET6 | AF_UNSPEC).
    * @param addr                    Переменная в которую будет записано AddrInfo в случаи успеха.
    *    -
    * @return    Индекс ошибки (если есть).
    */
    native int PTaH_GetAddrInfo(const char[] sHostNameint familyAddrInfo &addr);

    /**
    *    Получает ошибку по ее индексу.
    * @param error                    Индекс ошибки.
    * @param sBuffer                Строка куда будет записана ошибка.
    * @param len                    Длина sBuffer.
    *    -
    * @return    Количество записанных символов.
    */
    native int PTaH_Gai_StrError(int errorchar[] sBufferint len);

    public 
    Extension __ext_PTaH =
    {
        
    name "PTaH",
        
    file "PTaH.ext",
    #if defined AUTOLOAD_EXTENSIONS
        
    autoload 1,
    #else
        
    autoload 0,
    #endif
    #if defined REQUIRE_EXTENSIONS
        
    required 1,
    #else
        
    required 0,
    #endif
    };

    #if !defined REQUIRE_EXTENSIONS
    public __ext_PTaH_SetNTVOptional()
    {
        
    MarkNativeAsOptional("PTaH");
        
    MarkNativeAsOptional("PTaH_GetItemDefinitionByName");
        
    MarkNativeAsOptional("CEconItemDefinition.GetDefinitionIndex");
        
    MarkNativeAsOptional("CEconItemDefinition.GetLoadoutSlot");
        
    MarkNativeAsOptional("CEconItemDefinition.GetNumSupportedStickerSlots");
        
    MarkNativeAsOptional("PTaH_GetItemInLoadout");
        
    MarkNativeAsOptional("PTaH_GetEconItemViewFromWeapon");
        
    MarkNativeAsOptional("CEconItemView.GetCustomPaintKitIndex");
        
    MarkNativeAsOptional("CEconItemView.GetCustomPaintKitSeed");
        
    MarkNativeAsOptional("CEconItemView.GetCustomPaintKitWear");
        
    MarkNativeAsOptional("CEconItemView.GetStickerAttributeBySlotIndex");
        
    MarkNativeAsOptional("CEconItemView.IsTradable");
        
    MarkNativeAsOptional("CEconItemView.IsMarketable"); 
        
    MarkNativeAsOptional("CEconItemView.GetItemDefinition");
        
    MarkNativeAsOptional("CEconItemView.GetAccountID");
        
    MarkNativeAsOptional("CEconItemView.GetQuality");
        
    MarkNativeAsOptional("CEconItemView.GetRarity");
        
    MarkNativeAsOptional("CEconItemView.GetFlags");
        
    MarkNativeAsOptional("CEconItemView.GetOrigin");
        
    MarkNativeAsOptional("CEconItemView.GetCustomName");
        
    MarkNativeAsOptional("CEconItemView.GetStatTrakKill");
        
    MarkNativeAsOptional("PTaH_GivePlayerItem");
        
    MarkNativeAsOptional("PTaH_MD5File");
        
    MarkNativeAsOptional("PTaH_GetAddrInfo");
        
    MarkNativeAsOptional("PTaH_Gai_StrError");
        
    MarkNativeAsOptional("AddrInfo.Family.get");
        
    MarkNativeAsOptional("AddrInfo.GetIP");
        
    MarkNativeAsOptional("AddrInfo.NextIP.get");
    }
    #endif


    Weapon Info

    PHP:
    #pragma semicolon 1
    #include <PTaH>

    public void OnPluginStart()
    {
        
    PTaH(PTaH_ExecuteStringCommandHookExecuteStringCommand);
        
    PTaH(PTaH_OnClientConnectHookOnClientConnectPre);
        
    PTaH(PTaH_GiveNamedItemPreHookGiveNamedItemPre);
        
    PTaH(PTaH_MapContentListHookMapContentList);
        
    PTaH(PTaH_WeaponCanUseHookWeaponCanUse);
        
    PTaH(PTaH_ConsolePrintHookConsolePrint);
        
    PTaH(PTaH_SetPlayerModelHookSetPlayerModel);
        
    PTaH(PTaH_ServerConsolePrintHookServerConsolePrint);
        
    RegConsoleCmd("ptah"ptah_);
    }

     
    public 
    Action ptah_(int iClientint args)
    {
        
    char buf[64];
     
        
    AddrInfo addr;
        
    int res PTaH_GetAddrInfo("forums.alliedmods.net"AF_UNSPECaddr);
        if(
    res == 0)
        {
            
    PrintToChatAll("GetAddrInfo - forums.alliedmods.net");
            
    AddrInfo p;
            for(
    addrpp.NextIP)
            {
                
    p.GetIP(bufsizeof(buf));
                
    PrintToChatAll("%s %s"p.Family == "IP":"IP6"buf);
            }
            
    addr.ClearMem();
        }
        else
        {
            
    PTaH_Gai_StrError(resbufsizeof(buf));
            
    PrintToChatAll("GetAddrInfo - %d %s"resbuf);
        }
     
        
    PTaH_MD5File("addons/metamod.vdf"bufsizeof(buf));
        
    PrintToChatAll("HASH - addons/metamod.vdf - %s"buf);
        return 
    Plugin_Handled;
    }

    public 
    Action ExecuteStringCommand(int iClientchar sMessage[512])
    {
        
    //Blocking command status
        
    static char sMessage2[512];
        
    sMessage2 sMessage;
        
    //Remove space and tabs (commands its passed in the original form without a slew of front space and tab and etc) "           status   "
        
    TrimString(sMessage2);
        
    //*Client could write "status 3453 4534 5456 2354"
        
    if(StrContains(sMessage2"status") == 0)
        {
            
    PrintToChatAll("%N Introduced command status"iClient);
            return 
    Plugin_Handled;
        }
        return 
    Plugin_Continue;
    }

    public 
    Action OnClientConnectPre(const char[] sNamechar sPassword[128], const char[] sIp, const char[] sSteamIDchar rejectReason[512])
    {
        
    LogMessage("OnClientConnectPre %s %s %s"sNamesIpsSteamID);
        return 
    Plugin_Continue;
    }

    //We are doing the same thing as https://forums.alliedmods.net/showthread.php?t=236199 (do not forget say thank you to Dr!fter)
    public Action GiveNamedItemPre(int iClientchar sClassname[64], CEconItemView &Item)
    {
        if(!
    Item || !Item.IsCustomItemView())
        {
            
    CEconItemDefinition ItemDefinition PTaH_GetItemDefinitionByName(sClassname);
            if(
    ItemDefinition)
            {
                
    int iTeam GetClientTeam(iClient);
                
    int iLoadoutSlot ItemDefinition.GetLoadoutSlot();
                
    CEconItemView Item2 PTaH_GetItemInLoadout(iClientiTeamiLoadoutSlot);
                if(!
    Item2.IsCustomItemView())
                {
                    
    Item2 PTaH_GetItemInLoadout(iClientiTeam == 3:2iLoadoutSlot);
                    
    //                                    Fix the problem when its gave tec9 instead five-seven
                    
    if(Item2.IsCustomItemView() && ItemDefinition.GetDefinitionIndex() == Item2.GetItemDefinition().GetDefinitionIndex())
                    {
                        
    Item Item2;
                        return 
    Plugin_Changed;
                    }
                }
            }
        }
        return 
    Plugin_Continue;
    }

    //Blocking loading .nav files
    public Action MapContentList(char sFile[128])
    {
        if(
    StrContains(sFile".nav") != -1) return Plugin_Handled;
        return 
    Plugin_Continue;
    }

    //Allowing Counter-terrorist pick up C4
    public bool WeaponCanUse(int iClientint iEntbool CanUse)
    {
        static 
    char sClassname[64];
        
    GetEdictClassname(iEntsClassnamesizeof(sClassname));
        if(
    StrEqual(sClassname"weapon_c4")) return true;
        return 
    CanUse;
    }

    //Withdraw in the chat client that writes to the console
    public Action ConsolePrint(int iClientchar sMessage[512])
    {
        
    PrintToChat(iClientsMessage);
        return 
    Plugin_Continue;
    }

    public 
    void SetPlayerModel(int iClient, const char[] sModel)
    {
        
    PrintToChatAll("%N Set Model %s"iClientsModel);
    }

    //Block out messages that contain DataTable warning
    public Action ServerConsolePrint(const char[] sMessage)
    {
        if (
    StrContains(sMessage"DataTable warning") != -1) return Plugin_Handled;
        return 
    Plugin_Continue;
    }

    Спасибо: Dr!fter, Peace-Maker, GoD-Tony, rom4s

    Ссылки
    Source
    Builds
    Gamedata

    Changelog:
    1.0.1
    • Добавлен хук ServerConsolePrint
    • Исправлен PTaH_GetEconItemViewFromWeapon для Windows (Спасибо GoD-Tony)
    • PTaH_GetHostByName заменен на PTaH_GetAddrInfo

    1.0.2
    • Исправления из-за обновы CSGO. Спасибо Peace-Maker, GoD-Tony, rom4s
     

    Вложения:

    • PTaH_test.sp
      Размер файла:
      3,8 КБ
      Просмотров:
      201
    Последнее редактирование: 29 ноя 2016 в 23:40
    loginivan, Godsend, inklesspen и 2 другим нравится это.
  2. GoDtm666

    GoDtm666

    Сообщения:
    522
    Симпатии:
    558
    PHP:
    DETOUR_DECL_MEMBER1(CDownloadListGeneratorintchar *, file_name)
    {
        if (
    g_pMapContentList->GetFunctionCount() > 0)
        {
            
    char sFileByf[128];
            
    strcpy(sFileByffile_name);
            
    cell_t res PLUGIN_CONTINUE;
            
    g_pMapContentList->PushStringEx(sFileByfsizeof(sFileByf), SM_PARAM_STRING_COPYSM_PARAM_COPYBACK);
            
    g_pMapContentList->Execute(&res);

            switch (
    res
            {
                case 
    Pl_Changed:
                {
                    
    DETOUR_MEMBER_CALL(CDownloadListGenerator)(sFileByf);
                }
                case 
    Pl_Handled:
                case 
    Pl_Stop:
                {
                    return 
    0;
                }
            }
        }
        return 
    DETOUR_MEMBER_CALL(CDownloadListGenerator)(file_name);
    }
    Может так?

    PHP:
    DETOUR_DECL_MEMBER1(CDownloadListGeneratorvoid, const char *, file_name)
    {
        if (
    file_name != NULL && g_pMapContentList->GetFunctionCount() > 0)
        {
            
    char sFileByf[PATH_MAX];
            
    cell_t res PLUGIN_CONTINUE;
            
    strncpy(sFileByffile_namePATH_MAX-1);
            
    g_pMapContentList->PushStringEx(sFileByfPATH_MAX-1SM_PARAM_STRING_COPYSM_PARAM_COPYBACK);
            
    g_pMapContentList->Execute(&res);
            switch(
    res
            {
                case 
    Pl_Changed:
                {
                    
    DETOUR_MEMBER_CALL(CDownloadListGenerator)(sFileByf);
                    return;
                }
                case 
    Pl_Handled:
                {
                    return;
                }
                case 
    Pl_Stop:
                {
                    return;
                }
                default:
                {
                    break;
                }
            }
        }
        
    DETOUR_MEMBER_CALL(CDownloadListGenerator)(file_name);
        return;
    }
    PATH_MAX вроде 1024..
     
    Последнее редактирование: 11 дек 2015
  3. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.971
    Симпатии:
    2.977
    komashchenko, си++ не павн, тут в свитч нужен брейк или ретурн в каждом кейс
     
  4. BGKoKoOo

    BGKoKoOo

    Сообщения:
    33
    Симпатии:
    7
    Can you release this extension and for windows
     
  5. Tokem

    Tokem

    Сообщения:
    1
    Симпатии:
    0
    i need phooks for css
     
  6. Andy Freeman

    Andy Freeman Fatal error Супер-модератор

    Сообщения:
    407
    Симпатии:
    59
    Phooks is only for csgo
     
  7. Григорий

    Григорий

    Сообщения:
    3
    Симпатии:
    0
    Как и куда это устанавливать?
     
  8. BruteManShow

    BruteManShow

    Сообщения:
    41
    Симпатии:
    0
  9. veron

    veron

    Сообщения:
    1
    Симпатии:
    0
    Куда устанавливать!!!??? Продвинутые, ответьте!!! Нам чайникам нужна Ваша помощь!!!!
     
  10. ĦĄŇĢǾVξŘ

    ĦĄŇĢǾVξŘ καταλημμα

    Сообщения:
    273
    Симпатии:
    167
    \addons\sourcemod\
     
  11. fish2k

    fish2k

    Сообщения:
    1
    Симпатии:
    0
    сделайте компиль под WIN !!!!!
     
  12. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    830
    Симпатии:
    195
    Всякие расширения очень часто лишь для Linux, пора бы хотя-бы на ноут поставить Ubuntu\CentOS или че-нибудь еще из Linux
     
  13. Дима_ez

    Дима_ez

    Сообщения:
    1
    Симпатии:
    0
    А куда закидывать phooks_src??
     
  14. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    830
    Симпатии:
    195
    src это исходник, качай другой архив
    --- Добавлено позже ---
    Он ведь нормально работает с DHooks?
     
    Последнее редактирование: 24 авг 2016
  15. nguyenbaodanh

    nguyenbaodanh

    Сообщения:
    3
    Симпатии:
    0
    No windows version ease make one :(
     
  16. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    830
    Симпатии:
    195
    What you need from PHooks? mb I can help...
    (mb I'll write plugin on DHooks, analogue PHooks)
     
  17. ToniWaor

    ToniWaor

    Сообщения:
    77
    Симпатии:
    9
    for windows here [EXTENSION] PHooks - V1.1
     
    inklesspen нравится это.
  18. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    830
    Симпатии:
    195
    Can you download for me?
     
  19. komashchenko

    komashchenko

    Сообщения:
    479
    Симпатии:
    420
    1.0.1
    • Добавлен хук ServerConsolePrint
    • Исправлен PTaH_GetEconItemViewFromWeapon для Windows (Спасибо GoD-Tony)
    • PTaH_GetHostByName заменен на PTaH_GetAddrInfo
     
    CAH4E3, Dreizehnt и inklesspen нравится это.
  20. inklesspen

    inklesspen После "Р" в слове "Лопата"

    Сообщения:
    830
    Симпатии:
    195
    Отлично, ПТаХ делает свое дело)