knife pluginde bir sorun

avatar Feruduns45.01
Forum Üyesi
29-09-2022, Saat: 14:00
1469
#1
Yorumu Paylaş

merhabalar forumda yeniyim isteğime başlamadan öncelikle iyi forumlar dilerim 

pluginde bir sorun yok derlediğimde hata da vermiyor
plugini kuruyorum serverime giriyorum knife menuyu açıyorum
astra knifesini seçiyorum fakat başka knife seçince astra elimde kalıyor guilitone hariç 
başka knifeleri seçince astra elime geliyor bu sorunu çözerseniz sevinirim plugini aşağıda bırakıyorum.
kusura bakmayın .sma olarak paylaşamadım galiba öyle yükleme yok Anlamsız
Kod:
#include <amxmodx>
#include <amxmisc>
#include <amxconst>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <levels>

native give_astra(const id);
native remove_astra(const id);

native gui_ekle(id);
native gui_sil(id);

new g_knife1[33],g_knife2[33],g_knife3[33],g_knife4[33],g_knife5[33],g_knife6[33],g_knife7[33]
new cvar_knife1_knock, cvar_knife2_knock, cvar_knife3_knock, cvar_knife4_knock, cvar_knife5_knock
new cvar_knife1_dmg, cvar_knife2_dmg, cvar_knife3_dmg, cvar_knife4_dmg, cvar_knife5_dmg


new knife1_v_model[] = "models/tayo_knife/v_knife1.mdl"

new knife2_v_model[] = "models/tayo_knife/v_knife2.mdl"

new knife3_v_model[] = "models/tayo_knife/v_knife3.mdl"

new knife4_v_model[] = "models/tayo_knife/v_knife4.mdl"

new knife5_v_model[] = "models/tayo_knife/v_knife5.mdl"
    
new v_astra[] = "models/v_guillotineex.mdl"
    
new p_astra[] = "models/p_guillotineex.mdl"

new const knife1_sounds[][] =
{
         "knf_tayo/classic/knife_deploy1.wav",
         "knf_tayo/classic/knife_hit1.wav",
         "knf_tayo/classic/knife_hit2.wav",
         "knf_tayo/classic/knife_hit3.wav",
         "knf_tayo/classic/knife_hit4.wav",
         "knf_tayo/classic/knife_hitwall1.wav",
         "knf_tayo/classic/knife_slash1.wav",
         "knf_tayo/classic/knife_slash2.wav",
         "knf_tayo/classic/knife_stap.wav"
}

new const knife2_sounds[][] =
{
         "knf_tayo/galaxy/knife_deploy1.wav",
         "knf_tayo/galaxy/knife_hit1.wav",
         "knf_tayo/galaxy/knife_hit2.wav",
         "knf_tayo/galaxy/knife_hit3.wav",
         "knf_tayo/galaxy/knife_hit4.wav",
         "knf_tayo/galaxy/knife_hitwall1.wav",
         "knf_tayo/galaxy/knife_slash1.wav",
         "knf_tayo/galaxy/knife_slash2.wav",
         "knf_tayo/galaxy/knife_stap.wav"
}

new const knife3_sounds[][] =
{
         "knf_tayo/dread/knife_deploy1.wav",
         "knf_tayo/dread/knife_hit1.wav",
         "knf_tayo/dread/knife_hit2.wav",
         "knf_tayo/dread/knife_hit3.wav",
         "knf_tayo/dread/knife_hit4.wav",
         "knf_tayo/dread/knife_hitwall1.wav",
         "knf_tayo/dread/knife_slash1.wav",
         "knf_tayo/dread/knife_slash2.wav",
         "knf_tayo/dread/knife_stap.wav"
}

new const knife4_sounds[][] =
{
         "knf_tayo/sword/knife_deploy1.wav",
         "knf_tayo/sword/knife_hit1.wav",
         "knf_tayo/sword/knife_hit2.wav",
         "knf_tayo/sword/knife_hit3.wav",
         "knf_tayo/sword/knife_hit4.wav",
         "knf_tayo/sword/knife_hitwall1.wav",
         "knf_tayo/sword/knife_slash1.wav",
         "knf_tayo/sword/knife_slash2.wav",
         "knf_tayo/sword/knife_stap.wav"
}

new const knife5_sounds[][] =
{
         "knf_tayo/warhammer/warhammer_deploy.wav",
         "knf_tayo/warhammer/warhammer_hit.wav",
         "knf_tayo/warhammer/warhammer_hit.wav",
         "knf_tayo/warhammer/warhammer_hit.wav",
         "knf_tayo/warhammer/warhammer_hit.wav",
         "knf_tayo/warhammer/warhammer_hitwall.wav",
         "knf_tayo/warhammer/warhammer_slash.wav",
         "knf_tayo/warhammer/warhammer_slash.wav",
         "knf_tayo/warhammer/warhammer_stap.wav"
}

new const oldknife_sounds[][] =
{
    "weapons/knife_deploy1.wav",
    "weapons/knife_hit1.wav",
    "weapons/knife_hit2.wav",
    "weapons/knife_hit3.wav",
    "weapons/knife_hit4.wav",
    "weapons/knife_hitwall1.wav",
    "weapons/knife_slash1.wav",
    "weapons/knife_slash2.wav",
    "weapons/knife_stab.wav"
}

public plugin_init()
{
    register_plugin("Knife Menu", "1.0","Multipower,Tayo")
    
    register_event("CurWeapon","checkWeapon","be","1=1")
        register_event("Damage" , "event_Damage" , "b" , "2>0");
        RegisterHam(Ham_Spawn, "player", "Player_Spawn", 1)
        RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage");

        register_forward(FM_EmitSound, "fw_EmitSound");
    
    register_clcmd("say /bicak","knifemenu")
    register_clcmd("say /knife","knifemenu")
    register_clcmd("say_team /knife","knifemenu")
    register_clcmd("say_team /bicak","knifemenu")

        cvar_knife1_knock = register_cvar("ze_knife1_knock" , "6.0");
        cvar_knife2_knock = register_cvar("ze_knife2_knock" , "9.0");
        cvar_knife3_knock = register_cvar("ze_knife3_knock" , "12.0");
        cvar_knife4_knock = register_cvar("ze_knife4_knock" , "15.0");
        cvar_knife5_knock = register_cvar("ze_knife5_knock" , "18.0");

        cvar_knife1_dmg = register_cvar("ze_knife1_dmg" , "100.0");
        cvar_knife2_dmg = register_cvar("ze_knife2_dmg" , "300.0");
        cvar_knife3_dmg = register_cvar("ze_knife3_dmg" , "500.0");
        cvar_knife4_dmg = register_cvar("ze_knife4_dmg" , "700.0");
        cvar_knife5_dmg = register_cvar("ze_knife5_dmg" , "900.0");
}

public plugin_precache()
{
    precache_model(knife1_v_model)
    precache_model(knife2_v_model)
    precache_model(knife3_v_model)
    precache_model(knife4_v_model)
    precache_model(knife5_v_model)
        precache_model(v_astra)
    precache_model(p_astra)

        for(new i = 0; i < sizeof knife1_sounds; i++)
            precache_sound(knife1_sounds[i])

        for(new i = 0; i < sizeof knife2_sounds; i++)
            precache_sound(knife2_sounds[i])

        for(new i = 0; i < sizeof knife3_sounds; i++)
            precache_sound(knife3_sounds[i])  

        for(new i = 0; i < sizeof knife4_sounds; i++)
            precache_sound(knife4_sounds[i])

        for(new i = 0; i < sizeof knife5_sounds; i++)
            precache_sound(knife5_sounds[i])
}

public Player_Spawn(id)
{
    if(is_user_alive(id) && get_user_flags(id) == ADMIN_KICK && !zp_get_user_zombie(id))
    {
        give_astra(id);
    }
    else
    {
        knife1(id)
    }
}

public client_connect(id)
{
    g_knife1[id] = false
    g_knife2[id] = false
    g_knife3[id] = false
    g_knife4[id] = false
    g_knife5[id] = false
    g_knife7[id] = false
}

public client_disconnected(id)
{
    g_knife1[id] = false
    g_knife2[id] = false
    g_knife3[id] = false
    g_knife4[id] = false
    g_knife5[id] = false
    g_knife7[id] = false
}

public knifemenu(id)
{
    new menuz;
    static amenu[512];
    formatex(amenu,charsmax(amenu),"\r[ZoP] \yKnife Menu")
    menuz = menu_create(amenu,"knifemenu_devam")

    formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Classic Knife |-")
    menu_additem(menuz,amenu,"1")

    if(get_user_level(id) >= 0)
    {
        formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Luminous Sword |-")
    }
    else
    {
        formatex(amenu,charsmax(amenu),"\rLOCKED \d[LVL:20]")
    }
    menu_additem(menuz,amenu,"2")

    if(get_user_level(id) >= 0)
    {
        formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Valorant |-")
    }
    else
    {
        formatex(amenu,charsmax(amenu),"\rLOCKED \d[LVL:40]")
    }
    menu_additem(menuz,amenu,"3")

    if(get_user_level(id) >= 0)
    {
        formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Warhammer |-")
    }
    else
    {
        formatex(amenu,charsmax(amenu),"\rLOCKED \d[LVL:60]")
    }
    menu_additem(menuz,amenu,"4")

    if(get_user_level(id) >= 65)
    {
        formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Swords |-")
    }
    else
    {
        formatex(amenu,charsmax(amenu),"\rLOCKED \d[LVL:65]")
    }
    menu_additem(menuz,amenu,"5")

    if(is_user_admin(id))
    {
        formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Guillotine |-")
    }
    else
    {
        formatex(amenu,charsmax(amenu),"\rLOCKED \r[Admin]")
    }        

    menu_additem(menuz,amenu,"6")

    if(get_user_flags(id) & ADMIN_BAN)
    {
        formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Astra Gui |-")
    }
    else
    {
        formatex(amenu,charsmax(amenu),"\rLOCKED \r[Admin Plus]")
    }        

    menu_additem(menuz,amenu,"7")

    menu_setprop(menuz,MPROP_EXIT,MEXIT_ALL)
    menu_display(id,menuz,0)

    return PLUGIN_HANDLED
}

