搜索
查看: 2564|回复: 3

求高手帮忙修改一下这个插件[已解决]

[复制链接]
发表于 2010-6-17 09:20:24 | 显示全部楼层 |阅读模式 来自 中国–山东
本帖最后由 593727013 于 2010-6-17 14:25 编辑

[该问题已被解决]

下面是 玩家被击毙时掉落急救包 的插件,我做了一些小改动,现请高手就此源码的基础上为插件添加以下功能:

1.添加新的CVAR"amx_kitmaxhp",如果玩家的生命值等于"amx_kitmaxhp"的设定值,则玩家无法捡起急救包;
2.玩家捡到急救包时,检查玩家在捡起急救包后,"原生命值+急救包恢复HP值"是否大于"amx_kitmaxhp"的设定值,如果大于则将玩家生命值设定为"amx_kitmaxhp"的值,否则将玩家生命值设定为"原生命值+急救包恢复HP值".
3.在玩家捡到急救包时,在该玩家附近500英尺范围内的其他玩家可以看到该玩家捡到急救包的信息.信息内容大体为"玩家^x03%s^x01拾获了^x04急救包^x01,生命值恢复到了^x03%d^x01点HP."其中^x03是拾获急救包玩家的团队色彩,且只要处于划定范围内的玩家不分队别都可以看到该信息,包括使用者本身.

注:第1,2步如果太麻烦可以省去CVAR,能够直接在源码中设置亦可,第3步如果太麻烦可以忽略.当然能够完全实现最好.

我愚钝,鼓捣半天实在是弄不出来他,还请高手们帮忙制作一下,制作完成后,请高手将源码(*.sma)在下面跟帖进行收费发布(我也好酬谢,况且好成果一定要收费),贵点我不在乎,只求功能能被完善.

