Ana eklentinin son hali.
Kod: Tümünü seç
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <xs>
#include <biohazard>
//Forumda paylaştığım bio supplybox sması
native GoldenM4Ver(oyuncu); //zp_extra_goldenm4.sma dan çekilen native
native BalrogVer(oyuncu); //balrog-i.sma dan çekilen native
native ElementalVer(oyuncu); //balrog-i.sma dan çekilen native
public rastgelever(id){
switch (random_num(0, 2))
{
case 0:
{
GoldenM4Ver(id);
client_print(id, print_chat,"Kutudan GoldenM4A1 Cikti.") //Bu kısımda çıkan yazı.
}
case 1:
{
BalrogVer(id);
client_print(id, print_chat,"Kutudan Balrog Cikti.")
}
case 2:
{
ElementalVer(id);
client_print(id, print_chat,"Kutudan Elemental Cikti.")
}
}
}
//KUTUDAN DÜŞMESİNİ İSTEDİKLERİNİZ YUKARI
#define PLUGIN "[BIO] Addon: SupplyBox Multi"
#define VERSION "1.1 Multi"
#define AUTHOR "Dias" //CSmiLeFaCe for biohazard.
// ======================= SUPPLYBOX CONFIG ======================== //
#define SUPPLYBOX_CLASSNAME "supplybox"
#define TASK_SUPPLYBOX 128256
#define TASK_SUPPLYBOX2 138266
#define TASK_SUPPLYBOX_HELP 129257
#define TASK_SUPPLYBOX_WAIT 130259
const MAX_SUPPLYBOX_ENT = 100
new const supplybox_spawn_file[] = "%s/supplybox/%s.cfg"
new const supplybox_icon_spr[] =
{
"sprites/supplybox_plague/icon_supplybox.spr"
}
new const supplybox_model[][] =
{
"models/supplybox_plague/supplybox.mdl"
}
new const supplybox_drop_sound[][] =
{
"supplybox_plague/supplybox_drop.wav"
}
new const supplybox_pickup_sound[][] =
{
"supplybox_plague/supplybox_pickup.wav"
}
// ======================= END OF SUPPLYBOX CONFIG ======================== //
// Below here is hard code. Don't edit anything except cvars
new g_supplybox_num, g_supplybox_wait[33], supplybox_count,
supplybox_ent[MAX_SUPPLYBOX_ENT], g_supplybox_icon_id, Float:g_supplybox_spawn[MAX_SUPPLYBOX_ENT][3],
g_total_supplybox_spawn
new cvar_supplybox_icon, cvar_supplybox_max, cvar_supplybox_num, cvar_supplybox_totalintime,
cvar_supplybox_time, cvar_supplybox_delaytime, cvar_supplybox_icon_size, cvar_supplybox_icon_light
new bool:made_supplybox, Float:g_icon_delay[33]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_forward(FM_Touch, "fw_supplybox_touch")
cvar_supplybox_max = register_cvar("zp_supplybox_max", "16")
cvar_supplybox_num = register_cvar("zp_supplybox_num", "2")
cvar_supplybox_totalintime = register_cvar("zp_supplybox_totalintime", "4")
cvar_supplybox_time = register_cvar("zp_supplybox_time", "30")
cvar_supplybox_icon = register_cvar("zp_supplybox_icon", "1")
cvar_supplybox_delaytime = register_cvar("zp_supplybox_icon_delay_time", "1.0")
cvar_supplybox_icon_size = register_cvar("zp_supplybox_icon_size", "2")
cvar_supplybox_icon_light = register_cvar("zp_supplybox_icon_light", "100")
set_task(2.0, "update_radar", _, _, _, "b")
}
public event_infect()
{
if(!made_supplybox)
{
made_supplybox = true
if(task_exists(TASK_SUPPLYBOX)) remove_task(TASK_SUPPLYBOX)
if(!g_total_supplybox_spawn)
{
client_print(0, print_console, "[SupplyBox][Hata] Kutu atilacak bolgeler belirli degil Bolge olustur.!")
} else {
set_task(get_pcvar_float(cvar_supplybox_time), "create_supplybox", TASK_SUPPLYBOX)
}
}
}
public plugin_precache()
{
load_supplybox_spawn()
static i
for(i = 0; i < sizeof(supplybox_model); i++)
engfunc(EngFunc_PrecacheModel, supplybox_model[i])
for(i = 0; i < sizeof(supplybox_drop_sound); i++)
engfunc(EngFunc_PrecacheSound, supplybox_drop_sound[i])
for(i = 0; i < sizeof(supplybox_pickup_sound); i++)
engfunc(EngFunc_PrecacheSound, supplybox_pickup_sound[i])
g_supplybox_icon_id = engfunc(EngFunc_PrecacheModel, supplybox_icon_spr)
}
public plugin_cfg()
{
set_task(0.5, "event_newround")
}
public load_supplybox_spawn()
{
// Check for spawns points of the current map
new cfgdir[32], mapname[32], filepath[100], linedata[64]
get_configsdir(cfgdir, charsmax(cfgdir))
get_mapname(mapname, charsmax(mapname))
formatex(filepath, charsmax(filepath), supplybox_spawn_file, cfgdir, mapname)
// Load spawns points
if (file_exists(filepath))
{
new file = fopen(filepath,"rt"), row[4][6]
while (file && !feof(file))
{
fgets(file, linedata, charsmax(linedata))
// invalid spawn
if(!linedata[0] || str_count(linedata,' ') < 2) continue;
// get spawn point data
parse(linedata,row[0],5,row[1],5,row[2],5)
// origin
g_supplybox_spawn[g_total_supplybox_spawn][0] = floatstr(row[0])
g_supplybox_spawn[g_total_supplybox_spawn][1] = floatstr(row[1])
g_supplybox_spawn[g_total_supplybox_spawn][2] = floatstr(row[2])
g_total_supplybox_spawn++
if (g_total_supplybox_spawn >= MAX_SUPPLYBOX_ENT)
break
}
if (file) fclose(file)
}
}
public update_radar()
{
for (new id = 1; id <= get_maxplayers(); id++)
{
if (!is_user_alive(id) || !supplybox_count || is_user_zombie(id))
continue
static i, next_ent
i = 1
while(i <= supplybox_count)
{
next_ent = supplybox_ent[i]
if (next_ent && is_valid_ent(next_ent))
{
static Float:origin[3]
pev(next_ent, pev_origin, origin)
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HostagePos"), {0,0,0}, id)
write_byte(id)
write_byte(i)
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2]))
message_end()
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HostageK"), {0,0,0}, id)
write_byte(i)
message_end()
}
i++
}
}
}
public event_newround()
{
made_supplybox = false
remove_supplybox()
supplybox_count = 0
if(task_exists(TASK_SUPPLYBOX)) remove_task(TASK_SUPPLYBOX)
if(task_exists(TASK_SUPPLYBOX2)) remove_task(TASK_SUPPLYBOX2)
if(task_exists(TASK_SUPPLYBOX_HELP)) remove_task(TASK_SUPPLYBOX_HELP)
}
public client_PostThink(id)
{
if (!get_pcvar_num(cvar_supplybox_icon) || !is_user_alive(id) || is_user_zombie(id))
return
if((g_icon_delay[id] + get_pcvar_float(cvar_supplybox_delaytime)) > get_gametime())
return
g_icon_delay[id] = get_gametime()
if (supplybox_count)
{
static i, box_ent
i = 1
while (i <= supplybox_count)
{
box_ent = supplybox_ent[i]
create_icon_origin(id, box_ent, g_supplybox_icon_id)
i++
}
}
}
public create_supplybox(id)
{
if (supplybox_count >= get_pcvar_num(cvar_supplybox_max))
return
if (task_exists(TASK_SUPPLYBOX)) remove_task(TASK_SUPPLYBOX)
set_task(get_pcvar_float(cvar_supplybox_time), "create_supplybox", TASK_SUPPLYBOX)
if (get_total_supplybox() >= get_pcvar_num(cvar_supplybox_totalintime))
return
g_supplybox_num = 0
create_supplybox2()
static random_sound
random_sound = random_num(0, charsmax(supplybox_drop_sound))
client_cmd(0, "spk ^"%s^"", supplybox_drop_sound[random_sound])
for(new i = 0; i < get_maxplayers(); i++)
{
if(is_user_alive(i) && is_user_connected(i) && !is_user_zombie(i))
client_print(i, print_center,"Yardim Kutusu Atildi Bul Onu..!")
}
if (task_exists(TASK_SUPPLYBOX_HELP)) remove_task(TASK_SUPPLYBOX_HELP)
set_task(3.0, "show_supplybox_help", TASK_SUPPLYBOX_HELP)
if (task_exists(TASK_SUPPLYBOX2)) remove_task(TASK_SUPPLYBOX2)
set_task(0.5, "create_supplybox2", TASK_SUPPLYBOX2, _, _, "b")
}
public create_supplybox2()
{
if (supplybox_count >= get_pcvar_num(cvar_supplybox_max)
|| get_total_supplybox() >= get_pcvar_num(cvar_supplybox_totalintime))
{
remove_task(TASK_SUPPLYBOX2)
return
}
supplybox_count++
g_supplybox_num++
new ent = create_entity("info_target")
entity_set_string(ent, EV_SZ_classname, SUPPLYBOX_CLASSNAME)
entity_set_model(ent, supplybox_model[random_num(0, charsmax(supplybox_model))])
entity_set_size(ent,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
entity_set_int(ent,EV_INT_solid,1)
entity_set_int(ent,EV_INT_movetype,6)
entity_set_int(ent, EV_INT_iuser1, 3) //here
entity_set_int(ent, EV_INT_iuser2, supplybox_count)
static Float:Origin[3]
collect_spawn_point(Origin)
engfunc(EngFunc_SetOrigin, ent, Origin)
supplybox_ent[supplybox_count] = ent
if ((g_supplybox_num >= get_pcvar_num(cvar_supplybox_num)) && task_exists(TASK_SUPPLYBOX2))
remove_task(TASK_SUPPLYBOX2)
}
public get_total_supplybox()
{
new total
for (new i = 1; i <= supplybox_count; i++)
{
if (supplybox_ent[i]) total += 1
}
return total
}
public show_supplybox_help()
{
for(new i = 0; i < get_maxplayers(); i++)
{
if(is_user_alive(i) && is_user_connected(i) && !is_user_zombie(i))
client_print(i, print_center,"Yardim Kutularinin Yerleri Radarina Eklendi..!")
}
}
public remove_supplybox()
{
remove_ent_by_class(SUPPLYBOX_CLASSNAME)
new supplybox_ent_reset[MAX_SUPPLYBOX_ENT]
supplybox_ent = supplybox_ent_reset
}
public fw_supplybox_touch(ent, id)
{
if (!pev_valid(ent) || !is_user_alive(id) || is_user_zombie(id) || g_supplybox_wait[id])
return FMRES_IGNORED
static classname[32]
entity_get_string(ent,EV_SZ_classname,classname,31)
if (equal(classname, SUPPLYBOX_CLASSNAME))
{
rastgelever(id)
static name[32]
get_user_name(id, name, sizeof(name))
client_print(0, print_center,"%s Kutu Acti", name)
static random_sound
random_sound = random_num(0, charsmax(supplybox_pickup_sound))
emit_sound(id, CHAN_VOICE, supplybox_pickup_sound[random_sound], 1.0, ATTN_NORM, 0, PITCH_NORM)
new num_box = entity_get_int(ent, EV_INT_iuser2)
supplybox_ent[num_box] = 0
remove_entity(ent)
g_supplybox_wait[id] = 1
if (task_exists(id+TASK_SUPPLYBOX_WAIT)) remove_task(id+TASK_SUPPLYBOX_WAIT)
set_task(2.0, "remove_supplybox_wait", id+TASK_SUPPLYBOX_WAIT)
}
return FMRES_IGNORED
}
public remove_supplybox_wait(id)
{
id -= TASK_SUPPLYBOX_WAIT
g_supplybox_wait[id] = 0
if (task_exists(id+TASK_SUPPLYBOX_WAIT)) remove_task(id+TASK_SUPPLYBOX_WAIT)
}
stock collect_spawn_point(Float:origin[3]) // By Sontung0
{
for (new i = 1; i <= g_total_supplybox_spawn *3 ; i++)
{
origin = g_supplybox_spawn[random(g_total_supplybox_spawn)]
if (check_spawn_box(origin)) return 1;
}
return 0;
}
stock check_spawn_box(Float:origin[3]) // By Sontung0
{
new Float:originE[3], Float:origin1[3], Float:origin2[3]
new ent = -1
while ((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", SUPPLYBOX_CLASSNAME)) != 0)
{
pev(ent, pev_origin, originE)
// xoy
origin1 = origin
origin2 = originE
origin1[2] = origin2[2] = 0.0
if (vector_distance(origin1, origin2) <= 32.0) return 0;
}
return 1;
}
stock create_icon_origin(id, ent, sprite) // By sontung0
{
if (!pev_valid(ent)) return;
new Float:fMyOrigin[3]
entity_get_vector(id, EV_VEC_origin, fMyOrigin)
new target = ent
new Float:fTargetOrigin[3]
entity_get_vector(target, EV_VEC_origin, fTargetOrigin)
fTargetOrigin[2] += 40.0
if (!is_in_viewcone(id, fTargetOrigin)) return;
new Float:fMiddle[3], Float:fHitPoint[3]
xs_vec_sub(fTargetOrigin, fMyOrigin, fMiddle)
trace_line(-1, fMyOrigin, fTargetOrigin, fHitPoint)
new Float:fWallOffset[3], Float:fDistanceToWall
fDistanceToWall = vector_distance(fMyOrigin, fHitPoint) - 10.0
normalize(fMiddle, fWallOffset, fDistanceToWall)
new Float:fSpriteOffset[3]
xs_vec_add(fWallOffset, fMyOrigin, fSpriteOffset)
new Float:fScale
fScale = 0.01 * fDistanceToWall
new scale = floatround(fScale)
scale = max(scale, 1)
scale = min(scale, get_pcvar_num(cvar_supplybox_icon_size))
scale = max(scale, 1)
te_sprite(id, fSpriteOffset, sprite, scale, get_pcvar_num(cvar_supplybox_icon_light))
}
stock te_sprite(id, Float:origin[3], sprite, scale, brightness) // By sontung0
{
message_begin(MSG_ONE, SVC_TEMPENTITY, _, id)
write_byte(TE_SPRITE)
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2]))
write_short(sprite)
write_byte(scale)
write_byte(brightness)
message_end()
}
stock normalize(Float:fIn[3], Float:fOut[3], Float:fMul) // By sontung0
{
new Float:fLen = xs_vec_len(fIn)
xs_vec_copy(fIn, fOut)
fOut[0] /= fLen, fOut[1] /= fLen, fOut[2] /= fLen
fOut[0] *= fMul, fOut[1] *= fMul, fOut[2] *= fMul
}
stock str_count(const str[], searchchar) // By Twilight Suzuka
{
new count, i, len = strlen(str)
for (i = 0; i <= len; i++)
{
if(str[i] == searchchar)
count++
}
return count;
}
stock remove_ent_by_class(classname[])
{
new nextitem = find_ent_by_class(-1, classname)
while(nextitem)
{
remove_entity(nextitem)
nextitem = find_ent_by_class(-1, classname)
}
}
----------------
Golden M4A1
Kod: Tümünü seç
#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <biohazard>
#define is_valid_player(%1) (1 <= %1 <= 32)
new M4_V_MODEL[64] = "models/zombie_plague/v_golden_m4a1_UP.mdl"
new M4_P_MODEL[64] = "models/zombie_plague/p_golden_m4a1_UP.mdl"
/* Pcvars */
new cvar_dmgmultiplier, cvar_goldbullets, cvar_custommodel, cvar_uclip
new bool:g_HasM4[33]
new g_hasZoom[ 33 ]
new bullets[ 33 ]
// Sprite
new m_spriteTexture
const Wep_m4a1 = ((1<<CSW_M4A1))
public plugin_init()
{
/* CVARS */
cvar_dmgmultiplier = register_cvar("zp_goldenm4_dmg_multiplier", "12")
cvar_custommodel = register_cvar("zp_goldenm4_custom_model", "1")
cvar_goldbullets = register_cvar("zp_goldenm4_gold_bullets", "1")
cvar_uclip = register_cvar("zp_goldenm4_unlimited_clip", "1")
// Register The Plugin
register_plugin("[ZP] Extra: Golden M4A1", "1.1", "Bill=Thailand=[UP]")
// Death Msg
register_event("DeathMsg", "Death", "a")
// Weapon Pick Up
register_event("WeapPickup","checkModel","b","1=19")
// Current Weapon Event
register_event("CurWeapon","checkWeapon","be","1=1")
register_event("CurWeapon", "make_tracer", "be", "1=1", "3>0")
// Ham TakeDamage
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
register_forward( FM_CmdStart, "fw_CmdStart" )
RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)
}
public client_connect(id)
{
g_HasM4[id] = false
}
public client_disconnect(id)
{
g_HasM4[id] = false
}
public Death()
{
g_HasM4[read_data(2)] = false
}
public fwHamPlayerSpawnPost(id)
{
g_HasM4[id] = false
}
public plugin_precache()
{
precache_model(M4_V_MODEL)
precache_model(M4_P_MODEL)
m_spriteTexture = precache_model("sprites/dot.spr")
precache_sound("weapons/zoom.wav")
}
public event_infect(id, saldiran)
{
if (is_user_zombie(id)) //ZP deki zombi mi değil mi sorgulaması,
{
g_HasM4[id] = false
}
}
public checkModel(id)
{
if ( is_user_zombie(id) )
return PLUGIN_HANDLED
new szWeapID = read_data(2)
if ( szWeapID == CSW_M4A1 && g_HasM4[id] == true && get_pcvar_num(cvar_custommodel) )
{
set_pev(id, pev_viewmodel2, M4_V_MODEL)
set_pev(id, pev_weaponmodel2, M4_P_MODEL)
}
return PLUGIN_HANDLED
}
public checkWeapon(id)
{
new plrClip, plrAmmo, plrWeap[32]
new plrWeapId
plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
if (plrWeapId == CSW_M4A1 && g_HasM4[id])
{
checkModel(id)
}
else
{
return PLUGIN_CONTINUE
}
if (plrClip == 0 && get_pcvar_num(cvar_uclip))
{
// If the user is out of ammo..
get_weaponname(plrWeapId, plrWeap, 31)
// Get the name of their weapon
give_item(id, plrWeap)
engclient_cmd(id, plrWeap)
engclient_cmd(id, plrWeap)
engclient_cmd(id, plrWeap)
}
return PLUGIN_HANDLED
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CSW_M4A1 && g_HasM4[attacker] )
{
SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmgmultiplier ) )
}
}
public fw_CmdStart( id, uc_handle, seed )
{
if( !is_user_alive( id ) )
return PLUGIN_HANDLED
if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
{
new szClip, szAmmo
new szWeapID = get_user_weapon( id, szClip, szAmmo )
if( szWeapID == CSW_M4A1 && g_HasM4[id] == true && !g_hasZoom[id] == true)
{
g_hasZoom[id] = true
cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 0 )
emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
}
else if ( szWeapID == CSW_M4A1 && g_HasM4[id] == true && g_hasZoom[id])
{
g_hasZoom[ id ] = false
cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
}
}
return PLUGIN_HANDLED
}
public make_tracer(id)
{
if (get_pcvar_num(cvar_goldbullets))
{
new clip,ammo
new wpnid = get_user_weapon(id,clip,ammo)
new pteam[16]
get_user_team(id, pteam, 15)
if ((bullets[id] > clip) && (wpnid == CSW_M4A1) && g_HasM4[id])
{
new vec1[3], vec2[3]
get_user_origin(id, vec1, 1) // origin; your camera point.
get_user_origin(id, vec2, 4) // termina; where your bullet goes (4 is cs-only)
//BEAMENTPOINTS
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte (0) //TE_BEAMENTPOINTS 0
write_coord(vec1[0])
write_coord(vec1[1])
write_coord(vec1[2])
write_coord(vec2[0])
write_coord(vec2[1])
write_coord(vec2[2])
write_short( m_spriteTexture )
write_byte(1) // framestart
write_byte(5) // framerate
write_byte(2) // life
write_byte(10) // width
write_byte(0) // noise
write_byte( 255 ) // r, g, b
write_byte( 215 ) // r, g, b
write_byte( 0 ) // r, g, b
write_byte(200) // brightness
write_byte(150) // speed
message_end()
}
bullets[id] = clip
}
}
//Şuanda bioya uyumlu oldu, ama bu silahı supplybox için uyarlayacağımız için hala eklemeler yapacağız.
//Bu yüzden native kullanacağız.
public plugin_natives(){
register_native("GoldenM4Ver","silahiver",1);
}
//Şimdi bio için supplybox eklentimizi açalım.
public silahiver(player)
{
if ( user_has_weapon(player, CSW_M4A1) )
{
drop_prim(player)
}
give_item(player, "weapon_m4a1")
//client_print(player, print_chat, "[ZP] You bought Golden M4A1") //Bu yazıya artık ihtiyacımız yok kaldırabililriz.
g_HasM4[player] = true;
}
stock drop_prim(id)
{
new weapons[32], num
get_user_weapons(id, weapons, num)
for (new i = 0; i < num; i++) {
if (Wep_m4a1 & (1<<weapons[i]))
{
static wname[32]
get_weaponname(weapons[i], wname, sizeof wname - 1)
engclient_cmd(id, "drop", wname)
}
}
}
--------------
Balrog
Kod: Tümünü seç
#include <amxmodx>
#include <engine>
#include <fakemeta_util>
#include <hamsandwich>
#include <xs>
#include <cstrike>
#include <biohazard>
#define ENG_NULLENT -1
#define EV_INT_WEAPONKEY EV_INT_impulse
#define b1_WEAPONKEY 621
#define MAX_PLAYERS 32
#define IsValidUser(%1) (1 <= %1 <= g_MaxPlayers)
const OFFSET_ACTIVE_ITEM = 373
const OFFSET_WEAPONOWNER = 41
const OFFSET_LINUX = 5
const OFFSET_LINUX_WEAPONS = 4
#define WEAP_LINUX_XTRA_OFF 4
#define m_fKnown 44
#define m_flNextPrimaryAttack 46
#define m_flTimeWeaponIdle 48
#define m_iClip 51
#define m_fInReload 54
#define PLAYER_LINUX_XTRA_OFF 5
#define m_flNextAttack 83
#define b1_SHOOT1 2
#define b1_SHOOT2 3
#define b1_SHOOT_EMPTY 3
#define b1_RELOAD 4
#define b1_DRAW 5
#define b1_RELOAD_TIME 3.0
#define write_coord_f(%1) engfunc(EngFunc_WriteCoord,%1)
public plugin_natives() {
register_native("BalrogVer","give_b1",1);
}
new const Fire_Sounds[][] = { "weapons/balrog1-1.wav", "weapons/balrog1-2.wav" }
new b1_V_MODEL[64] = "models/v_balrog1.mdl"
new b1_P_MODEL[64] = "models/p_balrog1.mdl"
new b1_W_MODEL[64] = "models/w_balrog1.mdl"
new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
new cvar_dmg_b1, cvar_recoil_b1, cvar_clip_b1, cvar_spd_b1, cvar_b1_ammo, cvar_dmg_exp
new g_MaxPlayers, g_orig_event_b1, g_IsInPrimaryAttack, g_iClip
new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2]
new g_has_b1[33], g_clip_ammo[33], oldweap[33],g_b1_TmpClip[33]
new gmsgWeaponList, gMode[33], sExplo
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550", "weapon_deagle", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
"weapon_ak47", "weapon_knife", "weapon_p90" }
public plugin_init()
{
register_plugin("[ZP] Extra: Balrog-I", "1.0", "Barney")
register_event("CurWeapon","CurrentWeapon","be","1=1")
RegisterHam(Ham_Item_AddToPlayer, "weapon_deagle", "fw_b1_AddToPlayer")
for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
RegisterHam(Ham_Item_PostFrame, "weapon_deagle", "b1_ItemPostFrame")
RegisterHam(Ham_Weapon_Reload, "weapon_deagle", "b1_Reload")
RegisterHam(Ham_Weapon_Reload, "weapon_deagle", "b1_Reload_Post", 1)
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle", "fw_b1_PrimaryAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle", "fw_b1_PrimaryAttack_Post", 1)
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
register_forward(FM_SetModel, "fw_SetModel")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1)
cvar_dmg_b1 = register_cvar("zp_b1_dmg", "2.5")
cvar_dmg_exp = register_cvar("zp_b1_dmg_exp", "300.")
cvar_recoil_b1 = register_cvar("zp_b1_recoil", "1.0")
cvar_clip_b1 = register_cvar("zp_b1_clip", "10")
cvar_spd_b1 = register_cvar("zp_b1_spd", "0.7")
cvar_b1_ammo = register_cvar("zp_b1_ammo", "100")
g_MaxPlayers = get_maxplayers()
gmsgWeaponList = get_user_msgid("WeaponList")
}
public plugin_precache()
{
precache_model(b1_V_MODEL)
precache_model(b1_P_MODEL)
precache_model(b1_W_MODEL)
for(new i = 0; i < sizeof Fire_Sounds; i++)
precache_sound(Fire_Sounds[i])
precache_sound("weapons/balrog1_changea.wav")
precache_sound("weapons/balrog1_changeb.wav")
precache_sound("weapons/balrog1_draw.wav")
precache_sound("weapons/balrog1_reload.wav")
precache_sound("weapons/balrog1_reloadb.wav")
m_iBlood[0] = precache_model("sprites/blood.spr")
m_iBlood[1] = precache_model("sprites/bloodspray.spr")
precache_generic("sprites/weapon_balrog1.txt")
precache_generic("sprites/640hud83.spr")
precache_generic("sprites/640hud4.spr")
sExplo = precache_model("sprites/balrogcritical.spr")
register_clcmd("weapon_balrog1", "weapon_hook")
register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
}
public weapon_hook(id)
{
engclient_cmd(id, "weapon_deagle")
return PLUGIN_HANDLED
}
public fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
{
if(!is_user_alive(iAttacker))
return
new g_currentweapon = get_user_weapon(iAttacker)
if(g_currentweapon != CSW_DEAGLE) return
if(!g_has_b1[iAttacker]) return
static Float:flEnd[3]
get_tr2(ptr, TR_vecEndPos, flEnd)
if(iEnt)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
write_coord_f(flEnd[0])
write_coord_f(flEnd[1])
write_coord_f(flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
write_short(iEnt)
message_end()
}
else
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord_f(flEnd[0])
write_coord_f(flEnd[1])
write_coord_f(flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
write_coord_f(flEnd[0])
write_coord_f(flEnd[1])
write_coord_f(flEnd[2])
write_short(iAttacker)
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}
public fwPrecacheEvent_Post(type, const name[])
{
if (equal("events/deagle.sc", name))
{
g_orig_event_b1 = get_orig_retval()
return FMRES_HANDLED
}
return FMRES_IGNORED
}
public client_connect(id)
{
g_has_b1[id] = false
}
public client_disconnected(id) //CSDurağı 1.8.3 compiler'ında ed ekliyorduk sonuna, hazır elimiz değmişken onuda halledelim.
{
g_has_b1[id] = false
}
public event_infect(id)
{
if (is_user_zombie(id))
{
g_has_b1[id] = false
}
}
public fw_SetModel(entity, model[])
{
if(!is_valid_ent(entity))
return FMRES_IGNORED
static szClassName[33]
entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED
static iOwner
iOwner = entity_get_edict(entity, EV_ENT_owner)
if(equal(model, "models/w_deagle.mdl"))
{
static iStoredAugID
iStoredAugID = find_ent_by_owner(ENG_NULLENT, "weapon_deagle", entity)
if(!is_valid_ent(iStoredAugID))
return FMRES_IGNORED
if(g_has_b1[iOwner])
{
entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, b1_WEAPONKEY)
g_has_b1[iOwner] = false
entity_set_model(entity, b1_W_MODEL)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public give_b1(id)
{
drop_weapons(id, 2)
new iWep2 = fm_give_item(id,"weapon_deagle")
if( iWep2 > 0 )
{
cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_b1))
cs_set_user_bpammo (id, CSW_DEAGLE, get_pcvar_num(cvar_b1_ammo))
UTIL_PlayWeaponAnimation(id, b1_DRAW)
set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
message_begin(MSG_ONE, gmsgWeaponList, _, id)
write_string("weapon_balrog1")
write_byte(8)
write_byte(35)
write_byte(-1)
write_byte(-1)
write_byte(1)
write_byte(1)
write_byte(CSW_DEAGLE)
message_end()
}
g_has_b1[id] = true
} //Bunda yazı yazmıyormuş.
public fw_b1_AddToPlayer(b1, id)
{
if(!is_valid_ent(b1) || !is_user_connected(id))
return HAM_IGNORED
if(entity_get_int(b1, EV_INT_WEAPONKEY) == b1_WEAPONKEY)
{
g_has_b1[id] = true
entity_set_int(b1, EV_INT_WEAPONKEY, 0)
message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
write_string("weapon_balrog1")
write_byte(8)
write_byte(35)
write_byte(-1)
write_byte(-1)
write_byte(1)
write_byte(1)
write_byte(CSW_DEAGLE)
message_end()
return HAM_HANDLED
}
else
{
message_begin(MSG_ONE, gmsgWeaponList, {0,0,0}, id)
write_string("weapon_deagle")
write_byte(8)
write_byte(35)
write_byte(-1)
write_byte(-1)
write_byte(1)
write_byte(1)
write_byte(CSW_DEAGLE)
message_end()
}
return HAM_IGNORED
}
public fw_Item_Deploy_Post(weapon_ent)
{
static owner
owner = fm_cs_get_weapon_ent_owner(weapon_ent)
static weaponid
weaponid = cs_get_weapon_id(weapon_ent)
replace_weapon_models(owner, weaponid)
}
public CurrentWeapon(id)
{
replace_weapon_models(id, read_data(2))
if(read_data(2) != CSW_DEAGLE || !g_has_b1[id])
return
static Float:iSpeed
if(g_has_b1[id])
iSpeed = get_pcvar_float(cvar_spd_b1)
static weapon[32],Ent
get_weaponname(read_data(2),weapon,31)
Ent = find_ent_by_owner(-1,weapon,id)
if(Ent)
{
static Float:Delay
Delay = get_pdata_float( Ent, 46, 4) * iSpeed
if (Delay > 0.0)
{
set_pdata_float(Ent, 46, Delay, 4)
}
}
}
replace_weapon_models(id, weaponid)
{
switch (weaponid)
{
case CSW_DEAGLE:
{
if (is_user_zombie(id))
return
if(g_has_b1[id])
{
set_pev(id, pev_viewmodel2, b1_V_MODEL)
set_pev(id, pev_weaponmodel2, b1_P_MODEL)
if(oldweap[id] != CSW_DEAGLE)
{
UTIL_PlayWeaponAnimation(id, b1_DRAW)
set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
gMode[id] = 0
message_begin(MSG_ONE, gmsgWeaponList, _, id)
write_string("weapon_balrog1")
write_byte(8)
write_byte(35)
write_byte(-1)
write_byte(-1)
write_byte(1)
write_byte(1)
write_byte(CSW_DEAGLE)
message_end()
}
}
}
}
oldweap[id] = weaponid
}
public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
{
if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_DEAGLE || !g_has_b1[Player]))
return FMRES_IGNORED
set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
return FMRES_HANDLED
}
public fw_b1_PrimaryAttack(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)
if (!g_has_b1[Player])
return
g_IsInPrimaryAttack = 1
pev(Player,pev_punchangle,cl_pushangle[Player])
g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
g_iClip = cs_get_weapon_ammo(Weapon)
}
public explode(id)
{
if(is_user_alive(id))
{
new Float:originF[3]
fm_get_aim_origin(id,originF)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, originF[0])
engfunc(EngFunc_WriteCoord, originF[1])
engfunc(EngFunc_WriteCoord, originF[2])
write_short(sExplo)
write_byte(20)
write_byte(50)
write_byte(0)
message_end()
new a = FM_NULLENT
while((a = find_ent_in_sphere(a,originF,200.0)) != 0)
{
if(pev(a,pev_takedamage)!=DAMAGE_NO)
{
ExecuteHamB( Ham_TakeDamage, a ,id ,id, get_pcvar_float(cvar_dmg_exp), DMG_BULLET )
}
}
}
}
public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
if ((eventid != g_orig_event_b1) || !g_IsInPrimaryAttack)
return FMRES_IGNORED
if (!(1 <= invoker <= g_MaxPlayers))
return FMRES_IGNORED
playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
return FMRES_SUPERCEDE
}
public fw_b1_PrimaryAttack_Post(Weapon)
{
g_IsInPrimaryAttack = 0
new Player = get_pdata_cbase(Weapon, 41, 4)
new szClip, szAmmo
get_user_weapon(Player, szClip, szAmmo)
if(!is_user_alive(Player))
return
if (g_iClip <= cs_get_weapon_ammo(Weapon))
return
if(g_has_b1[Player])
{
if (!g_clip_ammo[Player])
return
new Float:push[3]
pev(Player,pev_punchangle,push)
xs_vec_sub(push,cl_pushangle[Player],push)
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_b1),push)
xs_vec_add(push,cl_pushangle[Player],push)
set_pev(Player,pev_punchangle,push)
if( gMode[Player] ) {
explode(Player)
set_pdata_float( Player, 83, 2.0 )
}
emit_sound(Player, CHAN_WEAPON, Fire_Sounds[gMode[Player]], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
UTIL_PlayWeaponAnimation(Player, gMode[Player]?b1_SHOOT2:b1_SHOOT1)
if( gMode[Player] ) gMode[Player] = 0
}
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
if (victim != attacker && is_user_connected(attacker))
{
if(get_user_weapon(attacker) == CSW_DEAGLE)
{
if(g_has_b1[attacker])
SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_b1))
}
}
}
stock fm_cs_get_current_weapon_ent(id)
{
return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX)
}
stock fm_cs_get_weapon_ent_owner(ent)
{
return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
}
stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
set_pev(Player, pev_weaponanim, Sequence)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
write_byte(Sequence)
write_byte(pev(Player, pev_body))
message_end()
}
public b1_ItemPostFrame(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED
if (!g_has_b1[id])
return HAM_IGNORED
static iClipExtra
iClipExtra = get_pcvar_num(cvar_clip_b1)
new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)
new iBpAmmo = cs_get_user_bpammo(id, CSW_DEAGLE);
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)
if( pev( id, pev_button ) & IN_ATTACK2 && flNextAttack <= 0.0) {
UTIL_PlayWeaponAnimation(id, !gMode[id]?6:7 )
gMode[id] = (gMode[id]?0:1)
set_pdata_float( id, 83, 2.0 )
}
if( fInReload && flNextAttack <= 0.0 )
{
new j = min(iClipExtra - iClip, iBpAmmo)
set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
cs_set_user_bpammo(id, CSW_DEAGLE, iBpAmmo-j)
set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
fInReload = 0
}
return HAM_IGNORED
}
public b1_Reload(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED
if (!g_has_b1[id])
return HAM_IGNORED
static iClipExtra
if(g_has_b1[id])
iClipExtra = get_pcvar_num(cvar_clip_b1)
g_b1_TmpClip[id] = -1
new iBpAmmo = cs_get_user_bpammo(id, CSW_DEAGLE)
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)
if (iBpAmmo <= 0)
return HAM_SUPERCEDE
if (iClip >= iClipExtra)
return HAM_SUPERCEDE
g_b1_TmpClip[id] = iClip
return HAM_IGNORED
}
public b1_Reload_Post(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED
if (!g_has_b1[id])
return HAM_IGNORED
if (g_b1_TmpClip[id] == -1)
return HAM_IGNORED
set_pdata_int(weapon_entity, m_iClip, g_b1_TmpClip[id], WEAP_LINUX_XTRA_OFF)
set_pdata_float(weapon_entity, m_flTimeWeaponIdle, b1_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
set_pdata_float(id, m_flNextAttack, b1_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
UTIL_PlayWeaponAnimation(id, gMode[id]?8:b1_RELOAD)
gMode[id] = 0
return HAM_IGNORED
}
stock drop_weapons(id, dropwhat)
{
static weapons[32], num, i, weaponid
num = 0
get_user_weapons(id, weapons, num)
for (i = 0; i < num; i++)
{
weaponid = weapons[i]
if (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM))
{
static wname[32]
get_weaponname(weaponid, wname, sizeof wname - 1)
engclient_cmd(id, "drop", wname)
}
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/
Gerisi size kalmış, nasıl yapacağınızı 3 video çekerek gösterdim.