搜索
查看: 2222|回复: 2

[僵尸插件] 敬请帮忙修改此插件适合4.3以前版本使用

[复制链接]
发表于 2009-6-25 13:14:00 | 显示全部楼层 |阅读模式 来自 山东临沂
请帮忙修改【人类力场】适合4.3以前版本使用,谢谢!
  1. #include <amxmodx>
  2. #include <zombieplague>
  3. #include <fakemeta_util>
  4. #include <fun>

  5. new campoforze
  6. new bool:campodefuerza[33] = false

  7. new stuck[33]

  8. new const Float:size[][3] = {
  9.         {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0},
  10.         {0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0},
  11.         {0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0},
  12.         {0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0},
  13.         {0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0}
  14. }

  15. public plugin_init()
  16. {
  17.         register_plugin("Campo de fuerza", "1.0", "[C]apo[S]trike")
  18.         campoforze = zp_register_extra_item("Campo de Fuerza", 20, ZP_TEAM_HUMAN)
  19.         register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
  20. }

  21. public zp_extra_item_selected(player, itemid)
  22. {
  23.         // Not alive
  24.         if (!is_user_alive(player))
  25.             return;

  26.         if (itemid == campoforze) {
  27.             new name[32]
  28.             get_user_name(player, name, 31)
  29.             set_hudmessage(0, 255, 0, 0.05, 0.45, 1, 0.0, 5.0, 1.0, 1.0, -1)
  30.             show_hudmessage(0, "%s tiene un CAMPO DE FUERZA!!", name)
  31.             fm_set_rendering(player, kRenderFxGlowShell, 200, 200, 250, kRenderNormal, 300)
  32.             campodefuerza[player] = true
  33.             efects(player)
  34.             campofuerza(player)
  35.             set_task(30.0, "timeout", player)
  36.         }
  37. }

  38. public campofuerza(id1)
  39. {
  40.    // Not alive
  41.    if (!is_user_alive(id1))
  42.         return;
  43.    if(!campodefuerza[id1])
  44.         return;

  45.    for (new id2; id2 <= 32; id2++)
  46.    {
  47.      if (zp_get_user_zombie(id2))
  48.      {
  49.       campofuntion(id1, id2)
  50.      }
  51.    }
  52.    set_task(0.1, "campofuerza", id1)
  53. }

  54. public campofuntion(id1, id2)
  55. {
  56.       // Not alive
  57.       if (!is_user_alive(id1))
  58.         return;
  59.       if (!is_user_alive(id2))
  60.         return;
  61.       if(!campodefuerza[id1])
  62.         return;

  63.       static Float:vOrigin[3], Float:vOrigin2[3]
  64.       pev(id1, pev_origin, vOrigin)
  65.       pev(id2, pev_origin, vOrigin2)
  66.       if(vector_distance(vOrigin, vOrigin2) < 180)
  67.       {
  68.        set_task(0.5,"checkstuck",0,"",0,"b")
  69.        vOrigin2[1] -= 30.0
  70.        set_pev(id2, pev_origin, vOrigin2)
  71.       }
  72. }

  73. public efects(id)
  74. {
  75.         // Not alive
  76.         if (!is_user_alive(id))
  77.         return;
  78.         if(!campodefuerza[id])
  79.         return;
  80.        
  81.         // Get player origin
  82.         static Float:originF[3]
  83.         pev(id, pev_origin, originF)
  84.        
  85.         // Colored Aura
  86.         engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
  87.         write_byte(TE_DLIGHT) // TE id
  88.         engfunc(EngFunc_WriteCoord, originF[0]) // x
  89.         engfunc(EngFunc_WriteCoord, originF[1]) // y
  90.         engfunc(EngFunc_WriteCoord, originF[2]) // z
  91.         write_byte(30) // radius
  92.         write_byte(80) // r
  93.         write_byte(80) // g
  94.         write_byte(250) // b
  95.         write_byte(2) // life
  96.         write_byte(0) // decay rate
  97.         message_end()
  98.        
  99.         set_task(0.1, "efects", id)
  100.         return;
  101. }

  102. public client_putinserver(id) {
  103.         campodefuerza        [id] = false
  104. }

  105. public client_disconnect(id) {
  106.         campodefuerza[id] = false
  107. }

  108. public event_round_start()
  109. {
  110.         for (new id; id <= 32; id++)
  111.         {
  112.         campodefuerza[id] = false
  113.         }
  114. }

  115. public zp_user_infected_post(player, infector)
  116. {
  117.         if (campodefuerza[player])
  118.         {       
  119.                 campodefuerza[player] = false
  120.         }
  121.         return PLUGIN_CONTINUE
  122. }

  123. public timeout(id)
  124. {
  125.         // Not alive
  126.         if (!is_user_alive(id))
  127.         return;
  128.         if(!campodefuerza[id])
  129.         return;

  130.         campodefuerza[id] = false

  131.         fm_set_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 20)
  132. }

  133. public checkstuck() {
  134.                 static players[32], pnum, player
  135.                 get_players(players, pnum)
  136.                 static Float:origin[3]
  137.                 static Float:mins[3], hull
  138.                 static Float:vec[3]
  139.                 static o,i
  140.                 for(i=0; i<pnum; i++){
  141.                         player = players[i]
  142.                         if (is_user_connected(player) && is_user_alive(player)) {
  143.                                 pev(player, pev_origin, origin)
  144.                                 hull = pev(player, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
  145.                                 if (!is_hull_vacant(origin, hull,player) && !get_user_noclip(player) && !(pev(player,pev_solid) & SOLID_NOT)) {
  146.                                                 ++stuck[player]
  147.                                                 pev(player, pev_mins, mins)
  148.                                                 vec[2] = origin[2]
  149.                                                 for (o=0; o < sizeof size; ++o) {
  150.                                                         vec[0] = origin[0] - mins[0] * size[o][0]
  151.                                                         vec[1] = origin[1] - mins[1] * size[o][1]
  152.                                                         vec[2] = origin[2] - mins[2] * size[o][2]
  153.                                                         if (is_hull_vacant(vec, hull,player)) {
  154.                                                                 engfunc(EngFunc_SetOrigin, player, vec)
  155.                                                                 set_pev(player,pev_velocity,{0.0,0.0,0.0})
  156.                                                                 o = sizeof size
  157.                                                         }
  158.                                                 }
  159.                                 }
  160.                                 else
  161.                                 {
  162.                                         stuck[player] = 0
  163.                                 }
  164.                         }
  165.                 }
  166. }

  167. stock bool:is_hull_vacant(const Float:origin[3], hull,id) {
  168.         static tr
  169.         engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr)
  170.         if (!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid)) //get_tr2(tr, TR_InOpen))
  171.                 return true
  172.        
  173.         return false
  174. }
复制代码
发表于 2009-6-26 01:38:56 | 显示全部楼层 来自 河南南阳
力场弹么??不如用下防护罩。。和力场弹一个概念。。
回复

使用道具 举报

 楼主| 发表于 2009-6-28 01:14:26 | 显示全部楼层 来自 山东临沂
这个不是力场弹,虽然我没用,似乎就是防护罩类似的东西吧?
防护罩有SMA共享吗?
回复

使用道具 举报

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

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