- | Afiseaza codul
1.Heavy Zombie include <amxmodx> #include <engine> #include <fakemeta> #include <fun> #include <xs> #include <hamsandwich> #include <zombieplague> #include <dhudmessage> #define PLUGIN_NAME "[CSO:Heavy Zombie]" #define PLUGIN_VERSION "1.1" #define PLUGIN_AUTHOR "UnKnow" #define SUPPORT_BOT_TO_USE #define TASK_SET_TRAP 1234 #define TASK_REMOVE_TRAP 4321 // Zombie Attributes new const zclass_name[] = { "Big Zombie" } new const zclass_info[] = { "\y[ Traps [\rR\y] ]" } new const zclass_model[] = { "nrs_torso" } new const zclass_clawmodel[] = { "v_cso_tank2.mdl" } new KNOCKBOMB_HEAVY[] = "models/tx/bombjump/bomb_heavycso.mdl" const zclass_health = 8000 const zclass_speed = 240 const Float:zclass_gravity = 0.8 const Float:zclass_knockback = 0.8 new g_chance[33] new g_msgScreenFade const FFADE_IN = 0x0000 const FFADE_STAYOUT = 0x0004 const UNIT_SECOND = (1<<12) new is_cooldown_time[33] = 0 new is_cooldown[33] = 0 // Models new const Trap_Model[] = { "models/tx/zombie_trap.mdl" } // Sounds new const TrapTrigger_Sound[] = { "common/bodysplat.wav" } new const PlayerCatched_Sound[] = { "tox_cso/zombi_trapped.wav" } new const CantPlantTrap_Sound[] = { "common/wpn_denyselect.wav" } new const g_infect_sound[] = "zombie_plague/big/infect_021.wav" new const pain_heavy_sound[] = "zombie_plague/big/pain_011.wav" new const pain_heavy_sound2[] = "zombie_plague/big/pain_021.wav" new const death_heavy_sound[] = "zombie_plague/big/die_021.wav" // Settings const Max_Traps = 7 // Weapons Offsets (win32) const OFFSET_flNextPrimaryAttack = 46 const OFFSET_flNextSecondaryAttack = 47 const OFFSET_flTimeWeaponIdle = 48 // Linux diff's const OFFSET_LINUX_WEAPONS = 4 // Zombie id new g_zclass_heavy new Float:g_revenge_cooldown = 25.0 new g_chance_to_cast = 20 new const sound_sleep[] = "tox_cso/zm_skills/sleepinpact.wav" //cast sound // Vars new cvar_TrapSetTime, cvar_TrapAffectTime new g_TrapPromptSpr, g_PlayerCatchedSpr new g_msgScreenShake, g_msgBarTime new g_maxplayers new user_has_traps[33] new user_traps_ent[33][Max_Traps] new bool:user_set_trap[33], set_trap_ent[33], Float:set_trap_origin[33][3] new bool:user_be_catched[33], catched_trap_ent[33] #if defined SUPPORT_BOT_TO_USE new Float:bot_next_check_time[33] #endif public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR) cvar_TrapSetTime = register_cvar("zp_heavy_trap_settime", "3.0") cvar_TrapAffectTime = register_cvar("zp_heavy_trap_affecttime", "6.0") g_msgScreenFade = get_user_msgid("ScreenFade") g_maxplayers = get_maxplayers() register_logevent("roundStart", 2, "1=Round_Start") register_forward(FM_CmdStart, "fw_CmdStart") register_forward(FM_StartFrame, "fw_StartFrame") register_forward(FM_PlayerPreThink, "fw_PlayerPreThink") register_forward(FM_Touch, "fw_Touch") register_forward(FM_Think, "fw_Think") register_event("ResetHUD", "event_NewSpawn", "be") register_forward(FM_EmitSound, "fw_EmitSound") RegisterHam(Ham_TakeDamage, "player", "CPlayer__TakeDamage") register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0") #if defined SUPPORT_BOT_TO_USE register_event("Damage", "event_Damage", "be", "2>0") #endif g_msgScreenShake = get_user_msgid("ScreenShake") g_msgBarTime = get_user_msgid("BarTime") g_maxplayers = get_maxplayers() register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1") } public plugin_precache() { precache_model(KNOCKBOMB_HEAVY) precache_sound(sound_sleep) precache_model(Trap_Model) precache_sound(TrapTrigger_Sound) precache_sound(PlayerCatched_Sound) precache_sound(CantPlantTrap_Sound) precache_sound(g_infect_sound[0]) precache_sound(pain_heavy_sound[0]) precache_sound(pain_heavy_sound2[0]) precache_sound(death_heavy_sound[0]) g_TrapPromptSpr = precache_model("sprites/tx/trap.spr") g_PlayerCatchedSpr = precache_model("sprites/tx/trap_prompt.spr") g_zclass_heavy = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback) } public client_damage(attacker,victim) { if ((zp_get_user_zombie_class(victim) == g_zclass_heavy) && zp_get_user_zombie(victim) && !zp_get_user_nemesis(victim) && (is_cooldown[victim] == 0)) { g_chance[victim] = random_num(0,999) if (g_chance[victim] < g_chance_to_cast) { message_begin(MSG_ONE, g_msgScreenFade, _, attacker) write_short(4) // duration write_short(4) // hold time write_short(FFADE_STAYOUT) // fade type write_byte(0) // red write_byte(0) // green write_byte(0) // blue write_byte(255) // alpha message_end() set_user_health(victim, get_user_health(victim) + ( get_user_health(victim) / 10 ) ) set_task(4.0,"wake_up",attacker) set_task(1.0, "ShowHUD", victim, _, _, "a",is_cooldown_time[victim]) set_task(g_revenge_cooldown,"reset_cooldown",victim) emit_sound(attacker, CHAN_STREAM, sound_sleep, 1.0, ATTN_NORM, 0, PITCH_NORM) is_cooldown[victim] = 1 } } } public reset_cooldown(id) { if ((zp_get_user_zombie_class(id) == g_zclass_heavy) && zp_get_user_zombie(id) && !zp_get_user_nemesis(id)) { is_cooldown[id] = 0 is_cooldown_time[id] = floatround(g_revenge_cooldown) new text[100] format(text, 99, "^x04[Heavy] ^x01<<Ability>> ^x04[Make traps]^x01 Ready.") message_begin(MSG_ONE,get_user_msgid("SayText"),{0,0,0},id) write_byte(id) write_string(text) message_end() } } public ShowHUD(id) { if(is_user_alive(id)) { is_cooldown_time[id] = is_cooldown_time[id] - 1 set_dhudmessage(200, 100, 0, 0.80, 0.87, 0, 1.0, 1.1, 0.0, 0.0, -1) show_dhudmessage(id, "[Next Ability: %d sec.]",is_cooldown_time[id]) } else { remove_task(id) } } public wake_up(id) { message_begin(MSG_ONE, g_msgScreenFade, _, id) write_short(UNIT_SECOND) // duration write_short(0) // hold time write_short(FFADE_IN) // fade type write_byte(0) // red write_byte(0) // green write_byte(0) // blue write_byte(255) // alpha message_end() } public zp_user_infected_post(id, infector, player) { if (user_be_catched[id]) { clear_user_sprite(id) set_pev(id, pev_flags, (pev(id, pev_flags) & ~FL_FROZEN)) } reset_vars(id) if (zp_get_user_zombie_class(id) == g_zclass_heavy && !zp_get_user_nemesis(id)) { new text[100] is_cooldown[id] = 0 is_cooldown_time[id] = floatround(g_revenge_cooldown) emit_sound(id, CHAN_WEAPON, g_infect_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW) new note_cooldown = floatround(g_revenge_cooldown) format(text, 99, "^x04[Heavy] Traps ^x04[Press R]^x01. :^x04 10 Traps." ,note_cooldown) message_begin(MSG_ONE,get_user_msgid("SayText"),{0,0,0},id) write_byte(id) write_string(text) message_end() user_has_traps[id] = Max_Traps format(text, 99, "^x04[Heavy] Traps ^x04[Apasa R]" , Max_Traps) } remove_task(id) is_cooldown[id] = 0 } public fw_CmdStart(id, uc_handle, seed) { if (!is_user_alive(id)) return FMRES_IGNORED if (!zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_heavy || zp_get_user_nemesis(id)) return FMRES_IGNORED #if defined SUPPORT_BOT_TO_USE if (is_user_bot(id)) { bot_use_traps(id) return FMRES_IGNORED } #endif static button, oldbutton button = get_uc(uc_handle, UC_Buttons) oldbutton = pev(id, pev_oldbuttons) if (!user_set_trap[id]) { if ((button & IN_RELOAD) && !(oldbutton & IN_RELOAD)) { do_set_trap(id) } } else { static user_flags, Float:user_origin[3], Float:fdistance user_flags = pev(id, pev_flags) pev(id, pev_origin, user_origin) user_origin[2] -= (user_flags & FL_DUCKING) ? 18.0 : 36.0 fdistance = get_distance_f(user_origin, set_trap_origin[id]) if (!(button & IN_RELOAD) || fdistance > 18.0) { stop_set_trap(id) } } return FMRES_HANDLED } public fw_StartFrame() { static Float:time, Float:next_check_time, id, i, classname[32], Float:origin1[3], Float:origin2[3] time = get_gametime() if (time >= next_check_time) { for (id = 1; id <= g_maxplayers; id++) { if (!is_user_connected(id) || !is_user_alive(id)) continue if (!zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_heavy || zp_get_user_nemesis(id)) continue for (i = 0; i < Max_Traps; i++) { if (user_traps_ent[id] <= 0) continue if (!pev_valid(user_traps_ent[id])) { user_traps_ent[id] = 0 continue } pev(user_traps_ent[id], pev_classname, classname, charsmax(classname)) if (!equal(classname, "ZOMBIE_TRAP_ENT")) { user_traps_ent[id] = 0 continue } if (pev(user_traps_ent[id], pev_iuser3) == 1) continue pev(user_traps_ent[id], pev_origin, origin1) xs_vec_copy(origin1, origin2) origin2[2] += 30.0 if (fm_is_point_visible(id, origin1, 1) || fm_is_point_visible(id, origin2, 1)) { origin1[2] += 30.0 create_user_sprite(id, origin1, g_TrapPromptSpr, 7) } } } next_check_time = time + 0.1 } return FMRES_IGNORED } public fw_PlayerPreThink(id) { if (!is_user_alive(id)) return FMRES_IGNORED if (zp_get_user_zombie(id)) { if (zp_get_user_zombie_class(id) != g_zclass_heavy || zp_get_user_nemesis(id)) return FMRES_IGNORED if (user_set_trap[id]) { freeze_user_attack(id) } } else { if (user_be_catched[id] && pev_valid(catched_trap_ent[id])) { static classname[32] pev(catched_trap_ent[id], pev_classname, classname, charsmax(classname)) if (!equal(classname, "ZOMBIE_TRAP_ENT")) return FMRES_IGNORED set_pev(id, pev_velocity, Float:{ 0.0, 0.0, -200.0 }) set_pev(id, pev_maxspeed, 1.0) static Float:user_origin[3], Float:ent_origin[3], Float:temp_origin[3] pev(id, pev_origin, user_origin) pev(catched_trap_ent[id], pev_origin, ent_origin) xs_vec_copy(ent_origin, temp_origin) temp_origin[2] += 18.0 if (get_distance_f(user_origin, temp_origin) > 18.0) { temp_origin[2] += ((pev(id, pev_flags) & FL_DUCKING) ? 0.0 : 18.0) set_pev(id, pev_origin, temp_origin) } } } return FMRES_IGNORED } public fw_Touch(pentru, ptd) { if (!pev_valid(pentru) || !pev_valid(ptd)) return FMRES_IGNORED static classname[32] pev(pentru, pev_classname, classname, charsmax(classname)) if (!equal(classname, "ZOMBIE_TRAP_ENT")) return FMRES_IGNORED if (!(1 <= ptd <= g_maxplayers) || !is_user_alive(ptd) || zp_get_user_zombie(ptd)) return FMRES_IGNORED if (pev(pentru, pev_iuser2) == 0) return FMRES_IGNORED if (pev(pentru, pev_iuser3) == 0 && !user_be_catched[ptd]) { PlaySound(ptd, TrapTrigger_Sound) engfunc(EngFunc_EmitSound, ptd, CHAN_VOICE, PlayerCatched_Sound, 1.0, ATTN_NORM, 0, PITCH_NORM) user_screen_shake(ptd, 4, 2, 5) show_user_sprite(ptd, g_PlayerCatchedSpr) static Float:origin[3] pev(pentru, pev_origin, origin) origin[2] += ((pev(ptd, pev_flags) & FL_DUCKING) ? 18.0 : 36.0) set_pev(ptd, pev_origin, origin) set_pev(ptd, pev_velocity, Float:{ 0.0, 0.0, 0.0 }) client_print(ptd, print_center, "You are captive!") set_pev(pentru, pev_iuser3, 1) set_pev(pentru, pev_iuser4, ptd) user_be_catched[ptd] = true catched_trap_ent[ptd] = pentru fm_set_rendering(pentru, kRenderFxNone, 0,0,0, kRenderNormal, 255) set_pev(pentru, pev_nextthink, get_gametime() + 0.05) static owner owner = pev(pentru, pev_iuser1) if (1 <= owner <= g_maxplayers) client_print(owner, print_center, "Someone fell into the trap!") static Float:trap_affect_time trap_affect_time = get_pcvar_float(cvar_TrapAffectTime) if (trap_affect_time > 0.0) { static args[1] args[0] = pentru set_task(trap_affect_time, "remove_trap", TASK_REMOVE_TRAP, args, 1) } } return FMRES_IGNORED } public fw_Think(ent) { if (pev_valid(ent)) { static classname[32] pev(ent, pev_classname, classname, charsmax(classname)) if (equal(classname, "ZOMBIE_TRAP_ENT")) { if (pev(ent, pev_sequence) != 1) { set_pev(ent, pev_sequence, 1) set_pev(ent, pev_frame, 0.0) } else { if (pev(ent, pev_frame) > 241.0) set_pev(ent, pev_frame, 20.0) else set_pev(ent, pev_frame, pev(ent, pev_frame) + 1.0) } static catched_player catched_player = pev(ent, pev_iuser4) if (!user_be_catched[catched_player] || catched_trap_ent[catched_player] != ent) { engfunc(EngFunc_RemoveEntity, ent) return FMRES_IGNORED } set_pev(ent, pev_nextthink, get_gametime() + 0.05) } } return FMRES_IGNORED } freeze_user_attack(id) { new weapon, weapon_name[32], weapon_ent weapon = get_user_weapon(id) get_weaponname(weapon, weapon_name, charsmax(weapon_name)) weapon_ent = fm_find_ent_by_owner(-1, weapon_name, id) if (get_weapon_next_pri_attack(weapon_ent) <= 0.1) set_weapon_next_pri_attack(weapon_ent, 0.5) if (get_weapon_next_sec_attack(weapon_ent) <= 0.1) set_weapon_next_sec_attack(weapon_ent, 0.5) if (weapon == CSW_XM1014 || weapon == CSW_M3) { if (get_weapon_idle_time(weapon_ent) <= 0.1) set_weapon_idle_time(weapon_ent, 0.5) } } do_set_trap(id) { if (!user_set_trap[id]) { if (set_a_trap(id, set_trap_ent[id], set_trap_origin[id]) == 1) { user_set_trap[id] = true new Float:velocity[3] pev(id, pev_velocity, velocity) velocity[0] = velocity[1] = 0.0 set_pev(id, pev_velocity, velocity) new Float:set_trap_time, task_time set_trap_time = get_pcvar_float(cvar_TrapSetTime) task_time = floatround(set_trap_time, floatround_floor) + (floatfract(set_trap_time) >= 0.5 ? 1 : 0) set_task(set_trap_time, "trap_complete", (id + TASK_SET_TRAP)) show_user_taskbar(id, task_time) client_print(id, print_center, "The trap is activated...") return 1 } } return 0 } stop_set_trap(id) { if (user_set_trap[id]) { client_print(id, print_center, "") if (pev_valid(set_trap_ent[id])) engfunc(EngFunc_RemoveEntity, set_trap_ent[id]) user_set_trap[id] = false set_trap_ent[id] = 0 remove_task(id + TASK_SET_TRAP) show_user_taskbar(id, 0) } } set_a_trap(id, &trap_entity, Float:trap_origin[3]) { if (user_has_traps[id] <= 0) { engfunc(EngFunc_EmitSound, id, CHAN_ITEM, CantPlantTrap_Sound, 1.0, ATTN_NORM, 0, PITCH_NORM) client_print(id, print_center, "You have reached the maximum limit of traps") return 0 } new user_flags = pev(id, pev_flags) if (!(user_flags & FL_ONGROUND)) { engfunc(EngFunc_EmitSound, id, CHAN_ITEM, CantPlantTrap_Sound, 1.0, ATTN_NORM, 0, PITCH_NORM) client_print(id, print_center, "Can not set a trap") return 0 } new Float:origin[3] pev(id, pev_origin, origin) origin[2] -= (user_flags & FL_DUCKING) ? 18.0 : 36.0 if (get_too_close_traps(origin)) { engfunc(EngFunc_EmitSound, id, CHAN_ITEM, CantPlantTrap_Sound, 1.0, ATTN_NORM, 0, PITCH_NORM) client_print(id, print_center, "Traps are close") return 0 } client_print(id, print_center, "") new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")) if (!ent) return -1 // Set trap data set_pev(ent, pev_classname, "ZOMBIE_TRAP_ENT") set_pev(ent, pev_solid, SOLID_TRIGGER) set_pev(ent, pev_movetype, MOVETYPE_FLY) set_pev(ent, pev_sequence, 0) set_pev(ent, pev_frame, 0.0) set_pev(ent, pev_iuser1, id) set_pev(ent, pev_iuser2, 0) set_pev(ent, pev_iuser3, 0) set_pev(ent, pev_iuser4, 0) // Set trap size new Float:mins[3] = { -20.0, -20.0, 0.0 } new Float:maxs[3] = { 20.0, 20.0, 30.0 } engfunc(EngFunc_SetSize, ent, mins, maxs) // Set trap model engfunc(EngFunc_SetModel, ent, Trap_Model) // Make trap invisible fm_set_rendering(ent, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0) // Set trap position set_pev(ent, pev_origin, origin) // Return trap entity id trap_entity = ent // Return trap position xs_vec_copy(origin, trap_origin) return 1 } public trap_complete(taskid) { new id = taskid - TASK_SET_TRAP show_user_taskbar(id, 0) if (pev_valid(set_trap_ent[id])) { set_pev(set_trap_ent[id], pev_iuser2, 1) user_has_traps[id]-- set_user_traps_data(id, set_trap_ent[id]) client_print(id, print_center, "The trap is set!") } #if defined SUPPORT_BOT_TO_USE if (is_user_bot(id)) { set_pev(id, pev_flags, (pev(id, pev_flags) & ~FL_FROZEN)) bot_next_check_time[id] = get_gametime() + 10.0 } #endif user_set_trap[id] = false set_trap_ent[id] = 0 } public remove_trap(args[1]) { new ent = args[0] if (pev_valid(ent)) { new classname[32] pev(ent, pev_classname, classname, charsmax(classname)) if (!equal(classname, "ZOMBIE_TRAP_ENT")) return new catched_player = pev(ent, pev_iuser4) if (user_be_catched[catched_player] && catched_trap_ent[catched_player] == ent) { clear_user_sprite(catched_player) set_pev(catched_player, pev_flags, (pev(catched_player, pev_flags) & ~FL_FROZEN)) user_be_catched[catched_player] = false catched_trap_ent[catched_player] = 0 } engfunc(EngFunc_RemoveEntity, ent) } } public zp_user_humanized_post(id) { if (user_set_trap[id]) { stop_set_trap(id) #if defined SUPPORT_BOT_TO_USE if (pev(id, pev_flags) & FL_FROZEN) set_pev(id, pev_flags, (pev(id, pev_flags) & ~FL_FROZEN)) #endif } reset_traps_owner(id) reset_vars(id) } public client_connect(id) { reset_vars(id) } public client_disconnect(id) { if (user_set_trap[id]) { stop_set_trap(id) #if defined SUPPORT_BOT_TO_USE if (pev(id, pev_flags) & FL_FROZEN) set_pev(id, pev_flags, (pev(id, pev_flags) & ~FL_FROZEN)) #endif } if (user_be_catched[id]) { clear_user_sprite(id) set_pev(id, pev_flags, (pev(id, pev_flags) & ~FL_FROZEN)) } reset_vars(id) } public event_NewSpawn(id) { if (user_set_trap[id]) { stop_set_trap(id) #if defined SUPPORT_BOT_TO_USE if (pev(id, pev_flags) & FL_FROZEN) set_pev(id, pev_flags, (pev(id, pev_flags) & ~FL_FROZEN)) #endif } if (user_be_catched[id]) { clear_user_sprite(id) set_pev(id, pev_flags, (pev(id, pev_flags) & ~FL_FROZEN)) } reset_vars(id) } public event_Death() { new id = read_data(2) if (!(1 <= id <= g_maxplayers)) return if (user_set_trap[id]) { stop_set_trap(id) #if defined SUPPORT_BOT_TO_USE if (pev(id, pev_flags) & FL_FROZEN) set_pev(id, pev_flags, (pev(id, pev_flags) & ~FL_FROZEN)) #endif } if (user_be_catched[id]) { clear_user_sprite(id) set_pev(id, pev_flags, (pev(id, pev_flags) & ~FL_FROZEN)) } reset_traps_owner(id) reset_vars(id) } public event_RoundStart() { remove_task(TASK_REMOVE_TRAP) remove_all_traps() } get_too_close_traps(const Float:origin[3]) { new bool:find, ent, Float:ent_origin[3] find = false ent = -1 while ((ent = fm_find_ent_by_class(ent, "ZOMBIE_TRAP_ENT"))) { if (pev(ent, pev_iuser2) == 1) { pev(ent, pev_origin, ent_origin) if (get_distance_f(origin, ent_origin) <= 50.0) find = true } } if (!find) return 0 return 1 } set_user_traps_data(id, trap_ent) { new bool:find = false for (new i = 0; i < Max_Traps; i++) { if (user_traps_ent[id] == 0) { user_traps_ent[id] = trap_ent find = true break } } if (!find) return 0 return 1 } reset_traps_owner(id) { new classname[32], owner for (new i = 0; i < Max_Traps; i++) { if (user_traps_ent[id] > 0 && pev_valid(user_traps_ent[id][i])) { pev(user_traps_ent[id][i], pev_classname, classname, charsmax(classname)) owner = pev(user_traps_ent[id][i], pev_iuser1) if (equal(classname, "ZOMBIE_TRAP_ENT") && owner == id) set_pev(user_traps_ent[id][i], pev_iuser1, 0) } } } remove_all_traps() { new ent = -1 while ((ent = fm_find_ent_by_class(ent, "ZOMBIE_TRAP_ENT"))) { engfunc(EngFunc_RemoveEntity, ent) } } reset_vars(id) { user_has_traps[id] = 0 user_set_trap[id] = false set_trap_ent[id] = 0 user_be_catched[id] = false catched_trap_ent[id] = 0 for (new i = 0; i < Max_Traps; i++) user_traps_ent[id][i] = 0 } stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16) { new Float:RenderColor[3] RenderColor[0] = float(r) RenderColor[1] = float(g) RenderColor[2] = float(b) set_pev(entity, pev_renderfx, fx) set_pev(entity, pev_rendercolor, RenderColor) set_pev(entity, pev_rendermode, render) set_pev(entity, pev_renderamt, float(amount)) return 1 } stock fm_find_ent_by_class(index, const classname[]) { return engfunc(EngFunc_FindEntityByString, index, "classname", classname) } 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 user_screen_shake(id, amplitude = 4, duration = 2, frequency = 10) { message_begin(MSG_ONE_UNRELIABLE, g_msgScreenShake, _, id) write_short((1<<12)*amplitude) write_short((1<<12)*duration) write_short((1<<12)*frequency) message_end() } stock show_user_taskbar(id, time) { message_begin(MSG_ONE_UNRELIABLE, g_msgBarTime, _, id) write_short(time) // time (second) [0=clear] message_end() } stock show_user_sprite(id, const sprite_index) { message_begin(MSG_ALL, SVC_TEMPENTITY) write_byte(TE_PLAYERATTACHMENT) // TE_PLAYERATTACHMENT (124) write_byte(id) // player id write_coord(45) // vertical offset (attachment origin.z = player origin.z + vertical offset) write_short(sprite_index) // sprite entity index write_short(32767) // life (scale in 0.1's) message_end() } stock clear_user_sprite(id) { message_begin(MSG_ALL, SVC_TEMPENTITY) write_byte(TE_KILLPLAYERATTACHMENTS) // TE_KILLPLAYERATTACHMENTS (125) write_byte(id) // player id message_end() } stock bool:fm_is_point_visible(index, const Float:point[3], ignoremonsters = 1) { new Float:start[3], Float:dest[3] pev(index, pev_origin, start) pev(index, pev_view_ofs, dest) xs_vec_add(start, dest, start) engfunc(EngFunc_TraceLine, start, point, ignoremonsters, index, 0) new Float:fraction get_tr2(0, TR_flFraction, fraction) if (fraction == 1.0) return true get_tr2(0, TR_vecEndPos, dest) if ((dest[0] == point[0]) && (dest[1] == point[1]) && (dest[2] == point[2])) return true return false } stock create_user_sprite(id, const Float:originF[3], sprite_index, scale) { message_begin(MSG_ONE, SVC_TEMPENTITY, _, id) write_byte(TE_SPRITE) // TE id (Additive sprite, plays 1 cycle) engfunc(EngFunc_WriteCoord, originF[0]) // x engfunc(EngFunc_WriteCoord, originF[1]) // y engfunc(EngFunc_WriteCoord, originF[2]) // z write_short(sprite_index) // sprite index write_byte(scale) // scale in 0.1's write_byte(200) // brightness message_end() } stock fm_find_ent_by_owner(entity, const classname[], owner) { while ((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", classname)) && (pev(entity, pev_owner) != owner)) {} return entity } stock Float:get_weapon_next_pri_attack(entity) { return get_pdata_float(entity, OFFSET_flNextPrimaryAttack, OFFSET_LINUX_WEAPONS) } stock set_weapon_next_pri_attack(entity, Float:time) { set_pdata_float(entity, OFFSET_flNextPrimaryAttack, time, OFFSET_LINUX_WEAPONS) } stock Float:get_weapon_next_sec_attack(entity) { return get_pdata_float(entity, OFFSET_flNextSecondaryAttack, OFFSET_LINUX_WEAPONS) } stock set_weapon_next_sec_attack(entity, Float:time) { set_pdata_float(entity, OFFSET_flNextSecondaryAttack, time, OFFSET_LINUX_WEAPONS) } stock Float:get_weapon_idle_time(entity) { return get_pdata_float(entity, OFFSET_flTimeWeaponIdle, OFFSET_LINUX_WEAPONS) } stock set_weapon_idle_time(entity, Float:time) { set_pdata_float(entity, OFFSET_flTimeWeaponIdle, time, OFFSET_LINUX_WEAPONS) } #if defined SUPPORT_BOT_TO_USE public bot_use_traps(id) { //if (!is_user_alive(id)) // return //if (!zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_Brutalheavy || zp_get_user_nemesis(id)) // return static target, hitzone, distance target = get_valid_aim_target(id, hitzone, distance) if (!user_set_trap[id]) { static Float:time time = get_gametime() if (target > 0 && (500 <= distance <= 1000) && time >= bot_next_check_time[id]) { if (random_num(1, 100) > 85) { if (do_set_trap(id)) set_pev(id, pev_flags, (pev(id, pev_flags) | FL_FROZEN)) } bot_next_check_time[id] = time + 1.0 } } else { static Float:user_origin[3], Float:fdistance pev(id, pev_origin, user_origin) user_origin[2] = set_trap_origin[id][2] fdistance = get_distance_f(user_origin, set_trap_origin[id]) if ((target > 0 && distance <= 200) || fdistance > 18.0) { stop_set_trap(id) set_pev(id, pev_flags, (pev(id, pev_flags) & ~FL_FROZEN)) } } } public event_Damage(id) { new attacker, weapon, hitzone attacker = get_user_attacker(id, weapon, hitzone) if (!(1 <= attacker <= g_maxplayers) || !is_user_connected(attacker) || !is_user_alive(attacker) || attacker == id) return new damage = read_data(2) if (is_user_bot(id) && damage > 0) { new Float:origin1[3], Float:origin2[3], distance pev(id, pev_origin, origin1) pev(attacker, pev_origin, origin2) distance = floatround(get_distance_f(origin1, origin2)) if (distance < 500 || damage > 100) { if (user_set_trap[id]) { stop_set_trap(id) set_pev(id, pev_flags, (pev(id, pev_flags) & ~FL_FROZEN)) } } } } get_valid_aim_target(id, &hitzone, &distance) { new target, aim_hitzone get_user_aiming(id, target, aim_hitzone) if (!(1 <= target <= g_maxplayers) || !is_user_alive(target) || zp_get_user_zombie(target)) return 0 hitzone = aim_hitzone new Float:origin1[3], Float:origin2[3] pev(id, pev_origin, origin1) pev(target, pev_origin, origin2) distance = floatround(get_distance_f(origin1, origin2), floatround_round) return target } #endif public roundStart() { for (new i = 1; i <= g_maxplayers; i++) { is_cooldown[i] = 0 is_cooldown_time[i] = floatround(g_revenge_cooldown) remove_task(i) } } public CPlayer__TakeDamage(id, iVictim, iInflictor, iAttacker, Float:flDamage, bitsDamage) { if (zp_get_user_zombie_class(id) == g_zclass_heavy && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_survivor(id)) { new rand = random_num(1,2) switch(rand) { case 1: emit_sound(id, CHAN_WEAPON, pain_heavy_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW) case 2: emit_sound(id, CHAN_WEAPON, pain_heavy_sound2[0], 1.0, ATTN_NORM, 0, PITCH_LOW) } } } public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch) { if(!is_user_connected(id)) return FMRES_HANDLED if (sample[0] == 'h' && sample[1] == 'o' && sample[2] == 's' && sample[3] == 't' && sample[4] == 'a' && sample[5] == 'g' && sample[6] == 'e') return FMRES_SUPERCEDE if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_heavy && !zp_get_user_nemesis(id)) { if (sample[7] == 'd' && ((sample[8] == 'i' && sample[9] == 'e') || (sample[8] == 'e' && sample[9] == 'a'))) { emit_sound(id, CHAN_WEAPON, death_heavy_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW) } } return FMRES_IGNORED } public Event_CurrentWeapon(id) { new weaponID = read_data(2) if (weaponID == CSW_SMOKEGRENADE) if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_heavy && !zp_get_user_nemesis(id)) { entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_HEAVY) } if (weaponID == CSW_FLASHBANG) if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_heavy&& !zp_get_user_nemesis(id)) { entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_HEAVY) } } 2.Hunter Zombie #Include <amxmodx> #include <engine> #include <fakemeta> #include <hamsandwich> #include <zombieplague> #include <fun> #include <dhudmessage> #define PLUGIN "[CSO:Hunter Zombie]" #define VERSION "1.2" #define AUTHOR "DoDo" // Zombie Attributes new const zclass_name[] = "Faster" new const zclass_info[] = \y[ Fast Run [\rG\y] ]" new const zclass_model[] = "toxhunter" // model new const zclass_clawmodel[] = "v_begyH.mdl" // claw model new KNOCKBOMB_HUNTER[] = "models/tx/bombjump/v_bomb_begyH.mdl" // zbomb model const zclass_health = 2500 // health const zclass_speed = 245 // speed const Float:zclass_gravity = 0.8 // gravity const Float:zclass_knockback = 0.8 // knockback #define TRAIL_LIFE 2 #define TRAIL_WIDTH 10 #define TRAIL_RED 0 #define TRAIL_GREEN 0 #define TRAIL_BLUE 0 #define TRAIL_BRIGTHNESS 220 new Float:g_fastspeed = 1000.0 //sprint speed new Float:g_normspeed = 245.0 // normal speed. must be as zclass_speed new Float:g_abilonecooldown = 25.0 // cooldown time new Float:g_abilonelenght = 1.2 // time of sprint new const g_infect_sound[] = "zombie_plague/hunterinfect_01.wav" new const pain_hunter_sound[] = "zombie_plague/hunter/pain_011.wav" new const pain_hunter_sound2[] = "zombie_plague/hunter/pain_021.wav" new const death_hunter_sound[] = "zombie_plague/hunter/die_02.wav" // death new const sound_hunter_sprint[] = "tox_cso/hunters.wav" // sprint sound new const sound_hunter_endspr[] = "tox_cso/sprintendhun.wav" // end sound new i_cooldown_time[33] new g_zclass_hunter new g_speeded[33] = 0 new g_abil_one_used[33] = 0 new gTrail new g_maxplayers public plugin_precache () { g_zclass_hunter = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback) precache_sound(sound_hunter_sprint) precache_sound(sound_hunter_endspr) precache_model(KNOCKBOMB_HUNTER) precache_sound(pain_hunter_sound[0]) precache_sound(pain_hunter_sound2[0]) precache_sound(g_infect_sound[0]) precache_sound(death_hunter_sound[0]) } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("drop", "use_ability_one") register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1") register_forward(FM_PlayerPreThink, "client_prethink") register_logevent("roundStart", 2, "1=Round_start") RegisterHam(Ham_TakeDamage, "player" , "CPlayer_TakeDamage") register_forward(FM_EmitSound, "fw_EmitSound") g_maxplayers = get_maxplayers() gTrail = engfunc(EngFunc_PrecacheModel, "sprites/cso_trailv2.spr") } public client_prethink(id) { if (zp_get_user_zombie_class(id) == g_zclass_hunter) { if(is_user_alive(id) && zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_zclass_hunter) && !zp_get_user_nemesis(id)) Action(id) } } public Action (id) { if (g_speeded[id] == 1) { set_user_maxspeed(id, g_fastspeed) } else { set_user_maxspeed(id, g_normspeed) } return PLUGIN_HANDLED } public roundStart() { for (new i = 1, i = g_maxplayers i++) { i_cooldown_time[i] = floatround(g_abilonecooldown) g_abil_one_used[i] = 0 g_speeded[i] = 0 remove_tast(i) client_cmd(i, "cl_forwardspeed 300") client_cmd(i, "cl_backspeed 300") } } public ShowHud(id) { if (is_user_alive(id)) { i_cooldown_time[id] = i_cooldowntime[id] -1 set_dhudmsessage(200, 100, 0, 0.80, 0.87, 0, 1.0, 1.1, 0.0, 0.00, -1) show_dhudmessage(id, "[Next ability in : %d]", i_cooldown_time[id]) } else { remove_tastk(id) } } public use_ability_one(id) { if (is_user_alive(id) && (zp_get_user_zombie_class(id) == g_zclass_hunter) && zp_get_user_zombie(id) && !zp_get_user_nemesis(id)) { if (g_abil_one_used[id] == 0 ) { fm_set_renderng(id_, kRenderFxGlowShell, 170, 0, 0, kRenderNormal, 0) client_cmd(id, "cl_forwardspeed 1000") client_cmd(id, "cl_backspeed 1000") message_begin (MSG_BROADCAST, SVC_TEMPENTITY) write_byte (TE_BEAMFOLLOW) write_short (id) write_short (gTrail) write_byte (TRAIL_LIFE) write_byte (TRAIL_WIDTH) write_byte (TRAIL_RED) write_byte (TRAIL_GREEN) write_byte (TRAIL_BLUE) write_byte (TRAIL_BRIGTHNESS) message_end() red_screen(id) g_speeded[id] = 1 emit_sound(id, CHAN_STREAM, sound_hunter_sprint, 1.9, ATTN_NORM, 0, PITCH_NORM) g_abil_one_used[id] = 1 set_task(g_abilonelenght, "set_normal_speed", id) i_cooldown_time[id] = floatround(g_abilonecooldown) set_task(1.0, "ShowHud", id, "a", i_cooldown_time[id]) client_print(id, print_chat, "[dev] - use ability") } } } public set_normal_speed(id) { if ((zp_get_user_zombie_class(id) == g_zclass_hunter) && zp_get_user_zombie(id) && ! zp_get_user_nemesis(id)) { fm_set_user_rendering(id) emit_sound(id, CHAN_STREAM, sound_hunter_endspr, 1.0, ATTN_NORM, 0, PITCH_NORM) g_speeded[id] = 0 client_cmd(id, "cl_forwardspeed 300") client_cmd(id, "cl_backspeed 300") set_task(g_abilonecooldown, "set_ability_one_cooldown" ,id) } } red_screen(const id, const iFade = 1) { message_begin(MSG_ONE, get_user_msgid("ScreenFade"), id) write_short(8192 * iFade) Write_short(8192 * iFade) write_short(0x0000) write_byte(255) write_byte(0) write_byte(0) write_byte(125) message_end() } public set_ability_one_cooldown(id) { if ((zp_get_user_zombie_class(id) == g_zclass_hunter) && zp_get_user_zombie(id) && !zp_get_user_nemesis(id)) { g_abil_one_used[id] = 0 new text[100] format(text, 99, "^x04[Hunter ^x01<<Speed Ability>>^x04 ^x01) message_begin(MSG_ONE, ge_user_msgid("SayText"), {0, 0, 0}, id) write_byte(id) write_string(text) message_end() } } public zp_user_infected_post(id, infector) { if ((zp_get_user_zombie_class(id) -- g_zclass_hunter) && ! zp_get_user_nemesis(id)) { emit_sound(id, CHAN_WEAPON, g_infect_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW) new text[100] new note_cooldown = floatround(g_abilonecooldown) format(text, 99, "^x04[Hunter] ^x01<<Ability>>^x04 [Speed]^x01 | Time:^x04 %d ^x01sec.", note_cooldown) message_begin(MSG_ONE, get_user_msgid("SayText"), {0, 0, 0}, id) write_byte(id) write_string(text) message_end() i_cooldown_time[id] = floatround(g_abilonecooldown) remove_task(id) g_speeded[id] = 0 g_abil_one_used[id] = 0 } } public zp_user_humanized_post(id) { remove_task(id) client_cmd(id, "cl_forwardspeed 300") client_cmd(id, "cl_backspeed 300") } public Event_currentWeapon(id) { new weaponID = read_data(2) if (weaponID == CSW_SMOKEGRENADE) if (zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_hunter && !zp_get_user_nemesis(id)) { entity_set_string*id, EV_SZ_viewmodel, KNOCKBOMB_HUNTER) } } pubkic CPlayer_TakeDamage(id, iVictim, iInflictor, iAttacker, Float:flDamage, bitsDamage) { if (zp_get_user_zombie_class(id) == g_zclass_hunter && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_survivor(id)) { new rand = random_num(1,2) switch(rand) { case 1: emit_sound(id, CHAN_WEAPON, pain_hunter_sound[0], 1.0 ATTN_NORM, 0, PITCH_LOW) case 2: emit_sound(id, CHAN_WEAPON, pain_hunter_sound2[0], 1.0 ATTN_NORM, 0, PITCH_LOW) } } } public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch) { if (is_user_connected(id)) return FMRES_HANDLED if (sample[0] == "h" && sample[1] == "o" && sample[2] == "s" && sample[3] == "t" && sample[4] == "a" && sample[5] == "g" && sample[6] == "e") return FMRES_HANDLED if (zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_hunter && !zp_get_user_nemesis(id)) { if (sample[7] == "d" && ((sample[8] == "i" && sample[9] == "e") || (sample[8] == "e" && sample[9] == "a"))) { emit_sound(id, CHAN_WEAPON, death_hunter_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW) } } return FMRES_IGNORED }
cere .sma clase zombie
Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com
- darkboss1234
- Membru, skill 0
- Posts: 8
- Joined: 04 Apr 2015, 04:45
- Detinator Steam: Nu
- CS Status: Citesc forumul eXtreamCS.com...!
- Fond eXtream: 0
- Location: Targoviste
- Contact:
Salut am si eu nevoie de resursele .sma pentru clasele heavy si hunter de la cso, eu am niste resurse, dar nu le pot compila pentru ca imi da niste erori si nu pot sa le rezolv
Last edited by Yeezus on 26 Mar 2018, 12:50, edited 1 time in total.
Reason: [sursa]
Reason: [sursa]
- YONTU
- Scripter eXtreamCS
- Posts: 2466
- Joined: 10 May 2013, 14:25
- Detinator Steam: Nu
- CS Status: Everyone is looking at ur shoes
- Reputatie: Moderator ajutator
Fost scripter eXtreamCS - Location: Gura Humorului
- Has thanked: 256 times
- Been thanked: 288 times
- Contact:
Resursele se pot gasi pe google cu usurinta.
Scrie numele lor pe google si voila
Scrie numele lor pe google si voila
„Peste douăzeci de ani vei fi dezamăgit din cauza lucrurilor pe care nu le-ai făcut, nu din cauza celor pe care le-ai făcut.” - Mark Twain
„Asa e si in viata, hotii castiga, prostii care invata pierd.” - Mihai Nemeș
Bio.LeagueCs.Ro - Biohazard v4.4 Xmas Edition
discord: IonutC#5114
„Asa e si in viata, hotii castiga, prostii care invata pierd.” - Mihai Nemeș
Bio.LeagueCs.Ro - Biohazard v4.4 Xmas Edition
discord: IonutC#5114
Experinta in: Java/Spring boot/Angular/C/C++/C#/Javascript/Python/HTML/CSS/Pawn/SQL
Ai nevoie de ajutorul meu? Ma poti gasi doar la adresa de discord de mai sus.
Ai nevoie de ajutorul meu? Ma poti gasi doar la adresa de discord de mai sus.
- darkboss1234
- Membru, skill 0
- Posts: 8
- Joined: 04 Apr 2015, 04:45
- Detinator Steam: Nu
- CS Status: Citesc forumul eXtreamCS.com...!
- Fond eXtream: 0
- Location: Targoviste
- Contact:
pai se gasesc pe google, dar buguite, eu de aceea zic poate are cineva fara bug sa le pot compila