搜索
查看: 3860|回复: 9

严重的插件BUG,寻求帮助

[复制链接]
发表于 2009-2-24 21:00:00 | 显示全部楼层 |阅读模式 来自 中国–甘肃–天水
本人魔兽服务器在测试过程中发现当自己死后的主视角会莫名其妙的转到天上(如图1),而这时候如果有队友复活自己或买重生是就会出现严重的BUG(如图2),导致自己会卡在出生点,所看到的也只是自己死后视角转到天上的画面。除非用守望者的大绝技能“瞬间在回到出生地”,或是等下局开始才能恢复行动和视线。经查,是由于deathbones.amxx(死后变骷髅)插件引起,小弟新手,这个源码不会修改,还请哪位大侠帮忙给修改下,把这个自己死后主视角转到天上的BUG给去掉或修复了,不胜感激!!!
     源码如下:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>



#define PLUGIN "DeathBones"
#define VERSION "1.1.0"
#define AUTHOR "mogel"



#define BONE_ALPHA_TASK_BASIS 1000
new pcv_deathmatch        // Deathmatch-Support
new pcv_bonestime        // anzeigen der Bones



#define ALPHA EV_INT_iuser4
#define PLAYER EV_INT_iuser3



public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)

        register_message(get_user_msgid("DeathMsg"), "Event_Death")
        register_event("HLTV", "Event_FreezeTime", "a", "1=0", "2=0")
       
        register_cvar("DeathBones", VERSION, FCVAR_SERVER | FCVAR_SPONLY | FCVAR_UNLOGGED)
       
        pcv_deathmatch = register_cvar("db_deathmatch", "0")        // per default kein DM-Support
        pcv_bonestime = register_cvar("db_bonestime", "30.0")        // 30 Sekunden
}
public plugin_precache() {
        precache_model("models/skeleton.mdl")
}
public Event_FreezeTime() {
        new players[32], count
        get_players(players, count, "h")
        for(new i = 0; i < count; i++)
        {
                new player = players[i]
               
                // Render zur點k setzen
                set_pev(player, pev_renderfx, kRenderFxNone)
                set_pev(player, pev_rendercolor, 255,255,255)
                set_pev(player, pev_rendermode, kRenderNormal)
                set_pev(player, pev_renderamt, 0.0)
        }
       
        remove_entity_name("deathbones")
}
public Event_Death() {
        new player = get_msg_arg_int(2)
       
        new Float:bones[3]
        new Float:angle[3]
       
        entity_get_vector(player, EV_VEC_origin, bones)
        entity_get_vector(player, EV_VEC_angles, angle)
        bones[2] -= 32.0 // gleich nach unten setzen
       
        // Bones erstellen
        new entity = create_entity("info_target")
        entity_set_string(entity, EV_SZ_classname, "deathbones")
        entity_set_model(entity, "models/skeleton.mdl")
        entity_set_origin(entity, bones)
        entity_set_vector(entity, EV_VEC_angles, angle)

        entity_set_int(entity, EV_INT_movetype, MOVETYPE_TOSS)
        entity_set_int(entity, EV_INT_solid, SOLID_NOT)
       
        // Bones erstmal unsichtbar
        set_pev(entity, pev_renderfx, kRenderFxNone)
        set_pev(entity, pev_rendercolor, 255,255,255)
        set_pev(entity, pev_rendermode, kRenderTransAlpha)
        set_pev(entity, pev_renderamt, 0.0)

        // Spieler durch Bones wechseln
        entity_set_int(entity, PLAYER, player)                // den Bones dem Spieler zuweisen
        entity_set_int(entity, ALPHA, 0)                // aktuelles Alpha f黵 die Bones
        set_task(1.0, "BonesAlphaIn", entity)
}
public BonesAlphaIn(bones) {
        if (!is_valid_ent(bones)) return
       
        new alpha = entity_get_int(bones, ALPHA) + 1
        new player = entity_get_int(bones, PLAYER)
       
        // Spieler ausblenden, aber nur wenn kein DM-Modus
        if ((is_valid_ent(player)) && !get_pcvar_num(pcv_deathmatch))
        {
                set_pev(player, pev_renderfx, kRenderFxNone)
                set_pev(player, pev_rendercolor, 255,255,255)
                set_pev(player, pev_rendermode, kRenderTransAlpha)
                set_pev(player, pev_renderamt, float(256 - alpha * 16))
        }
       
        if (is_valid_ent(bones))
        {
                set_pev(bones, pev_renderfx, kRenderFxNone)
                set_pev(bones, pev_rendercolor, 255,255,255)
                set_pev(bones, pev_rendermode, kRenderTransAlpha)
                set_pev(bones, pev_renderamt, float(alpha * 16 - 1))
        }
       
        // neuen Alpha-Wert merken
        entity_set_int(bones, ALPHA, alpha)
       
        // jetzt entscheiden .. .weiter Alpha oder liegen lassen
        if (alpha >= 16)
        {
                // wenn kein DM dann Spieler jetzt nach unten setzen
                if (!get_pcvar_num(pcv_deathmatch))
                {
                        // Bones werden am Rundenanfng automatisch gel鰏cht
                        PlayerMove(player)
                } else
                {
                        // im DM-Modus nach X Sekunden wieder ausblenden
                        set_task(get_pcvar_float(pcv_bonestime), "BonesAlphaOut", bones)
                }
        } else
        {
                set_task(0.1, "BonesAlphaIn", bones)
        }
}
public BonesAlphaOut(bones) {
        if (!is_valid_ent(bones)) return
       
        new alpha = entity_get_int(bones, ALPHA) - 1
       
        if (is_valid_ent(bones))
        {
                set_pev(bones, pev_renderfx, kRenderFxNone)
                set_pev(bones, pev_rendercolor, 255,255,255)
                set_pev(bones, pev_rendermode, kRenderTransAlpha)
                set_pev(bones, pev_renderamt, float(alpha * 16 - 1))
        }
       
        // neuen Alpha-Wert merken
        entity_set_int(bones, ALPHA, alpha)
       
        // jetzt entscheiden .. .weiter Alpha oder killen
        if (alpha)
        {
                set_task(0.1, "BonesAlphaOut", bones)
        } else
        {
                remove_entity(bones)
        }
}
public PlayerMove(player) {
        new Float:pos[3]
        entity_get_vector(player, EV_VEC_origin, pos)
        pos[2] -= 2000.0
        entity_set_vector(player, EV_VEC_origin, pos)
}

