[AMX][Codes] Hỏi đáp về các code của AMX ...

  • Thread starter Thread starter sontung0
  • Ngày gửi Ngày gửi
Status
Không mở trả lời sau này.
Uno nè.
Mình nói ngoài lề chút là có cái plug-in Helicopter ( forum mình có đăng 1 lần ), không biết thêm vào CSMW2 thì thành Chopper Gunner dc không nhỉ ^^. Nếu thay dc skin cái đó thành Predator thì tốt !:)

Hỏi bà con tí:
Mình add cái Helicopter vô AMX Mod, mà sao vô gõi trong console amx_apache ( đ1ung như chỉ dẫn ) thì nó lại báo Unknown Command ?
Help, please
 
Vứt cái plugin( file .sma) lên đây, nếu đợi reply được thì chiều 5h ta về check..
@uno: Sang thread mdl đi, vì nó liên quan mdl rồi.
 
Sặc.. Bây giờ copy hết tất cả code trong file sma đó rồi ông đặt vào thẻ
PHP:
, post lên 4rum để tôi xem luôn..[/color]
 
@chief : cái này còn là plugin mà ... cần ng giúp NST weapons.amxx dùng đc cho default weapons ...
@TF4 : cái chopper tui k biết , cái này mấy coder giỏi làm mới đc :) .. + mdl apache đó nhỏ wa' , ...chopper bay cao mờ sky cs thì ... ! predator ? predator lien wan ji chời =.=" ...

Mod thì xong hết HUD rùi , đang fix vài lổi
 
@chief : cái này còn là plugin mà ... cần ng giúp NST weapons.amxx dùng đc cho default weapons ...
@TF4 : cái chopper tui k biết , cái này mấy coder giỏi làm mới đc :) .. + mdl apache đó nhỏ wa' , ...chopper bay cao mờ sky cs thì ... ! predator ? predator lien wan ji chời =.=" ...

Mod thì xong hết HUD rùi , đang fix vài lổi

Predator Missile ý mà, cái Helicopter đó thì nó cũng bắn Misile dc.

PHP:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <engine>
#include <fakemeta>

#define APACHE_ADMIN ADMIN_LEVEL_A

#define TASK_ROCKET 6740100
#define TASK_BOMB 6760200

new apaches[33], camera[33], apache_speed[33], grabbed[33]
new smoke, boom, laserbeam
new maxplayers, maxentities
new bool:wait_rocket[33], bool:wait_bomb[33], bool:wait_stealth[33], stealth[33]
new gmsgNVGToggle
new g_apacheactive = 0

new active,health,maxspeed2,stealthamt,stealthspeed,stealthregen,bulletdmg,bulletspeed;
new rocketspeed,distance,height,beams,cost,admins,ff;

public plugin_init()
{
	register_plugin("AMX Apache", "0.2.0", "KRoTaL, Fox-NL")
	
	register_concmd("amx_apache", "create_apache", 0, "creates a helicopter you can control")
	register_concmd("amx_destroyapache", "destroy_apache", 0, "destroys the helicopter you are controlling")
	
	register_clcmd("drop", "stop_apache")
	register_clcmd("nightvision", "stealth_mode")
	
	active =           register_cvar("apache_active", "1")
	health =           register_cvar("apache_health", "1000")
	maxspeed2 =         register_cvar("apache_maxspeed", "400")
	stealthamt =       register_cvar("apache_stealth_amount", "40")
	stealthspeed =    register_cvar("apache_stealth_maxspeed", "60")
	stealthregen =    register_cvar("apache_stealth_regen", "10")
	bulletdmg =        register_cvar("apache_bulletdmg", "10")
	bulletspeed =     register_cvar("apache_bulletspeed", "2000")
	rocketspeed =     register_cvar("apache_rocketspeed", "1000")
	distance =         register_cvar("apache_dist", "70")
	height =           register_cvar("apache_height", "20")
	beams =            register_cvar("apache_beams", "0")
	cost =             register_cvar("apache_cost", "5000")
	admins =           register_cvar("apache_admins", "0")
	ff =               register_cvar("apache_ff", "0")
	
	register_event("DeathMsg", "death_event", "a")
	register_event("ResetHUD", "resethud_event", "be")
	register_event("CurWeapon", "check_weapon", "be", "1=1")
	register_logevent("new_round", 2, "0=World triggered", "1=Round_Start")
	register_event("TextMsg", "game_restart", "a", "1=4", "2&#Game_C", "2&#Game_w")
	register_event("SendAudio", "round_end", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw")
	register_forward(FM_EmitSound,"emitsound",0)
	
	maxplayers = get_maxplayers() + 1
	maxentities = get_global_int(GL_maxEntities)
	
	gmsgNVGToggle = get_user_msgid("NVGToggle")
}

public client_connect(id)
{
	if(task_exists(54545454+id))
	{
		remove_task(54545454+id)
	}
	apaches[id] = 0
	camera[id] = 0
	grabbed[id] = 0
	wait_rocket[id] = false
	wait_bomb[id] = false
	wait_stealth[id] = false
	stealth[id] = false
}

public client_disconnect(id)
{
	if(task_exists(54545454+id))
	{
		remove_task(54545454+id)
	}
	if(apaches[id] > 0)
	{
		emit_sound(apaches[id], CHAN_VOICE, "vox/_period.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
		remove_entity(apaches[id])
		apaches[id] = 0
	}
	if(camera[id] > 0)
	{
		remove_entity(camera[id])
		camera[id] = 0
	}
	grabbed[id] = 0
	wait_rocket[id] = false
	wait_bomb[id] = false
	wait_stealth[id] = false
	stealth[id] = false
}

public new_round()
{
	new ent
	while((ent = find_ent_by_class(ent,"apache_bullet")) != 0)
		remove_entity(ent)
	
	ent = find_ent_by_class(-1, "apache_rocket")
	new tempent
	while(ent > 0)
	{
		tempent = find_ent_by_class(ent, "apache_rocket")
		emit_sound(ent, CHAN_WEAPON, "vox/_period.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
		//emit_sound(ent, CHAN_VOICE, "vox/_period.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
		remove_entity(ent)
		ent = tempent
	}
	set_task(0.1, "set_speed", 875457545)
}

public round_end()
{
	set_task(4.0, "disable_sound", 212454212)
}

public game_restart()
{
	set_task(0.5, "disable_sound", 787454241)
}

public disable_sound()
{
	new players[32], inum, player
	get_players(players, inum, "a")
	for(new i = 0 ; i < inum ; i++)
	{
		player = players[i]
		if(apaches[player] > 0)
		{
			emit_sound(apaches[player], CHAN_VOICE, "vox/_period.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
		}
	}
}

public death_event()
{
	g_apacheactive = get_pcvar_num(active)
	new id = read_data(2)
	
	if(task_exists(54545454+id))
	{
		remove_task(54545454+id)
	}
	if(apaches[id] > 0)
	{
		emit_sound(apaches[id], CHAN_VOICE, "vox/_period.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
		remove_entity(apaches[id])
		apaches[id] = 0
	}
	if(camera[id] > 0)
	{
		attach_view(id, id)
		remove_entity(camera[id])
		camera[id] = 0
	}
	for(new i = 1 ; i < maxplayers ; i++)
	{
		if(grabbed[i] == id)
		{
			grabbed[i] = 0
		}
	}
	grabbed[id] = 0
	wait_rocket[id] = false
	wait_bomb[id] = false
	wait_stealth[id] = false
	stealth[id] = false
	client_cmd(id, "-left")
	client_cmd(id, "-right")
	message_begin(MSG_ONE, gmsgNVGToggle, {0,0,0}, id)
	write_byte(0)
	message_end()
}

public resethud_event(id)
{
	g_apacheactive = get_pcvar_num(active)
	if(task_exists(54545454+id))
	{
		remove_task(54545454+id)
	}
	if(apaches[id] > 0)
	{
		new Float:apachecost = get_pcvar_float(cost)
		new Float:apachehealth = get_pcvar_float(health)
		new Float:apachecurhealth = entity_get_float(apaches[id], EV_FL_health) - 5000
		new payback = floatround((apachecost * apachecurhealth) / apachehealth)
		cs_set_user_money(id, cs_get_user_money(id) + payback, 1)
		emit_sound(apaches[id], CHAN_VOICE, "vox/_period.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
		remove_entity(apaches[id])
		apaches[id] = 0
	}
	if(camera[id] > 0)
	{
		attach_view(id, id)
		remove_entity(camera[id])
		camera[id] = 0
	}
	grabbed[id] = 0
	wait_rocket[id] = false
	wait_bomb[id] = false
	wait_stealth[id] = false
	stealth[id] = false
	client_cmd(id, "-left")
	client_cmd(id, "-right")
	message_begin(MSG_ONE, gmsgNVGToggle, {0,0,0}, id)
	write_byte(0)
	message_end()
}

public check_weapon(id)
{
	if(apaches[id] > 0)
	{
		client_cmd(id, "weapon_knife")
		set_user_maxspeed(id, -1.0)
	}
}

public set_speed(id)
{
	new players[32], inum, player
	get_players(players, inum, "a")
	for(new i = 0 ; i < inum ; i++)
	{
		player = players[i]
		if(apaches[player] > 0)
		{
			set_user_maxspeed(player, -1.0)
		}
	}
}

public create_apache(id,level,cid)
{
	if(get_pcvar_num(active) == 0)
	{
		console_print(id, "AMX Apache is not enabled.")
		return PLUGIN_HANDLED
	}
	
	if(get_pcvar_num(admins) == 1)
	{
		if(!(get_user_flags(id) & APACHE_ADMIN))
		{
			console_print(id, "You have no access to that command.")
			return PLUGIN_HANDLED
		}
	}
	
	if(apaches[id] > 0)
	{
		console_print(id, "You already control a helicopter.")
		client_print(id, print_center, "You already control a helicopter.")
		return PLUGIN_HANDLED
	}
	
	if(!is_user_alive(id))
	{
		console_print(id, "You cannot control a helicopter when you are dead.")
		client_print(id, print_center, "You cannot control a helicopter when you are dead.")
		return PLUGIN_HANDLED
	}
	
	if(!(get_user_flags(id) & APACHE_ADMIN))
	{
		new apachecost = get_pcvar_num(cost)
		new usermoney = cs_get_user_money(id)
		if(usermoney < apachecost)
		{
			console_print(id, "You don't have enough money ($%i needed)", apachecost)
			client_print(id, print_center, "You don't have enough money ($%i needed)", apachecost)
			return PLUGIN_HANDLED
		}
		cs_set_user_money(id, usermoney - apachecost, 1)
	}
	
	new Float:origin[3]
	new Float:angles[3]
	entity_get_vector(id, EV_VEC_origin, origin)
	entity_get_vector(id, EV_VEC_v_angle, angles)
	
	apaches[id] = create_entity("info_target")
	if(apaches[id] > 0)
	{
		entity_set_string(apaches[id], EV_SZ_classname, "amx_apache")
		entity_set_model(apaches[id], "models/rc_apache_final.mdl")
		
		entity_set_size(apaches[id], Float:{-12.0,-12.0,-6.0}, Float:{12.0,12.0,6.0})
		
		entity_set_origin(apaches[id], origin)
		entity_set_vector(apaches[id], EV_VEC_angles, angles)
		
		entity_set_int(apaches[id], EV_INT_solid, 2)
		entity_set_int(apaches[id], EV_INT_movetype, 5)
		entity_set_edict(apaches[id], EV_ENT_owner, id)
		entity_set_int(apaches[id], EV_INT_sequence, 1)
		entity_set_float(apaches[id], EV_FL_takedamage, DAMAGE_AIM)
		entity_set_float(apaches[id], EV_FL_health, get_pcvar_float(health) + 5000.0)
		
		apache_speed[id] = 50
		
		new Float:velocity[3]
		VelocityByAim(id, apache_speed[id], velocity)
		entity_set_vector(apaches[id], EV_VEC_velocity, velocity)
		
		emit_sound(apaches[id], CHAN_VOICE, "apache/ap_rotor2.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
	}
	
	camera[id] = create_entity("info_target")
	if(camera[id] > 0)
	{
		entity_set_string(camera[id], EV_SZ_classname, "camera")
		entity_set_int(camera[id], EV_INT_solid, SOLID_NOT)
		entity_set_int(camera[id], EV_INT_movetype, MOVETYPE_NOCLIP)
		entity_set_size(camera[id], Float:{0,0,0}, Float:{0,0,0})
		entity_set_model(camera[id], "models/rpgrocket.mdl")
		set_rendering(camera[id], kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0)
		
		entity_set_origin(camera[id], origin)
		entity_set_vector(camera[id], EV_VEC_angles, angles)
		
		attach_view(id, camera[id])
	}
	
	engclient_cmd(id, "weapon_knife")
	set_user_maxspeed(id, -1.0)
	
	if(task_exists(54545454+id))
	{
		remove_task(54545454+id)
	}
	
	grabbed[id] = 0
	wait_rocket[id] = false
	wait_bomb[id] = false
	wait_stealth[id] = false
	stealth[id] = false
	
	return PLUGIN_HANDLED
}

public destroy_apache(id,level,cid)
{
	if (!cmd_access(id,level,cid,1))
	{
		return PLUGIN_HANDLED
	}
	
	if(apaches[id] > 0)
	{
		attach_view(id, id)
		emit_sound(apaches[id], CHAN_VOICE, "vox/_period.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
		remove_entity(apaches[id])
		apaches[id] = 0
		set_user_maxspeed(id, 250.0)
	}
	if(camera[id] > 0)
	{
		attach_view(id, id)
		remove_entity(camera[id])
		camera[id] = 0
	}
	
	if(task_exists(54545454+id))
	{
		remove_task(54545454+id)
	}
	
	grabbed[id] = 0
	wait_rocket[id] = false
	wait_bomb[id] = false
	wait_stealth[id] = false
	stealth[id] = false
	client_cmd(id, "-left")
	client_cmd(id, "-right")
	
	message_begin(MSG_ONE, gmsgNVGToggle, {0,0,0}, id)
	write_byte(0)
	message_end()
	
	return PLUGIN_HANDLED
}

public stop_apache(id)
{
	if(apaches[id] > 0)
	{
		if(apache_speed[id] <= 30 && apache_speed[id] >= -30)
		{
			apache_speed[id] = 0
		}
		return PLUGIN_HANDLED
	}
	
	return PLUGIN_CONTINUE
}

public stealth_mode(id)
{
	if(apaches[id] > 0)
	{
		if(!wait_stealth[id])
		{
			if(!stealth[id])
			{
				stealth[id] = true
				emit_sound(apaches[id], CHAN_VOICE, "apache/ap_rotor2.wav", 0.1, ATTN_NORM, 0, PITCH_NORM)
				set_rendering(apaches[id], kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, get_pcvar_num(stealthamt))
				message_begin(MSG_ONE, gmsgNVGToggle, {0,0,0}, id)
				write_byte(1)
				message_end()
			}
			else
			{
				stealth[id] = false
				emit_sound(apaches[id], CHAN_VOICE, "apache/ap_rotor2.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
				set_rendering(apaches[id])
				message_begin(MSG_ONE, gmsgNVGToggle, {0,0,0}, id)
				write_byte(0)
				message_end()
				wait_stealth[id] = true
				new ids[1]
				ids[0] = id
				set_task(get_pcvar_float(stealthregen), "reset_stealth", 54545454+id, ids, 1)
			}
		}
		return PLUGIN_HANDLED
	}
	
	return PLUGIN_CONTINUE
}

public client_PreThink(id)
{
	if(g_apacheactive == 0)
	{
		return PLUGIN_CONTINUE
	}
	
	if(is_user_alive(id) && apaches[id] > 0 && camera[id] > 0)
	{
		new Float:forigin[3], Float:dist_origin[3], Float:camera_origin[3]
		new button, oldbutton
		new apacheId = apaches[id]
		new maxspeed
		new Float:frame
		new apache_maxspeed = get_pcvar_num(maxspeed2)
		new apache_stealth_maxspeed = get_pcvar_num(stealthspeed)
		new Float:angles[3], Float:velocity[3]
		new Float:apache_height = get_pcvar_float(height)
		new apache_bulletspeed = get_pcvar_num(bulletspeed)
		new apache_rocketspeed = get_pcvar_num(rocketspeed)
		new classname[32]
		new Float:aim_origin[3], Float:end_origin[3]
		new apache_beams = get_pcvar_num(beams)
		if(entity_get_float(apacheId, EV_FL_health) < 5000)
		{
			new Float:explosion[3]
			entity_get_vector(apacheId, EV_VEC_origin, explosion)
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(3)
			write_coord(floatround(explosion[0]))
			write_coord(floatround(explosion[1]))
			write_coord(floatround(explosion[2]))
			write_short(boom)
			write_byte(50)
			write_byte(15)
			write_byte(0)
			message_end()
			
			HL_RadiusDamage(explosion,0,50.0,300.0)
			/*radius_damage(explosion,50,300)*/
			
			attach_view(id, id)
			if(camera[id] > 0)
			{
				remove_entity(camera[id])
				camera[id] = 0
			}
			emit_sound(apacheId, CHAN_VOICE, "vox/_period.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
			remove_entity(apacheId)
			apaches[id] = 0
			set_user_maxspeed(id, 250.0)
			if(task_exists(54545454+id))
			{
				remove_task(54545454+id)
			}
			wait_rocket[id] = false
			wait_stealth[id] = false
			stealth[id] = false
			client_cmd(id, "-left")
			client_cmd(id, "-right")
			message_begin(MSG_ONE, gmsgNVGToggle, {0,0,0}, id)
			write_byte(0)
			message_end()
			return PLUGIN_CONTINUE
		}
		
		frame = entity_get_float(apacheId, EV_FL_frame)
		if(frame < 0.0 || frame > 254.0)
		{
			entity_set_float(apacheId, EV_FL_frame, 0.0)
		}
		else
		{
			entity_set_float(apacheId, EV_FL_frame, frame + 1.0)
		}
		
		entity_get_vector(apacheId, EV_VEC_origin, forigin)
		button = get_user_button(id)
		if(button & IN_FORWARD)
		{
			apache_speed[id] += 5
		}
		if(button & IN_BACK)
		{
			apache_speed[id] -= 5
		}
		if(!stealth[id])
		{
			maxspeed = apache_maxspeed
		}
		else
		{
			maxspeed = apache_stealth_maxspeed
		}
		if(apache_speed[id] > maxspeed)
		{
			apache_speed[id] = maxspeed
		}
		if(apache_speed[id] < - 80)
		{
			apache_speed[id] = - 80
		}
		
		entity_get_vector(apacheId, EV_VEC_origin, forigin)
		entity_get_vector(id, EV_VEC_v_angle, angles)
		angles[0] = - angles[0]
		VelocityByAim(id, apache_speed[id], velocity)
		entity_set_vector(apacheId, EV_VEC_angles, angles)
		entity_set_vector(apacheId, EV_VEC_velocity, velocity)
		
		oldbutton = get_user_oldbutton(id)
		if(button & IN_JUMP)
		{
			forigin[2] += 2.0
			if(PointContents(forigin) != CONTENTS_SOLID)
			{
				entity_set_origin(apacheId, forigin)
			}
		}
		if(button & IN_DUCK)
		{
			forigin[2] -= 2.0
			if(PointContents(forigin) != CONTENTS_SOLID)
			{
				entity_set_origin(apacheId, forigin)
			}
		}
		
		if(PointContents(forigin) == CONTENTS_SOLID)
		{
			forigin[2] += 10.0
			if(PointContents(forigin) == CONTENTS_SOLID)
			{
				forigin[2] -= 60.0
			}
			entity_set_origin(apacheId, forigin)
		}
		
		VelocityByAim(id, get_pcvar_num(distance), dist_origin)
		camera_origin[0] = forigin[0] - dist_origin[0]
		camera_origin[1] = forigin[1] - dist_origin[1]
		camera_origin[2] = forigin[2] + apache_height
		entity_set_origin(camera[id], camera_origin)
		angles[0] = - angles[0]
		entity_set_vector(camera[id], EV_VEC_angles, angles)
		
		if(button & IN_ATTACK && !(oldbutton & IN_ATTACK) && get_num_ents() < (maxentities - 50))
		{
			emit_sound(apacheId, CHAN_WEAPON, "weapons/m249-1.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
			
			new ent = create_entity("info_target")
			if(ent > 0)
			{
				entity_set_string(ent, EV_SZ_classname, "apache_bullet")
				entity_set_model(ent, "models/shell.mdl")
				
				entity_set_size(ent, Float:{-1.0,-1.0,-1.0}, Float:{1.0,1.0,1.0})
				
				entity_set_origin(ent, forigin)
				entity_set_vector(ent, EV_VEC_angles, angles)
				
				entity_set_int(ent, EV_INT_solid, 1)
				entity_set_int(ent, EV_INT_movetype, 5)
				entity_set_edict(ent, EV_ENT_owner, id)
				
				VelocityByAim(id, apache_bulletspeed, velocity)
				entity_set_vector(ent, EV_VEC_velocity, velocity)
				
				message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
				write_byte(22)
				write_short(ent)
				write_short(smoke)
				write_byte(25)
				write_byte(1)
				write_byte(255)
				write_byte(255)
				write_byte(255)
				write_byte(128)
				message_end()
			}
		}
		if(button & IN_ATTACK2 && !wait_rocket[id] && get_num_ents() < (maxentities - 50))
		{
			new ent = create_entity("info_target")
			if(ent > 0)
			{
				entity_set_string(ent, EV_SZ_classname, "apache_rocket")
				entity_set_model(ent, "models/rpgrocket.mdl")
				
				entity_set_size(ent, Float:{-1.0,-1.0,-1.0}, Float:{1.0,1.0,1.0})
				
				entity_set_origin(ent, forigin)
				entity_set_vector(ent, EV_VEC_angles, angles)
				
				entity_set_int(ent, EV_INT_effects, 64)
				entity_set_int(ent, EV_INT_solid, 1)
				entity_set_int(ent, EV_INT_movetype, 5)
				entity_set_edict(ent, EV_ENT_owner, id)
				
				VelocityByAim(id, apache_rocketspeed, velocity)
				entity_set_vector(ent, EV_VEC_velocity, velocity)
				
				message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
				write_byte(22)
				write_short(ent)
				write_short(smoke)
				write_byte(40)
				write_byte(4)
				write_byte(255)
				write_byte(0)
				write_byte(0)
				write_byte(128)
				message_end()
				
				emit_sound(ent, CHAN_WEAPON, "weapons/rocketfire1.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
				//emit_sound(ent, CHAN_VOICE, "weapons/rocket1.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
			}
			wait_rocket[id] = true
			set_task(2.0, "reset_rocket", id+TASK_ROCKET)
		}
		if(button & IN_RELOAD && !wait_bomb[id] && grabbed[id] == 0 && get_num_ents() < (maxentities - 50))
		{
			new ent = create_entity("info_target")
			if(ent > 0)
			{
				entity_set_string(ent, EV_SZ_classname, "apache_bomb")
				entity_set_model(ent, "models/rpgrocket.mdl")
				
				entity_set_size(ent, Float:{-1.0,-1.0,-1.0}, Float:{1.0,1.0,1.0})
				
				entity_set_origin(ent, forigin)
				entity_set_vector(ent, EV_VEC_angles, angles)
				
				entity_set_int(ent, EV_INT_solid, 1)
				entity_set_int(ent, EV_INT_movetype, 6)
				entity_set_edict(ent, EV_ENT_owner, id)
			}
			wait_bomb[id] = true
			set_task(4.0, "reset_bomb", id+TASK_BOMB)
		}
		if(button & IN_USE && !(oldbutton & IN_USE))
		{
			if(grabbed[id] == 0)
			{
				new Float:ent_origin[3]
				new ent = find_ent_in_sphere(-1, forigin, 60.0)
				while(ent > 0 && grabbed[id] == 0)
				{
					classname[0] = '^0'
					entity_get_string(ent, EV_SZ_classname, classname, 31)
					if(equal(classname, "player") || equal(classname, "grenade") || equal(classname, "weaponbox") || equal(classname, "armoury_entity") || equal(classname, "hostage_entity"))
					{
						entity_get_vector(ent, EV_VEC_origin, ent_origin)
						if(ent_origin[2] < forigin[2])
						{
							grabbed[id] = ent
							if(equal(classname, "hostage_entity"))
							{
								entity_set_int(apacheId, EV_INT_solid, 3)
							}
						}
					}
					ent = find_ent_in_sphere(ent, forigin, 60.0)
				}
			}
			else
			{
				classname[0] = '^0'
				if(is_valid_ent(grabbed[id])) {
					entity_get_string(grabbed[id], EV_SZ_classname, classname, 31)
					if(!equal(classname, "player"))
					{
						entity_set_vector(grabbed[id], EV_VEC_velocity, Float:{0,0,-20})
					}
				}
				grabbed[id] = 0
				entity_set_int(apacheId, EV_INT_solid, 2)
			}
		}
		if(button & IN_MOVELEFT)
		{
			client_cmd(id, "+left")
		}
		else if(oldbutton & IN_MOVELEFT)
		{
			client_cmd(id, "-left")
		}
		if(button & IN_MOVERIGHT)
		{
			client_cmd(id, "+right")
		}
		else if(oldbutton & IN_MOVERIGHT)
		{
			client_cmd(id, "-right")
		}
		if(apache_beams == 1)
		{
			VelocityByAim(id, 9999, velocity)
			end_origin[0] = forigin[0] + velocity[0]
			end_origin[1] = forigin[1] + velocity[1]
			end_origin[2] = forigin[2] + velocity[2]
			trace_line(0, forigin, end_origin, aim_origin)
			message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0,0,0}, id)
			write_byte(1)
			write_short(apacheId)
			write_coord(floatround(aim_origin[0]))
			write_coord(floatround(aim_origin[1]))
			write_coord(floatround(aim_origin[2]))
			write_short(laserbeam)
			write_byte(1)
			write_byte(1)
			write_byte(1)
			write_byte(8)
			write_byte(0)
			write_byte(255)
			write_byte(0)
			write_byte(0)
			write_byte(128)
			write_byte(0)
			message_end()
		}
		if(grabbed[id] > 0 && is_valid_ent(grabbed[id]))
		{
			new Float:direction[3], Float:moveto[3], Float:grabbedorigin[3], Float:length
			VelocityByAim(id, 9999, velocity)
			end_origin[0] = forigin[0] + velocity[0]
			end_origin[1] = forigin[1] + velocity[1]
			end_origin[2] = forigin[2] + velocity[2]
			trace_line(0, forigin, end_origin, aim_origin)
			
			entity_get_vector(grabbed[id], EV_VEC_origin, grabbedorigin)
			
			direction[0] = aim_origin[0] - forigin[0]
			direction[1] = aim_origin[1] - forigin[1]
			direction[2] = aim_origin[2] - forigin[2]
			
			length = vector_distance(aim_origin,forigin)
			if (!length) length = 1.0
			
			moveto[0] = forigin[0] + direction[0] / length
			moveto[1] = forigin[1] + direction[1] / length
			classname[0] = '^0'
			entity_get_string(grabbed[id], EV_SZ_classname, classname, 31)
			if(equal(classname, "player"))
			{
				moveto[2] = (forigin[2] + direction[2] / length) - 45.0
				velocity[0] = (moveto[0] - grabbedorigin[0]) * 5
				velocity[1] = (moveto[1] - grabbedorigin[1]) * 5
				velocity[2] = (moveto[2] - grabbedorigin[2]) * 5
			}
			else
			{
				moveto[2] = (forigin[2] + direction[2] / length) - 15.0
				velocity[0] = (moveto[0] - grabbedorigin[0]) * 10
				velocity[1] = (moveto[1] - grabbedorigin[1]) * 10
				velocity[2] = (moveto[2] - grabbedorigin[2]) * 10
			}
			
			entity_set_vector(grabbed[id], EV_VEC_velocity, velocity)
		}
		set_hudmessage(255, 255, 255, -2.0, 0.76, 0, 1.0, 0.01, 0.1, 0.2, 4)
		show_hudmessage(id, " [APACHE] Speed: %i, Health: %i", apache_speed[id], floatround(entity_get_float(apaches[id], EV_FL_health) - 5000))
	}
	
	return PLUGIN_CONTINUE
}

public reset_rocket(id)
{
	wait_rocket[id-TASK_ROCKET] = false
}

public reset_bomb(id)
{
	wait_bomb[id-TASK_BOMB] = false
}

public reset_stealth(ids[])
{
	wait_stealth[ids[0]] = false
}

public pfn_touch(entity1, entity2)
{
	if(g_apacheactive == 0)
	{
		return PLUGIN_CONTINUE
	}
	
	if(entity1 > 0 && is_valid_ent(entity1))
	{
		new classname[32]
		entity_get_string(entity1, EV_SZ_classname, classname, 31)
		new classname2[32]
		if(entity2 > 0 && is_valid_ent(entity2))
		{
			entity_get_string(entity2, EV_SZ_classname, classname2, 31)
		}
		
		new attacker = entity_get_edict(entity1, EV_ENT_owner)
		if((equal(classname, "apache_rocket") || equal(classname, "apache_bomb")) && (entity2 == 0 || equal(classname2, "player") || equal(classname2, "amx_apache") || equal(classname2, "apache_rocket") || equal(classname2, "func_breakable") || equal(classname2, "func_pushable")))
		{
			if(entity2 > 0)
			{
				if(attacker == entity_get_edict(entity2, EV_ENT_owner))
				{
					return PLUGIN_CONTINUE
				}
			}
			
			new Float:explosion[3]
			entity_get_vector(entity1, EV_VEC_origin, explosion)
			
			if(!stealth[attacker])
			{
				/*radius_damage(explosion,200,300)*/
				HL_RadiusDamage(explosion,0,200.0,300.0)
			}
			else
			{
				/*radius_damage(explosion,120,300)*/
				HL_RadiusDamage(explosion,0,120.0,300.0)
			}
			
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(3)
			write_coord(floatround(explosion[0]))
			write_coord(floatround(explosion[1]))
			write_coord(floatround(explosion[2]))
			write_short(boom)
			write_byte(50)
			write_byte(15)
			write_byte(0)
			message_end()
			
			emit_sound(entity1, CHAN_WEAPON, "vox/_period.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
			//emit_sound(entity1, CHAN_VOICE, "vox/_period.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
			
			remove_entity(entity1)
		}
		if(equal(classname, "apache_bullet"))
		{
			if(equal(classname2, "player") || equal(classname2, "amx_apache") || equal(classname2, "func_breakable") || equal(classname2, "func_pushable"))
			{
				if(entity2 > 0)
				{
					if(attacker == entity_get_edict(entity2, EV_ENT_owner))
					{
						return PLUGIN_CONTINUE
					}
					if(equal(classname2, "func_breakable") || equal(classname2, "func_pushable"))
					{
						force_use(entity2, attacker)
					}
					else
					{
						new Float:origin[3]
						entity_get_vector(entity2, EV_VEC_origin, origin)
						fakedamage(entity2, "apache_gun", get_pcvar_float(bulletdmg), DMG_BULLET)
					}
				}
			}
			
			remove_entity(entity1)
		}
		if(equal(classname, "amx_apache"))
		{
			if(equal(classname2, "player") || equal(classname2, "amx_apache") || equal(classname2, "func_breakable") || equal(classname2, "func_pushable"))
			{
				
				if(equal(classname2, "player") || equal(classname2, "amx_apache"))
				{
					new friendlyfire = get_pcvar_num(ff);
					if((friendlyfire == 1 || friendlyfire == 0 && get_user_team(attacker) != get_user_team(entity2)))
					{
						new Float:origin[3]
						entity_get_vector(entity2, EV_VEC_origin, origin)
						if(equal(classname2, "player") && get_user_health(entity2) == 1)
						{
							client_print(entity2, print_center, "NEVER STAND IN THE ROTORS AGAIN!")
						}
						fakedamage(entity2, "apache", 1.0, DMG_SLASH)
					}
				}
				else if(equal(classname2, "func_breakable") || equal(classname2, "func_pushable"))
				{
					force_use(entity2, attacker)
				}
			}
		}
	}
	
	return PLUGIN_CONTINUE
}

public emitsound(entity, const sample[])
{
	if(equal(sample, "common/wpn_denyselect.wav"))
	{
		return FMRES_SUPERCEDE
	}
	return FMRES_IGNORED
}

public plugin_precache()
{
	laserbeam = precache_model("sprites/laserbeam.spr")
	smoke = precache_model("sprites/smoke.spr")
	boom = precache_model("sprites/zerogxplode.spr")
	
	precache_model("models/rc_apache_final.mdl")
	precache_model("models/rpgrocket.mdl")
	precache_model("models/shell.mdl")
	
	precache_sound("vox/_period.wav")
	precache_sound("weapons/rocketfire1.wav")
	precache_sound("weapons/rocket1.wav")
	precache_sound("weapons/m249-1.wav")
	precache_sound("apache/ap_rotor2.wav")
}

public get_num_ents()
{
	new i, count;
	for(i=1;i<maxentities;i++)
	{
		if(is_valid_ent(i))
			count++
	}
	return count;
}

///////////////// THANKS AVALANCHE!! ///////////////////

public HL_RadiusDamage( Float:vecSrc[3], /*pevAttacker,*/ pevInflictor, Float:flDamage, Float:flRadius/*, iClassIgnore, bitsDamageType*/ )
{
	new pEntity;
	new tr;
	new Float:flAdjustedDamage, Float:falloff;
	new Float:vecSpot[3];
	
	// NEW
	new Float:vecAbsMin[3], Float:vecAbsMax[3], Float:vecAdjust[3],
	Float:vecEndPos[3], Float:flFraction, iWaterLevel, i;
	
	if( flRadius )
		falloff = flDamage / flRadius;
	else
		falloff = 1.0;
	
	new bInWater = (engfunc( EngFunc_PointContents, vecSrc ) == CONTENTS_WATER);
	
	vecSrc[2] += 1;// in case grenade is lying on the ground
	
	// iterate on all entities in the vicinity.
	while ((pEntity = engfunc( EngFunc_FindEntityInSphere, pEntity, vecSrc, flRadius )) != 0)
	{
		if ( pev( pEntity, pev_takedamage ) != DAMAGE_NO )
		{
			iWaterLevel = pev( pEntity, pev_waterlevel ); // NEW
			
			// blasts don't travel into or out of water
			if (bInWater && iWaterLevel == 0)
				continue;
			if (!bInWater && iWaterLevel == 3)
				continue;
			
			// OLD: vecSpot = pEntity->BodyTarget( vecSrc ); -- NEW:
			pev( pEntity, pev_absmin, vecAbsMin );
			pev( pEntity, pev_absmax, vecAbsMax );
			for( i = 0; i < 3; i++ ) vecSpot[i] = ( vecAbsMin[i] + vecAbsMax[i] ) * 0.5;
			
			engfunc( EngFunc_TraceLine, vecSrc, vecSpot, DONT_IGNORE_MONSTERS, pevInflictor, tr );
			
			get_tr2( tr, TR_flFraction, flFraction ); // NEW
			get_tr2( tr, TR_vecEndPos, vecEndPos ); // NEW
			
			if ( flFraction == 1.0 || get_tr2( tr, TR_pHit ) == pEntity )
				{// the explosion can 'see' this entity, so hurt them!
			if ( get_tr2( tr, TraceResult:TR_StartSolid ) )
			{
				// if we're stuck inside them, fixup the position and distance
				vecEndPos =  vecSrc;
				flFraction = 0.0;
			}
			
			// decrease damage for an ent that's farther from the bomb.
			
			// OLD: flAdjustedDamage = ( vecSrc - tr.vecEndPos ).Length() * falloff; -- NEW:
			for( i = 0; i < 3; i++ ) vecAdjust[i] = vecSrc[i] - vecEndPos[i];
			flAdjustedDamage = floatsqroot(vecAdjust[0]*vecAdjust[0] + vecAdjust[1]*vecAdjust[1] + vecAdjust[2]*vecAdjust[2]) * falloff;
			
			flAdjustedDamage = flDamage - flAdjustedDamage;
			
			if ( flAdjustedDamage < 0.0 )
			{
				flAdjustedDamage = 0.0;
			}
			
			// ALERT( at_console, "hit %s\n", STRING( pEntity->pev->classname ) );
			take_damage( pEntity, pevInflictor, flAdjustedDamage ); // NEW
		}
	}
}
}

public take_damage( victim, attacker, Float:damage )
{
	// "victim" should take "damage" damage from "attacker"
	fakedamage(victim,"apache",damage,0);
}
 
Hmm.. Cvar thấy không vấn đề gì.. Dùng bản cs patch bao nhiêu thế?
 
Ghost đừng bao giờ nghĩ chuyện chơi với bot vì nó không có khái niệm tàng hình.. trừ podbot ngu ngu 8-}

Ạnh dùng class Ghost, Predator tàng hình mà còn bị tụi podbot nó headshot, không thể đỡ nổi :|
 
@sonomi: Khi mà anh đứng yên tàng hình thì nó sẽ không tự nhiên bắn đâu, trừ khi mình không invisible hoàn toàn hoặc là chạy...
@task: Khuyến cáo là có vài plugin tốt nhất nên dùng với CS thường.. Nhưng chiều tôi sẽ xem..
 
Sao cái Pipe Bom add vào rồi, lúc quăng thì nó không nổ nhỉ, cả trái Smoke + HE nữa, ai biết tại sao không :-?
 
Pipe Bomb server Dias có đấy
bác hỏi dias xem :D
 
đã làm mọi cách convert mọi kiểu mà ko add blood vào file decal.wad bó tay bắn ra vẫn còn cái nền màu trắng bạn nào bik hay đã thử wa HD cho mình đi ngồi mò hết nữa ngày rồi
 
đã làm mọi cách convert mọi kiểu mà ko add blood vào file decal.wad bó tay bắn ra vẫn còn cái nền màu trắng bạn nào bik hay đã thử wa HD cho mình đi ngồi mò hết nữa ngày rồi

Không thuộc lĩnh vực trong thread này, sang thread spr...
 
Ai có cách nào khóa nút Drop ko nhể ?.
Chưa khóa nó bao giờ. Chỉ khóa dc nút có IN_ thoai..

@SO_NO_MI:
- Xem mấy cái mà nó Required trong Theard. Tui cài bình thường,... nó vẫn nổ. sợ ném với bot nên nó ko nổ :))
 
Chơi ZP hay 1 số plugin rất ghét dùng Zbot.. Vì nó quá illegal với 1 số plugin ( do nó là bot của CSCZ và CSS --> hack về cho CS1.6 :-L ).. Tốt nhất cứ podbot mà dùng,
 
Ai có cách nào khóa nút Drop ko nhể ?.
Chưa khóa nó bao giờ. Chỉ khóa dc nút có IN_ thoai..

@SO_NO_MI:
- Xem mấy cái mà nó Required trong Theard. Tui cài bình thường,... nó vẫn nổ. sợ ném với bot nên nó ko nổ :))

Thì đang test với podbot mà :|
Lúc chưa cài Pipe Bom thì HE ném nổ được, cài xong thì cả HE lẫn Pipe Bom đều không nổ? Xung đột gì đây vì cài đúng hết rồi :|
 
Tui sắp làm lại sv Ks. nên để tui cài lại.... Rồi chỉ cho...
 
Status
Không mở trả lời sau này.
Back
Top