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

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 762|回复: 0

[求助] 【插件高手来】 一个SMA 需要高手帮忙看下 (CSOL僵尸) [复制链接]

Rank: 2

帖子
56
精华
0
声望
94 点
金币
9 Mold
被赞许
0 次
注册时间
2010-7-17
发表于 2010-8-22 08:52:34 |显示全部楼层
帮忙看下这个插件 到底哪出错了? 帮忙编程正确的 SMA!    先谢谢老大们了!


(一下为源码)
——————————————————————————————————————————————————

#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <zombieplague>

#define SUPPORT_BOT_TO_USE

#define PLUGIN_NAME "[ZP] Class: Normal Zombie"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "wong19960928"

new const zombie_pressure_normal[] = { "zombie_plague/zombi_pressure.wav" }

new const zclass_name[] = { "次级僵尸" }
new const zclass_info[] = { "按R键施放暴走技能" }
new const zclass_model[] = { "zombi_host" , }
new const zclass_clawmodel[] = { "v_knife_zombi.mdl" }
const zclass_health = 2000
const zclass_speed = 260
const Float:zclass_gravity = 0.8
const Float:zclass_knockback = 1.00

new g_zclass_normal
new cvar_drained_normal, cvar_duration_normal, cvar_cooldown_normal, cvar_movement_normal, cvar_fov_normal
new Float:player_check_time[33]
new bool:hit_key[33]
new bool:spellcast_normal[33]
new Float:casting_time_normal[33]
new bool:cooldown_normal[33]
new normal_sound[33]

#define speed_record floatround(zclass_speed * 0.1)

public plugin_init()
{
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

        cvar_drained_normal = register_cvar("zp_zclass1_mld", "500")
        cvar_duration_normal = register_cvar("zp_zclass1_dur", "15")
        cvar_cooldown_normal = register_cvar("zp_zclass1_cdn", "30")
        cvar_movement_normal = register_cvar("zp_zclass1_msi", "1.1")
        cvar_fov_normal = register_cvar("zp_zclass1_fov", "110")

        register_forward(FM_PlayerPreThink, "fw_playerprethink")
        register_event("ResetHUD", "event_round_start", "be")
        register_event("DeathMsg", "event_death", "a")
}

public plugin_precache()
{
        g_zclass_normal = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)

        precache_sound(zombie_pressure_normal)
}

public zp_user_infected_post(id, infector)
{
        if (zp_get_user_zombie_class(id) == g_zclass_normal)
        {
                client_print(id, print_chat, "")
        }
}

public zp_user_humanized_post(id)
{
        if (spellcast_normal[id])
        {
                spellcast_normal[id] = false
                fm_set_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 255)
                if (get_pcvar_num(cvar_fov_normal) != 90 && get_pcvar_num(cvar_fov_normal) != 0)
                {
                        message_begin(MSG_ONE, get_user_msgid("SetFOV"), _, id)
                        write_byte(90)
                        message_end()
                }
        }

        cooldown_normal[id] = false
        if (task_exists(id)) remove_task(id)
}

public fw_playerprethink(id)
{
        if (!is_user_alive(id))
                return FMRES_IGNORED
               
        if (zp_get_user_nemesis(id))
                return FMRES_IGNORED
       
        if (!zp_get_user_zombie(id) || (zp_get_user_zombie_class(id) != g_zclass_normal))
                return FMRES_IGNORED
               
        if (spellcast_normal[id])
        {
                set_user_maxspeed(id, (pev(id, pev_maxspeed) * 1.0 * get_pcvar_num(cvar_movement_normal)))
                return FMRES_HANDLED
        }
        else
        {
                set_user_maxspeed(id, 240.0)
                return FMRES_HANDLED
        }
        return FMRES_IGNORED
}

public normal_Sound(id)
{
        if (is_user_alive(id) && normal_sound[id])
        {
                engfunc(EngFunc_EmitSound, id, CHAN_VOICE, zombie_pressure_normal, 1.0, ATTN_NORM, 0, PITCH_NORM)
        }
}

