廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 5617 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
xuqiang52133
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x1 鮮花 x32
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
[插件] (带源码)NPC走道的速度太慢了,帮改一下,出生位置不能自己设定  ((带源码)NPC走道的速度太慢了,帮改一下,出生位置不能自己设定)
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>


#define ZB_CLASSNAME "npc_zombie"
#define TASK_ATTACK 323423


new const zombie_model[] = "models/player/tank_zombi_host/tank_zombi_host.mdl"
new const zombie_hurt_sound[] = "biohazard/zombie_hurt_01.wav"
new const zombie_attack_sound[] = "biohazard/zombi_attack_1.wav"
new const zombie_die_sound[] = "biohazard/zombie_death_1.wav"


enum
{
    ANIM_IDLE = 1,
    ANIM_WALK = 3,
    ANIM_ATTACK = 76,
    ANIM_DIE = 104
}


new Float:g_spawn_point[3], Float:g_angles[3]
new pev_victim = pev_enemy


new ent2


public plugin_init()
{
    register_plugin("NPC Zombie", "1.0", "Dias")

    register_think(ZB_CLASSNAME, "fw_zb_think")

    register_clcmd("say /set_spawn_point", "get_spawn_point")
    register_clcmd("say /create_zombie", "create_zombie")
}


public client_PostThink(id)
{
    //new Float:distance = entity_range(id, ent2)

    //client_print(id, print_chat, "%f", distance)
}


public plugin_precache()
{
    engfunc(EngFunc_PrecacheModel, zombie_model)

    precache_sound(zombie_hurt_sound)
    precache_sound(zombie_attack_sound)
    precache_sound(zombie_die_sound)
}


public get_spawn_point(id)
{
    entity_get_vector(id, EV_VEC_origin, g_spawn_point)
    entity_get_vector(id, EV_VEC_angles, g_angles)
}


public create_zombie(id)
{    
    new ent = create_entity("info_target")
    ent2 = ent

    entity_set_origin(ent, g_spawn_point)

    entity_set_float(ent, EV_FL_takedamage,1.0)
    entity_set_float(ent, EV_FL_health, 100.0)

    entity_set_string(ent, EV_SZ_classname, ZB_CLASSNAME)
    entity_set_model(ent, zombie_model)
    entity_set_int(ent, EV_INT_solid, 2)

    entity_set_int(ent, EV_INT_movetype, MOVETYPE_STEP)

    set_pev(ent, pev_victim, 0)

    entity_set_byte(ent, EV_BYTE_controller1, 125)
    entity_set_byte(ent, EV_BYTE_controller2, 125)
    entity_set_byte(ent, EV_BYTE_controller3, 125)
    entity_set_byte(ent, EV_BYTE_controller4, 125)

    new Float:maxs[3] = {16.0, 16.0, 36.0}
    new Float:mins[3] = {-16.0, -16.0, -36.0}
    entity_set_size(ent, mins, maxs)

    play_anim(ent, ANIM_IDLE, 1.0)

    entity_set_float(ent,EV_FL_nextthink, halflife_time() + 0.01)
    drop_to_floor(ent)

    RegisterHamFromEntity(Ham_TakeDamage, ent, "fw_zb_takedmg")
    RegisterHamFromEntity(Ham_Killed, ent, "fw_zb_killed")

    return 1
}


public fw_zb_takedmg(victim, inflictor, attacker, Float:damage, damagebits)
{
    emit_sound(victim, CHAN_BODY, zombie_hurt_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
}


public fw_zb_killed(ent2)
{
    new ent = create_entity("info_target")
    new Float:Origin[3], Float:Angles[3]

    pev(ent2, pev_origin, Origin)
    pev(ent2, pev_angles, Angles)

    entity_set_origin(ent, Origin)
    entity_set_vector(ent, EV_VEC_angles, Angles)

    entity_set_string(ent, EV_SZ_classname, "temp_zb")
    entity_set_model(ent, zombie_model)

    new Float:maxs[3] = {16.0, 16.0, 36.0}
    new Float:mins[3] = {-16.0, -16.0, -36.0}
    entity_set_size(ent, mins, maxs)

    drop_to_floor(ent)

    play_anim(ent, ANIM_IDLE, 1.0)    

    play_anim(ent, ANIM_DIE, 1.0)
    emit_sound(ent, CHAN_BODY, zombie_die_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)

    set_task(5.0, "remove_temp_zb", ent)
}


public remove_temp_zb(ent)
{
    remove_entity(ent)
}


public fw_zb_think(ent)
{
    if(!is_valid_ent(ent))
        return FMRES_IGNORED

    new victim = FindClosesEnemy(ent)
    new Float:Origin[3], Float:VicOrigin[3], Float:distance

    pev(ent, pev_origin, Origin)
    pev(victim, pev_origin, VicOrigin)

    distance = get_distance_f(Origin, VicOrigin)

    if(distance <= 60.0)
    {
        zombie_attack(ent, victim)
        entity_set_float(ent, EV_FL_nextthink, get_gametime() + 2.5)
    } else {

        if(get_anim(ent) != ANIM_WALK)
            play_anim(ent, ANIM_WALK, 1.0)

        new Float:Ent_Origin[3], Float:Vic_Origin[3]

        pev(ent, pev_origin, Ent_Origin)
        pev(victim, pev_origin, Vic_Origin)

        npc_turntotarget(ent, Ent_Origin, victim, Vic_Origin)
        hook_ent(ent, victim)

        entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.1)
    }

    return FMRES_HANDLED
}


