←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Jak dodać klasie 1/x podpalenie przeciwnik...

Zablokowany

Hans Landa - zdjęcie Hans Landa 07.02.2014

Witam, chciałbym prosić o dokładny poradnik jak dodać klasie 1/x na podpalenie wroga przy każdym strzale i z każdej broni. 

 

Z góry dzięki.

Odpowiedz

  • +
  • -
Drago36 - zdjęcie Drago36 07.02.2014

Kod by Cypis'

Poradnik by Drago36

 

Do bibliotek dodajesz:

#include <fakemeta>
#include <xs>

Pod bibliotekami dodajesz:

#define MAX 32

new sprite_fire,
    sprite_smoke;

new ma_klase[MAX+1] ,wartosc_perku[MAX+1], palenie_gracza[MAX+1];

Rejestrujesz:

register_event("Damage", "Damage", "b", "2!=0");

I na sam koniec pluginu dajesz:

public plugin_precache()
{
    sprite_fire = precache_model("sprites/fire.spr")
    sprite_smoke = precache_model("sprites/steam1.spr")
}
// JESLI MASZ JUZ W KLASIE PLUGIN_PRECACHE TO SKOPIUJ TYLKO TE DWIE LINIJKI I DODAJ JE

public Damage(id)
{
    new attacker = get_user_attacker(id);
    if(!is_user_alive(attacker))
        return PLUGIN_CONTINUE;
    
    if(ma_klase[attacker] && random_num(1, x) == 1) // za x wstawiasz swoją wartość
    {
        if(task_exists(id+2936))
            remove_task(id+2936);
        palenie_gracza[id] = 25;
        new data[2]
        data[0] = id
        data[1] = attacker
        set_task(0.2, "burning_flame", id+2936, data, 2, "b");
    }
    return PLUGIN_CONTINUE;
}

public burning_flame(data[2])
{
    new id = data[0]
    
    if(!is_user_alive(id))
    {
        palenie_gracza[id] = 0
        remove_task(id+2936);
        return PLUGIN_CONTINUE;
    }
    
    new origin[3], flags = pev(id, pev_flags)
    get_user_origin(id, origin)
    
    if(flags & FL_INWATER || palenie_gracza[id] < 1 || !get_user_health(id))
    {
        message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
        write_byte(TE_SMOKE)
        write_coord(origin[0])
        write_coord(origin[1])
        write_coord(origin[2]-50)
        write_short(sprite_smoke)
        write_byte(random_num(15,20))
        write_byte(random_num(10,20))
        message_end()
        
        remove_task(id+2936);
        return PLUGIN_CONTINUE;
    }
    
    if(flags & FL_ONGROUND)
    {
        static Float:velocity[3]
        pev(id, pev_velocity, velocity)
        xs_vec_mul_scalar(velocity, 0.5, velocity)
        set_pev(id, pev_velocity, velocity)
    }
    cod_inflict_damage(data[1], id, 1.0, 0.0, 0, 1<<24);
    
    message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
    write_byte(TE_SPRITE)
    write_coord(origin[0]+random_num(-5,5))
    write_coord(origin[1]+random_num(-5,5))
    write_coord(origin[2]+random_num(-10,10))
    write_short(sprite_fire)
    write_byte(random_num(5,10))
    write_byte(200)
    message_end()
    
    palenie_gracza[id]--
    return PLUGIN_CONTINUE;
}   
Odpowiedz

Hans Landa - zdjęcie Hans Landa 09.02.2014

Ok wszystko działa, ale gdy podpale przeciwnika to zabiera mu pancerz i to w małym stopniu. Można by było to przerobić aby zabierało HP i pancerz = 1hp w ciągu 1 sek i to do końca rundy ? Jeśli tak to bardzo o to proszę.

Odpowiedz

  • +
  • -
Drago36 - zdjęcie Drago36 09.02.2014

Chodzi ci o to, że jak podpali się wroga to ma palić się dotąd aż umrze?
Odpowiedz

Hans Landa - zdjęcie Hans Landa 09.02.2014

Tak, i żeby brało hp i pancerz wraz a nie sam pancerz. I 1hp=1sek z taką prędkością.

Odpowiedz

Hans Landa - zdjęcie Hans Landa 10.02.2014

Ref

Odpowiedz

  • +
  • -
Drago36 - zdjęcie Drago36 12.02.2014

Wszystko zostaw co było, wykonuj kolejne kroki.

 

Zamiast biblioteki:

#include <fakemeta>

Daj:

#include <fakemeta_util>

Dodaj zmienną:

new cvar_firedamage

I zarejestruj ją:

cvar_firedamage = register_cvar("cod_dmg_podpalenie", "1") // ile zabierac dmg (co 1sec)

Zamiast tamtych public'ów daj te:

public Damage(id)
{
    new attacker = get_user_attacker(id);
    if(!is_user_alive(attacker))
        return PLUGIN_CONTINUE;
    
   if(id == attacker)
        return PLUGIN_CONTINUE;
    
    if(ma_klase[attacker] && random_num(1, x) == 1) // za x wstawiasz swoja wartosc
    {
        if(task_exists(id+2936))
            remove_task(id+2936);
        palenie_gracza[id] = 999999;
        new data[2]
        data[0] = id
        data[1] = attacker
        set_task(1.0, "burning_flame", id+2936, data, 2, "b");
    }
    return PLUGIN_CONTINUE;
}

public burning_flame(data[2])
{
    new id = data[0]
    
    if(!is_user_alive(id))
    {
        palenie_gracza[id] = 0
        remove_task(id+2936);
        return PLUGIN_CONTINUE;
    }
    
    new origin[3], flags = pev(id, pev_flags)
    get_user_origin(id, origin)
    
    if(flags & FL_INWATER || palenie_gracza[id] < 1 || !get_user_health(id))
    {
        message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
        write_byte(TE_SMOKE)
        write_coord(origin[0])
        write_coord(origin[1])
        write_coord(origin[2]-50)
        write_short(sprite_smoke)
        write_byte(random_num(15,20))
        write_byte(random_num(10,20))
        message_end()
        
        remove_task(id+2936);
        return PLUGIN_CONTINUE;
    }
    
    if(flags & FL_ONGROUND)
    {
        static Float:velocity[3]
        pev(id, pev_velocity, velocity)
        xs_vec_mul_scalar(velocity, 0.5, velocity)
        set_pev(id, pev_velocity, velocity)
    }
    static health
    health = pev(id, pev_health)

    static armor
    armor = pev(id, pev_armortype)
    
    if (health - floatround(get_pcvar_float(cvar_firedamage), floatround_ceil) > 0)
        fm_set_user_health(id, health - floatround(get_pcvar_float(cvar_firedamage), floatround_ceil))

    if (armor - floatround(get_pcvar_float(cvar_firedamage), floatround_ceil) > 0)
        fm_set_user_armor(id, armor - floatround(get_pcvar_float(cvar_firedamage), floatround_ceil))
    
    message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
    write_byte(TE_SPRITE)
    write_coord(origin[0]+random_num(-5,5))
    write_coord(origin[1]+random_num(-5,5))
    write_coord(origin[2]+random_num(-10,10))
    write_short(sprite_fire)
    write_byte(random_num(5,10))
    write_byte(200)
    message_end()
    
    palenie_gracza[id]--
    return PLUGIN_CONTINUE;
}   

Użytkownik Drago36 edytował ten post 12.02.2014 15:18
Odpowiedz

  • +
  • -
glut - zdjęcie glut 18.02.2014

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Autor tematu zbanowany

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany