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

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 861|回复: 9

[已解决] 请问怎么才能让模型实体按一定速度移动 [复制链接]

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
1011
精华
2
声望
24573 点
金币
154 Mold
被赞许
14 次
注册时间
2008-8-7

新人进步奖 Modchina元老 可爱小猫 懒人勋章

发表于 2011-1-1 23:07:50 |显示全部楼层
用的是engine 模块
模型实体创建成功,想让它移动,我用的是entity_set_vector,但不成功
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <engine>
  4. public plugin_precache()
  5. {
  6.         precache_model("models/player/f_Vita2/f_Vita2.mdl");
  7. }

  8. public plugin_init() {  
  9.     register_concmd("checkbot","checkbot")
  10. }
  11. public checkbot(id)
  12. {
  13.         new ent = create_entity("info_target");
  14.         new Float:origin[3]={704.0,-384.0,-128.0};
  15.         entity_set_origin(ent,origin);
  16.         entity_set_int(ent,EV_INT_solid,SOLID_BBOX);
  17.         entity_set_float(ent,EV_FL_takedamage,1.0);
  18.         entity_set_float(ent,EV_FL_health,100.0)
  19.         entity_set_string(ent,EV_SZ_classname,"vita");
  20.         entity_set_model(ent,"models/player/f_Vita2/f_Vita2.mdl");
  21.         new Float:maxs[3] = {16.0,16.0,36.0}
  22.         new Float:mins[3] = {-16.0,-16.0,-36.0}
  23.         entity_set_size(ent,mins,maxs)
  24.         entity_set_float(ent,EV_FL_framerate,1.0)
  25.         entity_set_int(ent,EV_INT_sequence,0);
  26.         drop_to_floor(ent)
  27.         new Float:fVelocity[3]={128.0,0.0,0.0} // 设置X方向移动速度为128
  28.         entity_set_vector(ent,EV_VEC_velocity,fVelocity); // 实现不了
  29. }
复制代码
但奇妙的是对player使用entity_set_vector(id,EV_VEC_velocity,fVelocity)是能够让player移动的
已有 1 人评分声望 收起 理由
阿发 + 16 鼓励提问

总评分: 声望 + 16   查看全部评分

使用道具 举报

Super Moderator

此人已辞职,有事找别人.

Rank: 10Rank: 10Rank: 10

帖子
2341
精华
3
声望
9852 点
金币
3913 Mold
被赞许
-37 次
注册时间
2004-7-17

Modchina元老

发表于 2011-1-1 23:17:30 |显示全部楼层
f_Vita2.mdl??
此号待删除,不再登陆.

使用道具 举报

Super Moderator

此人已辞职,有事找别人.

Rank: 10Rank: 10Rank: 10

帖子
2341
精华
3
声望
9852 点
金币
3913 Mold
被赞许
-37 次
注册时间
2004-7-17

Modchina元老