public zombie_attack(ent, victim)
{
    new Float:Ent_Origin[3], Float:Vic_Origin[3]

    pev(ent, pev_origin, Ent_Origin)
    pev(victim, pev_origin, Vic_Origin)

    npc_turntotarget(ent, Ent_Origin, victim, Vic_Origin)

    play_anim(ent, ANIM_ATTACK, 1.0)
    ExecuteHam(Ham_TakeDamage, victim, 0, victim, random_float(5.0, 10.0), DMG_BULLET)  
    emit_sound(victim, CHAN_BODY, zombie_attack_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)

    remove_task(ent+TASK_ATTACK)
    set_task(1.5, "stop_attack", ent+TASK_ATTACK)
}


public stop_attack(ent)
{
    ent -= TASK_ATTACK

    play_anim(ent, ANIM_IDLE, 1.0)
    remove_task(ent+TASK_ATTACK)
}


public npc_turntotarget(ent, Float:Ent_Origin[3], target, Float:Vic_Origin[3]) 
{
    if(target) 
    {
        new Float:newAngle[3]
        entity_get_vector(ent, EV_VEC_angles, newAngle)
        new Float:x = Vic_Origin[0] - Ent_Origin[0]
        new Float:z = Vic_Origin[1] - Ent_Origin[1]


        new Float:radians = floatatan(z/x, radian)
        newAngle[1] = radians * (180 / 3.14)
        if (Vic_Origin[0] < Ent_Origin[0])
            newAngle[1] -= 180.0

        entity_set_vector(ent, EV_VEC_angles, newAngle)
    }
}


public hook_ent(ent, victim)
{
    new Float:fl_Velocity[3]
    new Float:VicOrigin[3], Float:EntOrigin[3]


    pev(ent, pev_origin, EntOrigin)
    pev(victim, pev_origin, VicOrigin)

    new Float:distance_f = get_distance_f(EntOrigin, VicOrigin)


    if (distance_f > 60.0)
    {
        new Float:fl_Time = distance_f / 100.0


        fl_Velocity[0] = (VicOrigin[0] - EntOrigin[0]) / fl_Time
        fl_Velocity[1] = (VicOrigin[1] - EntOrigin[1]) / fl_Time
        fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time
    } else
    {
        fl_Velocity[0] = 0.0
        fl_Velocity[1] = 0.0
        fl_Velocity[2] = 0.0
    }


    entity_set_vector(ent, EV_VEC_velocity, fl_Velocity)
}


stock bool:IsValidTarget(iTarget)
{
    if (!iTarget || !(1<= iTarget <= get_maxplayers()) || !is_user_connected(iTarget) || !is_user_alive(iTarget))
        return false
    return true
}


public FindClosesEnemy(entid)
{
    new Float:Dist
    new Float:maxdistance=4000.0
    new indexid=0    
    for(new i=1;i<=get_maxplayers();i++){
        if(is_user_alive(i) && is_valid_ent(i) && can_see_fm(entid, i))
        {
            Dist = entity_range(entid, i)
            if(Dist <= maxdistance)
            {
                maxdistance=Dist
                indexid=i

                return indexid
            }
        }    
    }    
    return 0
}


