设为首页收藏本站新闻投稿

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 635|回复: 12

[求助] 关于engine的问题,就是关于用engine编写开子弹的插件 [复制链接]

Rank: 5Rank: 5

帖子
247
精华
0
声望
1053 点
金币
129 Mold
被赞许
2 次
注册时间
2008-9-15
发表于 2011-7-7 08:36:10 |显示全部楼层
本帖最后由 543658883 于 2011-7-7 08:45 编辑

我想弄一个关于僵尸的直升飞机,但是网上那个一点都不好,全部都是没有杀人信息,而是自己死掉的.

所以我就自己编写了一个,但是去测试时发现子弹没伤害,下面是代码,希望大家帮忙看看..
  1. public pfn_touch(entity1, entity2)
  2. {
  3.         if(is_valid_ent(entity1))
  4.         {
  5.                 new classname[32]
  6.                 entity_get_string(entity1, EV_SZ_classname, classname, 31)

  7.                 if(equal(classname, "m203_dan"))
  8.                 {
  9.                         new id = entity_get_edict(entity1,EV_ENT_owner)
  10.                         new vitim = entity_get_edict(entity2,EV_ENT_owner)

  11.                         if ( !zp_get_user_zombie(id) && zp_get_user_zombie(vitim) )
  12.                         {
  13.                                 new Damage = 35
  14.                                 new health = get_user_health(vitim)

  15.                                 if(health > Damage)
  16.                                 {
  17.                                         jp_take_damage(entity2,Damage,DMG_BULLET)
  18.                                 }
  19.                                 else
  20.                                 {
  21.                                         death_message(entity1, entity2, "Bullet", 1)
  22.                                 }

  23.                                 if(is_valid_ent(entity2))
  24.                                 {
  25.                                         new classname2[32]
  26.                                         entity_get_string(entity2,EV_SZ_classname,classname2,31)
  27.                                
  28.                                         if(equal(classname2,"func_breakable"))
  29.                                                 force_use(entity1,entity2)
  30.                                 }
  31.                         }
  32.                        
  33.                         remove_entity(entity1)
  34.                 }
  35.         }

  36.         return PLUGIN_CONTINUE
  37. }

  38. stock jp_take_damage(victim,damage,bit)
  39. {
  40.         message_begin(MSG_ONE,get_user_msgid("Damage"),{0,0,0},victim)
  41.         write_byte(21)
  42.         write_byte(20)
  43.         write_long(bit)
  44.         message_end()
  45.        
  46.         set_user_health(victim,get_user_health(victim)-damage)
  47. }
复制代码
而且我想弄射到僵尸就会暴血+退后,射墙有火花
还有我想问大家,怎么弄开炮的时候自己往后退??

希望大家帮忙解决一下,我感激不尽!!
因为MOD论坛更新了,我也不知道插件求助在哪了.所以只能来这发了.
系统错误,请联系管理员

使用道具 举报

Rank: 5Rank: 5

帖子
247
精华
0
声望
1053 点
金币
129 Mold
被赞许
2 次
注册时间
2008-9-15
发表于 2011-7-7 08:43:22 |显示全部楼层
我好久没发过贴了,先拿个沙发..
这个不会太难吧,但是却难倒我了,希望高手帮帮忙..
系统错误,请联系管理员

使用道具 举报

Rank: 10Rank: 10Rank: 10

帖子
4597
精华
3
声望
9452 点
金币
26 Mold
被赞许
115 次
注册时间
2009-10-18

MTT职员 最佳贡献奖 热心会员奖 可爱小猫 黑暗使者 Modchina元老 Modchina灌水王 星界财团 图界之神

发表于 2011-7-7 08:49:02 |显示全部楼层
你发的位置是正确的- -
但是我不知道- -

使用道具 举报

Rank: 3Rank: 3

帖子
28
精华
0
声望
488 点
金币
30 Mold
被赞许
0 次
注册时间
2011-5-23
发表于 2011-7-7 09:44:40 |显示全部楼层
用fm_fakedamage吧,子弹伤害 damagetype是DMG_BULLET
  1. stock fm_fakedamage(victim, const classname[], Float:takedmgdamage, damagetype) {
  2.         new class[] = "trigger_hurt";
  3.         new entity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, class))
  4.         if (!entity)
  5.                 return 0;

  6.         new value[16];
  7.         float_to_str(takedmgdamage * 2, value, sizeof value - 1);
  8.         fm_set_kvd(entity, "dmg", value, class);

  9.         num_to_str(damagetype, value, sizeof value - 1);
  10.         fm_set_kvd(entity, "damagetype", value, class);

  11.         fm_set_kvd(entity, "origin", "8192 8192 8192", class);
  12.         dllfunc(DLLFunc_Spawn,entity);

  13.         set_pev(entity, pev_classname, classname);
  14.         dllfunc(DLLFunc_Touch,entity, victim);
  15.         engfunc(EngFunc_RemoveEntity,entity);

  16.         return 1;
  17. }
