搜索
楼主: 我是新手

(问题没解决)为什么会出来这么多的重复提示信息

[复制链接]
发表于 2011-8-20 16:28:58 | 显示全部楼层 来自 广东清远
具体效果还没有测试过
回复

使用道具 举报

 楼主| 发表于 2011-8-22 09:21:15 | 显示全部楼层 来自 甘肃天水
很感激版主的热心帮助。
代码可以编译了,但依旧没法使用....
原因是设定的权限不起作用,虽然出来一句不是VIP的提示,但依旧可以捡起急救包,另外提示也只提示一次,就是首次碰到急救包模型的时候出来一句提示,完了以后再不会有提示。
但还是很感激版主的帮助!谢谢了!
回复

使用道具 举报

发表于 2011-8-22 11:22:40 | 显示全部楼层 来自 广东深圳

  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fakemeta>
  4. #include <fakemeta_util>

  5. #define PLUGIN "Healthkit on dead body"
  6. #define AUTHOR "Jakyo"
  7. #define VERSION "1.0"

  8. #define MEDKIT_MINSZ Float:{ -23.160000, -13.660000, -0.050000 }
  9. #define MEDKIT_MAXSZ Float:{ 11.470000, 12.780000, 6.720000 }
  10. #define MODEL_KIT "models/w_medkit.mdl"                                                // 急救包模型
  11. #define MODEL_KITT "models/w_medkitt.mdl"                                        // 急救包加密模型
  12. #define SOUND_KIT "items/smallmedkit1.wav"                                        // 捡取急救包时播放的声效
  13. #define FFADE_IN 0x0000                                                                // 播放客户端ICO使用的对应内存值

  14. new gToggleKitEnable;
  15. new gToggleGlowShow;
  16. new gGMsgFade;
  17. new gToggleFadeEnable;
  18. new gToggleRemoveAtRstart;
  19. new gKitHealthCvar;
  20. new gLimitHealthCvar;
  21. new gGMsgItemPickup;
  22. new gLimitTouchDelayCvar
  23. new g_medkittouchtime[33]

  24. new const gMedKitClassname[] = "medkit_entity";                                                        // 急救包实体名称

  25. public plugin_init()
  26. {
  27.         register_plugin( PLUGIN, VERSION, AUTHOR );                                                // 插件注册
  28.         register_event( "DeathMsg","drop_kit","a" );                                                // 玩家死亡事件,处理急救包掉落
  29.         register_logevent( "logevent_round_start", 2, "1=Round_Start" );                        // 新一局开始时间
  30.         register_touch(gMedKitClassname, "player", "touched");                                        // 急救包碰触时间
  31.         gToggleKitEnable = register_cvar( "kit_enable", "1" );                                        // 是否打开急救包掉落功能
  32.         gToggleGlowShow = register_cvar( "kit_glow", "1" );                                        // 地上的急救包是否发光
  33.         gToggleFadeEnable = register_cvar( "kit_fade", "1" );                                        // 捡取急救包时是否播放ICO提示
  34.         gToggleRemoveAtRstart = register_cvar( "kit_remove", "1" );                                // 局开始时是否清除上局产生的急救包
  35.         gKitHealthCvar = register_cvar( "kit_health", "20" );                                        // 急救包恢复的血量
  36.         gLimitHealthCvar = register_cvar( "kit_limit_health", "100" );                                // 最大血量
  37.         gLimitTouchDelayCvar = register_cvar( "kit_limit_touchdelay", "100" );                        // 最大血量
  38.         gGMsgFade = get_user_msgid( "ScreenFade" );
  39.         gGMsgItemPickup = get_user_msgid( "ItemPickup" );
  40. }

  41. public plugin_precache()
  42. {
  43.         precache_model( MODEL_KIT );                                                                // 急救包模型加载
  44.         precache_model( MODEL_KITT );                                                                // 急救包加密模型加载
  45.         precache_sound( SOUND_KIT );                                                                // 急救包捡取声音加载
  46. }

  47. // 玩家死亡急救包掉落事件
  48. public drop_kit()
  49. {
  50.         if( get_pcvar_num( gToggleKitEnable ) == 0 )                                                // 判断是否打开急救包掉落功能
  51.                 return PLUGIN_HANDLED;

  52.         new victim = read_data( 2 );                                                                // 获取死亡者ID

  53.         static Float:origin[ 3 ];
  54.         pev( victim, pev_origin, origin );                                                        // 获取死亡者死亡时的地图坐标

  55.         new ent = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "info_target" ) );        // 生成一个实体

  56.         origin[ 2 ] -= 36;                                                                         // 玩家死亡坐标的Z坐标(高度)降低36

  57.         engfunc( EngFunc_SetOrigin, ent, origin );                                                // 设置新生成的实体到计算好的坐标上

  58.         if( !pev_valid( ent ) )
  59.                 return PLUGIN_HANDLED;


  60.         set_pev( ent, pev_classname, gMedKitClassname );                                        // 设置实体的模型名
  61.         engfunc( EngFunc_SetModel, ent, MODEL_KIT );                                                // 设置实体的模型
  62.         dllfunc( DLLFunc_Spawn, ent );                                                                // 重生实体
  63.         set_pev( ent, pev_solid, SOLID_BBOX );                                                        // 设置实体的碰触类型
  64.         set_pev( ent, pev_movetype, MOVETYPE_NONE );                                                // 设置实体的移动类型
  65.         engfunc( EngFunc_SetSize, ent, MEDKIT_MINSZ, MEDKIT_MAXSZ );                                // 设置实体的大小
  66.         engfunc( EngFunc_DropToFloor, ent );                                                        // 把实体掉到地面上

  67.         if( get_pcvar_num( gToggleGlowShow ) == 1 )                                                // 判断急救包是否需要发光
  68.         {
  69.                 if (get_user_team(victim)==1)                                                        // 获取死亡者的队伍,是匪徒急救包即发红光,警察即发烂光
  70.                 {
  71.                         fm_set_rendering( ent, kRenderFxGlowShell, 255, 0, 0, kRenderFxNone, 27 );
  72.                         entity_set_int(ent,EV_INT_team,1);
  73.                 }
  74.                 else if (get_user_team(victim)==2)
  75.                 {
  76.                         fm_set_rendering( ent, kRenderFxGlowShell, 0, 0, 255, kRenderFxNone, 27 );
  77.                         entity_set_int(ent,EV_INT_team,2);
  78.                 }
  79.         }

  80.         return PLUGIN_HANDLED;
  81. }

  82. // 急救包碰触事件
  83. public touched( ent, id )
  84. {
  85.         // 判断实体是否有效,捡取者是否存活,急救包掉落功能是否打开
  86.         if( !pev_valid( ent ) || !is_user_alive(id) || get_pcvar_num( gToggleKitEnable ) == 0 )
  87.                 return PLUGIN_HANDLED;

  88.         // 碰触间隔
  89.         if (g_medkittouchtime[id]>=floatround(get_gametime()))
  90.                 return PLUGIN_HANDLED;

  91.         new ownerTeam = get_user_team(id);                        // 获取捡取者的队伍
  92.         new whitchTeam = entity_get_int(ent, EV_INT_team);        // 获取掉落急救包的死亡者的队伍
  93.         new health = get_user_health( id );                        // 捡取者当前血量
  94.         new cvarhealth = get_pcvar_num( gKitHealthCvar );        // 急救包增加的血量
  95.         new maxhealth = get_pcvar_num( gLimitHealthCvar );        // 玩家最大血量

  96.         // 设置捡取延迟X秒
  97.         g_medkittouchtime[id] = floatround(get_gametime()) + get_pcvar_num( gLimitTouchDelayCvar )

  98.         // 急救包掉落者队伍与捡取者队伍一致,禁止捡取
  99.         if (whitchTeam==ownerTeam)
  100.         {
  101.                 client_print( id, print_center, "Sorry,您不能捡取对方阵型的急救包" );
  102.                 client_print(id, print_chat, "Sorry,您不能捡取对方阵型的急救包" );
  103.                 return PLUGIN_HANDLED;
  104.         }
  105.         // 判断玩家权限
  106.         if(get_user_flags(id) && read_flags("m") == 0)
  107.         {
  108.                 client_print( id, print_center, "Sorry,只有成为VIP才能使用急救包" );
  109.                 client_print(id, print_chat, "Sorry,只有成为VIP才能使用急救包" );
  110.                 return PLUGIN_HANDLED;
  111.         }
  112.         else
  113.         {
  114.                 // 如果玩家当前血量大于最大血量,禁止捡取
  115.                 if( health >= maxhealth )
  116.                 {
  117.                         client_print( id, print_center, "Sorry,您还没有收到任何损伤,无法捡取急救包" );
  118.                         client_print(id, print_chat, "Sorry,您还没有收到任何损伤,无法捡取急救包" );
  119.                         return PLUGIN_HANDLED;
  120.                 }
  121.                 else
  122.                 {
  123.                         new addhealth = health + cvarhealth
  124.                         fm_set_user_health( id, addhealth>=maxhealth ? maxhealth:addhealth);                        // 设置玩家血量
  125.                         emit_sound( id, CHAN_ITEM, SOUND_KIT, VOL_NORM, ATTN_NORM ,0 , PITCH_NORM );                // 播放捡取声音
  126.                         message_begin( MSG_ONE_UNRELIABLE, gGMsgItemPickup, _, id );
  127.                         write_string( "item_healthkit" );
  128.                         message_end();
  129.                         // 播放玩家客户端ICO
  130.                         if( get_pcvar_num( gToggleFadeEnable ) == 1 )
  131.                         {
  132.                                 message_begin( MSG_ONE_UNRELIABLE, gGMsgFade , _, id );
  133.                                 write_short( 1<<10 );
  134.                                 write_short( 1<<10 );
  135.                                 write_short( FFADE_IN );
  136.                                 write_byte( 255 );
  137.                                 write_byte( 0 );
  138.                                 write_byte( 0 );
  139.                                 write_byte( 75 );
  140.                                 message_end();
  141.                         }
  142.                 }

  143.         }

  144.         // 移除急救包实体
  145.         engfunc( EngFunc_RemoveEntity, ent );

  146.         return PLUGIN_CONTINUE;
  147. }

  148. // 新局开始时间
  149. public logevent_round_start()
  150. {
  151.         if( get_pcvar_num( gToggleRemoveAtRstart ) == 1 )
  152.         {
  153.                 new hkit = FM_NULLENT;
  154.                 while( ( hkit = fm_find_ent_by_class( hkit, gMedKitClassname ) ) )
  155.                 {
  156.                         engfunc( EngFunc_RemoveEntity, hkit );
  157.                 }
  158.         }
  159. }
复制代码
回复

使用道具 举报

发表于 2011-8-22 11:25:17 | 显示全部楼层 来自 广东深圳
编译通过,未测试,
自己在下面的代码位置(128行)设置下你服务器VIP的权限标识

        // 判断玩家权限
        if(get_user_flags(id) && read_flags("m") == 0)

本帖子中包含更多资源

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

×
回复

使用道具 举报

 楼主| 发表于 2011-8-22 20:42:55 | 显示全部楼层 来自 甘肃天水
本帖最后由 我是新手 于 2011-8-23 16:02 编辑

感谢楼上朋友的热心!我去试试!
能留个Q吗?或者加我Q:286136660
谢了!

========================================================================================================================
已测试过,不是VIP的有时候可以捡取,有时候又不行,但不管能不能捡取都不提示 "Sorry,只有成为VIP才能使用急救包"
另外就是满血和捡取同队掉落的急救包时的提示也是偶尔有,但多数时候是没有任何提示的。
测试环境:
4554DP服务端——amxx1.81.3746+ Metamod version 1.19
能给再改下吗?
不胜感激!
回复

使用道具 举报

发表于 2011-8-23 16:03:31 | 显示全部楼层 来自 广东汕尾
学习到了。。看看果然有好处。多谢斑竹。
回复

使用道具 举报

 楼主| 发表于 2011-8-24 18:05:49 | 显示全部楼层 来自 甘肃天水
不行啊各位达人,问题还是没解决!
回复

使用道具 举报

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

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