搜索
查看: 3316|回复: 8

请哪位帮帮一下.........谢谢

[复制链接]
发表于 2009-4-2 23:18:55 | 显示全部楼层 |阅读模式 来自 中国–广西–百色–右江区
首先感谢原作者,
想增加手雷爆炸时不见人(就是躲在里面的人)不掉血这个功能,
请哪位帮帮一下.........谢谢


#include <amxmodx>
#include <fakemeta>

new normalTrace[33], lastTrace[33], cvEnabled, weapon, dummy;

// plugin load
public plugin_init()
{
        register_plugin("No Walls","0.13","Avalanche");

        register_cvar("nowalls_version","0.13",FCVAR_SERVER);
        cvEnabled = register_cvar("nowalls_enabled","1");

        register_event("ResetHUD","event_resethud","b");
        register_clcmd("fullupdate","cmd_fullupdate");

        register_forward(FM_TraceLine,"fw_traceline");
        register_forward(FM_PlayerPostThink,"fw_playerpostthink");
}

// reset normal trace id on join or leave
public client_connect(id)
{
        normalTrace[id] = 0;
}

public client_disconnect(id)
{
        normalTrace[id] = 0;
}

// player spawns, and some other such things
public event_resethud(id)
{
        lastTrace[id] = 0;
}

// block forced resethud call
public cmd_fullupdate(id)
{
        return PLUGIN_HANDLED;
}

// traceline hook, meat and bones of the entire plugin
public fw_traceline(Float:vecStart[3],Float:vecEnd[3],ignoreM,id,ptr) // pentToSkip == id, for clarity
{
        if(!is_user_connected(id))
                return FMRES_IGNORED;

        // grab normal trace
        if(!normalTrace[id])
        {
                normalTrace[id] = ptr;
                return FMRES_IGNORED;
        }

        // ignore normal trace
        else if(ptr == normalTrace[id])
                return FMRES_IGNORED;

        // no functionality
        if(!get_pcvar_num(cvEnabled))
                return FMRES_IGNORED;

        // not a player entity, or player is dead
        if(!is_user_alive(id))
                return FMRES_IGNORED;

        // not shooting anything
        if(!(pev(id,pev_button) & IN_ATTACK))
                return FMRES_IGNORED;

        weapon = get_user_weapon(id,dummy,dummy);

        // using a shotgun, expect multiple tracelines
        if(weapon == CSW_M3 || weapon == CSW_XM1014)
                return FMRES_IGNORED;

        // this is a second traceline, for shooting through walls
        if(ptr == lastTrace[id])
        {
                // values sure to throw off any traceline
                set_tr(TR_vecEndPos,Float:{4096.0,4096.0,4096.0});
                set_tr(TR_AllSolid,1);
                set_tr(TR_pHit,0);
                set_tr(TR_iHitgroup,0);
                set_tr(TR_flFraction,1.0);

                return FMRES_SUPERCEDE;
        }

        // remeber traceline index for next time
        lastTrace[id] = ptr;

        return FMRES_IGNORED;
}

// finished client calculations, reset our traceline index
public fw_playerpostthink(id)
{
        lastTrace[id] = 0;
}
发表于 2009-4-3 19:47:57 | 显示全部楼层 来自 中国–广东–惠州–惠城区
是看不到手雷还是看不到攻击者.
回复

使用道具 举报

 楼主| 发表于 2009-4-3 20:30:36 | 显示全部楼层 来自 中国–广西–百色–右江区
就是看不见手雷即使人雷很近也不受到伤害(如手雷爆炸而人躲在门后也不被伤害)
谢谢先了...
回复

使用道具 举报