public bool:can_see_fm(entindex1, entindex2)
{
    if (!entindex1 || !entindex2)
        return false


    if (pev_valid(entindex1) && pev_valid(entindex1))
    {
        new flags = pev(entindex1, pev_flags)
        if (flags & EF_NODRAW || flags & FL_NOTARGET)
        {
            return false
        }


        new Float:lookerOrig[3]
        new Float:targetBaseOrig[3]
        new Float:targetOrig[3]
        new Float:temp[3]


        pev(entindex1, pev_origin, lookerOrig)
        pev(entindex1, pev_view_ofs, temp)
        lookerOrig[0] += temp[0]
        lookerOrig[1] += temp[1]
        lookerOrig[2] += temp[2]


        pev(entindex2, pev_origin, targetBaseOrig)
        pev(entindex2, pev_view_ofs, temp)
        targetOrig[0] = targetBaseOrig [0] + temp[0]
        targetOrig[1] = targetBaseOrig [1] + temp[1]
        targetOrig[2] = targetBaseOrig [2] + temp[2]


        engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) //  checks the had of seen player
        if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater))
        {
            return false
        } 
        else 
        {
            new Float:flFraction
            get_tr2(0, TraceResult:TR_flFraction, flFraction)
            if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
            {
                return true
            }
            else
            {
                targetOrig[0] = targetBaseOrig [0]
                targetOrig[1] = targetBaseOrig [1]
                targetOrig[2] = targetBaseOrig [2]
                engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) //  checks the body of seen player
                get_tr2(0, TraceResult:TR_flFraction, flFraction)
                if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
                {
                    return true
                }
                else
                {
                    targetOrig[0] = targetBaseOrig [0]
                    targetOrig[1] = targetBaseOrig [1]
                    targetOrig[2] = targetBaseOrig [2] - 17.0
                    engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) //  checks the legs of seen player
                    get_tr2(0, TraceResult:TR_flFraction, flFraction)
                    if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
                    {
                        return true
                    }
                }
            }
        }
    }
    return false
}


stock get_anim(id)
{
    return pev(id, pev_sequence)
}


stock play_anim(index, sequence, Float:framerate = 1.0)
{
    entity_set_float(index, EV_FL_animtime, get_gametime())
    entity_set_float(index, EV_FL_framerate,  framerate)
    entity_set_float(index, EV_FL_frame, 0.0)
    entity_set_int(index, EV_INT_sequence, sequence)
}  


stock DirectedVec(Float:start[3],Float:end[3],Float:reOri[3])
{
    new Float:v3[3]
    v3[0]=start[0]-end[0]
    v3[1]=start[1]-end[1]
    v3[2]=start[2]-end[2]
    new Float:vl = vector_length(v3)
    reOri[0] = v3[0] / vl
    reOri[1] = v3[1] / vl
    reOri[2] = v3[2] / vl



谁帮我弄一下可以吗,NPC走道的速度慢死了,比乌龟还慢。NPC出生的位置怎么自己设定??还有NPC多了就会卡在一个地方不动了,求高手帮我一下??



我要暴你头。。。。。
獻花 x0 回到頂端 [樓 主] From:沒有資料 | Posted:2014-03-28 19:14 |
xuqiang52133
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x1 鮮花 x32
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

求高手帮我改一下,这个NPC走道的速度太慢了,出生点也不能自己设定,NPC出多了就会卡在一个地方。谢谢大家了。 表情 表情


我要暴你头。。。。。
獻花 x0 回到頂端 [1 樓] From:沒有資料 | Posted:2014-03-28 19:17 |
a7811311622 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎 優秀管理員勳章 社區建設獎
頭銜:我…在工作了…我…在工作了…
版主
級別: 版主 該用戶目前不上站
版區: CS提問區
推文 x771 鮮花 x2152
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

new Float:fl_Time = distance_f / 100.0
那 100.0 就是移動速度…

entity_set_origin(ent, g_spawn_point)
那 g_spawn_point 就是出生點…


尚無簽名,歡迎 [新增個性化簽名]
獻花 x0 回到頂端 [2 樓] From:臺灣中華電信股份有限公司 | Posted:2014-03-29 12:26 |
xuqiang52133
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x1 鮮花 x32
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

我想自己改出生点怎么改呢????我想改成坐标。自己可以设定出生的位置。


我要暴你头。。。。。
獻花 x0 回到頂端 [3 樓] From:沒有資料 | Posted:2014-03-29 19:52 |
xuqiang52133
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x1 鮮花 x32
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

entity_set_origin(ent, g_spawn_point)
这个代码应该怎么改??改成自己设定出生点。最好是设定成坐标。


我要暴你头。。。。。
獻花 x0 回到頂端 [4 樓] From:沒有資料 | Posted:2014-03-29 19:53 |
xuqiang52133
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x1 鮮花 x32
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

求npc高手帮我加上打npc升级攻击力,比如杀到50个升级一次,再杀到100个升级一次,杀到200个再升级一次,打死npc之后可以自动关闭ak47.amxx这个插件,把npc加上蹦,就是遇到箱子自己能蹦起来


我要暴你头。。。。。
獻花 x0 回到頂端 [5 樓] From:未知地址 | Posted:2014-11-12 08:19 |
xuqiang52133
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x1 鮮花 x32
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

帮我改完成功的赠送50雅币谢谢高手了


我要暴你头。。。。。
獻花 x0 回到頂端 [6 樓] From:未知地址 | Posted:2014-11-12 08:21 |
q5288849
數位造型
個人文章 個人相簿 個人日記 個人地圖
路人甲
級別: 帳號封鎖 該用戶目前不上站
推文 x0 鮮花 x2
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

这个,。。。。。。


獻花 x0 回到頂端 [7 樓] From:未知地址 | Posted:2015-07-14 12:57 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.016962 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言