hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2025.06.19. 12:56



Jelenlévő felhasználók

Jelenleg 360 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 360 vendég

A legtöbb felhasználó (2761 fő) 2025.01.09. 20:06-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználóaz elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása Hozzászólás a témához  [4 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Zombi NPC
HozzászólásElküldve:2012.03.24. 21:59 
Offline
Őskövület
Avatar

Csatlakozott:2011.09.26. 20:33
Hozzászólások:2105
Megköszönt másnak: 28 alkalommal
Megköszönték neki: 33 alkalommal
hali
Silent felrakta a zombi npc nevű plugint
átakarom írni a a modellt csak hogy abba a hibába ütköztem hogy felsorolja a tevékenységeket.
Lásd:
Kód:
enum
{
    ANIM_IDLE = 1,
    ANIM_WALK = 3,
    ANIM_ATTACK = 76,
    ANIM_DIE = 104
}

Még áttudnám szerkeszteni a modellt de nem tudom hogy mit jelentenek ezek a számok? 1,3,76,104
Nekem az a tippem hogy a ANIM_DIE-n belül vmit csinálnia kell a 104-es képkockánál de nem biztos.
esetleg az egész sma-ból talán megtudnátok nekem mondani:
Kód:
#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_center, "%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

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1250\\ deff0\\ deflang1038{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/

Előre is köszi


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Zombi NPC
HozzászólásElküldve:2012.03.25. 05:39 
Offline
Nagyúr
Avatar

Csatlakozott:2011.09.07. 18:41
Hozzászólások:642
Megköszönt másnak: 15 alkalommal
Megköszönték neki: 6 alkalommal
Már bocsánat de hülyeség,hülyeség,hülyeség!
A modell és a hangok élérését kell változtatni és aztán ugyan olyan pozícióba helyezi!
Az szerintem 104-es mozgás típus!^^

_________________
Kép
Kép
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Zombi NPC
HozzászólásElküldve:2012.03.25. 08:22 
Offline
Őskövület
Avatar

Csatlakozott:2011.09.26. 20:33
Hozzászólások:2105
Megköszönt másnak: 28 alkalommal
Megköszönték neki: 33 alkalommal
tudod egyáltalán miről van szó?
olyan modell kéne amibe csak ez a 4 mozgás van és jó lenne tudni mik azok a számok


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Zombi NPC
HozzászólásElküldve:2012.03.25. 09:35 
Offline
Nagyúr
Avatar

Csatlakozott:2011.09.07. 18:41
Hozzászólások:642
Megköszönt másnak: 15 alkalommal
Megköszönték neki: 6 alkalommal
Többi mozgását egyiknek sem használja!
azok a számok pedig hogy a modelben hanyadik a keresett animáció

_________________
Kép
Kép
Kép


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése: Rendezés 
Új téma nyitása Hozzászólás a témához  [4 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 14 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole