Raised This Month: $51 Target: $400
 12% 

Convert this plugin to a knife!


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
nG_getwreck
Senior Member
Join Date: Oct 2020
Location: Philippines from South K
Old 12-07-2020 , 01:21   Convert this plugin to a knife!
Reply With Quote #1

Hello guys I need help!

I want to change this plugin to use knife slot instead of using primary weapon slot.

I did change but weapon animations didn't play correctly.

Code:
#include <zombie_escape>
#include <engine>
#include <fakemeta_util>
#include <cstrike>
#include <fun>
 
#define PLUGIN "Blood-Dripper"
#define VERSION "1.0"
#define AUTHOR "m4m3ts"
 
#define CSW_BDRIPPER CSW_KNIFE
#define weapon_guillotine "weapon_mac10"
#define old_event "events/mac10.sc"
#define old_w_model "models/w_mac10.mdl"
#define WEAPON_SECRETCODE 1329419
 
 
#define DEFAULT_AMMO 10
#define DAMAGE 200
#define BDRIP_CLASSNAME "Blood Dripper"
#define WEAPON_ANIMEXT "knife"
 
#define Get_Ent_Data(%1,%2) get_pdata_int(%1,%2,4)
#define Set_Ent_Data(%1,%2,%3) set_pdata_int(%1,%2,%3,4)
 
const PDATA_SAFE = 2
const OFFSET_LINUX_WEAPONS = 4
const OFFSET_WEAPONOWNER = 41
 
new const v_model[] = "models/zombie_escape/v_guillotine.mdl"
new const p_model[] = "models/zombie_escape/p_guillotine.mdl"
new const w_model[] = "models/zombie_escape/w_guillotine.mdl"
new const KNIFE_MODEL[] = "models/zombie_escape/guillotine_projectile.mdl"
new const PECAH_MODEL[] = "models/zombie_escape/gibs_guilotine.mdl"
new const hit_wall[] = "weapons/janus9_stone1.wav"
new const hit_wall2[] = "weapons/janus9_stone2.wav"
new const weapon_sound[6][] =
{
    "weapons/guillotine_catch2.wav",
    "weapons/guillotine_draw.wav",
    "weapons/guillotine_draw_empty.wav",
    "weapons/guillotine_explode.wav",
    "weapons/guillotine_red.wav",
    "weapons/guillotine-1.wav"
}
 
 
new const WeaponResource[3][] =
{
    "sprites/weapon_guillotine.txt",
    "sprites/640hud120.spr",
    "sprites/guillotine_lost.spr"
}
 
enum
{
    ANIM_IDLE = 0,
    ANIM_IDLE_EMPTY,
    ANIM_SHOOT,
    ANIM_DRAW,
    ANIM_DRAW_EMPTY,
    ANIM_IDLE_SHOOT,
    ANIM_IDLE_SHOOT2,
    ANIM_CATCH,
    ANIM_LOST
}
 
new g_MsgDeathMsg
 
new g_had_guillotine[33], g_guillotine_ammo[33], shoot_mode[33], shoot_ent_mode[33], g_pecah, headshot_mode[33], ent_sentuh[33], ent_sentuh_balik[33]
new g_old_weapon[33], g_smokepuff_id, m_iBlood[2], guillotine_korban[33], headshot_korban[33], gmsgScoreInfo
new g_iItemID
 
const SECONDARY_WEAPONS =
(1 << CSW_DEAGLE)|(1 << CSW_USP)|(1 << CSW_GLOCK18)|(1 << CSW_ELITE)|(1 << CSW_FIVESEVEN)|(1 << CSW_P228)
 
