注册 登录
MOD中国同盟社 返回首页

Hopelagiant的个人空间 http://www.modchina.com/?125526 [收藏] [复制] [分享] [RSS]

日志

纪念:同盟社Robert关于通用型单武器插件的改良建议-1

已有 558 次阅读2012-1-18 00:17 |个人分类:插件编程| Robert, 通用

蒙同盟社高人Robert指点,我的通用型单武器插件才会发展到今天,万分感激……
以下是其赠与的模组替换方案,谨此纪念经离开了同盟社的Robert:
代码:
#define 武器编号(如WEAPON_M95) 数字(最好四位以上,如100001)

// Player Offset (+5)
const m_pActiveItem = 373
// WeaponBox Offset (+4)
const m_rgpPlayerItems2 = 34

public plugin_init()
{
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
        register_clcmd("获取命令(如get_m95)", "ClientCommand_Test")
        register_forward(FM_SetModel, "fw_SetModel")
        // 以AWP作为模型的实体(举例)
        RegisterHam(Ham_Item_Deploy, "weapon_awp", "fw_Item_Deploy_Post", 1)
        RegisterHam(Ham_Item_AttachToPlayer, "weapon_awp", "fw_Item_AttachToPlayer_Post", 1)
}

public ClientCommand_Test(iPlayer)
{
        // 这里没有用GiveItem是为了能得到武器实体的Index
        new iEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "weapon_awp"))

        new Float:vecOrigin[3]
        pev(iPlayer, pev_origin, vecOrigin)
        set_pev(iEntity, pev_origin, vecOrigin)
        set_pev(iEntity, pev_spawnflags, SF_NORESPAWN)
        set_pev(iEntity, pev_iuser4, 武器编号)

        dllfunc(DLLFunc_Spawn, iEntity)
        dllfunc(DLLFunc_Touch, iEntity, iPlayer)
}

public fw_SetModel(iEntity, szModel[])
{
        if (strcmp(szModel, "models/w_awp.mdl"))
                return FMRES_IGNORED
                
        new szClassName[32]
        pev(iEntity, pev_classname, szClassName, charsmax(szClassName))

        if (strcmp(szClassName, "weaponbox"))
                return FMRES_IGNORED

        new iWeapon
        for (new i = 1; i <= 5; i++)
        {
                iWeapon = get_pdata_cbase(iEntity, m_rgpPlayerItems2 + 1, 4)//+1:主武器;+2副武器;
 
                if (iWeapon > 0)
                        break
}

        if (pev(iWeapon, pev_iuser4) == 武器编号)
        {
                engfunc(EngFunc_SetModel, iEntity, "models/w_m95.mdl")
        }

        return FMRES_SUPERCEDE
}

public fw_Item_Deploy_Post(iEntity)
{
        new iPlayer = get_pdata_cbase(iEntity, m_pPlayer, 5)

        if (pev(iEntity, pev_iuser4) == 武器编号)
        {
                set_pev(iPlayer, pev_viewmodel2, "models/v_m95.mdl")
                set_pev(iPlayer, pev_weaponmodel2, "models/p_m95.mdl")
        }
}

public fw_Item_AttachToPlayer_Post(iEntity)
{
        new iPlayer = pev(iEntity, pev_owner)

        if (get_pdata_cbase(iPlayer, m_pActiveItem) == iEntity)
        {
                fw_Item_Deploy_Post(iEntity)
        }
}

路过

鸡蛋

鲜花

握手

雷人
收藏 分享 转发到开心网 举报

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册
验证问答 换一个 验证码 换一个

回顶部