public knifemenu_devam(id,menu,item)
{
    if(item == MENU_EXIT || zp_get_user_zombie(id))
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    }
    new access,callback,data[6],iname[64]

    menu_item_getinfo(menu,item,access,data,5,iname,63,callback)

    new key = str_to_num(data)

    if(key == 1)
    {
        remove_astra(id);
        gui_sil(id)
        knife1(id)
    }
    else if(key == 2)
    {
        if(get_user_level(id) >= 20)
        {
            knife2(id)
            remove_astra(id);
            gui_sil(id)
        }
        else
        {
            client_print_color(id, print_team_default, "x04[ZE]x03 Yeterli LvL'niz Yok.")
            knifemenu(id)
        }
    }
    else if(key == 3)
    {
        if(get_user_level(id) >= 40)
        {
            knife3(id)
            remove_astra(id);
            gui_sil(id)
        }
        else
        {
            client_print_color(id, print_team_default, "x04[ZE]x03 Yeterli LvL'niz Yok.")
            knifemenu(id)
        }
    }
    else if(key == 4)
    {
        if(get_user_level(id) >= 60)
        {
            knife4(id)
            remove_astra(id);
            gui_sil(id)
        }
        else
        {
            client_print_color(id, print_team_default, "x04[ZE]x03 Yeterli LvL'niz Yok.")
            knifemenu(id)
        }
    }
    else if(key == 5)
    {
        if(get_user_level(id) >= 70)
        {
            knife5(id)
            remove_astra(id);
            gui_sil(id)
        }
        else
        {
            client_print_color(id, print_team_default, "x04[ZE]x03 Yeterli LvL'niz Yok.")
            knifemenu(id)
        }
    }
    else if(key == 6)
    {
        if(is_user_admin(id))
        {
            remove_astra(id);
            gui_silici(id)
            gui_ekle(id)
        }
        else
        {
            client_print_color(id, print_team_default, "x04[ZE]x03 Yetkin Yok. x04|| x03Only For VIPS.")
            knifemenu(id)
        }
    }
    else if(key == 7)
    {
        if(get_user_flags(id) & ADMIN_BAN)
        {
            gui_sil(id);
            gui_silici(id)
            give_astra(id)
            knife7(id)
        }
        else
        {
            client_print_color(id, print_team_default, "x04[ZE]x03 Yetkin Yok. x04|| x03Only For VIPS.")
            knifemenu(id)
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}

public knife1(id)
{
    g_knife1[id] = true
    g_knife2[id] = false
    g_knife3[id] = false
    g_knife4[id] = false
    g_knife5[id] = false
}

public knife2(id)
{
    g_knife1[id] = false
    g_knife2[id] = true
    g_knife3[id] = false
    g_knife4[id] = false
    g_knife5[id] = false
}

public knife3(id)
{
    g_knife1[id] = false
    g_knife2[id] = false
    g_knife3[id] = true
    g_knife4[id] = false
    g_knife5[id] = false
}

public knife4(id)
{
    g_knife1[id] = false
    g_knife2[id] = false
    g_knife3[id] = false
    g_knife4[id] = true
    g_knife5[id] = false
}

public knife5(id)
{
    g_knife1[id] = false
    g_knife2[id] = false
    g_knife3[id] = false
    g_knife4[id] = false
    g_knife5[id] = true
}

public gui_silici(id)
{
    g_knife1[id] = false
    g_knife2[id] = false
    g_knife3[id] = false
    g_knife4[id] = false
    g_knife5[id] = false
}
public knife7(id)
{
    g_knife7[id] = true
}
public fw_EmitSound(id, channel, const sound[])
{
    if(!is_user_alive(id) || zp_get_user_zombie(id))
        return FMRES_IGNORED
        
    for(new i = 0; i < sizeof knife1_sounds; i++)
    for(new i = 0; i < sizeof knife2_sounds; i++)
    for(new i = 0; i < sizeof knife3_sounds; i++)
    for(new i = 0; i < sizeof knife4_sounds; i++)
    for(new i = 0; i < sizeof knife5_sounds; i++)
    {
        if(equal(sound, oldknife_sounds[i]))
        {
            if (g_knife1[id])
            {
                emit_sound(id, channel, knife1_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
                return FMRES_SUPERCEDE
            }
            if (g_knife2[id])
            {
                emit_sound(id, channel, knife2_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
                return FMRES_SUPERCEDE
            }
            if (g_knife3[id])
            {
                emit_sound(id, channel, knife3_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
                return FMRES_SUPERCEDE
            }
            if (g_knife4[id])
            {
                emit_sound(id, channel, knife4_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
                return FMRES_SUPERCEDE
            }
            if (g_knife5[id])
            {
                emit_sound(id, channel, knife5_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
                return FMRES_SUPERCEDE
            }
            if (g_knife6[id])
            {
                emit_sound(id, channel, oldknife_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
                return FMRES_SUPERCEDE
            }
        }
    }
    return FMRES_IGNORED
}


public checkWeapon(id)
{
    new plrWeapId
    
    plrWeapId = get_user_weapon(id)
    
    if (plrWeapId == CSW_KNIFE && (g_knife1[id] || g_knife2[id] || g_knife3[id] || g_knife4[id] || g_knife5[id] || g_knife6[id] || g_knife7[id]))
    {
        checkModel(id)
    }
}

public checkModel(id)
{
    if (zp_get_user_zombie(id))
        return PLUGIN_HANDLED

    if (g_knife1[id])
    {
        set_pev(id, pev_viewmodel2, knife1_v_model)
    }

    if (g_knife2[id])
    {
        set_pev(id, pev_viewmodel2, knife2_v_model)
    }

    if (g_knife3[id])
    {
        set_pev(id, pev_viewmodel2, knife3_v_model)
    }

    if (g_knife4[id])
    {
        set_pev(id, pev_viewmodel2, knife4_v_model)
    }

    if (g_knife5[id])
    {
        set_pev(id, pev_viewmodel2, knife5_v_model)
    }
    
    if (g_knife7[id])
    {
        set_pev(id, pev_viewmodel2, v_astra)
        set_pev(id, pev_weaponmodel2, p_astra)
    }

    return PLUGIN_HANDLED
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
    if(!is_user_connected(attacker))
        return HAM_IGNORED
    
    if(zp_get_user_zombie(attacker))
        return HAM_IGNORED

    new weapon = get_user_weapon(attacker)

    if (weapon == CSW_KNIFE && g_knife1[attacker])
    {    
        SetHamParamFloat(4, get_pcvar_float(cvar_knife1_dmg))
    }
    if (weapon == CSW_KNIFE && g_knife2[attacker])
    {    
        SetHamParamFloat(4, get_pcvar_float(cvar_knife2_dmg))
    }
    if (weapon == CSW_KNIFE && g_knife3[attacker])
    {    
        SetHamParamFloat(4, get_pcvar_float(cvar_knife3_dmg))
    }
    if (weapon == CSW_KNIFE && g_knife4[attacker])
    {    
        SetHamParamFloat(4, get_pcvar_float(cvar_knife4_dmg))
    }
        
    if (weapon == CSW_KNIFE && g_knife5[attacker])
    {    
        SetHamParamFloat(4, get_pcvar_float(cvar_knife5_dmg))
    }

    return HAM_IGNORED
}

public event_Damage(id)
{
    new weapon , attacker = get_user_attacker(id , weapon);

    if(!is_user_alive(attacker))
        return PLUGIN_CONTINUE;

    if(weapon == CSW_KNIFE && g_knife1[attacker])
    {
        new Float:vec[3];
        new Float:oldvelo[3];
        get_user_velocity(id, oldvelo);
        create_velocity_vector(id , attacker , vec);
        vec[0] += oldvelo[0];
        vec[1] += oldvelo[1];
        set_user_velocity(id , vec);
    }

    if(weapon == CSW_KNIFE && g_knife2[attacker])
    {
        new Float:vec[3];
        new Float:oldvelo[3];
        get_user_velocity(id, oldvelo);
        create_velocity_vector(id , attacker , vec);
        vec[0] += oldvelo[0];
        vec[1] += oldvelo[1];
        set_user_velocity(id , vec);
    }

    if(weapon == CSW_KNIFE && g_knife3[attacker])
    {
        new Float:vec[3];
        new Float:oldvelo[3];
        get_user_velocity(id, oldvelo);
        create_velocity_vector(id , attacker , vec);
        vec[0] += oldvelo[0];
        vec[1] += oldvelo[1];
        set_user_velocity(id , vec);
    }

    if(weapon == CSW_KNIFE && g_knife4[attacker])
    {
        new Float:vec[3];
        new Float:oldvelo[3];
        get_user_velocity(id, oldvelo);
        create_velocity_vector(id , attacker , vec);
        vec[0] += oldvelo[0];
        vec[1] += oldvelo[1];
        set_user_velocity(id , vec);
    }

    if(weapon == CSW_KNIFE && g_knife5[attacker])
    {
        new Float:vec[3];
        new Float:oldvelo[3];
        get_user_velocity(id, oldvelo);
        create_velocity_vector(id , attacker , vec);
        vec[0] += oldvelo[0];
        vec[1] += oldvelo[1];
        set_user_velocity(id , vec);
    }

    return PLUGIN_CONTINUE;
}

stock create_velocity_vector(victim,attacker,Float:velocity[3])
{
    if(!zp_get_user_zombie(victim) || !is_user_alive(attacker))
        return 0;

    new Float:vicorigin[3];
    new Float:attorigin[3];
    entity_get_vector(victim   , EV_VEC_origin , vicorigin);
    entity_get_vector(attacker , EV_VEC_origin , attorigin);

    new Float:origin2[3]
    origin2[0] = vicorigin[0] - attorigin[0];
    origin2[1] = vicorigin[1] - attorigin[1];

    new Float:largestnum = 0.0;

    if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
    if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);

    origin2[0] /= largestnum;
    origin2[1] /= largestnum;

    if (g_knife1[attacker])
    {
        velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_knife1_knock) * 3000) ) / get_entity_distance(victim , attacker);
        velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_knife1_knock) * 3000) ) / get_entity_distance(victim , attacker);
    }

    if (g_knife2[attacker])
    {
        velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_knife2_knock) * 3000) ) / get_entity_distance(victim , attacker);
        velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_knife2_knock) * 3000) ) / get_entity_distance(victim , attacker);
    }

    if (g_knife3[attacker])
    {
        velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_knife3_knock) * 3000) ) / get_entity_distance(victim , attacker);
        velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_knife3_knock) * 3000) ) / get_entity_distance(victim , attacker);
    }

    if (g_knife4[attacker])
    {
        velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_knife4_knock) * 3000) ) / get_entity_distance(victim , attacker);
        velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_knife4_knock) * 3000) ) / get_entity_distance(victim , attacker);
    }

    if (g_knife5[attacker])
    {
        velocity[0] = ( origin2[0] * (get_pcvar_float(cvar_knife5_knock) * 3000) ) / get_entity_distance(victim , attacker);
        velocity[1] = ( origin2[1] * (get_pcvar_float(cvar_knife5_knock) * 3000) ) / get_entity_distance(victim , attacker);
    }

    if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
        velocity[2] = random_float(200.0 , 275.0);

    return 1;
}
deneme
Forum Üyesi

Konuda Ara

14 Yorum
  • 1
  • 2

Feruduns45.01

Forum Üyesi

Kayıtlı Üye Grubu
avatar
Feruduns45.01
29-09-2022, Saat: 14:40
29-09-2022, Saat: 14:40
#2
Yorumu Paylaş
Aconyonn Adlı Kullanıcıdan Alıntı: Yoruma gitçözümü söylüyorum eklenti içerisinden modeli verdiren fonksiyonla oynama yapacaksınız. arkadaşlar yardımcı olacaktır.

sma ek koyma şeyi getirirseniz sevinirim Gülümse

QuryWesT

Yasaklı Üye
Yasaklı Üye Grubu
avatar
QuryWesT
29-09-2022, Saat: 16:13
29-09-2022, Saat: 16:13
#3
Yorumu Paylaş
Eklenti içinde remove astra mevcut silmesi lazım silmiyorsa astranın remove olayı bozuk bicak menuyu astranın içine alın sonra direk içinden publicle silin bicagı.

Feruduns45.01

Forum Üyesi

Kayıtlı Üye Grubu
avatar
Feruduns45.01
29-09-2022, Saat: 16:31
29-09-2022, Saat: 16:31
#4
Yorumu Paylaş
QuryWesT Adlı Kullanıcıdan Alıntı: Yoruma gitEklenti içinde remove astra mevcut silmesi lazım silmiyorsa astranın remove olayı bozuk bicak menuyu astranın içine alın sonra direk içinden publicle silin bicagı.

anlamadım ne yapmam gerek