public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_cvar("guillotine_version", "m4m3ts", FCVAR_SERVER|FCVAR_SPONLY)
    register_forward(FM_CmdStart, "fw_CmdStart")
    register_forward(FM_SetModel, "fw_SetModel")
    register_think(BDRIP_CLASSNAME, "fw_Think")
    register_touch(BDRIP_CLASSNAME, "*", "fw_touch")
    register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
    register_forward(FM_TraceLine, "fw_traceline", 1)
    register_forward(FM_AddToFullPack, "fm_addtofullpack_post", 1)
    RegisterHam(Ham_Weapon_WeaponIdle, weapon_guillotine, "fw_guillotineidleanim", 1)
    RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
    RegisterHam(Ham_Item_AddToPlayer, weapon_guillotine, "fw_AddToPlayer_Post", 1)
    register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
   
    g_iItemID = ze_register_item("Blood Dripper", 20, 0)
   
    register_clcmd("weapon_guillotine", "hook_weapon")
   
    g_MsgDeathMsg = get_user_msgid("DeathMsg")
    gmsgScoreInfo = get_user_msgid("ScoreInfo")
}
 
 
public plugin_precache()
{
    precache_model(v_model)
    precache_model(p_model)
    precache_model(w_model)
    precache_model(KNIFE_MODEL)
    g_pecah = precache_model(PECAH_MODEL)
    precache_sound(hit_wall)
    precache_sound(hit_wall2)
   
    for(new i = 0; i < sizeof(weapon_sound); i++)
        precache_sound(weapon_sound[i])
   
    for(new i = 1; i < sizeof(WeaponResource); i++)
        precache_model(WeaponResource[i])
   
    g_smokepuff_id = engfunc(EngFunc_PrecacheModel, WeaponResource[2])
    m_iBlood[0] = precache_model("sprites/blood.spr")
    m_iBlood[1] = precache_model("sprites/bloodspray.spr") 
}
 
public ze_user_infected(id)
{
    remove_guillotine(id)
}
 
public fw_PlayerKilled(id)
{
    remove_guillotine(id)
}
 
public hook_weapon(id)
{
    engclient_cmd(id, weapon_guillotine)
    return
}
 
public ze_select_item_pre(id, itemid)
{
    // This not our item?
    if (itemid != g_iItemID)
        return ZE_ITEM_AVAILABLE
   
    // Available for Humans only, So don't show it for zombies
    if (ze_is_user_zombie(id))
        return ZE_ITEM_DONT_SHOW
   
    // Finally return that it's available
    return ZE_ITEM_AVAILABLE
}
 
public ze_select_item_post(id, itemid)
{
    // This is not our item, Block it here and don't execute the blew code
    if (itemid != g_iItemID)
        return
   
    get_guillotine(id)
}
 
public get_guillotine(id)
{
    if(!is_user_alive(id))
        return
    drop_weapons(id, 1)
    g_had_guillotine[id] = 1
    g_guillotine_ammo[id] = DEFAULT_AMMO
   
    give_item(id, weapon_guillotine)
    update_ammo(id)
   
    static weapon_ent; weapon_ent = fm_find_ent_by_owner(-1, weapon_guillotine, id)
    if(pev_valid(weapon_ent)) cs_set_weapon_ammo(weapon_ent, 1)
}
 
public remove_guillotine(id)
{
    g_had_guillotine[id] = 0
}
 
public refill_guillotine(id)
{  
    if(g_had_guillotine[id]) g_guillotine_ammo[id] = 15
   
    if(get_user_weapon(id) == CSW_BDRIPPER && g_had_guillotine[id]) update_ammo(id)
}
   
public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
{
    if(!is_user_alive(id) || !is_user_connected(id))
        return FMRES_IGNORED   
    if(get_user_weapon(id) == CSW_BDRIPPER && g_had_guillotine[id])
        set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001)
   
    return FMRES_HANDLED
}
 
public Event_CurWeapon(id)
{
    if(!is_user_alive(id))
        return
       
    if(get_user_weapon(id) == CSW_BDRIPPER && g_had_guillotine[id])
    {
        set_pev(id, pev_viewmodel2, v_model)
        set_pev(id, pev_weaponmodel2, p_model)
        set_pdata_string(id, 492 * 4, WEAPON_ANIMEXT, -1 , 20)
        if(g_old_weapon[id] != CSW_BDRIPPER && g_guillotine_ammo[id] >= 1) set_weapon_anim(id, ANIM_DRAW)
        if(g_old_weapon[id] != CSW_BDRIPPER && g_guillotine_ammo[id] == 0) set_weapon_anim(id, ANIM_DRAW_EMPTY)
        update_ammo(id)
    }
   
    g_old_weapon[id] = get_user_weapon(id)
}
 