public client_PostThink(id)
{
        if (get_gametime() - player_check_time[id] < 0.1)
                return PLUGIN_CONTINUE
        player_check_time[id] = get_gametime()

        if (!is_user_alive(id))
                return PLUGIN_CONTINUE

        if (zp_get_user_nemesis(id))
                return PLUGIN_CONTINUE

        if (!zp_get_user_zombie(id) || (zp_get_user_zombie_class(id) != g_zclass_normal))
                return PLUGIN_CONTINUE

        if (!spellcast_normal[id])
        {
                #if defined SUPPORT_BOT_TO_USE
                if (is_user_bot(id))
                {
                        if (cooldown_normal[id])
                                return FMRES_HANDLED

                        new enemy, body
                        get_user_aiming(id, enemy, body)

                        if ((1 <= enemy <= 32) && is_user_alive(enemy) && !zp_get_user_zombie(enemy))
                        {
                                if (fm_entity_range(id, enemy) <= 1200.0 && pev(id, pev_health) > 1000)
                                {
                                        spellcast_normal[id] = true
                                        normal_sound[id] = true
                                        engfunc(EngFunc_EmitSound, id, CHAN_VOICE, zombie_pressure_normal, 1.0, ATTN_NORM, 0, PITCH_NORM)
                                        set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 25)
                                        if (get_pcvar_num(cvar_fov_normal) != 90 && get_pcvar_num(cvar_fov_normal) != 0)
                                        {
                                                message_begin(MSG_ONE, get_user_msgid("SetFOV"), _, id)
                                                write_byte(get_pcvar_num(cvar_fov_normal))
                                                message_end()
                                        }
                                        if (normal_sound[id])
                                        {
                                                set_task(3.0, "normal_Sound", id, _, _, "b")
                                        }
                                        set_pev(id, pev_health, (pev(id, pev_health)*1.0 - get_pcvar_num(cvar_drained_normal)))
                                        casting_time_normal[id] = get_gametime()
                                }
                        }
                        return FMRES_HANDLED
                }
                #endif
               
                static button, oldbutton
                button = pev(id, pev_button)
                oldbutton = pev(id, pev_oldbuttons)

                if ((button & IN_RELOAD) && (oldbutton & IN_RELOAD))
                {
                        if (!hit_key[id] && pev(id, pev_health) > get_pcvar_num(cvar_drained_normal))
                        {
                                hit_key[id] = true

                                if (cooldown_normal[id])
                                {
                                        client_print(id, print_center, "技能冷却时间尚未结束,你还不能使用暴走技能")
                                        return PLUGIN_CONTINUE
                                }

                                spellcast_normal[id] = true
                                normal_sound[id] = true
                                engfunc(EngFunc_EmitSound, id, CHAN_VOICE, zombie_pressure_normal, 1.0, ATTN_NORM, 0, PITCH_NORM)
                                fm_set_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 25)
                                if (get_pcvar_num(cvar_fov_normal) != 90 && get_pcvar_num(cvar_fov_normal) != 0)
                                {
                                        message_begin(MSG_ONE, get_user_msgid("SetFOV"), _, id)
                                        write_byte(get_pcvar_num(cvar_fov_normal))
                                        message_end()
                                }
                                if (normal_sound[id])
                                {
                                        set_task(3.0, "normal_Sound", id, _, _, "b")
                                }
                                set_pev(id, pev_health, (pev(id, pev_health) * 1.0 - get_pcvar_num(cvar_drained_normal)))
                                casting_time_normal[id] = get_gametime()
                        }
                        if (pev(id, pev_health) < get_pcvar_num(cvar_drained_normal))
                        {
                                client_print(id, print_center, " ")
                        }
                }
                else
                {
                        hit_key[id] = false
                }
                return PLUGIN_CONTINUE
        }
        else
        {
                new Float:time
                time = get_gametime() - casting_time_normal[id]

                if (time <= get_pcvar_float(cvar_duration_normal))
                {
                        if (fm_get_speed(id) > speed_record)
                                fm_set_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 25)
                }
                else
                {
                        spellcast_normal[id] = false
                        normal_sound[id] = false
                        fm_set_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 255)
                        if (get_pcvar_num(cvar_fov_normal) != 90 && get_pcvar_num(cvar_fov_normal) != 0)
                        {
                                message_begin(MSG_ONE, get_user_msgid("SetFOV"), _, id)
                                write_byte(90)
                                message_end()
                        }
                        cooldown_normal[id] = true
                        remove_task(id)
                        set_task(get_pcvar_float(cvar_cooldown_normal), "reset_cooldown_normal", id)
                }
        }

        return PLUGIN_CONTINUE
}

public reset_cooldown_normal(id)
{
        if (cooldown_normal[id] && zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_zclass_normal))
        {
                cooldown_normal[id] = false
        }
        return PLUGIN_CONTINUE
}

public event_round_start(id)
{
        if (get_pcvar_num(cvar_fov_normal) != 90 && get_pcvar_num(cvar_fov_normal) != 0)
        {
                message_begin(MSG_ONE, get_user_msgid("SetFOV"), _, id)
                write_byte(90)
                message_end()
        }

        spellcast_normal[id] = false
        cooldown_normal[id] = false
        normal_sound[id] = false
        fm_set_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 255)
}

public client_connect(id)
{
        if (get_pcvar_num(cvar_fov_normal) != 90 && get_pcvar_num(cvar_fov_normal) != 0)
        {
                message_begin(MSG_ONE, get_user_msgid("SetFOV"), _, id)
                write_byte(90)
                message_end()
        }

        spellcast_normal[id] = false
        cooldown_normal[id] = false
        normal_sound[id] = false
        fm_set_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 255)
}

public client_disconnect(id)
{
        if (get_pcvar_num(cvar_fov_normal) != 90 && get_pcvar_num(cvar_fov_normal) != 0)
        {
                message_begin(MSG_ONE, get_user_msgid("SetFOV"), _, id)
                write_byte(90)
                message_end()
        }

        spellcast_normal[id] = false
        cooldown_normal[id] = false
        normal_sound[id] = false
        fm_set_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 255)
}

public event_death()
{
        new player = read_data(2)
        if ((player <= 0) || (player > get_maxplayers()))
                return;

        if (spellcast_normal[player])
        {
                spellcast_normal[player] = false
                normal_sound[player] = false
                fm_set_rendering(player, kRenderFxNone, 0, 0, 0, kRenderNormal, 255)
                if (get_pcvar_num(cvar_fov_normal) != 90 && get_pcvar_num(cvar_fov_normal) != 0)
                {
                        message_begin(MSG_ONE, get_user_msgid("SetFOV"), _, player)
                        write_byte(90)
                        message_end()
                }
        }

        cooldown_normal[player] = false
        if (task_exists(player)) remove_task(player)
}

使用道具 举报

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

回顶部