发表于 2009-4-4 17:00:02 | 显示全部楼层 来自 中国–广东–惠州–惠城区
这个可以完全代替你之前那个插件了.自己试下.

  1. #include <amxmodx>
  2. #include <engine>
  3. #include <hamsandwich>

  4. #define PLUGIN_NAME        "No Walls"
  5. #define PLUGIN_VERSION        "1.0"
  6. #define PLUGIN_AUTHOR        "zwfgdlc"

  7. #define DMG_HEGRENADE     (1 << 24)

  8. public plugin_init()
  9. {
  10.         register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
  11.         RegisterHam(Ham_TakeDamage,"player","fw_TakeDamage");
  12. }

  13. public fw_TakeDamage(victim, idinflictor, idattacker, Float:damage, damagebits)
  14. {
  15.         if((damagebits & DMG_HEGRENADE))
  16.         {
  17.                 if(victim==idattacker) //如果自己炸自己
  18.                 return HAM_IGNORED;
  19.                 else{       
  20.                         if(!is_visible(victim,idinflictor))
  21.                         {
  22.                                 SetHamParamFloat(4,0.0);
  23.                                 return HAM_HANDLED;
  24.                         }
  25.                 }
  26.         }else{       
  27.                 if(!is_visible(idattacker,victim))
  28.                 {
  29.                         SetHamParamFloat(4,0.0);
  30.                         return HAM_HANDLED;
  31.                 }
  32.         }
  33.         return HAM_IGNORED;
  34. }
复制代码
回复

使用道具 举报

发表于 2009-4-4 18:54:39 | 显示全部楼层 来自 中国–广东–深圳
顶。。。。这也要改。。。。
回复

使用道具 举报

 楼主| 发表于 2009-4-4 21:53:49 | 显示全部楼层 来自 中国–广西–南宁
本帖最后由 心静如水 于 2009-4-4 22:26 编辑

手雷功能达到了,但很难杀死人.....特难才对......
回复

使用道具 举报

 楼主| 发表于 2009-4-4 22:27:15 | 显示全部楼层 来自 中国–广西–南宁
手雷功能达到了,但很难杀死人.....特难才对......
回复

使用道具 举报

发表于 2009-4-5 15:23:02 | 显示全部楼层 来自 中国–广东–惠州–惠城区
试试这个.

  1. #include <amxmodx>
  2. #include <hamsandwich>
  3. #include <fakemeta>
  4. #include <xs>

  5. #define PLUGIN_NAME        "No Walls"
  6. #define PLUGIN_VERSION        "1.0"
  7. #define PLUGIN_AUTHOR        "zwfgdlc"

  8. #define DMG_HEGRENADE     (1 << 24)

  9. public plugin_init()
  10. {
  11.         register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
  12.         RegisterHam(Ham_TakeDamage,"player","fw_TakeDamage");
  13. }

  14. public fw_TakeDamage(victim, idinflictor, idattacker, Float:damage, damagebits)
  15. {
  16.         if((damagebits & DMG_HEGRENADE))
  17.         {
  18.                 if(victim==idattacker) //如果自己炸自己
  19.                 return HAM_IGNORED;
  20.                 else{        
  21.                         if(!fm_is_ent_visible(victim,idinflictor,1))
  22.                         {
  23.                                 SetHamParamFloat(4,0.0);
  24.                                 return HAM_HANDLED;
  25.                         }
  26.                 }
  27.         }else{        
  28.                 if(!fm_is_ent_visible(idattacker,victim,1))
  29.                 {
  30.                         SetHamParamFloat(4,0.0);
  31.                         return HAM_HANDLED;
  32.                 }
  33.         }
  34.         return HAM_IGNORED;
  35. }

  36. stock bool:fm_is_ent_visible(index, entity, ignoremonsters = 0) {
  37.         new Float:start[3], Float:dest[3];
  38.         pev(index, pev_origin, start);
  39.         pev(index, pev_view_ofs, dest);
  40.         xs_vec_add(start, dest, start);

  41.         pev(entity, pev_origin, dest);
  42.         engfunc(EngFunc_TraceLine, start, dest, ignoremonsters, index, 0);

  43.         new Float:fraction;
  44.         get_tr2(0, TR_flFraction, fraction);
  45.         if (fraction == 1.0 || get_tr2(0, TR_pHit) == entity)
  46.                 return true;

  47.         return false;
  48. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2009-4-6 00:42:57 | 显示全部楼层 来自 中国–广西–百色
本帖最后由 心静如水 于 2009-4-6 00:55 编辑

好像编译的CX.INC文件出错?
...
修改(141行)enum xs_logtypes 成 ;enum xs_logtypes 才能编译...谢谢zwfgdlc老师!
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表