Skocz do zawartości

Nowy szablon forum

mygo.pl

Stworzyliśmy dla Was nowy wygląd forum. Z pewnością znajdziesz rzeczy, które wg Ciebie mogą zostać zmienione - wspomnij o tym w specjalnym wątku.

Czytaj więcej

Jak założyć własną sieć

serwerów CS

Zastanawiasz się nad prowadzeniem własnej sieci serwerów? Przeczytaj podstawowe informacje, na które należy zwrócić uwagę, przy takim projekcie.

Czytaj więcej

Tworzymy spis sieci

dodaj swoją

Dodaj sieć do której należysz, pozwoli to na promocję i budowę ogólnopolskiej bazy sieci CS.

Czytaj więcej

RSSConvert this plugin to a knife!


MYGO.pl
 Udostępnij

Rekomendowane odpowiedzi

  • RSSy
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) )
    {

Przeczytaj cały wpis

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...