本帖子中包含更多资源

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

×
 楼主| 发表于 2009-2-24 22:37:16 | 显示全部楼层 来自 中国–甘肃–天水
斑竹能帮个忙看看吗?
回复

使用道具 举报

 楼主| 发表于 2009-2-25 08:23:47 | 显示全部楼层 来自 中国–甘肃–兰州
自定顶,顶上去.....
回复

使用道具 举报

 楼主| 发表于 2009-2-26 16:42:49 | 显示全部楼层 来自 中国–甘肃–兰州
这个没人能改吗?
回复

使用道具 举报

发表于 2009-2-26 19:26:59 | 显示全部楼层 来自 中国–江西–南昌
你试下看
  1. /* Plugin generated by AMXX-Studio */

  2. #include <amxmodx>
  3. #include <amxmisc>
  4. #include <engine>
  5. #include <fakemeta>

  6. #define PLUGIN "DeathBones"
  7. #define VERSION "1.1.0"
  8. #define AUTHOR "mogel"

  9. #define BONE_ALPHA_TASK_BASIS 1000
  10. new pcv_deathmatch        // Deathmatch-Support
  11. new pcv_bonestime        // anzeigen der Bones

  12. #define ALPHA EV_INT_iuser4
  13. #define PLAYER EV_INT_iuser3

  14. public plugin_init() {
  15.         register_plugin(PLUGIN, VERSION, AUTHOR)

  16.         register_message(get_user_msgid("DeathMsg"), "Event_Death")
  17.         register_event("HLTV", "Event_FreezeTime", "a", "1=0", "2=0")
  18.        
  19.         register_cvar("DeathBones", VERSION, FCVAR_SERVER | FCVAR_SPONLY | FCVAR_UNLOGGED)
  20.        
  21.         pcv_deathmatch = register_cvar("db_deathmatch", "0")        // per default kein DM-Support
  22.         pcv_bonestime = register_cvar("db_bonestime", "30.0")        // 30 Sekunden
  23.        
  24.         set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET)
  25. }
  26. public plugin_precache() {
  27.         precache_model("models/skeleton.mdl")
  28. }
  29. public Event_FreezeTime() {
  30.         new players[32], count
  31.         get_players(players, count, "h")
  32.         for(new i = 0; i < count; i++)
  33.         {
  34.                 new player = players[i]
  35.                
  36.                 // Render zur點k setzen
  37.                 set_pev(player, pev_renderfx, kRenderFxNone)
  38.                 set_pev(player, pev_rendercolor, 255,255,255)
  39.                 set_pev(player, pev_rendermode, kRenderNormal)
  40.                 set_pev(player, pev_renderamt, 0.0)
  41.         }
  42.        
  43.         remove_entity_name("deathbones")
  44. }
  45. public Event_Death() {
  46.         new player = get_msg_arg_int(2)
  47.        
  48.         new Float:bones[3]
  49.         new Float:angle[3]
  50.        
  51.         entity_get_vector(player, EV_VEC_origin, bones)
  52.         entity_get_vector(player, EV_VEC_angles, angle)
  53.         bones[2] -= 32.0 // gleich nach unten setzen
  54.        
  55.         // Bones erstellen
  56.         new entity = create_entity("info_target")
  57.         entity_set_string(entity, EV_SZ_classname, "deathbones")
  58.         entity_set_model(entity, "models/skeleton.mdl")
  59.         entity_set_origin(entity, bones)
  60.         entity_set_vector(entity, EV_VEC_angles, angle)

  61.         entity_set_int(entity, EV_INT_movetype, MOVETYPE_TOSS)
  62.         entity_set_int(entity, EV_INT_solid, SOLID_NOT)
  63.        
  64.         // Bones erstmal unsichtbar
  65.         set_pev(entity, pev_renderfx, kRenderFxNone)
  66.         set_pev(entity, pev_rendercolor, 255,255,255)
  67.         set_pev(entity, pev_rendermode, kRenderTransAlpha)
  68.         set_pev(entity, pev_renderamt, 0.0)

  69.         // Spieler durch Bones wechseln
  70.         entity_set_int(entity, PLAYER, player)        // den Bones dem Spieler zuweisen
  71.         entity_set_int(entity, ALPHA, 0)                // aktuelles Alpha f黵 die Bones
  72.         set_task(1.0, "BonesAlphaIn", entity)
  73. }
  74. public BonesAlphaIn(bones) {
  75.         if (!is_valid_ent(bones)) return
  76.        
  77.         new alpha = entity_get_int(bones, ALPHA) + 1
  78.         new player = entity_get_int(bones, PLAYER)
  79.        
  80.         // Spieler ausblenden, aber nur wenn kein DM-Modus
  81.         if ((is_valid_ent(player)) && !get_pcvar_num(pcv_deathmatch))
  82.         {
  83.                 set_pev(player, pev_renderfx, kRenderFxNone)
  84.                 set_pev(player, pev_rendercolor, 255,255,255)
  85.                 set_pev(player, pev_rendermode, kRenderTransAlpha)
  86.                 set_pev(player, pev_renderamt, float(256 - alpha * 16))
  87.         }
  88.        
  89.         if (is_valid_ent(bones))
  90.         {
  91.                 set_pev(bones, pev_renderfx, kRenderFxNone)
  92.                 set_pev(bones, pev_rendercolor, 255,255,255)
  93.                 set_pev(bones, pev_rendermode, kRenderTransAlpha)
  94.                 set_pev(bones, pev_renderamt, float(alpha * 16 - 1))
  95.         }
  96.        
  97.         // neuen Alpha-Wert merken
  98.         entity_set_int(bones, ALPHA, alpha)
  99.        
  100.         // jetzt entscheiden .. .weiter Alpha oder liegen lassen
  101.         if (alpha >= 16)
  102.         {
  103.                 // wenn kein DM dann Spieler jetzt nach unten setzen
  104.                 if (get_pcvar_num(pcv_deathmatch))
  105.                 {
  106.                         // im DM-Modus nach X Sekunden wieder ausblenden
  107.                         set_task(get_pcvar_float(pcv_bonestime), "BonesAlphaOut", bones)
  108.                 }
  109.         } else
  110.         {
  111.                 set_task(0.1, "BonesAlphaIn", bones)
  112.         }
  113. }
  114. public BonesAlphaOut(bones) {
  115.         if (!is_valid_ent(bones)) return
  116.        
  117.         new alpha = entity_get_int(bones, ALPHA) - 1
  118.        
  119.         if (is_valid_ent(bones))
  120.         {
  121.                 set_pev(bones, pev_renderfx, kRenderFxNone)
  122.                 set_pev(bones, pev_rendercolor, 255,255,255)
  123.                 set_pev(bones, pev_rendermode, kRenderTransAlpha)
  124.                 set_pev(bones, pev_renderamt, float(alpha * 16 - 1))
  125.         }
  126.        
  127.         // neuen Alpha-Wert merken
  128.         entity_set_int(bones, ALPHA, alpha)
  129.        
  130.         // jetzt entscheiden .. .weiter Alpha oder killen
  131.         if (alpha)
  132.         {
  133.                 set_task(0.1, "BonesAlphaOut", bones)
  134.         } else
  135.         {
  136.                 remove_entity(bones)
  137.         }
  138. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2009-2-27 09:01:04 | 显示全部楼层 来自 中国–甘肃–兰州
好的,我去试试。谢谢nopain!!! 有空要和你好好学学!!^-^
回复

使用道具 举报

 楼主| 发表于 2009-2-28 08:45:41 | 显示全部楼层 来自 中国–甘肃–兰州
感谢nopain ,经你修改过后原插件BUG已经去除,暂未发现有新的问题,非常感谢!!!
回复

使用道具 举报

发表于 2011-1-4 18:15:15 | 显示全部楼层 来自 中国–上海–上海
路过...............
回复

使用道具 举报

发表于 2011-1-6 19:52:26 | 显示全部楼层 来自 中国–福建–泉州
看看。。
回复

使用道具 举报

发表于 2011-1-25 01:47:39 | 显示全部楼层 来自 中国–江苏–常州
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

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