public fw_guillotineidleanim(Weapon)
{
    new id = get_pdata_cbase(Weapon, 41, 4)
 
    if(!is_user_alive(id) || ze_is_user_zombie(id) || !g_had_guillotine[id] || get_user_weapon(id) != CSW_BDRIPPER)
        return HAM_IGNORED;
   
    if(shoot_mode[id] == 0 && g_guillotine_ammo[id] >= 1)
        return HAM_SUPERCEDE;
   
    if(headshot_mode[id] == 0 && shoot_mode[id] == 1 && get_pdata_float(Weapon, 48, 4) <= 0.25)
    {
        set_weapon_anim(id, ANIM_IDLE_SHOOT)
        set_pdata_float(Weapon, 48, 20.0, 4)
        return HAM_SUPERCEDE;
    }
   
    if(headshot_mode[id] == 1 && shoot_mode[id] == 1 && get_pdata_float(Weapon, 48, 4) <= 0.25)
    {
        set_weapon_anim(id, ANIM_IDLE_SHOOT2)
        set_pdata_float(Weapon, 48, 20.0, 4)
        return HAM_SUPERCEDE;
    }
   
    if(g_guillotine_ammo[id] == 0 && get_pdata_float(Weapon, 48, 4) <= 0.25)
    {
        set_weapon_anim(id, ANIM_IDLE_EMPTY)
        set_pdata_float(Weapon, 48, 20.0, 4)
        return HAM_SUPERCEDE;
    }
 
    return HAM_IGNORED;
}
 
public fw_CmdStart(id, uc_handle, seed)
{
    if(!is_user_alive(id) || !is_user_connected(id))
        return
    if(get_user_weapon(id) != CSW_BDRIPPER || !g_had_guillotine[id])
        return
   
    static ent; ent = fm_get_user_weapon_entity(id, CSW_BDRIPPER)
    if(!pev_valid(ent))
        return
    if(get_pdata_float(ent, 46, OFFSET_LINUX_WEAPONS) > 0.0 || get_pdata_float(ent, 47, OFFSET_LINUX_WEAPONS) > 0.0)
        return
   
    static CurButton
    CurButton = get_uc(uc_handle, UC_Buttons)
   
    if(CurButton & IN_ATTACK)
    {
        CurButton &= ~IN_ATTACK
        set_uc(uc_handle, UC_Buttons, CurButton)
       
        if(g_guillotine_ammo[id] == 0)
            return
        if(shoot_mode[id] == 0 && get_pdata_float(id, 83, 5) <= 0.0)
        {
            g_guillotine_ammo[id]--
            update_ammo(id)
            shoot_mode[id] = 1
            FireKnife(id)
            set_weapon_anim(id, ANIM_SHOOT)
            emit_sound(id, CHAN_WEAPON, weapon_sound[5], 1.0, ATTN_NORM, 0, PITCH_NORM)
            set_weapons_timeidle(id, CSW_BDRIPPER, 0.7)
            set_player_nextattackx(id, 0.7)
        }
    }
}
 
public FireKnife(id)
{
    static Float:StartOrigin[3], Float:velocity[3], Float:angles[3], Float:anglestrue[3], Float:jarak_max[3]
    get_position(id, 2.0, 0.0, 0.0, StartOrigin)
    get_position(id, 700.0, 0.0, 0.0, jarak_max)
   
    pev(id,pev_v_angle,angles)
    static Ent; Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
    if(!pev_valid(Ent)) return
    anglestrue[0] = 360.0 - angles[0]
    anglestrue[1] = angles[1]
    anglestrue[2] = angles[2]
   
    // Set info for ent
    set_pev(Ent, pev_movetype, MOVETYPE_FLY)
    set_pev(Ent, pev_owner, id)
    set_pev(Ent, pev_iuser1, id)
    set_pev(Ent, pev_fuser1, get_gametime() + 4.0)
    set_pev(Ent, pev_nextthink, halflife_time() + 0.01)
   
    entity_set_string(Ent, EV_SZ_classname, BDRIP_CLASSNAME)
    engfunc(EngFunc_SetModel, Ent, KNIFE_MODEL)
    set_pev(Ent, pev_mins, Float:{-1.0, -1.0, -1.0})
    set_pev(Ent, pev_maxs, Float:{1.0, 1.0, 1.0})
    set_pev(Ent, pev_origin, StartOrigin)
    set_pev(Ent, pev_angles, anglestrue)
    set_pev(Ent, pev_gravity, 0.01)
    set_pev(Ent, pev_solid, SOLID_BBOX)
    set_pev(Ent, pev_frame, 1.0)
    set_pev(Ent, pev_framerate, 30.0)
    set_pev(Ent, pev_sequence, 0)
   
    velocity_by_aim( id, 1100, velocity )
    set_pev( Ent, pev_velocity, velocity )
    set_pev(Ent, pev_vuser1, velocity)
    set_pev(Ent, pev_vuser2, jarak_max)
    shoot_ent_mode[id] = 0
    ent_sentuh[id] = 1
    ent_sentuh_balik[id] = 0
}
 