[感谢高手相助.如果哪位高手已经打算帮我,请先行跟帖说一下.谢谢!]
  1. #include <amxmod>
  2. //----------------------------------------------------------------------------------------------
  3. public plugin_init()
  4. {
  5. // Plugin Info
  6. register_plugin("AMX Medkit","1.0","duper/Rockell & X-man")
  7. register_cvar("amx_medkit", "1")
  8. register_cvar("amx_medkithealth", "30")
  9. register_event("ResetHUD", "newRound","b")
  10. register_event("DeathMsg","deathevent","a")
  11. }
  12. //----------------------------------------------------------------------------------------------

  13. public newRound()
  14. {
  15. new chocolate = find_ent_by_class(-1, "chocolate")
  16. while(chocolate) {
  17. remove_entity(chocolate)
  18. chocolate = find_ent_by_class(chocolate, "chocolate")
  19. }
  20. return PLUGIN_CONTINUE
  21. }
  22. //----------------------------------------------------------------------------------------------

  23. public deathevent()
  24. {
  25. if ( !get_cvar_num("amx_medkit") )
  26.   return PLUGIN_CONTINUE
  27. new killer = read_data(1)
  28. new victim = read_data(2)
  29. if ( killer != victim )
  30. {
  31. createChocolate(victim)
  32. }
  33. if(is_user_connected(victim))
  34.   cs_reset_user_model(victim)
  35. return PLUGIN_CONTINUE
  36. }
  37. //----------------------------------------------------------------------------------------------

  38. public createChocolate(victim)
  39. {
  40. new Float:vAim[3], Float:vOrigin[3]
  41. entity_get_vector(victim, EV_VEC_origin, vOrigin)
  42. VelocityByAim(victim, random_num(2, 4), vAim)

  43. vOrigin[0] += vAim[0]
  44. vOrigin[1] += vAim[1]
  45. vOrigin[2] += 30.0

  46. new chocolate = create_entity("info_target")
  47. entity_set_string(chocolate, EV_SZ_classname, "chocolate")
  48. entity_set_model(chocolate, "models/w_medkit.mdl")
  49. entity_set_size(chocolate, Float:{-2.5, -2.5, -1.5}, Float:{2.5, 2.5, 1.5})
  50. entity_set_int(chocolate, EV_INT_solid, 2)
  51. entity_set_int(chocolate, EV_INT_movetype, 6)
  52. entity_set_vector(chocolate, EV_VEC_origin, vOrigin)
  53. }

  54. //----------------------------------------------------------------------------------------------

  55. public plugin_precache() {
  56. precache_model("models/w_medkit.mdl")
  57. precache_sound( "items/smallmedkit1.wav")
  58. }

  59. //----------------------------------------------------------------------------------------------

  60. public pfn_touch(ptr, ptd){
  61. if(!is_valid_ent(ptd) || !is_valid_ent(ptr))
  62.   return PLUGIN_CONTINUE

  63. if(!is_user_connected(ptd) || !is_user_alive(ptd))
  64.   return PLUGIN_CONTINUE

  65. new classname[32]
  66. entity_get_string(ptr, EV_SZ_classname, classname, 31)
  67. if(equal(classname, "chocolate"))
  68. {
  69. new gOrigHealth = get_user_health(ptd)
  70. new health = gOrigHealth + get_cvar_num("amx_medkithealth")
  71. set_user_health(ptd, health)
  72. emit_sound(ptd,CHAN_VOICE,"items/smallmedkit1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
  73. remove_entity(ptr)
  74. }
  75. return PLUGIN_CONTINUE
  76. }   
  77. public client_death(killer, victim, wpnindex, hitplace, TK)
  78. {
  79. if(wpnindex == CSW_C4  && is_user_connected(victim))
  80.   cs_reset_user_model(victim)
  81. }
复制代码
对相助者万分感激!
发表于 2010-6-17 11:53:37 | 显示全部楼层 来自 中国–甘肃–兰州
本帖最后由 yesterday 于 2010-6-17 11:55 编辑

可以编译,没试效果,你试试看吧,应该没问题

  1. #include <amxmod>
  2. #include <cstrike>
  3. #include <fakemeta>
  4. #include <fun>
  5. //----------------------------------------------------------------------------------------------
  6. new g_medkit, g_medkithealth, g_kitmaxhp
  7. new max_players
  8. public plugin_init()
  9. {
  10.         // Plugin Info
  11.         register_plugin("AMX Medkit","1.0","duper/Rockell X-man")
  12.         register_cvar("amx_medkit", "1")
  13.         register_cvar("amx_medkithealth", "30")
  14.         register_cvar("amx_kitmaxhp","120")
  15.         register_event("ResetHUD", "newRound","b")
  16.         register_event("DeathMsg","deathevent","a")
  17.         max_players = get_maxplayers()
  18. }
  19. //----------------------------------------------------------------------------------------------

  20. public plugin_cfg()
  21. {
  22.         set_task(0.5, "cache_cvars")
  23. }

  24. public cache_cvars()
  25. {
  26.         g_medkit = get_cvar_num("amx_medkit")
  27.         g_medkithealth = get_cvar_num("amx_medkithealth")
  28.         g_kitmaxhp = get_cvar_num("amx_kitmaxhp")
  29. }

  30. public newRound()
  31. {
  32.         new chocolate = find_ent_by_class(-1, "chocolate")
  33.         while(chocolate) {
  34.                 remove_entity(chocolate)
  35.                 chocolate = find_ent_by_class(chocolate, "chocolate")
  36.         }
  37.         return PLUGIN_CONTINUE
  38. }
  39. //----------------------------------------------------------------------------------------------

  40. public deathevent()
  41. {
  42.         if ( !g_medkit)
  43.                 return PLUGIN_CONTINUE
  44.         new killer = read_data(1)
  45.         new victim = read_data(2)
  46.         if ( killer != victim )
  47.         {
  48.                 createChocolate(victim)
  49.         }
  50.         if(is_user_connected(victim))
  51.                 cs_reset_user_model(victim)
  52.         return PLUGIN_CONTINUE
  53. }
  54. //----------------------------------------------------------------------------------------------

  55. public createChocolate(victim)
  56. {
  57.         new Float:vAim[3], Float:vOrigin[3]
  58.         entity_get_vector(victim, EV_VEC_origin, vOrigin)
  59.         VelocityByAim(victim, random_num(2, 4), vAim)
  60.        
  61.         vOrigin[0] += vAim[0]
  62.         vOrigin[1] += vAim[1]
  63.         vOrigin[2] += 30.0
  64.        
  65.         new chocolate = create_entity("info_target")
  66.         entity_set_string(chocolate, EV_SZ_classname, "chocolate")
  67.         entity_set_model(chocolate, "models/w_medkit.mdl")
  68.         entity_set_size(chocolate, Float:{-2.5, -2.5, -1.5}, Float:{2.5, 2.5, 1.5})
  69.         entity_set_int(chocolate, EV_INT_solid, 2)
  70.         entity_set_int(chocolate, EV_INT_movetype, 6)
  71.         entity_set_vector(chocolate, EV_VEC_origin, vOrigin)
  72. }

  73. //----------------------------------------------------------------------------------------------

  74. public plugin_precache() {
  75.         precache_model("models/w_medkit.mdl")
  76.         precache_sound( "items/smallmedkit1.wav")
  77. }

  78. //----------------------------------------------------------------------------------------------

  79. public pfn_touch(ptr, ptd){
  80.         if(!is_valid_ent(ptd) || !is_valid_ent(ptr))
  81.                 return PLUGIN_CONTINUE
  82.        
  83.         if(!is_user_connected(ptd) || !is_user_alive(ptd))
  84.                 return PLUGIN_CONTINUE
  85.        
  86.         new classname[32]
  87.         entity_get_string(ptr, EV_SZ_classname, classname, 31)
  88.         if(equal(classname, "chocolate"))
  89.         {
  90.                 new gOrigHealth = get_user_health(ptd)
  91.                 new health = gOrigHealth + g_medkithealth
  92.                 if(health > g_kitmaxhp)
  93.                 {
  94.                         set_user_health(ptd, g_kitmaxhp)
  95.                 }
  96.                 else
  97.                 {
  98.                         set_user_health(ptd, health)
  99.                 }
  100.                 emit_sound(ptd,CHAN_VOICE,"items/smallmedkit1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)  
  101.                 remove_entity(ptr)
  102.                 new sMsg[128], sName[32]
  103.                 new hp1 = get_user_health(ptd)
  104.                 get_user_name(ptd,sName,32)
  105.                 for(new id=1;id<=max_players;id++)
  106.                 {
  107.                         if(ptd == id)
  108.                         {
  109.                                 format(sMsg, 128, "你拾获了^x04急救包^x01,生命值恢复到了^x03%d^x01点HP." , hp1)
  110.                                 client_color(ptd, ptd, sMsg)
  111.                         }
  112.                         else
  113.                         {
  114.                                 if(fm_entity_range(ptd, id) <= 500.0)
  115.                                 {
  116.                                         format(sMsg, 128, "玩家^x03%s^x01拾获了^x04急救包^x01,生命值恢复到了^x03%d^x01点HP." ,sName , hp1)
  117.                                         client_color(ptd, ptd, sMsg)
  118.                                 }
  119.                         }
  120.                 }      
  121.         }
  122.         return PLUGIN_CONTINUE
  123. }   

  124. public client_color(playerid, colorid, sMsg[])
  125. {
  126.         message_begin(playerid?MSG_ONE:MSG_ALL,get_user_msgid("SayText"),{0,0,0},playerid)
  127.         write_byte(colorid)
  128.         write_string(sMsg)
  129.         message_end()
  130. }

  131. public client_death(killer, victim, wpnindex, hitplace, TK)
  132. {
  133.         if(wpnindex == CSW_C4  && is_user_connected(victim))
  134.                 cs_reset_user_model(victim)
  135. }

  136. stock Float:fm_entity_range(ent1, ent2)
  137. {
  138.         new Float:origin1[3], Float:origin2[3];
  139.         pev(ent1, pev_origin, origin1);
  140.         pev(ent2, pev_origin, origin2);
  141.         return get_distance_f(origin1, origin2);
  142. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2010-6-17 13:41:58 | 显示全部楼层 来自 中国–山东
本帖最后由 593727013 于 2010-6-17 14:25 编辑

可以编译.太感谢你的帮助了!谢谢!
但是使用时发现这个问题:文字并没有着色而且信息会重复显示,如图

貌似附近有多少人就显示多少遍呢..


我修改了一下 去掉了对别人的信息显示 除满血也能拣包外,基本符合要求了 谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注个册吧

×
回复

使用道具 举报

发表于 2010-6-18 00:17:10 | 显示全部楼层 来自 中国–福建–泉州
希望能共享下
回复

使用道具 举报

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

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