复制代码

使用道具 举报

Rank: 5Rank: 5

帖子
247
精华
0
声望
1053 点
金币
129 Mold
被赞许
2 次
注册时间
2008-9-15
发表于 2011-7-7 09:48:36 |显示全部楼层
本帖最后由 543658883 于 2011-7-7 09:51 编辑

我去试试,谢谢楼上那位..!!
我想问,这个是不是怎么用??
系统错误,请联系管理员

使用道具 举报

Rank: 3Rank: 3

帖子
28
精华
0
声望
488 点
金币
30 Mold
被赞许
0 次
注册时间
2011-5-23
发表于 2011-7-7 09:49:05 |显示全部楼层
为什么我运行jp_take_damage就出错了呢?
  1. message_begin(MSG_ONE,get_user_msgid("Damage"),{0,0,0},victim)
  2.         write_byte(21)
  3.         write_byte(20)
  4.         write_long(bit)
  5.         message_end()
复制代码
我查write_byte(21)是#define TE_BEAMCYLINDER             21
能解释这个message吗?
我恨验证要填2次,都开邀请了,还用验证什么?

使用道具 举报

Rank: 5Rank: 5

帖子
247
精华
0
声望
1053 点
金币
129 Mold
被赞许
2 次
注册时间
2008-9-15
发表于 2011-7-7 09:53:00 |显示全部楼层
西纳德狂人 发表于 2011-7-7 09:49
为什么我运行jp_take_damage就出错了呢?我查write_byte(21)是#define TE_BEAMCYLINDER             21
能 ...

我不清楚,我是直接在火箭筒里面复制出来的..
我编译没事
系统错误,请联系管理员

使用道具 举报

Rank: 3Rank: 3

帖子
28
精华
0
声望
488 点
金币
30 Mold
被赞许
0 次
注册时间
2011-5-23
发表于 2011-7-7 09:57:10 |显示全部楼层
fm_fkedamage还需要 fm_set_kvd
  1. stock fm_set_kvd(entity, const key[], const value[], const classname[] = "") {
  2.         if (classname[0])
  3.                 set_kvd(0, KV_ClassName, classname);
  4.         else {
  5.                 new class[32];
  6.                 pev(entity, pev_classname, class, sizeof class - 1);
  7.                 set_kvd(0, KV_ClassName, class);
  8.         }

  9.         set_kvd(0, KV_KeyName, key);
  10.         set_kvd(0, KV_Value, value);
  11.         set_kvd(0, KV_fHandled, 0);

  12.         return dllfunc(DLLFunc_KeyValue, entity, 0);
  13. }
复制代码
我是运行出错“User Msg 'Damage':6bytes written,expected 12

我恨验证

使用道具 举报

Rank: 5Rank: 5

帖子
247
精华
0
声望
1053 点
金币
129 Mold
被赞许
2 次
注册时间
2008-9-15
发表于 2011-7-7 10:05:58 |显示全部楼层
可不可以来个详细点的..
如:fm_fakedamage(victim, const classname[], 999, DMG_BULLET)
const classname[], 是什么?
系统错误,请联系管理员

使用道具 举报

Rank: 3Rank: 3

帖子
28
精华
0
声望
488 点
金币
30 Mold
被赞许
0 次
注册时间
2011-5-23
发表于 2011-7-7 10:28:22 |显示全部楼层
本帖最后由 西纳德狂人 于 2011-7-7 10:33 编辑
  1. message_begin(MSG_ONE,get_user_msgid("Damage"),{0,0,0},id)
  2.          write_byte(21)
  3.          write_byte(20)
  4.          write_long(2)
  5.         write_coord(704)   // x坐标
  6.         write_coord(-384) // y坐标
  7.         write_coord(-128)  // z坐标
  8.          message_end()
复制代码
效果良好。主要是缺少damage来源坐标,但DamageSave=21,DamageTake=20就解释不了是什么意思~
classname乱填吧...或者填个武器的  "weapon_m3"
我恨验证

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

回顶部