Modul este unul PvE, in care omori zombie, iti upgradezi abilitatile, deblochezi efecte si pet-uri si multe altele
Modul este la inceput, deci va ma primii update-uri
Modul este facut pe Windows, HLDS, AMXX 190, netestat pe Linux)
Resursele contin modele/sprites/amxx/sma si alte fisiere aditionale
To install: Drag & Drop in Half-Life/cstrike/
Botii trebuie sa fie neaparat YaPB
Credite
tuturor de unde m-am inspirat cu bucati de cod :)
DeclineD, a ajutat si el pe ici colo :)
Update 3.0 alpa
- rezolvata problema la salvarea pe nvault
- cod optimizat
- adaugate evolutii (inca se lucreaza la concept deci nu e gata total)
Sursa
Code: Select all
#include <amxmodx>
#include <cstrike>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta_util>
#include <rog>
#include <engine>
#include <nvault>
#include <fun>
#define TAG "^4[Zombie Mode]^1"
#define MAX_LEVELS 31
#define MAX_EVOLUTIONS 5
#define chx(%1) charsmax(%1)
#pragma unused CheckPointsForVisibility
enum _: lvldata
{
LevelTag[25],
LevelReqKills,
LevelUpBonusPoints
}
enum _: wpndata
{
weaponname[32],
weapon_data[16],
weapon_bullets,
weapon_level
}
enum _: evodata
{
evo_name[32],
evo_state // folosit pentru urmatorul update
}
enum
{
Save = 0,
Load
}
enum (+= 100)
{
CAN_START_TASKID = 900,
HUD_TASKID,
CHAT_TAG_TASKID,
RANDOM_THINGS_TASKID
}
enum plData
{
EVOLUTION,
POINTS,
KILLS,
LEVEL,
GRAVES
}
enum plUpgrades
{
NORECOIL,
HP_AP,
SPEED,
GRAVITY,
DAMAGE,
JUMPS
}
enum plCosmetics
{
CHAT_TAG,
GLOW,
TRACERS,
PET,
KILL_EFFECTS
}
new const LevelData[MAX_LEVELS][lvldata] =
{
{"N00b", 0, 10},
{"Level 1", 10, 10},
{"Level 2", 20, 20},
{"Level 3", 30, 30},
{"Level 4", 40, 40},
{"Level 5", 50, 50},
{"Level 6", 60, 60},
{"Level 7", 70, 70},
{"Level 8", 80, 80},
{"Level 9", 90, 90},
{"Level 10", 100, 100},
{"Level 11", 200, 10},
{"Level 12", 300, 10},
{"Level 13", 400, 10},
{"Level 14", 500, 10},
{"Level 15", 600, 10},
{"Level 16", 700, 10},
{"Level 17", 800, 10},
{"Level 18", 900, 10},
{"Level 19", 1000, 10},
{"Level 20", 1200, 10},
{"Level 21", 1400, 10},
{"Level 22", 1600, 10},
{"Level 23", 1800, 10},
{"Level 24", 2000, 10},
{"Level 25", 2200, 10},
{"Level 26", 2400, 10},
{"Level 27", 2600, 10},
{"Level 28", 2800, 10},
{"Level 29", 3000, 10},
{"Level 30", 5000, 10}
}
new const Evolutions[MAX_EVOLUTIONS][evodata] =
{
{"Evolution Phase I", 1},
{"Evolution Phase II", 2},
{"Evolution Phase III", 3},
{"Evolution Phase IV", 4},
{"Evolution Phase V", 5}
}
new const WeaponData[][wpndata] =
{
{"P90", "weapon_p90", 999, 0},
{"M4A1", "weapon_m4a1", 999, 5},
{"AK47", "weapon_ak47", 999, 15},
{"XM1014", "weapon_xm1014", 999, 30}
}
new const ZombieModels[][] =
{
"zombie_model",
"zombie_model2",
"zombie_model3",
"zombie_model4"
}
new const BonusDropsModels[][] =
{
"models/zombie_mod/cadou.mdl"
}
new const PetModels[][] =
{
"models/zombie_mod/rodrigo.mdl",
"models/zombie_mod/floater.mdl",
"models/zombie_mod/liliac.mdl",
"models/zombie_mod/gorila.mdl",
"models/zombie_mod/joker.mdl"
}
new const PetSounds[5][] =
{
"zombie_mod/pet_sounds/joker_spawn.wav",
"zombie_mod/pet_sounds/harambe_spawn.wav",
"zombie_mod/pet_sounds/liliac_spawn.wav",
"zombie_mod/pet_sounds/floater_spawn.wav",
"zombie_mod/pet_sounds/rodrigo_spawn.wav"
}
new const GraveModels[][] =
{
"models/zombie_mod/grave.mdl"
}
new const GraveSounds[1][] =
{
"zombie_mod/grave_sounds/grave_destroy.wav"
}
new const Float: g_flCoords[][] =
{
{0.50, 0.40},
{0.56, 0.44},
{0.60, 0.50},
{0.56, 0.56},
{0.50, 0.60},
{0.44, 0.56},
{0.40, 0.50},
{0.44, 0.44}
}
new g_iPlayerPos[MAX_PLAYERS + 1]
new const BlockedHams[][] =
{
"weaponbox",
"armoury_entity",
"weapon_shield",
"func_bomb_target",
"weapon_c4"
}
new const BlockedCommands[][] =
{
"drop"
}
const ZOMBIE_HP = 10
const KILL_POINTS = 50
const BLOCKED_WEAPONS = (1<<CSW_KNIFE|1<<CSW_HEGRENADE|1<<CSW_FLASHBANG|1<<CSW_SMOKEGRENADE|1<<CSW_C4)
static const BonusDropClassName[] = "BonusDrop"
static const PetClassName[] = "BatClass"
static const GraveClassName[] = "CruceaMatii"
new sync
new bool: g_bCanGameStart
new bool: g_bCanSetTagChat[MAX_PLAYERS + 1],
g_PlayerTag[33][MAX_PLAYERS + 1]
new bool: g_bRandomGlowSet[MAX_PLAYERS + 1], g_bRandommenuSet[MAX_PLAYERS + 1]
new g_PlayerPetModel[MAX_PLAYERS + 1][64]
new g_TraceBeams
new color[MAX_PLAYERS + 1][3]
new iJumpNum[MAX_PLAYERS + 1] = 0
new bool: bDoJump[MAX_PLAYERS + 1] = false
new Float: g_flPushAngle[MAX_PLAYERS + 1][3]
new pet[MAX_PLAYERS + 1], g_bHasPetSpawned[MAX_PLAYERS + 1]
new g_plPet[MAX_PLAYERS + 1], g_plKillEffect[MAX_PLAYERS + 1]
new g_name[MAX_PLAYERS + 1][MAX_NAME_LENGTH]
new g_nVault,
g_nVaultFile[] = "alupigus"
new g_ShowAdminsFile[MAX_FMT_LENGTH]
new g_msgLightning, g_msgExplode
new g_plData[MAX_PLAYERS + 1][plData]
new g_plUpgrades[MAX_PLAYERS + 1][plUpgrades]
new g_plCosmetics[MAX_PLAYERS + 1][plCosmetics]
new cvar_min_players, cvar_norecoil_price, cvar_jumps_price, cvar_hpap_price, cvar_max_hpap,
cvar_speed_price, cvar_max_speed, cvar_gravity_price, cvar_max_gravity,
cvar_damage_price, cvar_max_damage, cvar_chattag_price, cvar_glow_price,
cvar_wplaser_price, cvar_pet_price, cvar_killeffects_price
public plugin_init()
{
register_plugin("[Zombie Mod v2]", "3.0 alpha", "kidd0x")
register_message(get_user_msgid("ShowMenu"), "message_show_menu")
register_message(get_user_msgid("VGUIMenu"), "message_vgui_menu")
RegisterHam(Ham_Spawn, "player", "ham_spawn", 1)
RegisterHam(Ham_TakeDamage, "player", "fwd_takedamage")
for(new i; i < sizeof BlockedHams; i++)
RegisterHam(Ham_Touch, BlockedHams[i], "@goto_hamsupercede")
for(new i; i < sizeof BlockedCommands; i++)
register_clcmd(BlockedCommands[i], "@goto_return_handled")
register_clcmd("jointeam", "to_open_menu")
register_clcmd("chooseteam", "to_open_menu")
register_clcmd("say", "hook_say")
register_clcmd("say_team", "hook_say")
register_clcmd("say /cam", "open_camera")
register_event("ResetHUD", "ev_resethud", "be")
register_event("DeathMsg", "ev_deathmessage", "a")
register_event("CurWeapon", "ev_curweapon", "be", "1=1")
register_event("CurWeapon", "ev_maketracer", "be", "1=1", "3>0")
register_event("Damage", "ev_damage", "b", "2>0", "3=0")
register_event("TextMsg", "ev_restartround", "a", "2&#Game_C", "2&#Game_w")
register_forward(FM_Touch, "Touch")
register_forward(FM_Think, "FM_Think_hook")
new wn[24]
for(new i = 1; i <= 30; i++)
{
if(!(BLOCKED_WEAPONS & 1 << i) && get_weaponname(i, wn, chx(wn)))
{
RegisterHam(Ham_Weapon_PrimaryAttack, wn, "fwd_weapon_primaryattack_pre")
RegisterHam(Ham_Weapon_PrimaryAttack, wn, "fwd_weapon_primaryattack_post", 1)
}
}
new szConfigsDir[128]
get_configsdir(szConfigsDir, chx(szConfigsDir))
formatex(g_ShowAdminsFile, chx(g_ShowAdminsFile), "%s/amx_who.ini", szConfigsDir)
ROGInitialize(100.0) // incercam sa spawnam botii cat mai aproape unu de altul
g_nVault = nvault_open(g_nVaultFile)
if(g_nVault == INVALID_HANDLE)
set_fail_state("[ZombieMod] Ooops, ceva s-a intamplat cu fisierul nVault !")
cvar_min_players = register_cvar("zm_min_players", "1")
cvar_norecoil_price = register_cvar("zm_no_recoil_price", "10000")
cvar_jumps_price = register_cvar("zm_jumps_price", "3000")
cvar_max_hpap = register_cvar("zm_max_hpap", "20")
cvar_hpap_price = register_cvar("zm_hpap_price", "1500")
cvar_speed_price = register_cvar("zm_speed_price", "5000")
cvar_max_speed = register_cvar("zm_max_speed", "5")
cvar_gravity_price = register_cvar("zm_gravity_price", "2000")
cvar_max_gravity = register_cvar("zm_max_gravity", "3")
cvar_damage_price = register_cvar("zm_damage_price", "2500")
cvar_max_damage = register_cvar("zm_max_damage", "5")
cvar_chattag_price = register_cvar("zm_chattag_price", "25000")
cvar_glow_price = register_cvar("zm_glow_price", "5000")
cvar_wplaser_price = register_cvar("zm_wplaser_price", "3500")
cvar_pet_price = register_cvar("zm_pet_price", "50000")
cvar_killeffects_price = register_cvar("zm_kill_effects_price", "35000")
server_cmd("yb removebots")
g_bCanGameStart = false
set_task(1.0, "CanGameStart", CAN_START_TASKID)
sync = CreateHudSyncObj()
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
public CanGameStart()
{
if(task_exists(CAN_START_TASKID) && g_bCanGameStart)
remove_task(CAN_START_TASKID)
new iPlayers[MAX_PLAYERS], iNum
get_players(iPlayers, iNum, "cei", "CT")
if(iNum >= get_pcvar_num(cvar_min_players))
{
if(task_exists(CAN_START_TASKID))
remove_task(CAN_START_TASKID)
g_bCanGameStart = true
client_print_color(0, print_team_default, "%s Jocul a inceput! Have fun killing enemies :D", TAG)
PrepareGame()
}
else
{
g_bCanGameStart = false
set_task(1.0, "CanGameStart", CAN_START_TASKID, _, _, "b")
}
}
public PrepareGame()
{
// hardcode pentru boti
server_cmd("sv_restart 1")
server_cmd("mp_limitteams 0")
server_cmd("mp_autoteambalance 0")
server_cmd("mp_freezetime 0")
server_cmd("sv_maxspeed 999")
server_cmd("mp_forcechasecam 1")
set_lights("d")
server_cmd("yb_jasonmode 1")
for(new i; i < 10; i++)
server_cmd("yb add_t 3 2")
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
public client_authorized(id)
{
if(!g_plData[id][POINTS] || !g_plData[id][KILLS] || !g_plData[id][LEVEL] || !g_plData[id][EVOLUTION])
{
g_plData[id][POINTS] = 0
g_plData[id][KILLS] = 0
g_plData[id][LEVEL] = 0
g_plData[id][GRAVES] = 0
g_plData[id][EVOLUTION] = 0
}
if(!g_plCosmetics[id][GLOW] || !g_plCosmetics[id][TRACERS] || !g_plCosmetics[id][PET])
{
g_plCosmetics[id][GLOW] = 0
g_plCosmetics[id][TRACERS] = 0
g_plCosmetics[id][PET] = 0
g_plCosmetics[id][KILL_EFFECTS] = 0
}
if(!g_plUpgrades[id][NORECOIL] || !g_plUpgrades[id][HP_AP] || !g_plUpgrades[id][SPEED] || !g_plUpgrades[id][GRAVITY] || !g_plUpgrades[id][DAMAGE] || !g_plUpgrades[id][JUMPS])
{
g_plUpgrades[id][NORECOIL] = 0
g_plUpgrades[id][HP_AP] = 0
g_plUpgrades[id][SPEED] = 0
g_plUpgrades[id][GRAVITY] = 0
g_plUpgrades[id][DAMAGE] = 0
g_plUpgrades[id][JUMPS] = 0
}
}
public client_putinserver(id)
{
get_user_name(id, g_name[id], chx(g_name))
ManageData(id, Load)
iJumpNum[id] = 0
bDoJump[id] = false
}
public client_disconnected(id)
{
ManageData(id, Save)
iJumpNum[id] = 0
bDoJump[id] = false
}
public plugin_end()
{
new iPlayers[MAX_PLAYERS], iNum
get_players(iPlayers, iNum)
for(new i; i < iNum; i++)
{
ManageData(i, Save)
}
nvault_close(g_nVault)
}
public plugin_precache()
{
new path[MAX_RESOURCE_PATH_LENGTH], i
for(i = 0; i < sizeof ZombieModels; i++)
{
formatex(path, chx(path), "models/player/%s/%s.mdl", ZombieModels[i], ZombieModels[i])
precache_model(path)
}
for(i = 0; i < sizeof BonusDropsModels; i++)
{
formatex(path, chx(path), "%s", BonusDropsModels[i])
precache_model(path)
}
for(i = 0; i < sizeof PetModels; i++)
{
formatex(path, chx(path), "%s", PetModels[i])
precache_model(path)
}
for(i = 0; i < sizeof GraveModels; i++)
{
formatex(path, chx(path), "%s", GraveModels[i])
precache_model(path)
}
for(i = 0; i < sizeof PetSounds; i++)
{
formatex(path, chx(path), "%s", PetSounds[i])
precache_sound(path)
}
for(i = 0; i < sizeof GraveSounds; i++)
{
formatex(path, chx(path), "%s", GraveSounds[i])
precache_sound(path)
}
precache_model("models/rpgrocket.mdl")
g_TraceBeams = precache_model("sprites/dot.spr")
g_msgLightning = precache_model("sprites/white.spr")
}
public ev_restartround()
{
remove_entity_name(BonusDropClassName)
remove_entity_name(GraveClassName)
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
ManageData(id, type)
{
new szData[MAX_FMT_LENGTH]
formatex(szData, chx(szData), "%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%s#%i#%i#%i#%i", g_plData[id][EVOLUTION], g_plData[id][POINTS], g_plData[id][KILLS], g_plData[id][LEVEL], g_plData[id][GRAVES],
g_plUpgrades[id][NORECOIL], g_plUpgrades[id][HP_AP], g_plUpgrades[id][SPEED], g_plUpgrades[id][GRAVITY], g_plUpgrades[id][DAMAGE], g_plUpgrades[id][JUMPS],
g_plCosmetics[id][CHAT_TAG], g_PlayerTag[id], g_plCosmetics[id][GLOW], g_plCosmetics[id][TRACERS], g_plCosmetics[id][PET], g_plCosmetics[id][KILL_EFFECTS])
switch(type)
{
case Save:
nvault_set(g_nVault, g_name[id], szData)
case Load:
{
nvault_get(g_nVault, g_name[id], szData, chx(szData))
replace_all(szData, chx(szData), "#", " ")
new iEvolution[32], iPoints[32], iKills[32], iLevel[32], iGraves[32],
iUpgNr[32], iUpgHPAP[32], iUpgSpd[32], iUpgGrav[32], iUpgDmg[32],
iUpgShDis[32], iCsmCT[32], szTag[32], iCsmGlow[32], iCsmTrc[32],
iCsmPet[32], iCsmKE[32]
parse(szData, iEvolution, 31, iPoints, 31, iKills, 31, iLevel, 31, iGraves, 31,
iUpgNr, 31, iUpgHPAP, 31, iUpgSpd, 31, iUpgGrav, 31,
iUpgDmg, 31, iUpgShDis, 31, iCsmCT, 31, szTag, 31, iCsmGlow, 31,
iCsmTrc, 31, iCsmPet, 31, iCsmKE, 31)
g_plData[id][EVOLUTION] = str_to_num(iEvolution)
g_plData[id][POINTS] = str_to_num(iPoints)
g_plData[id][KILLS] = str_to_num(iKills)
g_plData[id][LEVEL] = str_to_num(iLevel)
g_plData[id][GRAVES] = str_to_num(iGraves)
g_plUpgrades[id][NORECOIL] = str_to_num(iUpgNr)
g_plUpgrades[id][HP_AP] = str_to_num(iUpgHPAP)
g_plUpgrades[id][SPEED] = str_to_num(iUpgSpd)
g_plUpgrades[id][GRAVITY] = str_to_num(iUpgGrav)
g_plUpgrades[id][DAMAGE] = str_to_num(iUpgDmg)
g_plUpgrades[id][JUMPS] = str_to_num(iUpgShDis)
g_plCosmetics[id][CHAT_TAG] = str_to_num(iCsmCT)
g_plCosmetics[id][GLOW] = str_to_num(iCsmGlow)
g_plCosmetics[id][TRACERS] = str_to_num(iCsmTrc)
g_plCosmetics[id][PET] = str_to_num(iCsmPet)
g_plCosmetics[id][KILL_EFFECTS] = str_to_num(iCsmKE)
copy(g_PlayerTag[id], chx(g_PlayerTag), szTag)
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
public ham_spawn(id)
{
if(is_user_alive(id) && g_bCanGameStart)
{
new Float: flOrigins[3]
ROGGetOrigin(flOrigins)
engfunc(EngFunc_SetOrigin, id, flOrigins)
if(!is_user_bot(id))
{
if(g_plData[id][LEVEL] == MAX_LEVELS)
g_plData[id][LEVEL] = MAX_LEVELS - 1
if(g_plCosmetics[id][PET] == 1)
CreatePet(id)
new Float: viata = float(100 + (5 * g_plData[id][LEVEL] * g_plUpgrades[id][HP_AP]))
new Float: armura = float(100 + (10 * g_plData[id][LEVEL] * g_plUpgrades[id][HP_AP]))
set_pev(id, pev_health, viata)
set_pev(id, pev_armorvalue, armura)
emessage_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Health"), _, id)
ewrite_byte(255)
emessage_end()
ev_curweapon(id)
GiveWeapons(id)
set_task(1.0, "ShowHUD", id + HUD_TASKID, _, _, "b")
}
else
{
cs_set_user_model(id, ZombieModels[random_num(0, chx(ZombieModels))], true)
set_pev(id, pev_health, float(ZOMBIE_HP))
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
public ev_resethud(id)
{
ShowHUD(id)
}
public ev_deathmessage()
{
new iKiller = read_data(1)
new iVictim = read_data(2)
if(iKiller > get_maxplayers() || iKiller == iVictim)
return
g_plData[iKiller][POINTS] += KILL_POINTS
g_plData[iKiller][KILLS]++
ManageData(iKiller, Save)
new vOrigin[3], vCoord[3], vEnd[3]
get_user_origin(iVictim, vOrigin, 0)
get_user_origin(iKiller, vEnd, 0)
vOrigin[2] -= 26
vCoord[0] = vOrigin[0] + 150
vCoord[1] = vOrigin[1] + 150
vCoord[2] = vOrigin[2] + 800
switch(g_plKillEffect[iKiller])
{
case 0: {} // pentru boti
case 1: thunder(vCoord, vOrigin)
case 2: create_explode(vOrigin)
case 3: create_implosion(vOrigin)
}
new sansa_grave = random_num(0, 50)
if(sansa_grave > 1)
set_task(0.1, "SpawnGrave", iVictim)
new sansa_box = random_num(0, 10)
if(sansa_box > 8)
set_task(0.1, "SpawnBox", iVictim)
set_task(0.5, "SpawnPlayer", iVictim)
if((g_plData[iKiller][LEVEL] < MAX_LEVELS - 1) && !is_user_bot(iKiller))
{
while(g_plData[iKiller][KILLS] >= LevelData[g_plData[iKiller][LEVEL]][LevelReqKills])
{
g_plData[iKiller][LEVEL]++
g_plData[iKiller][POINTS] += LevelData[g_plData[iKiller][LEVEL]][LevelUpBonusPoints]
new data[MAX_FMT_LENGTH]
formatex(data, chx(data), "%n a avansat la nivelul %d (%s)", iKiller, g_plData[iKiller][LEVEL], LevelData[g_plData[iKiller][LEVEL]][LevelTag])
client_print_color(0, print_team_default, data)
client_print_color(iKiller, print_team_default, "%s Ai primit ^3%d^1 puncte bonus pentru ^3LevelUP^1!", TAG, LevelData[g_plData[iKiller][LEVEL]][LevelUpBonusPoints])
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
public KillPet(id)
{
if(pev_valid(pet[id]))
{
engfunc(EngFunc_RemoveEntity, pet[id])
pet[id] = 0
}
g_bHasPetSpawned[id] = false
}
public CreatePet(id)
{
if(g_bHasPetSpawned[id])
return 1
pet[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
set_pev(pet[id], pev_classname, PetClassName)
engfunc(EngFunc_SetModel, pet[id], g_PlayerPetModel[id])
new Float:flOrigin[3]
pev(id, pev_origin, flOrigin)
set_pev(pet[id], pev_origin, flOrigin)
set_pev(pet[id], pev_solid, SOLID_TRIGGER)
set_pev(pet[id], pev_movetype, MOVETYPE_FLY)
set_pev(pet[id], pev_owner, 33)
set_pev(pet[id], pev_nextthink, 1.0)
set_pev(pet[id], pev_sequence, 0)
set_pev(pet[id], pev_gaitsequence, 0)
set_pev(pet[id], pev_framerate, 1.0)
g_bHasPetSpawned[id] = true
return 1
}
public FM_Think_hook(ent)
{
for(new i = 0; i <= get_maxplayers(); i++)
{
if(ent == pet[i])
{
static Float:flOrigin[3]
static Float:flOrigin2[3]
static Float:flVel[3]
pev(ent, pev_origin, flOrigin2)
get_offset_origin_body(i, Float:{50.0, 0.0 , 0.0}, flOrigin)
if(get_distance_f(flOrigin, flOrigin2) > 300.0)
set_pev(ent, pev_origin, flOrigin)
else if(get_distance_f(flOrigin, flOrigin2) > 80.0)
{
get_speed_vector(flOrigin2, flOrigin, 250.0, flVel)
set_pev(ent ,pev_velocity, flVel)
if(pev(ent, pev_sequence) != 13 || pev(ent, pev_framerate) != 13.0)
{
set_pev(ent, pev_sequence, 13)
set_pev(ent, pev_gaitsequence, 13)
set_pev(ent, pev_framerate, 13.0)
}
}
else if(get_distance_f(flOrigin, flOrigin2) < 75.0)
{
if(pev(ent, pev_sequence) != 13 || pev(ent, pev_framerate) != 0.5)
{
set_pev(ent, pev_sequence, 13)
set_pev(ent, pev_gaitsequence, 13)
set_pev(ent, pev_framerate, 0.5)
}
set_pev(ent, pev_velocity, Float:{0.0, 0.0, 0.0})
}
pev(i, pev_origin, flOrigin)
flOrigin[2] = flOrigin2[2]
entity_set_aim(ent, flOrigin)
set_pev(ent, pev_nextthink, 1.0)
break
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
public SpawnPlayer(id)
{
if(!pev_valid(id))
return
ExecuteHamB(Ham_CS_RoundRespawn, id)
}
public SpawnBox(id)
{
if(is_user_bot(id))
{
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
new Origin[3]
get_user_origin(id, Origin, 0)
set_pev(ent, pev_classname, BonusDropClassName)
engfunc(EngFunc_SetModel, ent, BonusDropsModels[random_num(0, chx(BonusDropsModels))])
set_pev(ent, pev_mins, Float: {-10.0, -10.0, 0.0})
set_pev(ent, pev_maxs, Float: {10.0, 10.0, 25.0})
set_pev(ent, pev_size, Float: {-10.0, -10.0, 0.0, 10.0, 10.0, 25.0})
set_pev(ent, pev_solid, SOLID_BBOX)
set_pev(ent, pev_movetype, MOVETYPE_TOSS)
set_pev(ent, pev_renderfx, kRenderFxGlowShell)
set_pev(ent, pev_rendercolor, {255.0, 255.0, 255.0})
set_pev(ent, pev_rendermode, kRenderFxHologram)
set_pev(ent, pev_renderamt, 255.0)
new Float: flOrigin[3]
IVecFVec(Origin, flOrigin)
set_pev(ent, pev_origin, flOrigin)
}
}
public SpawnGrave(id)
{
if(!is_user_bot(id))
{
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
new Origin[3]
get_user_origin(id, Origin, 0)
set_pev(ent, pev_classname, GraveClassName)
engfunc(EngFunc_SetModel, ent, GraveModels[random_num(0, chx(GraveModels))])
set_pev(ent, pev_mins, Float: {-10.0, -10.0, 0.0})
set_pev(ent, pev_maxs, Float: {10.0, 10.0, 25.0})
set_pev(ent, pev_size, Float: {-10.0, -10.0, 0.0, 10.0, 10.0, 25.0})
set_pev(ent, pev_solid, SOLID_BBOX)
set_pev(ent, pev_movetype, MOVETYPE_TOSS)
set_pev(ent, pev_owner, id)
new Float: flOrigin[3]
IVecFVec(Origin, flOrigin)
set_pev(ent, pev_origin, flOrigin)
}
}
public Touch(toucher, touched)
{
if(!is_user_alive(toucher) || !pev_valid(touched) || is_user_bot(toucher))
return FMRES_IGNORED
new classname[32]
pev(touched, pev_classname, classname, chx(classname))
if(equal(classname, BonusDropClassName))
{
set_pev(touched, pev_effects, EF_NODRAW)
set_pev(touched, pev_solid, SOLID_NOT)
give_bonus(toucher)
}
else if(equal(classname, GraveClassName))
{
if(g_plData[toucher][EVOLUTION] == MAX_EVOLUTIONS - 1)
{
set_pev(touched, pev_solid, SOLID_NOT)
client_print_color(toucher, print_team_default, "%s Ai atins numarul maxim de evolutii ! Nu mai poti colecta cruci !", TAG)
return FMRES_IGNORED
}
set_pev(touched, pev_effects, EF_NODRAW)
set_pev(touched, pev_solid, SOLID_NOT)
emitsound(0, CHAN_AUTO, GraveSounds[0])
grave_bonus(toucher, pev(touched, pev_owner))
}
else return FMRES_IGNORED
if(!remove_entity(touched))
return FMRES_IGNORED
return FMRES_IGNORED
}
public give_bonus(id)
{
new random = random_num(0, 1000)
g_plData[id][POINTS] += random
client_print_color(id, print_team_default, "%s Ai primit %d puncte bonus !", TAG, random)
ManageData(id, Save)
}
public grave_bonus(id, owner)
{
client_print_color(id, print_team_default, "%s Ai atins crucea lui ^4%n^1!", TAG, owner)
g_plData[id][GRAVES] += 1
if(g_plData[id][GRAVES] >= 250)
{
if(g_plData[id][EVOLUTION] >= MAX_EVOLUTIONS - 1)
g_plData[id][EVOLUTION] = MAX_EVOLUTIONS - 1
g_plData[id][EVOLUTION] += 1
g_plData[id][GRAVES] = 0
client_print_color(id, print_team_default, "%s Pentru ca ai atins 250 de cruci ai evoluat !", TAG)
}
ManageData(id, Save)
}
public client_kill(id)
{
for(new null; null < 3; null++)
console_print(id, "")
console_print(id, "**************** [Anti Suicid] ****************")
console_print(id, ">>> De ce vrei tu sa mori asa repede? <<<")
if(g_plData[id][POINTS] - 500 > 0)
{
console_print(id, ">>> Pentru ca ai tendinte sinucigase ti-am luat 500 de puncte ! <<<")
}
console_print(id, ">>> Data viitoare gandeste-te de 2 ori inainte sa faci asa ceva <<<")
console_print(id, "**************** [Anti Suicid] ****************")
for(new null; null < 3; null++)
console_print(id, "")
if(g_plData[id][POINTS] - 500 > 0)
g_plData[id][POINTS] -= 500
return PLUGIN_HANDLED
}
public ev_maketracer(id)
{
if(g_bCanGameStart && (g_plCosmetics[id][TRACERS] == 1))
{
new pos1[3], pos2[3]
get_user_origin(id, pos1, 1)
get_user_origin(id, pos2, 4)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(0)
write_coord(pos1[0])
write_coord(pos1[1])
write_coord(pos1[2])
write_coord(pos2[0])
write_coord(pos2[1])
write_coord(pos2[2])
write_short(g_TraceBeams)
write_byte(1)
write_byte(5)
write_byte(2)
write_byte(1) // latime laser
write_byte(0)
write_byte(color[id][0])
write_byte(color[id][1])
write_byte(color[id][2])
write_byte(200)
write_byte(150)
message_end()
}
}
public ev_curweapon(id)
{
switch(get_pcvar_num(cvar_max_speed))
{
case 0: return
case 1..100:
{
new a
static Float: b = 20.0
a = 250
if(g_plPet[id] == 1 || g_plPet[id] == 5)
a = 400
new Float: speed = (a + g_plUpgrades[id][SPEED] * b)
set_user_maxspeed(id, speed)
}
}
switch(get_pcvar_num(cvar_max_gravity))
{
case 0: return
case 1..100:
{
static Float: a = 50.0
new Float: gravity = ((800.0 - g_plUpgrades[id][GRAVITY] * a) / 800)
set_user_gravity(id, gravity)
}
}
}
public ev_damage(iVictim)
{
if(read_data(4) || read_data(5) || read_data(6))
{
new id = get_user_attacker(iVictim)
if((1 <= id <= get_maxplayers()) && is_user_connected(id))
{
if(is_user_connected(id))
{
g_plData[id][POINTS] += floatround((read_data(2) * 0.01), floatround_round)
new iPos = ++g_iPlayerPos[id]
if(iPos == sizeof(g_flCoords))
iPos = g_iPlayerPos[id] = 0
set_dhudmessage(random_num(0, 224), random_num(0, 224), random_num(0, 224), Float:g_flCoords[iPos][0], Float:g_flCoords[iPos][1])
show_dhudmessage(id, "%d", read_data(2))
}
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
public ShowHUD(id)
{
id -= HUD_TASKID
if(is_user_alive(id) && g_bCanGameStart)
{
new Float: flSpeed, Float: flVelocity[3]
pev(id, pev_velocity, flVelocity)
flSpeed = vector_length(flVelocity)
new data[15]
if(flSpeed > 0.0)
formatex(data, chx(data), "%3.0f", flSpeed)
else if(!flSpeed)
formatex(data, chx(data), "Resting...", flSpeed)
set_hudmessage(random(255), random(255), random(255), -1.0, -0.10)
ShowSyncHudMsg(id, sync, "[%s]^n[%s]^n[Puncte %d] | [Cruci %d]^n[Viata %d] | [Armura %d]^n[Omoruri %d] | [Nivel %d]", Evolutions[g_plData[id][EVOLUTION]][evo_name], data, g_plData[id][POINTS], g_plData[id][GRAVES], get_user_health(id), get_user_armor(id), g_plData[id][KILLS], g_plData[id][LEVEL])
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
public to_open_menu(id)
{
if(!is_user_alive(id))
return 0
open_menu(id)
return 1
}
public open_menu(id)
{
if(!is_user_alive(id))
return 1
new menu = menu_create("\r[Zombie Mod] \wPlayer Menu", "main_menu_handle")
menu_additem(menu, "Arme")
menu_additem(menu, "Reseteaza Scorul")
menu_additem(menu, "Meniu Upgrade-uri")
menu_additem(menu, "Afiseaza Adminii Online")
menu_additem(menu, "Cosmetice")
DisplayMenu(menu, id)
return 1
}
public open_upgrades_menu(id)
{
new menu = menu_create(fmt("\r[Zombie Mod] \wMeniu Upgrade-uri^nPunctele Tale: \r%d", g_plData[id][POINTS]), "upg_menu_handle")
if(g_plUpgrades[id][NORECOIL] < 1)
menu_additem(menu, fmt("Cumpara \yNoRecoil \r[%d Puncte]", get_pcvar_num(cvar_norecoil_price)), "0", 0)
else if(g_plUpgrades[id][NORECOIL] == 1)
menu_additem(menu, "Cumpara \yNoRecoil \r(Cumparat)", "0", 0)
if(g_plUpgrades[id][JUMPS] < 1)
menu_additem(menu, fmt("Cumpara \yDouble Jump \r[%d Puncte]", get_pcvar_num(cvar_jumps_price)), "1", 1)
else if(g_plUpgrades[id][JUMPS] == 1)
menu_additem(menu, "Cumpara \yDouble Jump \r(Cumparat)", "1", 1)
////////////////////////////////////////////////////////////////////
if(g_plUpgrades[id][HP_AP] < get_pcvar_num(cvar_max_hpap))
menu_additem(menu, fmt("Cumpara \yHP/AP \r[%d Puncte](%d/%d)", get_pcvar_num(cvar_hpap_price), g_plUpgrades[id][HP_AP], get_pcvar_num(cvar_max_hpap)), "2", 0)
else if(g_plUpgrades[id][HP_AP] == get_pcvar_num(cvar_max_hpap))
menu_additem(menu, "Cumpara \yHP/AP \r(Maxim)", "2", 0)
////////////////////////////////////////////////////////////////////
if(g_plUpgrades[id][SPEED] < get_pcvar_num(cvar_max_speed))
menu_additem(menu, fmt("Mai mult speed \r[%d Puncte](%d/%d)", get_pcvar_num(cvar_speed_price), g_plUpgrades[id][SPEED], get_pcvar_num(cvar_max_speed)), "3", 0)
else if(g_plUpgrades[id][SPEED] == get_pcvar_num(cvar_max_speed))
menu_additem(menu, "Mai mult speed \r(Maxim)", "3", 0)
////////////////////////////////////////////////////////////////////
if(g_plUpgrades[id][GRAVITY] < get_pcvar_num(cvar_max_gravity))
menu_additem(menu, fmt("Mai putina gravitatie \r[%d Puncte](%d/%d)", get_pcvar_num(cvar_gravity_price), g_plUpgrades[id][GRAVITY], get_pcvar_num(cvar_max_gravity)), "4", 0)
else if(g_plUpgrades[id][GRAVITY] == get_pcvar_num(cvar_max_gravity))
menu_additem(menu, "Mai putina gravitatie \r(Maxim)", "4", 0)
////////////////////////////////////////////////////////////////////
if(g_plUpgrades[id][DAMAGE] < get_pcvar_num(cvar_max_damage))
menu_additem(menu, fmt("Mareste Damage \r[%d Puncte](%d/%d)", get_pcvar_num(cvar_damage_price), g_plUpgrades[id][DAMAGE], get_pcvar_num(cvar_max_damage)), "5", 0)
else if(g_plUpgrades[id][DAMAGE] == get_pcvar_num(cvar_max_damage))
menu_additem(menu, "Mareste Damage \r(Maxim)", "5", 0)
////////////////////////////////////////////////////////////////////
DisplayMenu(menu, id)
return 1
}
public open_cosmetics_menu(id)
{
new menu = menu_create(fmt("\r[Zombie Mod] \wMeniu Cosmetice^nPunctele Tale: \r%d", g_plData[id][POINTS]), "csm_menu_handle")
menu_additem(menu, fmt("Chat Tag \r[%d Puncte]^n\wChat Tag: \y%s", get_pcvar_num(cvar_chattag_price), g_PlayerTag[id]), "0", 0)
if(g_plCosmetics[id][GLOW] < 1)
menu_additem(menu, fmt("Deblocheaza Player GLOW \r[%d Puncte]", get_pcvar_num(cvar_glow_price)), "1", 0)
else if(g_plCosmetics[id][GLOW] == 1)
menu_additem(menu, "Setari Glow", "1", 0)
if(g_plCosmetics[id][TRACERS] < 1)
menu_additem(menu, fmt("Deblocheaza Weapon Laser \r[%d Puncte]", get_pcvar_num(cvar_wplaser_price)), "2", 0)
else if(g_plCosmetics[id][TRACERS] == 1)
menu_additem(menu, "Culori Weapon Laser", "2", 0)
if(g_plCosmetics[id][PET] < 1)
menu_additem(menu, fmt("Deblocheaza Pet \r[%d Puncte]", get_pcvar_num(cvar_pet_price)), "3", 0)
else if(g_plCosmetics[id][PET] == 1)
menu_additem(menu, "Setari Pet", "3", 0)
if(g_plCosmetics[id][KILL_EFFECTS] < 1)
menu_additem(menu, fmt("Deblocheaza Kill Effect \r[%d Puncte]", get_pcvar_num(cvar_killeffects_price)), "4", 0)
else if(g_plCosmetics[id][KILL_EFFECTS] == 1)
menu_additem(menu, "Setari Kill Effect", "4", 0)
DisplayMenu(menu, id)
return 1
}
public open_glow_settings(id)
{
new menu = menu_create("\r[Zombie Mod] \wSetari Glow", "glow_menu_handle")
menu_additem(menu, "Scoate Glow", "0", 0)
menu_additem(menu, "Glow Rosu", "1", 0)
menu_additem(menu, "Glow Galben", "2", 0)
menu_additem(menu, "Glow Alb", "3", 0)
menu_additem(menu, "Glow Albastru", "4", 0)
menu_additem(menu, "Glow Magenta", "5", 0)
menu_additem(menu, "Glow Roz", "6", 0)
menu_additem(menu, "Glow Random", "7", 0)
DisplayMenu(menu, id)
return 1
}
public open_camera(id)
{
new menu = menu_create("\r[Zombie Mod] \wCamera", "cam_menu_handle")
menu_additem(menu, "Vedere 3D")
menu_additem(menu, "Vedere Normala")
DisplayMenu(menu, id)
return 1
}
public GiveWeapons(id)
{
new menu = menu_create("\r[Zombie Mod] \wWeapons Menu", "wpn_menu_handle")
for(new i; i < sizeof WeaponData; i++)
menu_additem(menu, fmt("%s \r[LEVEL %d]", WeaponData[i][weaponname], WeaponData[i][weapon_level]), fmt("%d", i + 1), 0)
DisplayMenu(menu, id)
return 1
}
public open_wp_laser_settings(id)
{
new menu = menu_create("\r[Zombie Mod] \wSetari Weapon Laser", "wp_laser_menu_handle")
menu_additem(menu, "Laser Rosu")
menu_additem(menu, "Laser Galben")
menu_additem(menu, "Laser Alb")
menu_additem(menu, "Laser Random")
DisplayMenu(menu, id)
return 1
}
public open_pet_settings(id)
{
new menu = menu_create("\r[Zombie Mod] \wSetari Pet", "pet_menu_handle")
menu_additem(menu, "Ascunde Pet")
menu_additem(menu, "Rodrigo \r(+150 SPEED)")
menu_additem(menu, "Floater \r(Super Jump \w(SPACE + E)\r)")
menu_additem(menu, "Liliac")
menu_additem(menu, "Harambe \r(1.5x Damage)")
menu_additem(menu, "Joker Box \r(2x Damage | 150 SPEED | +1 JUMP)[Evolution Phase I]")
DisplayMenu(menu, id)
return 1
}
public open_kill_effects_settings(id)
{
new menu = menu_create("\r[Zombie Mod] \wSetari Kill Effects", "kill_effects_menu_handle")
menu_additem(menu, "Scoate Efect")
menu_additem(menu, "Thunder Effect")
menu_additem(menu, "Explode Effect")
menu_additem(menu, "Implosion Effect")
DisplayMenu(menu, id)
return 1
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
public main_menu_handle(id, MainMenu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(MainMenu)
return 1
}
switch(item)
{
case 0: GiveWeapons(id)
case 1:
{
for(new i; i < 2; i++)
{
set_user_frags(id, 0)
cs_set_user_deaths(id, 0)
}
client_print_color(0, print_team_default, "%s %n reseted their score!", TAG, id)
}
case 2:
{
if(is_user_connected(id))
open_upgrades_menu(id)
}
case 3:
{
new szData[999], len, szRankName[100], szFlags[100]
new iPlayers[MAX_PLAYERS], iNum, alt_id
get_players(iPlayers, iNum, "c")
new fsize = file_size(g_ShowAdminsFile, 1)
for(new null; null < 5; null++)
console_print(id, "")
client_cmd(id, "toggleconsole")
console_print(id, "[<----======= [Zombie Mod Staff] =======---->")
for(new line; line <= fsize - 1; line++)
{
read_file(g_ShowAdminsFile, line, szData, chx(szData), len)
parse(szData, szRankName, chx(szRankName), szFlags, chx(szFlags))
console_print(id, "[%d] %s", line + 1, szRankName)
for(new i; i < iNum; i++)
{
alt_id = iPlayers[i]
if(get_user_flags(alt_id) == read_flags(szFlags))
console_print(id, ">>> %s", g_name[alt_id])
}
}
console_print(id, "[<----======= [Zombie Mod Staff] =======---->")
for(new null; null < 1; null++)
console_print(id, "")
return 1
}
case 4: open_cosmetics_menu(id)
}
return 1
}
public upg_menu_handle(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return 1
}
switch(item)
{
case 0:
{
if(g_plUpgrades[id][NORECOIL] == 1)
{
client_print_color(id, print_team_default, "%s Ai deja ^4NoRecoil^1!", TAG)
return 1
}
if(g_plData[id][POINTS] - get_pcvar_num(cvar_norecoil_price) < 0)
{
client_print_color(id, print_team_default, "%s Nu ai suficiente puncte pentru a cumpara ^4NoRecoil^1! ", TAG)
return 1
}
g_plData[id][POINTS] -= get_pcvar_num(cvar_norecoil_price)
g_plUpgrades[id][NORECOIL] += 1
client_print_color(0, print_team_default, "%s ^3%n^1 si-a cumparat ^4NoRecoil^1!", TAG, id)
ManageData(id, Save)
}
case 1:
{
if(g_plUpgrades[id][JUMPS] == 1)
{
client_print_color(id, print_team_default, "%s Ai deja ^4Double Jump^1!", TAG)
return 1
}
if(g_plData[id][POINTS] - get_pcvar_num(cvar_jumps_price) < 0)
{
client_print_color(id, print_team_default, "%s Nu ai suficiente puncte pentru a cumpara ^4Double Jump^1! ", TAG)
return 1
}
g_plData[id][POINTS] -= get_pcvar_num(cvar_jumps_price)
g_plUpgrades[id][JUMPS] += 1
client_print_color(0, print_team_default, "%s ^3%n^1 si-a cumparat ^4Double Jump^1!", TAG, id)
ManageData(id, Save)
}
case 2:
{
if(g_plUpgrades[id][HP_AP] == get_pcvar_num(cvar_max_hpap))
{
client_print_color(id, print_team_default, "%s Ti-ai maxat deja ^4viata si armura^1!", TAG)
return 1
}
if(g_plData[id][POINTS] - get_pcvar_num(cvar_hpap_price) < 0)
{
client_print_color(id, print_team_default, "%s Nu ai suficiente puncte pentru a-ti upgrada ^4viata si armura^1! ", TAG)
return 1
}
g_plData[id][POINTS] -= get_pcvar_num(cvar_hpap_price)
g_plUpgrades[id][HP_AP] += 1
client_print_color(0, print_team_default, "%s ^3%n^1 si-a upgradat ^4viata si armura^1!", TAG, id)
ManageData(id, Save)
}
case 3:
{
if(g_plUpgrades[id][SPEED] == get_pcvar_num(cvar_max_speed))
{
client_print_color(id, print_team_default, "%s Ai maxat deja ^4Viteza^1!", TAG)
return 1
}
if(g_plData[id][POINTS] - get_pcvar_num(cvar_speed_price) < 0)
{
client_print_color(id, print_team_default, "%s Nu ai suficiente puncte pentru a cumpara ^4mai multa viteza^1! ", TAG)
return 1
}
g_plData[id][POINTS] -= get_pcvar_num(cvar_speed_price)
g_plUpgrades[id][SPEED] += 1
ev_curweapon(id)
client_print_color(0, print_team_default, "%s ^3%n^1 si-a upgradat ^4viteza^1!", TAG, id)
ManageData(id, Save)
}
case 4:
{
if(g_plUpgrades[id][GRAVITY] == get_pcvar_num(cvar_max_gravity))
{
client_print_color(id, print_team_default, "%s Ai maxat deja ^4Gravitatia^1!", TAG)
return 1
}
if(g_plData[id][POINTS] - get_pcvar_num(cvar_gravity_price) < 0)
{
client_print_color(id, print_team_default, "%s Nu ai suficiente puncte pentru a cumpara ^4mai putina gravitatie^1! ", TAG)
return 1
}
g_plData[id][POINTS] -= get_pcvar_num(cvar_gravity_price)
g_plUpgrades[id][GRAVITY] += 1
ev_curweapon(id)
client_print_color(0, print_team_default, "%s ^3%n^1 si-a scazut ^4gravitatia^1!", TAG, id)
ManageData(id, Save)
}
case 5:
{
if(g_plUpgrades[id][DAMAGE] == get_pcvar_num(cvar_max_damage))
{
client_print_color(id, print_team_default, "%s Ai maxat deja ^4Damage-ul^1!", TAG)
return 1
}
if(g_plData[id][POINTS] - get_pcvar_num(cvar_damage_price) < 0)
{
client_print_color(id, print_team_default, "%s Nu ai suficiente puncte pentru a-ti upgrada ^4damage-ul^1! ", TAG)
return 1
}
g_plData[id][POINTS] -= get_pcvar_num(cvar_damage_price)
g_plUpgrades[id][DAMAGE] += 1
client_print_color(0, print_team_default, "%s ^3%n^1 si-a upgradat ^4damage-ul^1!", TAG, id)
ManageData(id, Save)
}
}
return 1
}
public csm_menu_handle(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return 1
}
switch(item)
{
case 0:
{
if(g_plData[id][POINTS] - get_pcvar_num(cvar_chattag_price) < 0)
{
client_print_color(id, print_team_default, "%s Nu ai suficiente puncte pentru a cumpara ^4Chat Tag^1! ", TAG)
return 1
}
client_print_color(0, print_team_default, "%s ^3%n^1 si-a cumparat ^4Chat Tag^1!", TAG, id)
client_print_color(id, print_team_default, "%s Tasteaza tag-ul dorit in chat! Ai 15 secunde!", TAG)
g_bCanSetTagChat[id] = true
set_task(15.0, "set_tagchat", id + CHAT_TAG_TASKID)
}
case 1:
{
if(g_plCosmetics[id][GLOW] == 1)
{
open_glow_settings(id)
return 1
}
if(g_plData[id][POINTS] - get_pcvar_num(cvar_glow_price) < 0)
{
client_print_color(id, print_team_default, "%s Nu ai suficiente puncte pentru a cumpara ^4Player Glow^1! ", TAG)
return 1
}
g_plData[id][POINTS] -= get_pcvar_num(cvar_glow_price)
g_plCosmetics[id][GLOW] = 1
client_print_color(0, print_team_default, "%s ^3%n^1 si-a cumparat ^4Player Glow^1!", TAG, id)
ManageData(id, Save)
}
case 2:
{
if(g_plCosmetics[id][TRACERS] == 1)
{
open_wp_laser_settings(id)
return 1
}
if(g_plData[id][POINTS] - get_pcvar_num(cvar_wplaser_price) < 0)
{
client_print_color(id, print_team_default, "%s Nu ai suficiente puncte pentru a cumpara ^4Weapon Laser^1! ", TAG)
return 1
}
g_plData[id][POINTS] -= get_pcvar_num(cvar_wplaser_price)
g_plCosmetics[id][TRACERS] = 1
color[id][0] = 255
color[id][1] = 255
color[id][2] = 0
client_print_color(0, print_team_default, "%s ^3%n^1 si-a cumparat ^4Weapon Laser^1!", TAG, id)
ManageData(id, Save)
}
case 3:
{
if(g_plCosmetics[id][PET] == 1)
{
open_pet_settings(id)
return 1
}
if(g_plData[id][POINTS] - get_pcvar_num(cvar_pet_price) < 0)
{
client_print_color(id, print_team_default, "%s Nu ai suficiente puncte pentru a cumpara ^4Pet^1! ", TAG)
return 1
}
g_plData[id][POINTS] -= get_pcvar_num(cvar_pet_price)
g_plCosmetics[id][PET] = 1
client_print_color(0, print_team_default, "%s ^3%n^1 si-a cumparat ^4Pet^1!", TAG, id)
ManageData(id, Save)
}
case 4:
{
if(g_plCosmetics[id][KILL_EFFECTS] == 1)
{
open_kill_effects_settings(id)
return 1
}
if(g_plData[id][POINTS] - get_pcvar_num(cvar_killeffects_price) < 0)
{
client_print_color(id, print_team_default, "%s Nu ai suficiente puncte pentru a cumpara ^4Kill Effects^1! ", TAG)
return 1
}
g_plData[id][POINTS] -= get_pcvar_num(cvar_killeffects_price)
g_plCosmetics[id][KILL_EFFECTS] = 1
client_print_color(0, print_team_default, "%s ^3%n^1 si-a cumparat ^4Kill Effects^1!", TAG, id)
ManageData(id, Save)
}
}
return 1
}
public glow_menu_handle(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return 1
}
switch(item)
{
case 0:
{
g_bRandomGlowSet[id] = false
set_user_rendering(id)
open_glow_settings(id)
}
case 1:
{
g_bRandomGlowSet[id] = false
set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 5)
open_glow_settings(id)
}
case 2:
{
g_bRandomGlowSet[id] = false
set_user_rendering(id, kRenderFxGlowShell, 255, 255, 0, kRenderNormal, 5)
open_glow_settings(id)
}
case 3:
{
g_bRandomGlowSet[id] = false
set_user_rendering(id, kRenderFxGlowShell, 255, 255, 255, kRenderNormal, 5)
open_glow_settings(id)
}
case 4:
{
g_bRandomGlowSet[id] = false
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 5)
open_glow_settings(id)
}
case 5:
{
g_bRandomGlowSet[id] = false
set_user_rendering(id, kRenderFxGlowShell, 255, 0, 255, kRenderNormal, 5)
open_glow_settings(id)
}
case 6:
{
g_bRandomGlowSet[id] = false
set_user_rendering(id, kRenderFxGlowShell, 240, 128, 128, kRenderNormal, 5)
open_glow_settings(id)
}
case 7:
{
g_bRandomGlowSet[id] = true
set_task(0.1, "random_things", id + RANDOM_THINGS_TASKID, _, _, "b")
open_glow_settings(id)
}
}
return 1
}
public cam_menu_handle(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return 1
}
switch(item)
{
case 0: set_view(id, CAMERA_3RDPERSON)
case 1: set_view(id, CAMERA_NONE)
}
return 1
}
public wpn_menu_handle(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return 1
}
static a = 0
if(g_plData[id][LEVEL] < WeaponData[item][weapon_level])
{
if(a == 0)
{
a = 1
client_print_color(id, print_team_default, "%s Nu ai nivelul necesar pentru aceasta arma !", TAG)
GiveWeapons(id)
return 1
}
else
{
a = 0
return 1
}
}
strip_user_weapons(id)
give_item(id, "weapon_knife")
give_item(id, WeaponData[item][weapon_data])
cs_set_user_bpammo(id, get_weaponid(WeaponData[item][weapon_data]), WeaponData[item][weapon_bullets])
ev_curweapon(id)
return 1
}
public wp_laser_menu_handle(id, menu, item) // rosu galben alb random
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return 1
}
switch(item)
{
case 0:
{
g_bRandommenuSet[id] = false
color[id][0] = 255
color[id][1] = 0
color[id][2] = 0
}
case 1:
{
g_bRandommenuSet[id] = false
color[id][0] = 255
color[id][1] = 255
color[id][2] = 0
}
case 2:
{
g_bRandommenuSet[id] = false
color[id][0] = 255
color[id][1] = 255
color[id][2] = 255
}
case 3:
{
g_bRandommenuSet[id] = true
set_task(0.1, "random_things", id + RANDOM_THINGS_TASKID, _, _, "b")
}
}
return 1
}
public pet_menu_handle(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return 1
}
switch(item)
{
case 0:
{
if(!g_bHasPetSpawned[id])
{
client_print_color(id, print_team_default, "%s Nu ai niciun PET spawnat !", TAG)
return 1
}
KillPet(id)
arrayset(g_plPet[id], 0, sizeof(g_plPet))
client_print_color(id, print_team_default, "%s Ti-ai ascuns PET-ul !", TAG)
}
case 1:
{
copy(g_PlayerPetModel[id], chx(g_PlayerPetModel), PetModels[0])
KillPet(id)
CreatePet(id)
playsound(id, PetSounds[4])
arrayset(g_plPet[id], 0, sizeof(g_plPet))
g_plPet[id] = 1
ev_curweapon(id)
client_print_color(id, print_team_default, "%s L-ai spawnat pe ^3Rodrigo^1 !", TAG)
}
case 2:
{
copy(g_PlayerPetModel[id], chx(g_PlayerPetModel), PetModels[1])
KillPet(id)
CreatePet(id)
playsound(id, PetSounds[3])
arrayset(g_plPet[id], 0, sizeof(g_plPet))
g_plPet[id] = 2
ev_curweapon(id)
client_print_color(id, print_team_default, "%s L-ai spawnat pe ^3Floater^1 !", TAG)
}
case 3:
{
copy(g_PlayerPetModel[id], chx(g_PlayerPetModel), PetModels[2])
KillPet(id)
CreatePet(id)
playsound(id, PetSounds[2])
arrayset(g_plPet[id], 0, sizeof(g_plPet))
g_plPet[id] = 3
ev_curweapon(id)
client_print_color(id, print_team_default, "%s L-ai spawnat pe ^3Liliac^1 !", TAG)
}
case 4:
{
copy(g_PlayerPetModel[id], chx(g_PlayerPetModel), PetModels[3])
KillPet(id)
CreatePet(id)
playsound(id, PetSounds[1])
arrayset(g_plPet[id], 0, sizeof(g_plPet))
g_plPet[id] = 4
ev_curweapon(id)
client_print_color(id, print_team_default, "%s L-ai spawnat pe ^3Harambe^1 !", TAG)
}
case 5:
{
if(g_plData[id][EVOLUTION] < 1)
{
client_print_color(id, print_team_default, "%s Pentru a il spawna pe ^3Joker^1 ai nevoie de ^3Evolution Phase I ^1!", TAG)
return 1
}
copy(g_PlayerPetModel[id], chx(g_PlayerPetModel), PetModels[4])
KillPet(id)
CreatePet(id)
playsound(id, PetSounds[0])
arrayset(g_plPet[id], 0, sizeof(g_plPet))
g_plPet[id] = 5
ev_curweapon(id)
client_print_color(id, print_team_default, "%s L-ai spawnat pe ^3Joker^1 !", TAG)
}
}
return 1
}
public kill_effects_menu_handle(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return 1
}
switch(item)
{
case 0:
{
g_plKillEffect[id] = 0
client_print_color(id, print_team_default, "%s Ti-ai scos Kill Effect-ul !", TAG)
}
case 1:
{
g_plKillEffect[id] = 1
client_print_color(id, print_team_default, "%s Ti-ai setat Kill Effect-ul pe ^4Thunder^1 !", TAG)
}
case 2:
{
g_plKillEffect[id] = 2
client_print_color(id, print_team_default, "%s Ti-ai setat Kill Effect-ul pe ^4Explode^1 !", TAG)
}
case 3:
{
g_plKillEffect[id] = 3
client_print_color(id, print_team_default, "%s Ti-ai setat Kill Effect-ul pe ^4Implosion^1 !", TAG)
}
}
return 1
}
DisplayMenu(const menu, const id)
{
menu_setprop(menu, MPROP_NUMBER_COLOR, "\r")
menu_setprop(menu, MPROP_BACKNAME, "\rInapoi")
menu_setprop(menu, MPROP_NEXTNAME, "\rInainte")
menu_setprop(menu, MPROP_EXITNAME, "\rIesire")
menu_display(id, menu, 0)
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
public set_tagchat(id)
{
id -= CHAT_TAG_TASKID
g_bCanSetTagChat[id] = false
}
public random_things(id)
{
id -= RANDOM_THINGS_TASKID
if(g_bRandomGlowSet[id])
{
new rgb[3]
rgb[0] = random_num(50, 255)
rgb[1] = random_num(50, 255)
rgb[2] = random_num(50, 255)
set_user_rendering(id, kRenderFxGlowShell, rgb[0], rgb[1], rgb[2], kRenderNormal, 5)
}
if(g_bRandommenuSet[id] && (g_plCosmetics[id][TRACERS] == 1))
{
color[id][0] = random(254)
color[id][1] = random(254)
color[id][2] = random(254)
}
}
@goto_hamsupercede(ent, id)
{
if(is_user_alive(id) && !(get_pdata_cbase(ent, 39, 4) > 0))
return HAM_SUPERCEDE
return HAM_IGNORED
}
@goto_return_handled() return 1
///////////////////////////////////////////////////////////////////////////////////////////////////////
public hook_say(id)
{
new szArgs[192]
read_args(szArgs, chx(szArgs))
remove_quotes(szArgs)
if(!szArgs[0])
return 1
if(g_bCanSetTagChat[id] == true)
{
if(strlen(szArgs) > 10 || (contain(szArgs, " ") != -1) || !szArgs[0])
{
client_print_color(id, print_team_default, "%s Tag-ul poate avea maxim 10 caractere sau spatii libere !", TAG)
g_bCanSetTagChat[id] = false
return 1
}
else
{
new buff[15]
formatex(buff, chx(buff), "%s", szArgs)
client_print_color(id, print_team_default, "%s Tag-ul tau este ^x03%s ^x01!", TAG, szArgs)
g_plData[id][POINTS] -= get_pcvar_num(cvar_chattag_price)
g_bCanSetTagChat[id] = false
g_plCosmetics[id][CHAT_TAG] += 1
copy(g_PlayerTag[id], chx(g_PlayerTag), buff)
ManageData(id, Save)
return 1
}
}
new szMessage[192]
if(g_plCosmetics[id][CHAT_TAG] > 0)
formatex(szMessage, chx(szMessage), "^4[%s][LEVEL :: %d] ^3%s ^1: %s", g_PlayerTag[id], g_plData[id][LEVEL], g_name[id], szArgs)
else
formatex(szMessage, chx(szMessage), "^4[LEVEL :: %d] ^3%s ^1: %s", g_plData[id][LEVEL], g_name[id], szArgs)
new iPlayers[MAX_PLAYERS], iNum, idx
get_players(iPlayers, iNum)
for(new i; i < iNum; i++)
{
idx = iPlayers[i]
client_print_color(idx, print_team_default, szMessage)
}
return PLUGIN_HANDLED_MAIN
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
public fwd_weapon_primaryattack_pre(entity)
{
new id = pev(entity, pev_owner)
if(g_plUpgrades[id][NORECOIL] == 1)
{
pev(id, pev_punchangle, g_flPushAngle[id])
return HAM_IGNORED
}
return HAM_IGNORED
}
public fwd_weapon_primaryattack_post(entity)
{
new id = pev(entity, pev_owner)
if(g_plUpgrades[id][NORECOIL] == 1)
{
new Float: flPush[3]
pev(id, pev_punchangle, flPush)
xs_vec_sub(flPush, g_flPushAngle[id], flPush)
xs_vec_mul_scalar(flPush, 0.0, flPush)
xs_vec_add(flPush, g_flPushAngle[id], flPush)
set_pev(id, pev_punchangle, flPush)
return HAM_IGNORED
}
return HAM_IGNORED
}
public fwd_takedamage(iVictim, iInflictor, iAttacker, Float: flDamage)
{
if(1 <= iAttacker <= get_maxplayers() && g_plUpgrades[iAttacker][DAMAGE] != 0)
{
if(g_plPet[iAttacker] == 4)
SetHamParamFloat(4, flDamage * float(g_plUpgrades[iAttacker][DAMAGE]) * 3.5)
else if(g_plPet[iAttacker] == 5)
SetHamParamFloat(4, flDamage * float(g_plUpgrades[iAttacker][DAMAGE]) * 4.0)
else
SetHamParamFloat(4, flDamage * float(g_plUpgrades[iAttacker][DAMAGE]) * 2)
}
}
public client_PreThink(id)
{
if(!is_user_alive(id))
return 0
new new_button = get_user_button(id)
new old_button = get_user_oldbutton(id)
if((new_button & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(old_button & IN_JUMP))
{
new jumps = 0
if(g_plUpgrades[id][JUMPS] == 1 || g_plPet[id] == 5) jumps = 1
if(g_plUpgrades[id][JUMPS] == 1 && g_plPet[id] == 5) jumps = 2
if(iJumpNum[id] < jumps)
{
bDoJump[id] = true
iJumpNum[id]++
return 0
}
}
if((new_button & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
{
iJumpNum[id] = 0
return 0
}
if((new_button & IN_USE) && !(get_entity_flags(id) & FL_ONGROUND) && (g_plPet[id] == 2))
thrust_player(id)
return 0
}
public thrust_player(id)
{
new Float: flVel[3], Float: flAng[3], Float: fFwd[3], iVel[3]
entity_get_vector(id, EV_VEC_velocity, flVel)
entity_get_vector(id, EV_VEC_angles, flAng)
engfunc(EngFunc_MakeVectors, flAng)
get_global_vector(GL_v_forward, fFwd)
flVel[0] += fFwd[0] * 5
flVel[1] += fFwd[1] * 5
FVecIVec(flVel, iVel)
new a = iVel[0] * iVel[0]
new b = iVel[1] * iVel[1]
if(sqroot(a + b) < 800)
entity_set_vector(id, EV_VEC_velocity, flVel)
}
public client_PostThink(id)
{
if(!is_user_alive(id))
return 0
if(g_plUpgrades[id][JUMPS] == 1 || g_plPet[id] == 5)
{
if(bDoJump[id] == true)
{
new Float: flVel[3]
entity_get_vector(id, EV_VEC_velocity, flVel)
flVel[2] = random_float(265.0, 285.0)
entity_set_vector(id, EV_VEC_velocity, flVel)
bDoJump[id] = false
return 0
}
}
return 0
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
public message_show_menu(msgid, dest, id)
{
if(!should_autojoin(id))
return PLUGIN_CONTINUE
static team_select[] = "#Team_Select"
static menu_text_code[sizeof team_select]
get_msg_arg_string(4, menu_text_code, chx(menu_text_code))
if(!equal(menu_text_code, team_select))
return PLUGIN_CONTINUE
set_force_team_join_task(id, msgid)
return 1
}
public message_vgui_menu(msgid, dest, id)
{
if(get_msg_arg_int(1) != 2 || !should_autojoin(id))
return 0
set_force_team_join_task(id, msgid)
return 1
}
bool:should_autojoin(id) return (!cs_get_user_team(id) && !task_exists(id) && !is_user_bot(id))
set_force_team_join_task(id, menu_msgid)
{
static param_menu_msgid[2]
param_menu_msgid[0] = menu_msgid
set_task(0.1, "task_force_team_join", id, param_menu_msgid, sizeof param_menu_msgid)
}
public task_force_team_join(menu_msgid[], id)
{
if(get_user_team(id))
return
force_team_join(id, menu_msgid[0], "2", "5")
}
stock force_team_join(id, menu_msgid, /* const */ team[] = "5", /* const */ class[] = "0")
{
static jointeam[] = "jointeam"
if(class[0] == '0')
{
engclient_cmd(id, jointeam, team)
return
}
static msg_block, joinclass[] = "joinclass"
msg_block = get_msg_block(menu_msgid)
set_msg_block(menu_msgid, BLOCK_SET)
engclient_cmd(id, jointeam, team)
engclient_cmd(id, joinclass, class)
set_msg_block(menu_msgid, msg_block)
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
thunder(vec1[3], vec2[3])
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(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(g_msgLightning)
write_byte(1)
write_byte(5)
write_byte(2)
write_byte(20)
write_byte(30)
write_byte(200)
write_byte(200)
write_byte(200)
write_byte(200)
write_byte(200)
message_end()
message_begin(MSG_PVS, SVC_TEMPENTITY, vec2)
write_byte(TE_SPARKS)
write_coord(vec2[0])
write_coord(vec2[1])
write_coord(vec2[2])
message_end()
}
create_explode(vec1[3])
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, vec1)
write_byte(TE_BEAMCYLINDER)
write_coord(vec1[0])
write_coord(vec1[1])
write_coord(vec1[2] + 16)
write_coord(vec1[0])
write_coord(vec1[1])
write_coord(vec1[2] + 1936)
write_short(g_msgExplode)
write_byte(0)
write_byte(0)
write_byte(2)
write_byte(16)
write_byte(0)
write_byte(188)
write_byte(220)
write_byte(255)
write_byte(255)
write_byte(0)
message_end()
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION2)
write_coord(vec1[0])
write_coord(vec1[1])
write_coord(vec1[2])
write_byte(185)
write_byte(10)
message_end()
}
create_implosion(vec[3])
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_IMPLOSION)
write_coord(vec[0])
write_coord(vec[1])
write_coord(vec[2])
write_byte(100)
write_byte(50)
write_byte(10)
message_end()
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_TELEPORT)
write_coord(vec[0])
write_coord(vec[1])
write_coord(vec[2])
message_end()
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DLIGHT)
write_coord(vec[0])
write_coord(vec[1])
write_coord(vec[2])
write_byte(10)
write_byte(265)
write_byte(165)
write_byte(0)
write_byte(10)
write_byte(10)
message_end()
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
stock get_offset_origin_body(ent, const Float:offset[3], Float:origin[3])
{
if(!pev_valid(ent))
return 0
new Float:angle[3]
pev(ent, pev_angles, angle)
pev(ent, pev_origin, origin)
origin[0] += floatcos(angle[1], degrees) * offset[0]
origin[1] += floatsin(angle[1], degrees) * offset[0]
origin[1] += floatcos(angle[1], degrees) * offset[1]
origin[0] += floatsin(angle[1], degrees) * offset[1]
return 1;
}
stock get_speed_vector(const Float:origin1[3], const Float:origin2[3], Float:speed, Float:new_velocity[3])
{
new_velocity[0] = origin2[0] - origin1[0]
new_velocity[1] = origin2[1] - origin1[1]
new_velocity[2] = origin2[2] - origin1[2]
new Float:num = floatsqroot(speed * speed / (new_velocity[0] * new_velocity[0] + new_velocity[1] * new_velocity[1] + new_velocity[2] * new_velocity[2]))
new_velocity[0] *= num
new_velocity[1] *= num
new_velocity[2] *= num
return 1
}
stock entity_set_aim(ent, const Float:origin2[3], bone=0)
{
if(!pev_valid(ent))
return 0
static Float:origin[3]
origin[0] = origin2[0]
origin[1] = origin2[1]
origin[2] = origin2[2]
static Float:ent_origin[3], Float:angles[3]
if(bone)
engfunc(EngFunc_GetBonePosition, ent, bone, ent_origin, angles)
else
pev(ent, pev_origin, ent_origin)
origin[0] -= ent_origin[0]
origin[1] -= ent_origin[1]
origin[2] -= ent_origin[2]
static Float:v_length
v_length = vector_length(origin)
static Float:aim_vector[3]
aim_vector[0] = origin[0] / v_length
aim_vector[1] = origin[1] / v_length
aim_vector[2] = origin[2] / v_length
static Float:new_angles[3]
vector_to_angle(aim_vector, new_angles)
new_angles[0] *= -1
if(new_angles[1] > 180.0) new_angles[1] -= 360
if(new_angles[1] <- 180.0) new_angles[1] += 360
if(new_angles[1] == 180.0 || new_angles[1] == -180.0) new_angles[1] =- 179.999999
set_pev(ent, pev_angles, new_angles)
set_pev(ent, pev_fixangle, 1)
return 1
}
stock emitsound(id, channel, const sound[]) emit_sound(id, channel, sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
stock playsound(id, const sound[])
{
if(equal(sound[strlen(sound) -4 ], ".mp3")) client_cmd(id, "mp3 play ^"sound/%s^"", sound)
else client_cmd(id, "spk ^"%s^"", sound)
}
stock stopsound(id) client_cmd(id, "mp3 stop; stopsound")