QuryWesT

Yasaklı Üye
Yasaklı Üye Grubu
avatar
QuryWesT
29-09-2022, Saat: 17:12
29-09-2022, Saat: 17:12
#5
Yorumu Paylaş
Feruduns45.01 Adlı Kullanıcıdan Alıntı: Yoruma git
QuryWesT Adlı Kullanıcıdan Alıntı: Yoruma gitEklenti içinde remove astra mevcut silmesi lazım silmiyorsa astranın remove olayı bozuk bicak menuyu astranın içine alın sonra direk içinden publicle silin bicagı.

anlamadım ne yapmam gerek

Bicak menuyu astraya ekleyin native ile yapmayın

Feruduns45.01

Forum Üyesi

Kayıtlı Üye Grubu
avatar
Feruduns45.01
29-09-2022, Saat: 17:57
29-09-2022, Saat: 17:57
#6
Yorumu Paylaş
QuryWesT Adlı Kullanıcıdan Alıntı: Yoruma git
Feruduns45.01 Adlı Kullanıcıdan Alıntı: Yoruma gitanlamadım ne yapmam gerek

Bicak menuyu astraya ekleyin native ile yapmayın
o seferde astranın özellikleri olmuyor

QuryWesT

Yasaklı Üye
Yasaklı Üye Grubu
avatar
QuryWesT
29-09-2022, Saat: 18:17
29-09-2022, Saat: 18:17
#7
Yorumu Paylaş
Denermisiniz yenidir astraya ekledim bicak menuyü eklentiyi derlemedim bilginize.
 
PHP Kod:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#include <reapi>
#include <xs>
#include <zombieplague>
#include <levels>

new knife1_v_model[] = "models/tayo_knife/v_knife1.mdl"

new knife2_v_model[] = "models/tayo_knife/v_knife2.mdl"

new knife3_v_model[] = "models/tayo_knife/v_knife3.mdl"

new knife4_v_model[] = "models/tayo_knife/v_knife4.mdl"

new knife5_v_model[] = "models/tayo_knife/v_knife5.mdl"

new g_knife1[33], g_knife2[33], g_knife3[33], g_knife4[33], g_knife5[33];

native gui_ekle(id);
native gui_sil(id);

#define PLUGIN "Astra"
#define VERSION "1.0"
#define AUTHOR "Jenessee"

//#define DEBUG 1 // Çökme olduğunda sebebi kolayca bulmak için açabilirsiniz.

//Buraya istediğiniz değeri girebilirsiniz ama değer diğer itemlerinkiyle aynı olursa silahlar birbiriyle çakışır.
new const Astra_WeaponID 34324;

// Bunu false yaparsanız elektrik efektleri servere eklenmeyecek true yaparsanız eklenir.
new const bool:ActivateSprites true;

//Silahın kullandığı dosyaları buradan değiştirebilirsiniz.
new const Resources[][] = 
{
    
"models/v_astra.mdl"// 0     Server-side Model Dosyaları
    
"models/p_astra.mdl"// 1    
    
"models/guillotineex_projectile1.mdl"// 2
    
"models/guillotineex_projectile2.mdl"// 3

    
"weapons/guillotineex_shoot_1_start.wav"// 4     Server-side Ses Dosyaları 
    
"weapons/guillotineex_shoot-1_end.wav"// 5
    
"weapons/guillotineex_shoot-1_exp.wav"// 6
    
"weapons/guillotineex_shoot-2_exp.wav"// 7
    
"weapons/guillotine_explode.wav"// 8
    
"weapons/combatknife_wall.wav"// 9

    
"sound/weapons/guillotineex_catch.wav"// 10  Client-side Ses Dosyaları
    
"sound/weapons/guillotineex_draw.wav"// 11
    
"sound/weapons/guillotineex_draw_empty.wav"// 12
    
"sound/weapons/guillotineex_idle1.wav"// 13
    
"sound/weapons/guillotineex_idle2.wav"// 14

    
"sprites/weapon_guillotineex.txt"// 15  Client-side Silah Hud Dosyaları
    
"sprites/guiex.spr"// 16    
    
    
"sprites/ef_buffng7_magazine_exp.spr"// 17 Client-side sprite efektleri 
    
"sprites/ef_stunrifle_xbeam.spr"// 18    
    
"sprites/muzzleflash81.spr"  // 19
}

new 
Last_WeaponID[MAX_PLAYERS+1]; // Oyuncunun son kullandığı silahın Silah id`sine eşitlenir.
new Last_WeaponEntityID[MAX_PLAYERS+1]; // Oyuncunun son kullandığı silahın Entity id`sine eşitlenir.
new Last_ProjectileEntity[MAX_PLAYERS+1]; // Oyuncunun son fırlattığı mermiye eşitlenir.
new bool:Player_Alive[MAX_PLAYERS+1]; // Oyuncunun canlı olup olmadığını sorgulamak için kullanılır.
new Float:Projectile_Touch_Delay[MAX_PLAYERS+1][MAX_PLAYERS+1]; // Merminin oyuncuya sürekli dokunmasını engellemek için kullanılır.
new g_Team[MAX_PLAYERS+1];
new 
BloodSprites[2];
new 
Cvars[8];
new 
Sprite_Effects[3];
new 
bool:ZombieModebool:ZombiePlague falsebool:Biohazard false;
new 
Message_WeaponList;
new 
bool:gHasAstra[33];

#if defined DEBUG
new g_LogLineg_LogName[128];
#endif

public plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR);
    
register_event("CurWeapon","checkWeapon","be","1=1")
    
GameLog("Astra plugin_init");
    
register_clcmd("say /bicak","knifemenu")
    
register_clcmd("say /knife","knifemenu")    
    
register_clcmd("say_team /knife","knifemenu")
    
register_clcmd("say_team /bicak","knifemenu")
    
// Yeni round başlarken çalışır.
    
register_event("HLTV""New_Round""a""1=0""2=0");

    
// Oyuncunun eline aldığı silahı öğrenmemiz için gereklidir. 
    
RegisterHookChain(RG_CBasePlayerWeapon_DefaultDeploy"CBasePlayerWeapon_DefaultDeploy"false);
    
    
// Oyuncuya silah verildiğinde çalışır.
    
RegisterHookChain(RG_CBasePlayer_AddPlayerItem"CBasePlayer_AddPlayerItem"false);
    
    
// Oyuncu canlanınca çalışır.
    
RegisterHookChain(RG_CBasePlayer_Spawn"CBasePlayer_Spawn"true); 

    
// Oyuncu ölünce çalışır.
    
RegisterHookChain(RG_CBasePlayer_Killed"CBasePlayer_Killed"true);
    
    
// Bıçağın vuruşlarını engellemeyi sağlar.
    
register_forward(FM_UpdateClientData"UpdateClientData_Post"1);

    
// Bıçağın ele alınma sesini kapatmak için gerekli.
    
register_forward(FM_EmitSound"EmitSound");

    
// Takım değişince çalışır.
    
register_event("TeamInfo""Change_Team" "a");

    
// Bıçağın vuruşlarını engellemeyi sağlar.
    
RegisterHam(Ham_Item_PostFrame"weapon_knife""Item_PostFrame");

    
Cvars[0] = register_cvar("astra_kesici_saldiri_hasar""10.0");
    
Cvars[1] = register_cvar("astra_kafakesici_saldiri_hasar""5.0");
    
Cvars[2] = register_cvar("astra_kesici_saldiri_ittirme""600.0");
    
Cvars[3] = register_cvar("astra_kafakesici_saldiri_ittirme""200.0");
    
Cvars[4] = register_cvar("astra_kafa_algilama_mesafesi""25.0");
    
Cvars[5] = register_cvar("astra_elektrik_yayilim_hasar""25.0");
    
Cvars[6] = register_cvar("astra_elektrik_yayilim_mesafe""150.0");
    
Cvars[7] = register_cvar("astra_kafakesici_suresi""3.0");
        
    
register_clcmd("weapon_guillotineex""Hook_Astra"); // Silahın hudları değiştiği için silahı ele almada sorunlar olabiliyor. Konsola weapon_guillotineex yazınca ele bıçak gelecek.
    
    
Message_WeaponList get_user_msgid("WeaponList");

    
#if defined DEBUG
    
static MapName[32]; get_mapname(MapName31)
    static 
Time[64]; get_time("%m-%d-%Y - %H-%M"Time63)
    
    
formatex(g_LogName127"%s - %s"MapNameTime);
    
#endif
}