public fm_addtofullpack_post(es, e, user, host, host_flags, player, p_set)
{
    if(!player)
        return FMRES_IGNORED
       
    if(!is_user_connected(host) || !is_user_alive(user))
        return FMRES_IGNORED
       
    if(!ze_is_user_zombie(user) || headshot_korban[user] != 1)
        return FMRES_IGNORED
       
    if(host == user)
        return FMRES_IGNORED
   
    new Float:PlayerOrigin[3], Float:anglesss[3]
    pev(user, pev_origin, PlayerOrigin)
   
    engfunc(EngFunc_GetBonePosition, user, 8, PlayerOrigin, anglesss)
                       
    engfunc(EngFunc_SetOrigin, guillotine_korban[user], PlayerOrigin)
    engfunc(EngFunc_SetOrigin, guillotine_korban[user], PlayerOrigin)
 
    return FMRES_HANDLED
}
 
public fw_Think(Ent)
{
    if(!pev_valid(Ent))
        return
   
    static Float:pulang[3], Float:StartOriginz[3], pemilix, Float:brangkat[3], Float:jarak_max[3], Float:origin_asli[3], korban
    pemilix = pev(Ent, pev_iuser1)
    pev(Ent, pev_origin, StartOriginz)
    korban = pev(Ent, pev_iuser2)
   
    if(headshot_korban[korban] == 1)
    {
        if(get_gametime() - 0.2 > pev(Ent, pev_fuser3))
        {
            Damage_guillotine(Ent, korban)
            set_pev(Ent, pev_fuser3, get_gametime())
        }
    }
   
    if(ent_sentuh_balik[pemilix] == 0 && shoot_ent_mode[pemilix] == 1)
    {
        ent_sentuh_balik[pemilix] = 1
        pev(pemilix, pev_origin, origin_asli)
        origin_asli[2] += 7.5
    }
   
    if(ent_sentuh[pemilix] == 1)
    {
        ent_sentuh[pemilix] = 0
        pev(Ent, pev_vuser2, jarak_max)
        pev(Ent, pev_vuser1, brangkat)
        get_speed_vector(StartOriginz, origin_asli, 1100.0, pulang)
                   
        if(shoot_ent_mode[pemilix] == 1)
        {
            set_pev(Ent, pev_velocity, pulang)
        }
        else set_pev(Ent, pev_velocity, brangkat)
    }
   
    if(shoot_ent_mode[pemilix] == 0 && get_distance_f(StartOriginz, jarak_max) <= 10.0)
    {
        shoot_ent_mode[pemilix] = 1
        ent_sentuh[pemilix] = 1
        set_pev(Ent, pev_owner, 0)
    }
   
    if(shoot_ent_mode[pemilix] == 1 && get_distance_f(StartOriginz, origin_asli) <= 10.0)
    {
        if(is_user_alive(pemilix) && is_user_connected(pemilix) && get_user_weapon(pemilix) == CSW_BDRIPPER && g_had_guillotine[pemilix]) balik(Ent)
        else ancur(Ent)
    }
    else if(headshot_korban[korban] == 1) set_pev(Ent, pev_nextthink, get_gametime() + 0.2)
    else set_pev(Ent, pev_nextthink, halflife_time() + 0.01)
}
 
public fw_touch(Ent, Id)
{
    // If ent is valid
    if(!pev_valid(Ent))
        return
    if(pev(Ent, pev_movetype) == MOVETYPE_NONE)
        return
    static classnameptd[32]
    pev(Id, pev_classname, classnameptd, 31)
    if (equali(classnameptd, "func_breakable")) ExecuteHamB( Ham_TakeDamage, Id, 0, 0, 80.0, DMG_GENERIC )
   
    // Get it's origin
    new Float:originF[3], pemilix
    pemilix = pev(Ent, pev_iuser1)
    pev(Ent, pev_origin, originF)
    // Alive...
   
    if(is_user_alive(Id) && ze_is_user_zombie(Id))
    {
        Damage_guillotine(Ent, Id)
        set_pev(Ent, pev_owner, Id)
        ent_sentuh[pemilix] = 1
        create_blood(originF)
        create_blood(originF)
    }
   
    else if(shoot_ent_mode[pemilix] == 1 && Id == pemilix)
    {
        if(is_user_alive(pemilix) && is_user_connected(pemilix) && get_user_weapon(pemilix) == CSW_BDRIPPER && g_had_guillotine[pemilix]) balik(Ent)
        else ancur(Ent)
    }
   
    else if(is_user_alive(Id) && !ze_is_user_zombie(Id))
    {
        set_pev(Ent, pev_owner, Id)
        ent_sentuh[pemilix] = 1
    }
   
    else
    {
        set_pev(Ent, pev_owner, 0)
 
        if(shoot_ent_mode[pemilix] == 0)
        {
            shoot_ent_mode[pemilix] = 1
            engfunc(EngFunc_EmitSound, Ent, CHAN_WEAPON, hit_wall, 1.0, ATTN_STATIC, 0, PITCH_NORM)
            ent_sentuh[pemilix] = 1
        }
        else ancur(Ent)
    }
}
 
