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

komashchenko

Идиот
Сообщения
916
Реакции
2,569
  • Автор ресурса
  • #1
PTaH - P Tools and Hooks

include


Weapon Info

PHP:
#pragma semicolon 1
#include <PTaH>

public void OnPluginStart()
{
    PTaH(PTaH_ExecuteStringCommand, Hook, ExecuteStringCommand);
    PTaH(PTaH_OnClientConnect, Hook, OnClientConnectPre);
    PTaH(PTaH_GiveNamedItemPre, Hook, GiveNamedItemPre);
    PTaH(PTaH_MapContentList, Hook, MapContentList);
    PTaH(PTaH_WeaponCanUse, Hook, WeaponCanUse);
    PTaH(PTaH_ConsolePrint, Hook, ConsolePrint);
    PTaH(PTaH_SetPlayerModel, Hook, SetPlayerModel);
    PTaH(PTaH_ServerConsolePrint, Hook, ServerConsolePrint);
    RegConsoleCmd("ptah", ptah_);
    RegConsoleCmd("ptah2", ptah_2);
}

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

public Action ptah_2(int iClient, int args)
{
    char sBuf[32];
    GetCmdArgString(sBuf, sizeof(sBuf));
    float origin[3];
    GetClientAbsOrigin(iClient, origin);
    int iEnt = PTaH_SpawnItemFromDefIndex(StringToInt(sBuf), origin);
    PrintToChat(iClient, "%d", iEnt);
}

public Action ExecuteStringCommand(int iClient, char 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[] sName, char sPassword[128], const char[] sIp, const char[] sSteamID, char rejectReason[512])
{
    LogMessage("OnClientConnectPre %s %s %s", sName, sIp, sSteamID);
    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 iClient, char 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(iClient, iTeam, iLoadoutSlot);
            if(!Item2.IsCustomItemView())
            {
                Item2 = PTaH_GetItemInLoadout(iClient, iTeam == 2 ? 3:2, iLoadoutSlot);
                //                                    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 iClient, int iEnt, bool CanUse)
{
    static char sClassname[64];
    GetEdictClassname(iEnt, sClassname, sizeof(sClassname));
    if(StrEqual(sClassname, "weapon_c4")) return true;
    return CanUse;
}

//Withdraw in the chat client that writes to the console
public Action ConsolePrint(int iClient, char sMessage[1024])
{
    PrintToChat(iClient, sMessage);
    return Plugin_Continue;
}

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

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


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

Ссылки
Source
Builds
Gamedata
 

Вложения

  • PTaH_test.sp
    3.8 КБ · Просмотры: 1,366
Последнее редактирование:

GoDtm666

Участник
Сообщения
580
Реакции
589
PHP:
DETOUR_DECL_MEMBER1(CDownloadListGenerator, int, char *, file_name)
{
    if (g_pMapContentList->GetFunctionCount() > 0)
    {
        char sFileByf[128];
        strcpy(sFileByf, file_name);
        cell_t res = PLUGIN_CONTINUE;
        g_pMapContentList->PushStringEx(sFileByf, sizeof(sFileByf), SM_PARAM_STRING_COPY, SM_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(CDownloadListGenerator, void, const char *, file_name)
{
    if (file_name != NULL && g_pMapContentList->GetFunctionCount() > 0)
    {
        char sFileByf[PATH_MAX];
        cell_t res = PLUGIN_CONTINUE;
        strncpy(sFileByf, file_name, PATH_MAX-1);
        g_pMapContentList->PushStringEx(sFileByf, PATH_MAX-1, SM_PARAM_STRING_COPY, SM_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..
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #3
komashchenko, си++ не павн, тут в свитч нужен брейк или ретурн в каждом кейс
 

veron

Участник
Сообщения
1
Реакции
1
Куда устанавливать!!!??? Продвинутые, ответьте!!! Нам чайникам нужна Ваша помощь!!!!
 

inklesspen

Не пишу модули под LSD :с
Сообщения
1,775
Реакции
966
Отлично, ПТаХ делает свое дело)
 
Сверху Снизу