public 
plugin_precache()
{
    
precache_model(knife1_v_model)
    
precache_model(knife2_v_model)
    
precache_model(knife3_v_model)
    
precache_model(knife4_v_model)
    
precache_model(knife5_v_model)
    
GameLog("Astra plugin_precache");

    new 
indexSize sizeof(Resources);
    for(
index 0index Sizeindex++)
    {
        switch(
index)
        {
            case 
0..3precache_model(Resources[index]); // Model dosyalarını oyun motoruna ekliyor ve modelleri servere giren oyunculara indirtiyor.
            
case 4..9precache_sound(Resources[index]); // Ses dosyalarını oyun motoruna ekliyor ve sesleri servere giren oyunculara indirtiyor.    
            
case 10..16precache_generic(Resources[index]); // Dosyaları oyun motoruna eklemiyor ve dosyaları servere giren oyunculara indirtiyor.
            
case 17..19
            {
                if(
ActivateSpritesSprite_Effects[index-17] = precache_model(Resources[index]); // Client-side gösterilecek spriteler ama yine de oyun motoruna eklemek zorundayız çünkü oyunda bozuk duruyorlar.
            
}
        }        
    }
    
    
// Kan efektleri için gerekli.
    
BloodSprites[0] = precache_model("sprites/bloodspray.spr");
    
BloodSprites[1] = precache_model("sprites/blood.spr");
    
    
// Loop yapan sesleri kapatmak için gerekli.
    
precache_sound("common/null.wav");
}

public 
checkWeapon(id)
{
    new 
plrWeapId
    
    plrWeapId 
get_user_weapon(id)
    
    if (
plrWeapId == CSW_KNIFE && (g_knife1[id] || g_knife2[id] || g_knife3[id] || g_knife4[id] || g_knife5[id]))
    {
        
checkModel(id)
    }
}

public 
checkModel(id)
{
    if (
zp_get_user_zombie(id))
        return 
PLUGIN_HANDLED
    
    
if (g_knife1[id])
    {
        
set_pev(idpev_viewmodel2knife1_v_model)
    }

    if (
g_knife2[id])
    {
        
set_pev(idpev_viewmodel2knife2_v_model)
    }

    if (
g_knife3[id])
    {
        
set_pev(idpev_viewmodel2knife3_v_model)
    }

    if (
g_knife4[id])
    {
        
set_pev(idpev_viewmodel2knife4_v_model)
    }
    
    if (
g_knife5[id])
    {
        
set_pev(idpev_viewmodel2knife5_v_model)
    }
   
    return 
PLUGIN_HANDLED
}

public 
plugin_natives()
{
    
register_native("give_astra""give_astra_native"1);
    
register_native("remove_astra""remove_astra_native"1);
}

public 
give_astra_native(const id)
{
    
gHasAstra[id] = true;

    
rg_remove_item(id"weapon_knife");
    
rg_give_item(id"weapon_knife");
}
public 
remove_astra_native(const id)
{
    
gHasAstra[id] = false;

    
rg_remove_item(id"weapon_knife");
    
rg_give_item(id"weapon_knife");
}
public 
client_connect(id)
{
    
g_knife1[id] = false
    g_knife2
[id] = false
    g_knife3
[id] = false
    g_knife4
[id] = false
    g_knife5
[id] = false
    g_knife7
[id] = false
}
public 
client_disconnected(clientIndex)
{
    
g_knife1[id] = false
    g_knife2
[id] = false
    g_knife3
[id] = false
    g_knife4
[id] = false
    g_knife5
[id] = false
    g_knife7
[id] = false
    GameLog
("Astra client_disconnected");
    
gHasAstra[clientIndex] = false;
    
Player_Alive[clientIndex] = false// oyuncu öldü
    
new iMissileEntityID Last_ProjectileEntity[clientIndex];
    
Last_ProjectileEntity[clientIndex] = -1;
    if(
iMissileEntityID != -&& !is_nullent(iMissileEntityID)) // Oyuncu canlanınca mermi patlatılır.
    
{
        
Missile_Explode(iMissileEntityID); // Mermiyi patlatır.
    
}
}

public 
knifemenu(id)
{
    new 
menuz;
    static 
amenu[512];
    
formatex(amenu,charsmax(amenu),"\r[ZoP] \yKnife Menu")
    
menuz menu_create(amenu,"knifemenu_devam")

    
formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Classic Knife |-")
    
menu_additem(menuz,amenu,"1")

    if(
get_user_level(id) >= 0)
    {
        
formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Luminous Sword |-")
    }
    else
    {
        
formatex(amenu,charsmax(amenu),"\rLOCKED \d[LVL:20]")
    }
    
menu_additem(menuz,amenu,"2")

    if(
get_user_level(id) >= 0)
    {
        
formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Valorant |-")
    }
    else
    {
        
formatex(amenu,charsmax(amenu),"\rLOCKED \d[LVL:40]")
    }
    
menu_additem(menuz,amenu,"3")

    if(
get_user_level(id) >= 0)
    {
        
formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Warhammer |-")
    }
    else
    {
        
formatex(amenu,charsmax(amenu),"\rLOCKED \d[LVL:60]")
    }
    
menu_additem(menuz,amenu,"4")

    if(
get_user_level(id) >= 65)
    {
        
formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Swords |-")
    }
    else
    {
        
formatex(amenu,charsmax(amenu),"\rLOCKED \d[LVL:65]")
    }
    
menu_additem(menuz,amenu,"5")

    if(
is_user_admin(id))
    {
        
formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Guillotine |-")
    }
    else
    {
        
formatex(amenu,charsmax(amenu),"\rLOCKED \r[Admin]")
    }        

    
menu_additem(menuz,amenu,"6")

    if(
get_user_flags(id) & ADMIN_BAN)
    {
        
formatex(amenu,charsmax(amenu),"\y[\rZoP\y] \w-| Astra Gui |-")
    }
    else
    {
        
formatex(amenu,charsmax(amenu),"\rLOCKED \r[Admin Plus]")
    }        

    
menu_additem(menuz,amenu,"7")

    
menu_setprop(menuz,MPROP_EXIT,MEXIT_ALL)
    
menu_display(id,menuz,0)

    return 
PLUGIN_HANDLED
}

public 
knifemenu_devam(id,menu,item)
{
    if(
item == MENU_EXIT || zp_get_user_zombie(id))
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    new 
access,callback,data[6],iname[64]

    
menu_item_getinfo(menu,item,access,data,5,iname,63,callback)

    new 
key str_to_num(data)

    if(
key == 1)
    {
        
remove_astra(id);
        
gui_sil(id)
        
knife1(id)
    }
    else if(
key == 2)
    {
        if(
get_user_level(id) >= 20)
        {
            
knife2(id)
            
remove_astra(id);
            
gui_sil(id)
        }
        else
        {
            
client_print_color(idprint_team_default"x04[ZE]x03 Yeterli LvL'niz Yok.")
            
knifemenu(id)
        }
    }
    else if(
key == 3)
    {
        if(
get_user_level(id) >= 40)
        {
            
knife3(id)
            
remove_astra(id);
            
gui_sil(id)
        }
        else
        {
            
client_print_color(idprint_team_default"x04[ZE]x03 Yeterli LvL'niz Yok.")
            
knifemenu(id)
        }
    }
    else if(
key == 4)
    {
        if(
get_user_level(id) >= 60)
        {
            
knife4(id)
            
remove_astra(id);
            
gui_sil(id)
        }
        else
        {
            
client_print_color(idprint_team_default"x04[ZE]x03 Yeterli LvL'niz Yok.")
            
knifemenu(id)
        }
    }
    else if(
key == 5)
    {
        if(
get_user_level(id) >= 70)
        {
            
knife5(id)
            
remove_astra(id);
            
gui_sil(id)
        }
        else
        {
            
client_print_color(idprint_team_default"x04[ZE]x03 Yeterli LvL'niz Yok.")
            
knifemenu(id)
        }
    }
    else if(
key == 6)
    {
        if(
is_user_admin(id))
        {
            
remove_astra(id);
            
gui_silici(id)
            
gui_ekle(id)
        }
        else
        {
            
client_print_color(idprint_team_default"x04[ZE]x03 Yetkin Yok. x04|| x03Only For VIPS.")
            
knifemenu(id)
        }
    }
    else if(
key == 7)
    {
        if(
get_user_flags(id) & ADMIN_BAN)
        {
            
gui_sil(id);
            
gui_silici(id)
            
give_astra(id)
        }
        else
        {
            
client_print_color(idprint_team_default"x04[ZE]x03 Yetkin Yok. x04|| x03Only For VIPS.")
            
knifemenu(id)
        }
    }
    
menu_destroy(menu)
    return 
PLUGIN_HANDLED
}

public 
knife1(id)
{
    
g_knife1[id] = true
    g_knife2
[id] = false
    g_knife3
[id] = false
    g_knife4
[id] = false
    g_knife5
[id] = false
}

public 
knife2(id)
{
    
g_knife1[id] = false
    g_knife2
[id] = true
    g_knife3
[id] = false
    g_knife4
[id] = false
    g_knife5
[id] = false
}

public 
knife3(id)
{
    
g_knife1[id] = false
    g_knife2
[id] = false
    g_knife3
[id] = true
    g_knife4
[id] = false
    g_knife5
[id] = false
}

public 
knife4(id)
{
    
g_knife1[id] = false
    g_knife2
[id] = false
    g_knife3
[id] = false
    g_knife4
[id] = true
    g_knife5
[id] = false
}

public 
knife5(id)
{
    
g_knife1[id] = false
    g_knife2
[id] = false
    g_knife3
[id] = false
    g_knife4
[id] = false
    g_knife5
[id] = true
}

public 
gui_silici(id)

    
g_knife1[id] = false
    g_knife2
[id] = false
    g_knife3
[id] = false
    g_knife4
[id] = false
    g_knife5
[id] = false
}

public 
New_Round()
{
    
GameLog("Astra New_Round");

    
// Terröristlere astra verebilmek için bunun kapalı olması gerekiyor.
    
ZombieMode false;

    if(!
Biohazard && is_biomod_active()) Biohazard true;
    if(!
ZombiePlague && is_zpmod_active()) ZombiePlague true;
}

// Biohazard - İlk zombi çıktığında
// Biohazard - Takım Değişikliği
public event_infect(const clientIndex)
{
    
GameLog("Astra event_infect");

    
ZombieMode true// Terröristlere astra vermeyi kapatmak için açık olması gerekiyor.

    
g_Team[clientIndex] = 1// Terröristler

    
new iMissileEntityID Last_ProjectileEntity[clientIndex];
    
Last_ProjectileEntity[clientIndex] = -1;
    if(
iMissileEntityID != -&& !is_nullent(iMissileEntityID)) // Takım değişiminde mermi patlatılır.
    
{
        
Missile_Explode(iMissileEntityID); // Mermiyi patlatır.
    
}
}

// Zombie Plague - Takım Değişikliği
public zp_user_humanized_pre(const clientIndex)
{
    
GameLog("Astra zp_user_humanized_pre");

    
g_Team[clientIndex] = 2// Counter Terröristler

    
new iMissileEntityID Last_ProjectileEntity[clientIndex];
    
Last_ProjectileEntity[clientIndex] = -1;
    if(
iMissileEntityID != -&& !is_nullent(iMissileEntityID)) // Takım değişiminde mermi patlatılır.
    
{
        
Missile_Explode(iMissileEntityID); // Mermiyi patlatır.
    
}    
}

// Zombie Plague - İlk zombi çıktığında
public zp_user_infected_pre(const clientIndex)
{
    
GameLog("Astra zp_user_infected_pre");

    
ZombieMode true;

    
g_Team[clientIndex] = 1// Terröristler

    
new iMissileEntityID Last_ProjectileEntity[clientIndex];
    
Last_ProjectileEntity[clientIndex] = -1;
    if(
iMissileEntityID != -&& !is_nullent(iMissileEntityID)) // Takım değişiminde mermi patlatılır.
    
{
        
Missile_Explode(iMissileEntityID); // Mermiyi patlatır.
    
}    
}

public 
Hook_Astra(const id)
{
    
engclient_cmd(id"weapon_knife"); 
    return 
PLUGIN_HANDLED
}

public 
CBasePlayerWeapon_DefaultDeploy(const iWeaponEntityID, const szViewModel[], const szWeaponModel[], const iAnim, const szAnimExt[], const skiplocal
{
    
GameLog("Astra CBasePlayerWeapon_DefaultDeploy");

    new 
clientIndex get_member(iWeaponEntityIDm_pPlayer); // İşlemin uygulandığı oyuncunun kimliği bu değişkendir.
    
new WeaponID get_entvar(iWeaponEntityIDvar_impulse); // Mevcut silahın kimliği bu değişkendir eğer bu değişken Astranın çalışması için gerekli kimliğe sahipse Astra çalışacaktır değilse çalışmayacaktır. 
        
if(WeaponID == Astra_WeaponID)
    {
            
SetHookChainArg(2ATYPE_STRINGResources[0]); // Silahın viewmodelini ayarlamamızı sağlar
            
SetHookChainArg(3ATYPE_STRINGResources[1]); // Silahın playermodelini ayarlamamızı sağlar
        
SetHookChainArg(4ATYPE_INTEGERLast_ProjectileEntity[clientIndex] != -3); // Silahı elimize alınca yapacağı animasyonu ayarlamamızı sağlar.

        
SetThink(iWeaponEntityID"WeaponAstra_IdleThink"); // Silaha hazır olma animasyonu yaptırmak için gereklidir.
               
set_entvar(iWeaponEntityIDvar_nextthinkget_gametime() + 1.15); // Silahın ne kadar süre sonra hazır olma animasyonu yapması gerektiğini giriyoruz. 

        
Last_WeaponID[clientIndex] = WeaponID// Değişkeni mevcut kullandığımız silahın kimliğine eşitler.
        
Last_WeaponEntityID[clientIndex] = iWeaponEntityID// Değişkeni Astranın Entity id`sine eşitler.
    
} else if(Last_WeaponEntityID[clientIndex] != NULLENT) {
        
// Elimizde önceden Astra vardı ama artık başka bir silah var Astra silahının işlemlerini buradan kapatabiliriz.
        
if(!is_nullent(Last_WeaponEntityID[clientIndex])) SetThink(Last_WeaponEntityID[clientIndex], ""); // Silahın tuş atamaları işlemlerini iptal eder.
        
Last_WeaponID[clientIndex] = WeaponID// Değişkeni mevcut kullandığımız silahın kimliğine eşitler.
        
Last_WeaponEntityID[clientIndex] = NULLENT// Değişkeni var olmayan Entity id`sine eşitler.
    
}
}

public 
CBasePlayer_AddPlayerItem(const clientIndex, const iWeaponEntityID)
{
    
GameLog("Astra CBasePlayer_AddPlayerItem");

    new 
WeaponIdType:iId get_member(iWeaponEntityIDm_iId);

    if(
iId == WEAPON_KNIFE && gHasAstra[clientIndex])
    {
        if(!(
g_Team[clientIndex] == && ZombieMode)) // Zombi modu başladıysa ve oyuncu terrörist takımındaysa astra verilmez.
        
{
            new 
iMissileEntityID Last_ProjectileEntity[clientIndex];
            
Last_ProjectileEntity[clientIndex] = -1;
            if(
iMissileEntityID != -&& !is_nullent(iMissileEntityID)) 
            {
                
Missile_Explode(iMissileEntityID); // Mermiyi patlatır.
            
}
            
set_entvar(iWeaponEntityIDvar_impulseAstra_WeaponID);
            
            
message_begin(MSG_ONE_UNRELIABLEMessage_WeaponList_clientIndex); // Astra bıçak hudu
            
write_string("weapon_guillotineex");
            
write_byte(-1);
            
write_byte(-1);
            
write_byte(-1);
            
write_byte(-1);
            
write_byte(2);
            
write_byte(1);
            
write_byte(CSW_KNIFE);
            
write_byte(0);
            
message_end();
        } else {
            
message_begin(MSG_ONE_UNRELIABLEMessage_WeaponList_clientIndex); // Normal bıçak hudu
            
write_string("weapon_knife");
            
write_byte(-1);
            
write_byte(-1);
            
write_byte(-1);
            
write_byte(-1);
            
write_byte(2);
            
write_byte(1);
            
write_byte(CSW_KNIFE);
            
write_byte(0);
            
message_end();
        }
    }
    
    return 
HC_CONTINUE;
}

public 
CBasePlayer_Spawn(const clientIndex)
{
    
GameLog("Astra CBasePlayer_Spawn");

    
Player_Alive[clientIndex] = true// oyuncu yaşıyor
    
new iMissileEntityID Last_ProjectileEntity[clientIndex];
    
Last_ProjectileEntity[clientIndex] = -1;
    if(
iMissileEntityID != -&& !is_nullent(iMissileEntityID))  // Oyuncu canlanınca mermi patlatılır.
    
{
        
Missile_Explode(iMissileEntityID); // Mermiyi patlatır.
    
}
}

public 
CBasePlayer_Killed(const clientIndex)
{
    
GameLog("Astra CBasePlayer_Killed");

    
Player_Alive[clientIndex] = false// oyuncu öldü
    
new iMissileEntityID Last_ProjectileEntity[clientIndex];
    
Last_ProjectileEntity[clientIndex] = -1;
    if(
iMissileEntityID != -&& !is_nullent(iMissileEntityID))  // Oyuncu ölünce mermi patlatılır.
    
{
        
Missile_Explode(iMissileEntityID); // Mermiyi patlatır.
    
}
}

public 
UpdateClientData_Post(clientIndexsendweaponscd_handle)
{
        if (
Last_WeaponEntityID[clientIndex] <= 0)
            return 
FMRES_IGNORED;
    
    
set_cd(cd_handleCD_flNextAttackget_gametime() + 0.001);     
        return 
FMRES_HANDLED;
}

public 
EmitSound(const clientIndex, const channel, const sample[])
{
    if((
clientIndex && clientIndex MAX_PLAYERS+1) && Last_WeaponEntityID[clientIndex] != NULLENT)
    {
        
GameLog("Astra EmitSound");
        if(
equal(sample"weapons/knife_deploy1.wav")) 
        {
            return 
FMRES_SUPERCEDE;
        }
    }
    return 
FMRES_IGNORED;
}

public 
Change_Team()
{
    
GameLog("Astra Change_Team");
        new 
clientIndex read_data(1);
        new 
Team[2]; read_data(2Team 1);
    new 
CurrentTeam g_Team[clientIndex];
        switch(
Team[0])
           {
                case 
'T'
                {
                    
g_Team[clientIndex] = 1// Terröristler
                
}
                case 
'C'
                {
                    
g_Team[clientIndex] = 2// Counter Terröristler
                
}
                case 
'S':
                {
                       
g_Team[clientIndex] = 0// İzleyiciler
                
}
        }

    new 
iMissileEntityID Last_ProjectileEntity[clientIndex];
    
Last_ProjectileEntity[clientIndex] = -1;
    if(
CurrentTeam != g_Team[clientIndex] && iMissileEntityID != -&& !is_nullent(iMissileEntityID)) // Takım değişiminde mermi patlatılır.
    
{
        
Missile_Explode(iMissileEntityID); // Mermiyi patlatır.
    
}


public 
Item_PostFrame(const Entity)
{    
    if (
Last_WeaponEntityID[get_entvar(Entityvar_owner)] > 0) return HAM_SUPERCEDE
    
return HAM_IGNORED
}

public 
WeaponAstra_IdleThink(const iWeaponEntityID)
{
    
GameLog("Astra WeaponAstra_IdleThink");

    new 
clientIndex get_entvar(iWeaponEntityIDvar_owner); // İşlemin uygulandığı oyuncunun kimliği bu değişkendir.
    
new Viewmodel_Anim get_entvar(clientIndexvar_weaponanim); // Viewmodelde çalışan animasyonun kodunu çekmeye yarar.

    
switch(Viewmodel_Anim)
    {
        case 
6UTIL_SendWeaponAnim(clientIndex3), set_entvar(iWeaponEntityIDvar_nextthinkget_gametime() + 1.15); // Eğer mermi kaybetme animasyonu yapıyorsa idle animasyonu için bu thinki tekrar çalıştıracak.
        
case 3
        {
            
UTIL_SendWeaponAnim(clientIndex0);
            
SetThink(iWeaponEntityID"WeaponAstra_ButtonThink");
            
set_entvar(iWeaponEntityIDvar_nextthinkget_gametime());
            
// idle animasyonu yapıldı ve tuş atamalarının ayarlandığı thinke geçildi.
        
}
        default:     
        {
            
UTIL_SendWeaponAnim(clientIndexLast_ProjectileEntity[clientIndex] != -0); 
            if(
Last_ProjectileEntity[clientIndex] == -1)
            {
                
SetThink(iWeaponEntityID"WeaponAstra_ButtonThink");
                
set_entvar(iWeaponEntityIDvar_nextthinkget_gametime());
                
// Eğer mermi fırlatılmamışsa tuş atamalarının ayarlandığı thinke geçilebilir.
            
}
        }
    }
}

public 
WeaponAstra_ButtonThink(const iWeaponEntityID)
{
    
// Eğer oyuncu bu silahı kaybederse think otomatik duracaktır o yüzden oyuncu bu silaha sahip mi ya da oyuncu serverde mi diye sorgulamaya gerek yok.
    
new clientIndex get_entvar(iWeaponEntityIDvar_owner); // İşlemin uygulandığı oyuncunun kimliği bu değişkendir.
    
new Button get_entvar(clientIndexvar_button); // Oyuncunun şuan hangi tuşlara bastığını bu değişken belirtir.
    
new Float:Time get_gametime(); // Mapın bitmesi için kalan süreye eşit değişken.

    
if(Button IN_ATTACK// Farenin sol tıkıyla mermi fırlatılır.
    
{
        
GameLog("Astra WeaponAstra_ButtonThink");
        new 
iMissileEntityID Create_Missile(); // Fırlatılacak mermiyi burda yaratıyoruz.
        
if(iMissileEntityID != NULLENT)         
        {    
            
Last_ProjectileEntity[clientIndex] = iMissileEntityID;
            
            
Player_Animation(clientIndex"ref_shoot_knife"1.0); // Oyuncunun karakter modeline bıçakla vurma animasyonu yaptırır.
            
UTIL_SendWeaponAnim(clientIndex7);  // Silahın viewmodeline mermi atma animasyonu yaptırmamızı sağlar. Animasyon kodunu model dosyasını açarak öğrenebilirsiniz.
            
emit_sound(clientIndexCHAN_WEAPONResources[4], 1.00.4094 random_num(045)); // Silahın mermi atma sesi bu kodla çalınıyor.          

            
SetThink(iWeaponEntityID"WeaponAstra_IdleThink"); // Silaha hazır olma animasyonu yaptırmak için gereklidir.
                   
set_entvar(iWeaponEntityIDvar_nextthinkget_gametime() + 0.75); // Silahın ne kadar süre sonra hazır olma animasyonu yapması gerektiğini giriyoruz. 

            
new MissileTrigger get_entvar(iMissileEntityIDvar_iuser3); // Mermiyle triggeri birbirine bağlamıştık bu sayede kolayca Triggerin id`sini mermiden çekebilirim. 
            
set_entvar(iMissileEntityIDvar_iuser1clientIndex); // Merminin sahibi olan oyuncuyu bir değişkene eşitliyoruz.
            
set_entvar(MissileTriggervar_iuser1clientIndex); // Triggerin sahibi olan oyuncuyu bir değişkene eşitliyoruz.

            
set_entvar(MissileTriggervar_iuser2iWeaponEntityID); // Silahı triggere bağlıyoruz çünkü trigger oyuncuya hasar verirken silaha ihtiyacımız olacak.

            // Mermiyle silahı değişkenlerle birbirine eşitliyoruzki mermide veya silahın üzerinde ayar yaparken birbirlerinin kimliğini kolaylıkla çekebilelim.
            
set_entvar(iWeaponEntityIDvar_iuser2iMissileEntityID);
            
set_entvar(iMissileEntityIDvar_iuser2iWeaponEntityID);
            
set_entvar(iMissileEntityIDvar_teamg_Team[clientIndex]); // Zombi modlarında insanken mermiyi fırlatıp zombiye dönüşürken olan bugları ortadan kaldırmamız için gereklidir.
            
set_entvar(MissileTriggervar_teamg_Team[clientIndex]); // Zombi modlarında insanken mermiyi fırlatıp zombiye dönüşürken olan bugları ortadan kaldırmamız için gereklidir.

            
new Float:Angles[3], Float:Origin[3], Float:Velocity[3]; get_entvar(clientIndexvar_originOrigin), Origin[2] += 15.0get_entvar(clientIndexvar_v_angleAngles), Angles[0] *= -1.0// Oyuncunun bakış açısını çekip gerekli hale getiriyoruz.
            
set_entvar(iMissileEntityIDvar_anglesAngles);  // Merminin düzgün yöne bakmasını sağlıyor.
            
set_entvar(iMissileEntityIDvar_originOrigin); // Merminin düzgün yerde olmasını sağlıyor.
              
velocity_by_aim(clientIndex1500Velocity); // Merminin oyuncunun baktığı yöne gitmesi için gerekli hız vektörünü ayarlıyor.
            
set_entvar(iMissileEntityIDvar_velocityVelocity); // Hız vektörünü varlığa uyguluyor.
            
emit_sound(iMissileEntityIDCHAN_ITEMResources[6], 1.00.4094 random_num(045)); // Varlığın ses çıkarmasını sağlıyor.
            
return; // return ekliyoruz çünkü silahın tuşlarını sürekli kullanmadığımız için thinki iptal ediyoruz.
        
}
    }

    
set_entvar(iWeaponEntityIDvar_nextthinkTime); // Bir sonraki think işleminin çalışması için olması gereken süreyi giriyoruz.
}

Create_Missile()
{
    
GameLog("Astra Create_Missile");

          new 
iMissileEntityID rg_create_entity("info_target"); // İşlevsiz yeni bir varlık yarattık değişkenide varlığın id`sine eşitledik.
    
new MissileTrigger rg_create_entity("info_target"); // İşlevsiz yeni bir varlık yarattık değişkenide varlığın id`sine eşitledik.
       
if (iMissileEntityID != NULLENT && MissileTrigger != NULLENT)
       {
        
// Burda dıştan bakınca görünecek modelin ayarları yapılıyor. Duvarlara çarpan dokunan varlık bu. 
        //remove_task(iMissileEntityID+Astra_WeaponID); // Başka bir eklenti tarafından bu idye sahip zamanlama varsa onu iptal ediyor.
        
new Float:Mins[3] = { -1.0, -1.0, -1.0 }; // Dar alanlardan rahatça geçebilmesi için büyüklük değerini olabildiğince küçük giriyoruz.
        
new Float:Maxs[3] = { 1.01.01.0 };

        
engfunc(EngFunc_SetModeliMissileEntityIDResources[2]); // Varlığa uygulanacak model bu kodla sağlanıyor.
        
set_entvar(iMissileEntityIDvar_movetypeMOVETYPE_FLY); // Varlığa havada asılı kalma özelliği veriyor.
        
set_entvar(iMissileEntityIDvar_solidSOLID_TRIGGER); // Varlık bu sayede oyuncuların içinden geçecek ve dokunma işlemini çalıştıracak hale geliyor ama duvarlara hala çarpabilir.

        
set_entvar(iMissileEntityIDvar_rendermodekRenderTransAdd);
        
set_entvar(iMissileEntityIDvar_renderamt255.0); // Varlığa parlama veriyor.

        
set_entvar(iMissileEntityIDvar_animtimeget_gametime());
        
set_entvar(iMissileEntityIDvar_framerate1.0);    // Modelin animasyon yapma hızını ayarlıyor. "default: 1.0"
        
set_entvar(iMissileEntityIDvar_sequence0); // Modelin yapacağı animasyon kodunu girip animasyon yaptırabilirsiniz.  

        //set_entvar(iMissileEntityID, var_iuser4, 0); // Bunu buraya yazmaya gerek yok çünkü yeni varlık yaratılırken zaten otomatik 0`a eşit oluyor. Merminin geri dönme, hedefe gitme vb. aşamaları bu değişkenle belirtiliyor.

        
set_entvar(iMissileEntityIDvar_minsMins); // Varlığın büyüklüğünü ayarlıyor.
        
set_entvar(iMissileEntityIDvar_maxsMaxs); // Varlığın büyüklüğünü ayarlıyor.

             
SetTouch(iMissileEntityID"Missile_Touch"); // Mermi duvara çarpınca nasıl tepki vereceğini ayarlamak için gereklidir.
        
SetThink(iMissileEntityID"Missile_Think");
        
set_entvar(iMissileEntityIDvar_nextthinkget_gametime() + 0.75);

//     -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

        // Burda oyuncuya dokunulduğunu algılayacak trigger entity ayarları yapılıyor. 2 varlık yaratmamızın sebebi mermi bu sayede dar alanlardan rahatça geçebilecek ve düşmana dokunma mesafesini dilediğimiz gibi ayarlayabileceğiz.
        //remove_task(MissileTrigger+Astra_WeaponID);

        
Mins[0] = -12.0;
        
Mins[1] = -12.0;
        
Mins[2] = -16.5;

        
Maxs[0] = 12.0;
        
Maxs[1] = 12.0;
        
Maxs[2] = 16.5;

        
engfunc(EngFunc_SetModelMissileTriggerResources[2]); // Varlığa uygulanacak model bu kodla sağlanıyor.
        
        
set_entvar(MissileTriggervar_movetypeMOVETYPE_FLY); // Varlığa havada asılı kalma özelliği veriyor.
        
set_entvar(MissileTriggervar_solidSOLID_TRIGGER); // Varlık bu sayede oyuncuların içinden geçecek ve dokunma işlemini çalıştıracak hale geliyor ama duvarlara hala çarpabilir.

        
set_entvar(MissileTriggervar_rendermodekRenderTransTexture); // Bu varlığı görünmez yapıyor.

        
set_entvar(MissileTriggervar_minsMins); // Varlığın büyüklüğünü ayarlıyor.
        
set_entvar(MissileTriggervar_maxsMaxs); // Varlığın büyüklüğünü ayarlıyor.

                
SetTouch(MissileTrigger"MissileTrigger_Touch"); // Mermi oyuncuya dokununca nasıl tepki vereceğini ayarlamak için gereklidir.
        
SetThink(MissileTrigger"MissileTrigger_Think"); // Mermiyi sürekli olması gerektiği yere ışınlar. Dokunma işleminin düzgün çalışması için gereklidir.
        
set_entvar(MissileTriggervar_nextthinkget_gametime());

        
// Mermiyle Triggeri değişkenlerle birbirine eşitliyoruzki mermide veya triggerin üzerinde ayar yaparken birbirlerinin kimliğini kolaylıkla çekebilelim.
        
set_entvar(MissileTriggervar_iuser3iMissileEntityID);
        
set_entvar(iMissileEntityIDvar_iuser3MissileTrigger);

        return 
iMissileEntityID;
          }
    return 
NULLENT;
}

public 
Missile_Think(const iMissileEntityID)
{    
    
set_entvar(iMissileEntityIDvar_iuser41); // Varlık uzaklaştı ve sahibine geri dönüyor.
    
SetThink(iMissileEntityID"Missile_FollowOwner"); // Varlık sahibine geri dönme işlemleri için gerekli.
    
set_entvar(iMissileEntityIDvar_nextthinkget_gametime());
}

public 
Missile_FollowOwner(const iMissileEntityID)
{    
    new 
clientIndex get_entvar(iMissileEntityIDvar_iuser1);
    new 
Float:MissileOrigin[3], Float:OwnerOrigin[3], Float:Distanceget_entvar(iMissileEntityIDvar_originMissileOrigin), get_entvar(clientIndexvar_originOwnerOrigin); // Merminin ve oyuncunun konumunu değişkene çeker.
    
Distance get_distance_f(MissileOriginOwnerOrigin); // Mermiyle sahibinin arasındaki uzaklığa eşittir.
    
if(Distance <= 70.0// Uzaklık 70 incden küçükse mermiyi yakalar.
    
{
        
GameLog("Astra Missile_FollowOwner");

        new 
iWeaponEntityID Last_WeaponEntityID[clientIndex];
        if(
iWeaponEntityID != NULLENT)
        {
            
Player_Animation(clientIndex"ref_shoot_knife"1.0); // Oyuncunun karakter modeline bıçakla vurma animasyonu yaptırır.
            
emit_sound(iMissileEntityIDCHAN_ITEM"common/null.wav"1.00.4094 random_num(045)); // Varlık yok olunca sesini kapatmak için gerekli.
            
Last_ProjectileEntity[clientIndex] = -1;
            new 
MissileTrigger get_entvar(iMissileEntityIDvar_iuser3);
            
set_entvar(MissileTriggervar_flagsFL_KILLME);  // Triggeri yok eder.
            
set_entvar(iMissileEntityIDvar_flagsFL_KILLME); // Mermiyi yok eder.
            
UTIL_SendWeaponAnim(clientIndex5);  // Silahın viewmodeline mermi yakalama animasyonu yaptırmamızı sağlar. Animasyon kodunu model dosyasını açarak öğrenebilirsiniz.
            
emit_sound(clientIndexCHAN_WEAPONResources[5], 1.00.4094 random_num(045)); // Silahın mermi yakalama sesi bu kodla çalınıyor.   
            
SetThink(iWeaponEntityID"WeaponAstra_IdleThink"); // Silaha hazır olma animasyonu yaptırmak için gereklidir.
                   
set_entvar(iWeaponEntityIDvar_nextthinkget_gametime() + 1.35); // Silahın ne kadar süre sonra hazır olma animasyonu yapması gerektiğini giriyoruz. 
        
} else {
            
Missile_Explode(iMissileEntityID); // Mermiyi patlatır.
        
}
        return
    }

    
Hook_Entity(iMissileEntityIDOwnerOriginDistance*3.0clientIndexfalse); // Mermiyi sahibine doğru çeker. Ne kadar uzaksa o kadar hızlı gelir.
    
set_entvar(iMissileEntityIDvar_nextthinkget_gametime());
}

public 
Missile_Touch(const iMissileEntityID, const EntityIndex)
{    
    if (
EntityIndex && EntityIndex MAX_PLAYERS+1// Oyuncuya dokunuyorsa iptal
        
return
    if(
EntityIndex == get_entvar(iMissileEntityIDvar_iuser3)) // Mermi eğer triggere dokunursa iptal
        
return
        
    new 
clientIndex get_entvar(iMissileEntityIDvar_iuser1); // Silahın sahibini çeker.
    
if(get_entvar(EntityIndexvar_takedamage) == DAMAGE_YES
    {
        
GameLog("Astra Missile_Touch");
        
ExecuteHamB(Ham_TakeDamageEntityIndexget_entvar(iMissileEntityIDvar_iuser2), clientIndexget_pcvar_float(Cvars[0]), DMG_BULLET); // Haritada kırılabilen nesnelere hasar verir.
    
}
    
    new 
szClassName[33]; get_entvar(EntityIndexvar_classnameszClassNamecharsmax(szClassName));
    if(
equal(szClassName"weaponbox")) // Yerdeki silahlara çarpmayı engelliyor.
        
return;
    
    new 
MissileState get_entvar(iMissileEntityIDvar_iuser4); // Varlığın hangi aşamada olduğunu bu değişkenle çekebiliriz.
    
if(!MissileState
    {
        
GameLog("Astra Missile_Touch2");
        new 
Float:Origin[3]; get_entvar(iMissileEntityIDvar_originOrigin);
        if(
ActivateSprites)
        {
            
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
            
write_byte(TE_EXPLOSION)
            
engfunc(EngFunc_WriteCoordOrigin[0])
            
engfunc(EngFunc_WriteCoordOrigin[1])
            
engfunc(EngFunc_WriteCoordOrigin[2] - 10)
            
write_short(Sprite_Effects[2]) //    Merminin duvara çarpınca çıkardığı efekt.
            
write_byte(3)
            
write_byte(25)
            
write_byte(14)
            
message_end()
        }
        
        new 
Float:Range get_pcvar_float(Cvars[6]);
        if(
Range 0.0 && !(Biohazard && !ZombieMode) && !(ZombiePlague && !ZombieMode)) // Eğer elektrik akımı mesafesi girilmişse hasar uygulanır.
        
{
            
Electricity(clientIndexiMissileEntityIDOriginRangeget_pcvar_float(Cvars[5]), 0);
        }
        
        
emit_sound(iMissileEntityIDCHAN_WEAPONResources[9], 1.00.4094 random_num(045)); // Duvara çarpma sesi çalar.
        
set_entvar(iMissileEntityIDvar_iuser41); // Varlık duvara çarptı ve sahibine geri dönüyor.
        
SetThink(iMissileEntityID"Missile_FollowOwner"); // Varlık sahibine geri dönme işlemleri için gerekli.
        
set_entvar(iMissileEntityIDvar_nextthinkget_gametime());
        return;
    } 
    

    
Missile_Explode(iMissileEntityID); // Mermiyi patlatır.
}

public 
MissileTrigger_Think(const MissileTrigger)
{    
    new 
iMissileEntityID get_entvar(MissileTriggervar_iuser3);
    new 
Float:Origin[3]; get_entvar(iMissileEntityIDvar_originOrigin); // Merminin olması gerektiği konumu çeker.
    
set_entvar(MissileTriggervar_originOrigin); // Mermiyi sürekli olması gerektiği yere ışınlar. Dokunma işleminin düzgün çalışması için gereklidir.
    
set_entvar(MissileTriggervar_nextthinkget_gametime());
}

public 
MissileTrigger_Touch(const MissileTrigger, const VictimIndex)
{    
    if (
VictimIndex <= || VictimIndex MAX_PLAYERS+1// Oyuncu dışında herşeye dokunuyorsa iptal
        
return
    new 
Float:Time get_gametime();
    new 
clientIndex get_entvar(MissileTriggervar_iuser1);
    if(
Projectile_Touch_Delay[clientIndex][VictimIndex] > Time// Mermi oyuncuya 0.1 saniyede bir dokunur.
        
return

    
GameLog("Astra MissileTrigger_Touch");

    
Projectile_Touch_Delay[clientIndex][VictimIndex] = Time 0.1// Mermi oyuncuya 0.1 saniyede bir dokunur.
    
new friendlyfire get_cvar_num("mp_friendlyfire"); // Takım arkadaşına saldırmak açık mı
    
if(VictimIndex != clientIndex && Player_Alive[VictimIndex] && !(!friendlyfire && g_Team[VictimIndex] == g_Team[clientIndex]) && !(Biohazard && !ZombieMode) && !(ZombiePlague && !ZombieMode)) // Canlı ve aynı takımda olmayan oyuncuları düşman sayar f
    
{
        new 
iMissileEntityID get_entvar(MissileTriggervar_iuser3);
        new 
HitGroup Get_MissileWeaponHitGroup(MissileTrigger);
        new 
Float:Origin[3]; get_entvar(iMissileEntityIDvar_originOrigin);
        new 
Float:HeadOrigin[3], Float:HeadAngles[3];
        
engfunc(EngFunc_GetBonePositionVictimIndex8HeadOriginHeadAngles); // Düşman oyuncunun kafasının konumunu çekiyor.
        
HeadOrigin[2] += 10.0;
        if(
get_distance_f(HeadOriginOrigin) <= get_pcvar_float(Cvars[4])) HitGroup HIT_HEAD// Mermi kafadan 30 incden az uzaklıktaysa kafadan sayılır.
        
if(HitGroup == HIT_HEAD// Kafadan vurulduğu için mermi değişime uğrar.
        
{        
            
set_entvar(iMissileEntityIDvar_fuser1Time get_pcvar_float(Cvars[7])); // Merminin kafada ne kadar süre kalacağını ayarlıyor.
            
set_entvar(iMissileEntityIDvar_enemyfriendlyfire); // Takım arkadaşına saldırmak açık mı kaydediyor.
            
set_entvar(iMissileEntityIDvar_ownerVictimIndex);  // Düşman mermiyi sahiplendi.
            
set_entvar(MissileTriggervar_ownerVictimIndex);  // Düşman mermiyi sahiplendi.
            
set_entvar(iMissileEntityIDvar_effects8192); // Mermi sahibine görünmez olacak şekilde ayarlandı.
            
SetTouch(iMissileEntityID""); // Dokunma fonksiyonları kapatılıyor.
            
SetTouch(MissileTrigger""); // Dokunma fonksiyonları kapatılıyor.
            
set_entvar(iMissileEntityIDvar_velocity, {0.10.10.1}); // Varlığın hızını kesiyor.
            
set_entvar(MissileTriggervar_velocity, {0.10.10.1}); // Varlığın hızını kesiyor.
            
SetThink(iMissileEntityID"MissileThink_FollowPlayerHead"); // Düşmanın kafasına yerleşiyor. 
            
set_entvar(iMissileEntityIDvar_nextthinkget_gametime()); 
            
SetThink(MissileTrigger"TriggerThink_GivePlayerDamage"); // Düşmana hasar veriyor.
            
set_entvar(MissileTriggervar_nextthinkget_gametime() + 0.2);
            
emit_sound(iMissileEntityIDCHAN_ITEMResources[7], 1.00.4094 random_num(045)); // Varlığın ses çıkarmasını sağlıyor.
            
engfunc(EngFunc_SetModeliMissileEntityIDResources[3]); // Model değişimi.
        


        
set_pdata_int(VictimIndex75HitGroup5); // Mermi vücudun hangi bölümündeyse o bölüme hasar verir.
           
ExecuteHamB(Ham_TakeDamageVictimIndexget_entvar(MissileTriggervar_iuser2), clientIndexget_pcvar_float(Cvars[0]) * Damage_Multiplier(HitGroup), DMG_BULLET); // Hasar verme kodu
        
set_pdata_float(VictimIndex1081.05); // Sersemletmeyi kaldırır.
        
new Float:Knockback get_pcvar_float(Cvars[2]);
        if(
Knockback 0.0// Eğer ittirme girilmişse ittirme etkisi uygulanır.
        
{
            new 
Float:AttackerOrigin[3]; get_entvar(clientIndexvar_originAttackerOrigin);
            
Hook_Entity(VictimIndexAttackerOriginKnockback0true)
        }
        
SpawnBlood(Originget_pdata_int(VictimIndex89), HitGroup); // Kan çıkartma
    
}
}

public 
MissileThink_FollowPlayerHead(const iMissileEntityID)
{    
    new 
Enemy get_entvar(iMissileEntityIDvar_owner); // Kafasında mermi olan oyuncunun id`si.
    
new FriendlyFire get_entvar(iMissileEntityIDvar_enemy); // Takım arkadaşına saldırmak değer 1 e eşitse açık 0 ise kapalıdır.
    
if(!Player_Alive[Enemy] || get_entvar(iMissileEntityIDvar_fuser1) <= get_gametime() || (!FriendlyFire && g_Team[Enemy] == get_entvar(iMissileEntityIDvar_team))) // Düşman öldüyse veya aynı takımdaysa mermi geri döner (friendlyfire yoksa).
    
{
        
GameLog("Astra MissileThink_FollowPlayerHead");
        
Projectile_Touch_Delay[get_entvar(iMissileEntityIDvar_iuser1)][Enemy] = get_gametime() + 0.6
        new 
MissileTrigger get_entvar(iMissileEntityIDvar_iuser3);
        
MissileTrigger_Think(MissileTrigger);
        
set_entvar(iMissileEntityIDvar_owner0);
        
set_entvar(MissileTriggervar_owner0);
        
set_entvar(iMissileEntityIDvar_iuser41); // Varlık uzaklaştı ve sahibine geri dönüyor.
        
SetThink(iMissileEntityID"Missile_FollowOwner"); // Varlık sahibine geri dönme işlemleri için gerekli.
        
set_entvar(iMissileEntityIDvar_nextthinkget_gametime());
        
set_entvar(iMissileEntityIDvar_effects0); // Görünmezliği kapatıyor.
        
engfunc(EngFunc_SetModeliMissileEntityIDResources[2]);
        
emit_sound(iMissileEntityIDCHAN_ITEMResources[6], 1.00.4094 random_num(045)); // Varlığın ses çıkarmasını sağlıyor.
        
SetTouch(MissileTrigger"MissileTrigger_Touch");
        
SetThink(MissileTrigger"MissileTrigger_Think"); // Mermiyi sürekli olması gerektiği yere ışınlar. Dokunma işleminin düzgün çalışması için gereklidir.
        
set_entvar(MissileTriggervar_nextthinkget_gametime());
        
SetTouch(iMissileEntityID"Missile_Touch");
        return
    }    
    new 
Float:HeadOrigin[3], Float:HeadAngles[3];
    
engfunc(EngFunc_GetBonePositionEnemy8HeadOriginHeadAngles); // Düşman oyuncunun kafasının konumunu çekiyor.
    
HeadOrigin[2] += 10.0;
    
set_entvar(iMissileEntityIDvar_originHeadOrigin); // Mermiyi sürekli olması gerektiği yere ışınlar.
    
set_entvar(iMissileEntityIDvar_velocity, {0.10.10.1}); // Merminin animasyonunun pürüzsüz görünmesini sağlar.
    
set_entvar(iMissileEntityIDvar_nextthinkget_gametime());
}

public 
TriggerThink_GivePlayerDamage(const MissileTrigger)
{    
    new 
Enemy get_entvar(MissileTriggervar_owner);  
     if(
Enemy 0)
    {
        
GameLog("Astra TriggerThink_GivePlayerDamage");
        new 
clientIndex get_entvar(MissileTriggervar_iuser1); 
        new 
iMissileEntityID get_entvar(MissileTriggervar_iuser3);
        new 
Float:Origin[3]; get_entvar(iMissileEntityIDvar_originOrigin);
        
SpawnBlood(Originget_pdata_int(Enemy89), HIT_HEAD); // Kan çıkartma
        
set_pdata_int(Enemy7515); // Mermi vücudun hangi bölümündeyse o bölüme hasar verir.
           
ExecuteHamB(Ham_TakeDamageEnemyget_entvar(MissileTriggervar_iuser2), clientIndexget_pcvar_float(Cvars[1]), DMG_BULLET); // Hasar verme kodu
        
set_pdata_float(Enemy1081.05); // Sersemletmeyi kaldırır.
        
new Float:Knockback get_pcvar_float(Cvars[3]);
        if(
Knockback 0.0// Eğer ittirme girilmişse ittirme etkisi uygulanır.
        
{
            new 
Float:AttackerOrigin[3]; get_entvar(clientIndexvar_originAttackerOrigin);
            
Hook_Entity(EnemyAttackerOriginKnockback0true)
        }

        new 
Float:Range get_pcvar_float(Cvars[6]);
        if(
Range 0.0// Eğer elektrik akımı mesafesi girilmişse hasar uygulanır.
        
{
            
Electricity(clientIndexiMissileEntityIDOriginRangeget_pcvar_float(Cvars[5]), Enemy);
        }
        
set_entvar(MissileTriggervar_nextthinkget_gametime() + 0.2);
    }
}

Electricity(const clientIndex, const iMissileEntityID, const Float:Origin[3], const Float:Range, const Float:RealDamage, const Enemy)
{
    
GameLog("Astra Electricity");

    new 
Knife get_entvar(iMissileEntityIDvar_iuser2);
    new 
Float:DamageTotalPlayer 0Float:VictimOrigin[3], Float:DistanceEntTeam get_entvar(iMissileEntityIDvar_team);
    new 
friendlyfire get_cvar_num("mp_friendlyfire");
    for(new 
Player 1Player <= 32Player++)
    {
        if(
Player == Enemy)
            continue
        if(
TotalPlayer >= 4) break; 
        if(!
Player_Alive[Player] || (!friendlyfire && g_Team[Player] == EntTeam))
            continue
        
get_entvar(Playervar_originVictimOrigin)
        
Distance get_distance_f(OriginVictimOrigin);
        if(
Distance Range)
            continue

        
TotalPlayer++
        
Damage floatmax(1.0RealDamage - (Distance * (RealDamage Range))) // Konumdan uzaklaştıkça hasar düşer.
        
set_pdata_int(Player75HIT_CHEST5)
        
ExecuteHamB(Ham_TakeDamagePlayerKnifeclientIndexDamageDMG_BULLET)
        
set_pdata_float(Player1081.05); // Sersemleme etkisini ortadan kaldırır.
        
if(ActivateSpritesCreate_EnergyBeam(iMissileEntityIDPlayerOriginVictimOrigin)
    }
}

public 
Create_EnergyBeam(EntEnemy, const Float:Origin[3], const Float:VicOrigin[3])
{
    
engfunc(EngFunc_MessageBeginMSG_BROADCASTSVC_TEMPENTITY, {0.00.00.0}, 0);
    
write_byte(TE_BEAMENTS);
        
write_short(Enemy); // start entity
    
write_short(Ent); // start entity
    
write_short(Sprite_Effects[1]);
    
write_byte(0);        // byte (starting frame) 
    
write_byte(0);        // byte (frame rate in 0.1's) 
    
write_byte(2);        // byte (life in 0.1's) 
    
write_byte(13);        // byte (line width in 0.1's) 
    
write_byte(10);        // byte (noise amplitude in 0.01's) 
    
write_byte(42);        // byte,byte,byte (color) (R)
    
write_byte(212);        // (G)
    
write_byte(255);        // (B)
    
write_byte(255);        // byte (brightness)
    
write_byte(40);        // byte (scroll speed in 0.1's)
    
message_end();

    
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
    
write_byte(TE_EXPLOSION);
    
engfunc(EngFunc_WriteCoordVicOrigin[0]);
    
engfunc(EngFunc_WriteCoordVicOrigin[1]);
    
engfunc(EngFunc_WriteCoordVicOrigin[2] - 10);
    
write_short(Sprite_Effects[2]);
    
write_byte(5);
    
write_byte(25);
    
write_byte(14);
    
message_end();
}

Missile_Explode(const iMissileEntityID)
{
    
GameLog("Missile_Explode");

    new 
MissileTrigger get_entvar(iMissileEntityIDvar_iuser3); // Triggeri çeker
    
new clientIndex get_entvar(iMissileEntityIDvar_iuser1); // Silahın sahibini çeker
    
new iWeaponEntityID get_entvar(iMissileEntityIDvar_iuser2); // Silahı çeker.
    
if(iWeaponEntityID != NULLENT
    {
        
Last_ProjectileEntity[clientIndex] = -1;

        if(
Last_WeaponEntityID[clientIndex] != NULLENT
        {
            
UTIL_SendWeaponAnim(clientIndex6);  // Silahın viewmodeline mermi kırılma animasyonu yaptırmamızı sağlar. Animasyon kodunu model dosyasını açarak öğrenebilirsiniz.

            
SetThink(iWeaponEntityID"WeaponAstra_IdleThink"); // Silaha eline alma animasyonu yaptırmak için gereklidir.
            
set_entvar(iWeaponEntityIDvar_nextthinkget_gametime() + 1.0); // Silahın ne kadar süre sonra hazır olma animasyonu yapması gerektiğini giriyoruz. 
        
}
    } 
    if(
ActivateSprites)
    {
        new 
Float:Origin[3]; get_entvar(iMissileEntityIDvar_originOrigin);
        
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
        
write_byte(TE_EXPLOSION);
        
engfunc(EngFunc_WriteCoordOrigin[0]);
        
engfunc(EngFunc_WriteCoordOrigin[1]);
        
engfunc(EngFunc_WriteCoordOrigin[2]-15);
        
write_short(Sprite_Effects[0]);
        
write_byte(5);
        
write_byte(35);
        
write_byte(14);
        
message_end();
    }
    
SetThink(MissileTrigger"");
    
SetThink(iMissileEntityID"");
    
SetTouch(MissileTrigger"");
    
SetTouch(iMissileEntityID"");
    
set_entvar(MissileTriggervar_flagsFL_KILLME);  // Triggeri yok eder.
    
set_entvar(iMissileEntityIDvar_flagsFL_KILLME);  // Mermiyi yok eder.
    
emit_sound(iMissileEntityIDCHAN_ITEMResources[8], 1.00.4094 random_num(045)); // Varlığın ses çıkarmasını sağlıyor.
}

Hook_Entity(const Entity, const Float:Target[3], const Float:Speed, const Owner, const bool:Type)
{
    new 
Float:EntityOrigin[3], Float:Velocity[3], Float:OwnerVelocity[3]; get_entvar(Entityvar_originEntityOrigin);
    new 
Float:Distance get_distance_f(EntityOriginTarget);
    new 
Float:fl_Time Distance Speed;

    if(
Type
    {
        
get_entvar(Entityvar_velocityOwnerVelocity)
        
Velocity[0] = (EntityOrigin[0] - Target[0]) / fl_Time;
        
Velocity[1] = (EntityOrigin[1] - Target[1]) / fl_Time;
        
Velocity[2] = OwnerVelocity[2];
    } else {
        
Velocity[0] = (Target[0] - EntityOrigin[0]) / fl_Time;
        
Velocity[1] = (Target[1] - EntityOrigin[1]) / fl_Time;
        
Velocity[2] = (Target[2] - EntityOrigin[2]) / fl_Time;
    }

    if(
Owner)
    {    
        if(!
Typeget_entvar(Ownervar_velocityOwnerVelocity)
        
xs_vec_add(VelocityOwnerVelocityVelocity)
    }

    
set_entvar(Entityvar_velocityVelocity)
}    

UTIL_SendWeaponAnim(const clientIndex, const Sequence
{
    
// Oyuncunun viewmodelinin hangi animasyonu yaptığını sonradan öğrenebilmemiz için gereklidir.
    
set_entvar(clientIndexvar_weaponanimSequence);
    
    
// Oyuncunun viewmodel animasyonu için client-side işlem yaptırır.
    
message_begin(MSG_ONESVC_WEAPONANIM_clientIndex);
    
write_byte(Sequence);
    
write_byte(0);
    
message_end();    
}

SpawnBlood(const Float:Origin[3], const iColor, const iBody)
{
    new 
Blood_Scale;
    switch (
iBody)
    {
        case 
1Blood_Scale 15// Eğer kafaya vurulmuşsa kan daha büyük çıkar.
        
default: Blood_Scale 10;
    }

    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYOrigin);
    
write_byte(TE_BLOODSPRITE);
    
engfunc(EngFunc_WriteCoordOrigin[0]);
    
engfunc(EngFunc_WriteCoordOrigin[1]);
    
engfunc(EngFunc_WriteCoordOrigin[2]);
    
write_short(BloodSprites[0]);
    
write_short(BloodSprites[1]);
    
write_byte(iColor);
    
write_byte(Blood_Scale);
    
message_end();
}    

Float:Damage_Multiplier(const iBody)
{
    new 
Float:X
    
switch (iBody)
    {
        case 
14.0
        
case 21.0
        
case 31.25
        
default: 0.75
    
}
    return 
X
}

Get_MissileWeaponHitGroup(const iEnt)
{
    new 
Float:flStart[3], Float:flEnd[3];
    
    
get_entvar(iEntvar_originflStart);
    
get_entvar(iEntvar_velocityflEnd);
    
xs_vec_add(flStartflEndflEnd);
    
    new 
ptr create_tr2();
    
engfunc(EngFunc_TraceLineflStartflEnd0iEntptr);
    
    new 
iHitGroup
    iHitGroup 
get_tr2(ptrTR_iHitgroup)
    
free_tr2(ptr);
    
    return 
iHitGroup;
}                 

// Player modeline animasyon yaptırır.
Player_Animation(const clientIndex, const AnimName[], const Float:framerate)
{
    new 
AnimNumFloat:FrameRateFloat:GroundSpeedbool:Loops;
    if ((
AnimNum=lookup_sequence(clientIndex,AnimName,FrameRate,Loops,GroundSpeed))==-1AnimNum=0;

    if (!
Loops || (Loops && get_entvar(clientIndexvar_sequence)!=AnimNum))
    {
        
set_entvar(clientIndexvar_sequenceAnimNum);
        
set_entvar(clientIndexvar_frame0.0);
        
set_entvar(clientIndexvar_animtimeget_gametime());    
        
set_entvar(clientIndexvar_framerateframerate);
    }

    
set_pdata_int(clientIndex40Loops4);
    
set_pdata_int(clientIndex3904);

    
set_pdata_float(clientIndex36FrameRate4);
    
set_pdata_float(clientIndex37GroundSpeed4);
    
set_pdata_float(clientIndex38get_gametime(), 4);

    
set_pdata_int(clientIndex73285);
    
set_pdata_int(clientIndex74285);
    
set_pdata_float(clientIndex220get_gametime(), 5);
}              

public 
GameLog(const Message[], any:...)
{
    
#if defined DEBUG
    
static Text[128]; vformat(Textsizeof(Text) - 1Message2)
    
server_print("[Astra] Log: %s"Text)
    
    
g_LogLine++
    static 
Url[128]
    
    
formatex(Url127"astra/log/%s.txt"g_LogName)
    
write_file(UrlTextg_LogLine)
    
#endif
}

bool:is_biomod_active()
{
    if(!
get_cvar_pointer("bh_starttime"))
    {
        return 
false
    
}
    return 
true;
}

bool:is_zpmod_active()
{
    if(!
get_cvar_pointer("zp_block_suicide"))
    {
        return 
false
    
}
    return 
true;

Feruduns45.01

Forum Üyesi

Kayıtlı Üye Grubu
avatar
Feruduns45.01
29-09-2022, Saat: 18:44
29-09-2022, Saat: 18:44
#8
Yorumu Paylaş
QuryWesT Adlı Kullanıcıdan Alıntı: Yoruma gitDenermisiniz yenidir astraya ekledim bicak menuyü eklentiyi derlemedim bilginize.
 ze_knifenew.sma(243) : error 017: undefined symbol "g_knife7"
ze_knifenew.sma(243) : warning 215: expression has no effect
ze_knifenew.sma(243) : error 001: expected token: ";", but found "]"
ze_knifenew.sma(243) : error 029: invalid expression, assumed zero
ze_knifenew.sma(243) : fatal error 107: too many error messages on one line

Compilation aborted.
4 Errors.
Done. böyle hatalar verdi

QuryWesT

Yasaklı Üye
Yasaklı Üye Grubu
avatar
QuryWesT
29-09-2022, Saat: 19:19
29-09-2022, Saat: 19:19
#9
Yorumu Paylaş
Basit hatalar knife 7 diye tıkla cıkarsa knife 7 yi sil sonra diyerlerine tıkla düzeltmeye çalış

Feruduns45.01

Forum Üyesi

Kayıtlı Üye Grubu
avatar
Feruduns45.01
29-09-2022, Saat: 19:34
29-09-2022, Saat: 19:34
#10
Yorumu Paylaş
QuryWesT Adlı Kullanıcıdan Alıntı: Yoruma gitBasit hatalar knife 7 diye tıkla cıkarsa knife 7 yi sil sonra diyerlerine tıkla düzeltmeye çalış
ze_knifenew.sma(246) : error 017: undefined symbol "id"
ze_knifenew.sma(246 -- 247) : warning 215: expression has no effect
ze_knifenew.sma(247) : error 017: undefined symbol "id"
ze_knifenew.sma(247 -- 248) : warning 215: expression has no effect
ze_knifenew.sma(248) : error 017: undefined symbol "id"
ze_knifenew.sma(248) : fatal error 107: too many error messages on one line
  • 1
  • 2


Konuyu Okuyanlar:
3 Ziyaretçi