发表于 2011-1-1 23:22:37 |显示全部楼层
public fire_rocket(id) {

//afa 发射
  entity_set_int(id, EV_INT_sequence, RPG_shoot)//afa发射动作序号
  entity_set_float(id, EV_FL_animtime, get_gametime())
  entity_set_float(id, EV_FL_frame, 0.0)
  entity_set_float(id, EV_FL_framerate, 1.0)

  if (Munni[id] <= 0) {
    client_print(id,print_center,"火箭筒的弹药用光了")
    emit_sound(id, CHAN_WEAPON, "weapons/dryfire_rifle.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    return PLUGIN_HANDLED
  }
  if (!CanShoot[id] && Munni[id] > 0){
    client_print(id, print_center, "火箭筒还没有装填完毕")
    return PLUGIN_HANDLED
  }

  new Float:StartOrigin[3], Float:Angle[3]

  new PlayerOrigin[3]
  get_user_origin(id, PlayerOrigin, 1)

  StartOrigin[0] = float(PlayerOrigin[0])
  StartOrigin = float(PlayerOrigin)
  StartOrigin[2] = float(PlayerOrigin[2])

  entity_get_vector(id, EV_VEC_v_angle, Angle)
  Angle[0] = Angle[0] * -1.0
  new RocketEnt = create_entity("info_target")
  entity_set_string(RocketEnt, EV_SZ_classname, "bazooka_rocket")
  entity_set_model(RocketEnt, "models/huojiand.mdl")
  entity_set_origin(RocketEnt, StartOrigin)
  entity_set_vector(RocketEnt, EV_VEC_angles, Angle)

  new Float:MinBox[3] = {-1.0, -1.0, -1.0}
  new Float:MaxBox[3] = {1.0, 1.0, 1.0}
  entity_set_vector(RocketEnt, EV_VEC_mins, MinBox)
  entity_set_vector(RocketEnt, EV_VEC_maxs, MaxBox)

  entity_set_int(RocketEnt, EV_INT_solid, 2)
  entity_set_int(RocketEnt, EV_INT_movetype, 5)

  entity_set_edict(RocketEnt, EV_ENT_owner, id)

  new Float:Velocity[3]
  VelocityByAim(id, 1000, Velocity)
  entity_set_vector(RocketEnt, EV_VEC_velocity, Velocity)

  emit_sound(RocketEnt, CHAN_WEAPON, "weapons/m202a1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  emit_sound(RocketEnt, CHAN_VOICE, "weapons/nuke_fly.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

  CanShoot[id] = false
  client_print(id,print_center,"正在重新装填火箭筒")
  new data
  data[0] = id
  set_task(get_cvar_float("amx_bazooka_reloadtime"), "bazooka_reload", id+9477, data, 1)
    //afa 发射后填装
  set_task(1.0, "bazooka_reload1", id+3322, data, 1)//发射1.0s后填装
  
  ammo_hud(id, 0)
  Munni[id]--

  return PLUGIN_HANDLED
}
此号待删除,不再登陆.

使用道具 举报

Super Moderator

此人已辞职,有事找别人.

Rank: 10Rank: 10Rank: 10

帖子
2341
精华
3
声望
9852 点
金币
3913 Mold
被赞许
-37 次
注册时间
2004-7-17

Modchina元老

发表于 2011-1-1 23:24:08 |显示全部楼层
能不用engine尽量不要用 fm都可以实现的
此号待删除,不再登陆.

使用道具 举报

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
1011
精华
2
声望
24573 点
金币
154 Mold
被赞许
14 次
注册时间
2008-8-7

新人进步奖 Modchina元老 可爱小猫 懒人勋章

发表于 2011-1-1 23:40:30 |显示全部楼层
回复 4# 阿发


    我也知道fakemeta>engine,今晚按你的代码再想想,那个模型是Vita,加了阿发的prefix。

使用道具 举报

Rank: 3Rank: 3

帖子
96
精华
0
声望
446 点
金币
481 Mold
被赞许
6 次
注册时间
2010-7-4
发表于 2011-1-1 23:44:03 |显示全部楼层
本帖最后由 Robert 于 2011-1-1 23:46 编辑

同阿发,Engine 千万不要用,会发生意想不到的实体问题。比如门不好使了。或者其他随机性的问题。

velocity 应该是推力。
试试 speed。

fakemeta 的写法是。
set_pev(entity, pev_speed, float..)

使用道具 举报

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
1011
精华
2
声望
24573 点
金币
154 Mold
被赞许
14 次
注册时间
2008-8-7

新人进步奖 Modchina元老 可爱小猫 懒人勋章

发表于 2011-1-1 23:52:59 |显示全部楼层
行了!!谢谢发哥!!
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <engine>
  4. public plugin_precache()
  5. {
  6.         precache_model("models/player/f_Vita2/f_Vita2.mdl");
  7. }

  8. public plugin_init() {  
  9.     register_concmd("checkbot","checkbot")
  10. }
  11. public checkbot(id)
  12. {
  13.         new ent = create_entity("info_target");
  14.         new Float:origin[3]={704.0,-384.0,-128.0};
  15.         entity_set_origin(ent,origin);
  16.         entity_set_int(ent,EV_INT_solid,SOLID_BBOX);
  17.         entity_set_float(ent,EV_FL_takedamage,1.0);
  18.         entity_set_float(ent,EV_FL_health,100.0)
  19.         entity_set_string(ent,EV_SZ_classname,"vita");
  20.         entity_set_model(ent,"models/player/f_Vita2/f_Vita2.mdl");
  21.         new Float:maxs[3] = {16.0,16.0,36.0}
  22.         new Float:mins[3] = {-16.0,-16.0,-36.0}
  23.         entity_set_size(ent,mins,maxs)
  24.         entity_set_float(ent,EV_FL_framerate,1.0)
  25.         entity_set_int(ent,EV_INT_sequence,0);
  26.         drop_to_floor(ent)
  27.         new Float:fVelocity[3]={128.0,0.0,0.0}; // 设置X方向移动速度为128
  28.         entity_set_int(ent, EV_INT_movetype, MOVETYPE_FLY) // 移动类型,忽略重力
  29.         entity_set_vector(ent,EV_VEC_velocity,fVelocity);
  30. }
复制代码

使用道具 举报

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
1011
精华
2
声望
24573 点
金币
154 Mold
被赞许
14 次
注册时间
2008-8-7

新人进步奖 Modchina元老 可爱小猫 懒人勋章

发表于 2011-1-1 23:57:12 |显示全部楼层
回复 6# Robert


    我用fakemeta不会设置模型的血量
    用engine可以:
        entity_set_float(ent,EV_FL_takedamage,1.0) // 能够攻击,开启设置health
        entity_set_float(ent,EV_FL_health,100.0) // 血量100
        //对应的pev不清楚

    而且:
        entity_set_size(ent,mins,maxs) // 设置模型的大小,可以确定模型的范围,阻挡范围
        //对应的set_pev(ent,pev_size,mins,maxs)不起作用,可能是我用错了吧

使用道具 举报

Rank: 3Rank: 3

帖子
96
精华
0
声望
446 点
金币
481 Mold
被赞许
6 次
注册时间
2010-7-4
发表于 2011-1-2 00:38:43 |显示全部楼层
设置大小,不能用那个。。
  1. 换这个
  2. engfunc(EngFunc_SetSize, index, mins, maxs)
复制代码
set_pev(ent, pev_health, 100.0) 设置血量.
takedamage 大于 0 就可以接受伤害。
已有 1 人评分声望 收起 理由
阿发 + 32 我很赞同

总评分: 声望 + 32   查看全部评分

使用道具 举报

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
1011
精华
2
声望
24573 点
金币
154 Mold
被赞许
14 次
注册时间
2008-8-7

新人进步奖 Modchina元老 可爱小猫 懒人勋章

发表于 2011-1-2 10:10:58 |显示全部楼层
回复 9# Robert


    谢谢Robert的提醒!!
    我还不够细心,原来是有pev_takedamage。有pev_takedamage时模型才会接受伤害,只用set_pev(ent,pev_health,100.0)不能。
    尝试只用fakemeta。
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. public plugin_precache()
  4. {
  5.         precache_model("models/player/f_Vita2/f_Vita2.mdl");
  6. }

  7. public plugin_init() {  
  8.         register_concmd("checkbot","checkbot")
  9. }
  10. public checkbot(id)
  11. {
  12.         new ent=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
  13.         // EngFunc_CreateNamedEntity 不是 EngFunc_CreateEntity
  14.         new Float:origin[3]={704.0,-384.0,-128.0};
  15.         set_pev(ent,pev_origin,origin);
  16.         set_pev(ent,pev_solid,SOLID_BBOX)
  17.         set_pev(ent,pev_takedamage,1.0)
  18.         set_pev(ent,pev_health,100.0)
  19.         set_pev(ent, pev_classname, "vita")
  20.         engfunc(EngFunc_SetModel, ent,"models/player/f_Vita2/f_Vita2.mdl")
  21.         new Float:maxs[3] = {16.0,16.0,36.0}
  22.         new Float:mins[3] = {-16.0,-16.0,-36.0}
  23.         engfunc(EngFunc_SetSize, ent, mins, maxs)
  24.         set_pev(ent,pev_framerate,1.0);
  25.         set_pev(ent,pev_sequence,1);
  26.         engfunc(EngFunc_DropToFloor,ent);
  27.         set_task(2.0,"moveTime",ent);       
  28. }
  29. public moveTime(ent)
  30. {
  31.         new Float:fVelocity[3]={32.0,0.0,0.0}; // 设置X方向移动速度为32
  32.         set_pev(ent,pev_movetype,MOVETYPE_FLY);
  33.         set_pev(ent,pev_sequence,3); // walk sequence
  34.         set_pev(ent,pev_velocity,fVelocity);
  35.         set_task(2.0,"moveStop",ent);
  36. }
  37. public moveStop(ent)
  38. {
  39.         new Float:fVelocity[3]={0.0,0.0,0.0}; // 停止移动
  40.         set_pev(ent,pev_sequence,1);
  41.         set_pev(ent,pev_velocity,fVelocity);
  42. }
复制代码

使用道具 举报

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

回顶部