Buna seara!

Tutoriale scripting, cod si portiuni de cod.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
DRYincing
Membru, skill 0
Membru, skill 0
Posts: 30
Joined: 02 Jan 2017, 00:36
Detinator Steam: Da
CS Status: :)
Detinator server CS: Zmbio.Zapto.org
Fond eXtream: 0
Contact:

29 Jan 2017, 21:29

Vreau sa imi modificati acest plugin!

As dori sa adaugati un cvar in care sa pot seta viata smokerului si distanta de unde poate sa traga un player(ma refer sa poatra trage de la 20m). Daca este mai departe de 20m, sa-l nu-l lase sa traga si sa ii apara in chat, Nu esti la distanta necesara.

Code: Select all

#include <amxmodx>  
#include <biohazard>  
#include <fakemeta>  
#include <hamsandwich>  
#include <engine>  

#define PLUGIN  "Class: Smoker (trage oamenii)"  
#define AUTHOR  "MaHu"  
#define VERSION "0.1"  

//Main Class, modelT & Sprite Beam  
new g_Line  

#define ICON_HIDE 0  
#define ICON_SHOW 1  
#define ICON_FLASH 2  
 

//Sounds  
new g_sndMiss[] = "left4dead/Smoker_TongueHit_miss.wav"  
new g_sndDrag[] = "left4dead/Smoker_TongueHit_drag.wav"  

//Some vars  
new g_hooked[33], g_hooksLeft[33], g_unable2move[33], g_ovr_dmg[33]  
new Float:g_lastHook[33]  
new bool: g_drag_i[33] = false  

//Cvars  
new cvar_maxdrags, cvar_dragspeed, cvar_cooldown, cvar_dmg2stop, cvar_mates, cvar_unb2move  

new g_class  

public plugin_precache( )  
{  
    precache_sound(g_sndDrag)  
    precache_sound(g_sndMiss)  
    g_Line = precache_model("sprites/zbeam4.spr")  
      
}  

public plugin_init()  
{  
    register_plugin(PLUGIN, VERSION, AUTHOR)  
      
    cvar_dragspeed = register_cvar("smoker_dragspeed", "220")  
    cvar_maxdrags = register_cvar("smoker_maxdrags", "25")  
    cvar_cooldown = register_cvar("smoker_cooldown", "1")  
    cvar_dmg2stop = register_cvar("smoker_dmg2stop", "17")  
    cvar_mates = register_cvar("smoker_mates", "0")  
    cvar_unb2move = register_cvar("smoker_unable_move", "1")  
      
    register_event("ResetHUD", "newSpawn", "b")  
    register_event("DeathMsg", "smoker_death", "a")  
      
    register_forward(FM_CmdStart, "FwdCmdStart");  
      
    RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")  
      
    g_class = register_class("Smoker (trage oamenii)", "pe E")  
    if(g_class != -1)  
    {  
        set_class_data(g_class, DATA_HEALTH, 555.0)  
        set_class_data(g_class, DATA_SPEED, 290.0)  
        set_class_data(g_class, DATA_GRAVITY, 1.0)  
        set_class_data(g_class, DATA_DEFENCE, 0.087)  
        set_class_data(g_class, DATA_HITSPEED, 0.95)  
        set_class_data(g_class, DATA_HITDELAY, 0.15)  
        set_class_data(g_class, DATA_REGENDLY, 0.20)  
        set_class_data(g_class, DATA_HITREGENDLY, 2.2)  
        set_class_data(g_class, DATA_KNOCKBACK, 0.0)  
    }  
}  

public event_infect(victim, attacker)  
{  
    if(get_user_class(victim) == g_class)  
    {  
        g_hooksLeft[victim] = get_pcvar_num(cvar_maxdrags)  
    }  

    if(is_user_zombie(victim) && g_hooked[victim]) 
    {  
        drag_end(victim)  
    }  
}  

public newSpawn(id)  
{  
    if (g_hooked[id])  
        drag_end(id)  
}  

public drag_start(id) // starts drag, checks if player is Smoker, checks cvars  
{    
    if (is_user_zombie(id) && (get_user_class(id) == g_class) && !g_drag_i[id]) {  
          
        static Float:cdown  
        cdown = get_pcvar_float(cvar_cooldown)  
        if (!is_user_alive(id)) {  
            client_print(id, print_chat, "Nu poti trage mort!")  
            return PLUGIN_HANDLED  
        }  
        if (g_hooksLeft[id] <= 0) {  
            client_print(id, print_chat, "Nu poti trage!")  
            return PLUGIN_HANDLED  
        }  
        if (get_gametime() - g_lastHook[id] < cdown) {  
            client_print(id, print_chat, "Asteapta %.f0 sec.!", get_pcvar_float(cvar_cooldown) - (get_gametime() - g_lastHook[id]))  
            return PLUGIN_HANDLED  
        }  
          
        new hooktarget, body  
        get_user_aiming(id, hooktarget, body)  
          
        if (is_user_alive(hooktarget)) {  
            if (!is_user_zombie(hooktarget))  
            {  
                  
                g_hooked[id] = hooktarget  
                emit_sound(hooktarget, CHAN_BODY, g_sndDrag, 1.0, ATTN_NORM, 0, PITCH_HIGH)  
            }  
            else  
            {  
                if (get_pcvar_num(cvar_mates) == 1)  
                {  
                    g_hooked[id] = hooktarget  
                    emit_sound(hooktarget, CHAN_BODY, g_sndDrag, 1.0, ATTN_NORM, 0, PITCH_HIGH)  
                }  
                else  
                {  
                    client_print(id, print_chat, "Este coechipier!")  
                    return PLUGIN_HANDLED  
                }  
            }  
            if (get_pcvar_float(cvar_dragspeed) <= 0.0)  
                cvar_dragspeed = 1  
              
            new parm[2]  
            parm[0] = id  
            parm[1] = hooktarget  
              
            set_task(0.1, "smoker_reelin", id, parm, 2, "b")  
            harpoon_target(parm)  
              
            g_hooksLeft[id]--  
            client_print(id, print_chat, "Poti trage de %d time%s", g_hooksLeft[id], (g_hooksLeft[id] < 2) ? "" : "s")  
            g_drag_i[id] = true  
              
            if(get_pcvar_num(cvar_unb2move) == 1)  
                g_unable2move[hooktarget] = true  
              
            if(get_pcvar_num(cvar_unb2move) == 2)  
                g_unable2move[id] = true  
              
            if(get_pcvar_num(cvar_unb2move) == 3)  
            {  
                g_unable2move[hooktarget] = true  
                g_unable2move[id] = true  
            }  
            } else {  
            g_hooked[id] = 33  
            noTarget(id)  
            emit_sound(hooktarget, CHAN_BODY, g_sndMiss, 1.0, ATTN_NORM, 0, PITCH_HIGH)  
            g_drag_i[id] = true  
            g_hooksLeft[id]--  
            client_print(id, print_chat, "Poti trage de %d time%s", g_hooksLeft[id], (g_hooksLeft[id] < 2) ? "" : "s")  
        }  
    }  
    else  
        return PLUGIN_HANDLED  
      
    return PLUGIN_CONTINUE  
}  

public smoker_reelin(parm[]) // dragging player to smoker  
{  
    new id = parm[0]  
    new victim = parm[1]  
    if (!g_hooked[id] || !is_user_alive(victim) || is_user_zombie(victim))  
    {  
        drag_end(id)  
        return  
    }  
    new Float:fl_Velocity[3]  
    new idOrigin[3], vicOrigin[3]  
    get_user_origin(victim, vicOrigin)  
    get_user_origin(id, idOrigin)  
    new distance = get_distance(idOrigin, vicOrigin)  
    if (distance > 1) {  
        new Float:fl_Time = distance / get_pcvar_float(cvar_dragspeed)  
        fl_Velocity[0] = (idOrigin[0] - vicOrigin[0]) / fl_Time  
        fl_Velocity[1] = (idOrigin[1] - vicOrigin[1]) / fl_Time  
        fl_Velocity[2] = (idOrigin[2] - vicOrigin[2]) / fl_Time  
        } else {  
        fl_Velocity[0] = 0.0  
        fl_Velocity[1] = 0.0  
        fl_Velocity[2] = 0.0  
    }  
    entity_set_vector(victim, EV_VEC_velocity, fl_Velocity) //<- rewritten. now uses engine  
}  

public drag_end(id) // drags end function  
{  
    g_hooked[id] = 0  
    beam_remove(id)  
    remove_task(id)  
      
    if (g_drag_i[id])  
        g_lastHook[id] = get_gametime()  
      
    g_drag_i[id] = false  
    g_unable2move[id] = false  
}  

public smoker_death() // if smoker dies drag off  
{  
    new id = read_data(2)  
      
    beam_remove(id)  
      
    if (g_hooked[id])  
        drag_end(id)  
}  

public fw_TakeDamage(victim, inflictor, attacker, Float:damage) // if take damage drag off  
{  
    if (is_user_alive(attacker) && (get_pcvar_num(cvar_dmg2stop) > 0))  
    {  
        g_ovr_dmg[victim] = g_ovr_dmg[victim] + floatround(damage)  
        if (g_ovr_dmg[victim] >= get_pcvar_num(cvar_dmg2stop))  
        {  
            g_ovr_dmg[victim] = 0  
            drag_end(victim)  
            return HAM_IGNORED;  
        }  
    }  
    return HAM_IGNORED;  
}  

public FwdCmdStart(id, uc_handle)  
{  
    if (!is_user_alive(id) || !is_user_zombie(id))  
        return  
      
    static Button, OldButtons;  
    Button = get_uc(uc_handle, UC_Buttons);  
    OldButtons = pev(id, pev_oldbuttons);  
     
    if((Button & IN_USE) && (OldButtons & IN_USE))  
    {  
        drag_start(id)  
    }  
      
    if(!(Button & IN_USE) && (OldButtons & IN_USE))  
    {  
        drag_end(id)  
    }  
      
    if (!g_drag_i[id])   
    {  
        g_unable2move[id] = false  
    }  
      
    if (g_unable2move[id] && get_pcvar_num(cvar_unb2move) > 0)  
    {  
        set_pev(id, pev_maxspeed, 1.0)  
    }  
}  

public harpoon_target(parm[]) // set beam (ex. tongue:) if target is player  
{  
    new id = parm[0]  
    new hooktarget = parm[1]  
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY)  
    write_byte(8) // TE_BEAMENTS  
    write_short(id)  
    write_short(hooktarget)  
    write_short(g_Line) // sprite index  
    write_byte(0) // start frame  
    write_byte(0) // framerate  
    write_byte(200) // life  
    write_byte(8) // width  
    write_byte(1) // noise  
    write_byte(155) // r, g, b  
    write_byte(155) // r, g, b  
    write_byte(55) // r, g, b  
    write_byte(90) // brightness  
    write_byte(10) // speed  
    message_end()  
}  

public noTarget(id) // set beam if target isn't player  
{  
    new endorigin[3]  
    get_user_origin(id, endorigin, 3)  
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY)  
    write_byte( TE_BEAMENTPOINT ); // TE_BEAMENTPOINT  
    write_short(id)  
    write_coord(endorigin[0])  
    write_coord(endorigin[1])  
    write_coord(endorigin[2])  
    write_short(g_Line) // sprite index  
    write_byte(0) // start frame  
    write_byte(0) // framerate  
    write_byte(200) // life  
    write_byte(8) // width  
    write_byte(1) // noise  
    write_byte(155) // r, g, b  
    write_byte(155) // r, g, b  
    write_byte(55) // r, g, b  
    write_byte(75) // brightness  
    write_byte(0) // speed  
    message_end()  
}  

public beam_remove(id) // remove beam  
{  
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY)  
    write_byte(99) //TE_KILLBEAM  
    write_short(id) //entity  
    message_end()  
}  
Post Reply

Return to “Scripting”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 7 guests