public ancur(Ent)
{
    if(!pev_valid(Ent))
        return
    static Float:origin2[3], pemilix, Float:origin3[3]
    pemilix = pev(Ent, pev_iuser1)
    entity_get_vector(Ent, EV_VEC_origin, origin2)
    pev(Ent, pev_origin, origin3)
   
    engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin2, 0)
    write_byte(TE_BREAKMODEL)
    engfunc(EngFunc_WriteCoord, origin2[0])
    engfunc(EngFunc_WriteCoord, origin2[1])
    engfunc(EngFunc_WriteCoord, origin2[2])
    engfunc(EngFunc_WriteCoord, 25)
    engfunc(EngFunc_WriteCoord, 25)
    engfunc(EngFunc_WriteCoord, 25)
    engfunc(EngFunc_WriteCoord, random_num(-25, 25))
    engfunc(EngFunc_WriteCoord, random_num(-25, 25))
    engfunc(EngFunc_WriteCoord, 5)
    write_byte(5)
    write_short(g_pecah)
    write_byte(10)
    write_byte(17)
    write_byte(0x00)
    message_end()
   
    fake_smokes(origin3)
    engfunc(EngFunc_EmitSound, Ent, CHAN_WEAPON, hit_wall2, 1.0, ATTN_STATIC, 0, PITCH_NORM)
    shoot_mode[pemilix] = 0
    remove_entity(Ent)
   
    if(!is_user_alive(pemilix) || !is_user_connected(pemilix) || get_user_weapon(pemilix) != CSW_BDRIPPER || !g_had_guillotine[pemilix])
        return
   
    set_weapon_anim(pemilix, ANIM_LOST)
    set_weapons_timeidle(pemilix, CSW_BDRIPPER, 2.5)
    set_player_nextattackx(pemilix, 2.5)
    set_task(1.3, "reload2", pemilix)
    set_task(1.4, "reload", pemilix)
}
 
public reload(id)
{
    if(!is_user_alive(id) || !is_user_connected(id) || get_user_weapon(id) != CSW_BDRIPPER || !g_had_guillotine[id] || g_guillotine_ammo[id] == 0)
        return
   
    set_weapon_anim(id, ANIM_DRAW)
}
 
public reload2(id)
{
    if(!is_user_alive(id) || !is_user_connected(id) || get_user_weapon(id) != CSW_BDRIPPER || !g_had_guillotine[id] || g_guillotine_ammo[id] == 0)
        return
   
    set_weapon_anim(id, ANIM_IDLE_SHOOT2)
}
 
public balik(Ent)
{
    if(!pev_valid(Ent))
        return
    static id
    id = pev(Ent, pev_iuser1)
    set_weapon_anim(id, ANIM_CATCH)
    emit_sound(id, CHAN_WEAPON, weapon_sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
    set_weapons_timeidle(id, CSW_BDRIPPER, 1.0)
    set_player_nextattackx(id, 1.0)
    shoot_mode[id] = 0
    g_guillotine_ammo[id]++
    update_ammo(id)
   
    remove_entity(Ent)
}
 
public Damage_guillotine(Ent, Id)
{
    static Owner; Owner = pev(Ent, pev_iuser1)
    static Attacker;
    if(!is_user_alive(Owner))
    {
        Attacker = 0
        return
    } else Attacker = Owner
 
    new bool:bIsHeadShot; // never make that one static
    new Float:flAdjustedDamage, bool:death
       
    switch( Get_MissileWeaponHitGroup(Ent) )
    {
__________________
nG_getwreck is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 16:27.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode