[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.
Tất nhiên phải thêm thắt rồi, có thể nó dùng module liên quan đến round.
 
Người ta không thích thì lock. Amxmodx có hỗ trợ weapon_restrict trong server đấy nhưng không nhớ rõ viết vào file nào.
Hình như cái đó của CSS thì phải cho vô ko có tác dụng
Mà tui nhớ rui' : Bác sontung0 đã lock cái Khiên đi còn ji'
 
@dark_one: Việc cl_corpsestay cũng giống w cách ông nói ở trên thôi :|. Nhưng tại sao k hiệu nghiệm , tôi ko biết / cl_corpsestay là config của client....bỏ vào config.cfg sem sao...Hic...

Đã được rùi thanks bác :).........................
 
@ Wesker : Chưa đến Tết đã đi nghỉ rồi ông =)) , sao thế =))
@ G.Dragon: .....Ukm ^^!
 
War với 1 thành phần nguy hiểm nên đi nghỉ.. Mà ông đã từng thử viết tiếng việt trong file sma chưa? Lên thread ZP kia xem 1 ví dụ kìa.
 
Ai pro cái TakeDamage hướng dẫn nào.
---------------------------------------------
PHP:
#include <amxmodx>
#include <hamsandwich>

public plugin_ini()
{
   register_plugin("Test","1.0","Dias")
   RegisterHam(Ham_TakeDamage, "player", "fw_takedmg")
}

public fw_takedmg(attacker, victim, inflictor, Float:damage)
{
   client_print(attacker, print_chat, "Take Damage")
}

Tại sao trong game, khi bắn trúng ai đó nó ko hiện chữ TakeDamage nhỉ :-w....
 
Ai pro cái TakeDamage hướng dẫn nào.
---------------------------------------------
PHP:
#include <amxmodx>
#include <hamsandwich>

public plugin_ini()
{
   register_plugin("Test","1.0","Dias")
   RegisterHam(Ham_TakeDamage, "player", "fw_takedmg")
}

public fw_takedmg(attacker, victim, inflictor, Float:damage)
{
   client_print(attacker, print_chat, "Take Damage")
}

Tại sao trong game, khi bắn trúng ai đó nó ko hiện chữ TakeDamage nhỉ :-w....

- ông mới chỉ print msg cho victim
- viết sai vị trí trog func
PHP:
fw_takedmg(victim, inflictor, attacker, Float:damage, damagetype)
 
Ai pro cái TakeDamage hướng dẫn nào.
---------------------------------------------
PHP:
#include <amxmodx>
#include <hamsandwich>

public plugin_ini()
{
   register_plugin("Test","1.0","Dias")
   RegisterHam(Ham_TakeDamage, "player", "fw_takedmg")
}
public fw_takedmg(attacker, victim, inflictor, Float:damage)
{
   client_print(attacker, print_chat, "Take Damage")
}
Tại sao trong game, khi bắn trúng ai đó nó ko hiện chữ TakeDamage nhỉ :-w....
đây mới chỉ reg ham takedamage cho player thôi
còn reg cho CZBOT thì phải như này
PHP:
#include <amxmodx>
#include <hamsandwich

new g_hamczbots, cvar_botquota

public plugin_init()
{
	register_plugin("Test TakeDamage","1.0","NST ^^")

	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
	//RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)

	cvar_botquota = get_cvar_pointer("bot_quota")
}

// reg Ham_TakeDamage cho czbot
public client_putinserver(id)
{
	if (is_user_bot(id) && !g_hamczbots && cvar_botquota)
	{
		set_task(0.1, "register_ham_czbots", id)
	}
}
public register_ham_czbots(id)
{
	// Make sure it's a CZ bot and it's still connected
	if (g_hamczbots || !is_user_connected(id) || !get_pcvar_num(cvar_botquota))
		return;
		
	RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage")
	//RegisterHamFromEntity(Ham_Spawn, id, "fw_PlayerSpawn_Post", 1)
	
	// Ham forwards for CZ bots succesfully registered
	g_hamczbots = true
}

// fw_TakeDamage
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
	client_print(0, print_chat, "[%i] Take Damage [%i]", attacker, victim)
}

Tương tự với các event khác của HAM cho player như: Ham_Spawn, Ham_TraceAttack ...
 
Chỉnh sửa cuối:
Czbot không suppot cho CS nên khi dùng nó với CZ tác dụng sẽ tốt hơn.
 
ai có plug hiện thời gian nổ bom không nhỉ
 
Hình như có nhưng ta không nhớ rõ tên gì.. Để rảnh tìm, không chú hỏi 5c0r xem, ông ta biết nhiều phết.
 
ai xem hộ tớ plugin svdex với nha, tìm thấy lỗi nào fix dùm tớ nha...version gần cuối đấy...
PHP:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <fun>
#include <fakemeta_util>
#include <zombieplague>
#include <engine>
#include <hamsandwich>

new Float:cl_pushangle[33][3]
new g_svd[33]
new g_m203_loaded[33]
new g_ammo[33]
new g_itemid
new g_hegren
/// new MaxPlayers
new g_MaxPlayers
//cvar of weapon
new cvar_trail ,cvar_radius ,cvar_damage , cvar_bonus ,cvar_reload ,cvar_remove , cvar_zoom , cvar_recoil , cvar_dmg_multi, cvar_speed, cvar_knockback
//message :D
new g_msgDeathMsg
new g_msgScoreInfo
new gMsgID
new g_hasZoom[33]
// Explode spr
new m_iTrail;
// TRail of Grenade
new xplode;
new Float:zoom_delay[33]

//weapon model
new V_MODEL[64] = "models/v_svdex.mdl"
new P_MODEL[64] = "models/p_svdex.mdl"
new W_MODEL[64] = "models/w_svdex.mdl"
new W_NADE[64] = "models/grenade.mdl"

//sound for weapon :D thanks Duy Linh
new const fire_sound[][] = {"weapons/svd-1.wav"}
new const sound_exp[][] = {"weapons/svdex-exp.wav"}

#define ICON_HIDE 0
#define ICON_SHOW 1
//weapon cost
const weapon_cost = 40
const m203_cost = 2

const m_fInReload = 54

public plugin_init() {
  register_plugin("[ZP] Extra Item : SVDEX","0.1","Teobrvt1995")
  
  register_event("DeathMsg","player_die","abd")  
  register_event("CurWeapon","checkWeapon","be","1=1")
  RegisterHam(Ham_Killed, "player", "player_die")
  RegisterHam(Ham_Spawn, "player", "player_spawn")
  RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  
  //register m203 nade touch:D
  register_touch("m203_nade", "*", "m203_touch")
  
  //register forawrd
  register_forward(FM_CmdStart, "forward_CmdStart")
  register_forward(FM_SetModel, "forward_setmodel") 
  

//nax player
  g_MaxPlayers = get_maxplayers()
  //register the cvar
  cvar_knockback = register_cvar("zp_svd_knock", "2")
  cvar_speed = register_cvar("zp_svd_speed", "3.0")
  cvar_recoil = register_cvar("zp_svd_recoil", "0.2")
  cvar_dmg_multi = register_cvar("zp_svd_dmg_multi", "8") 
  cvar_trail = register_cvar("zp_svd_trail","1") 
  cvar_radius = register_cvar("zp_svd_rad","300")  
  cvar_damage = register_cvar("zp_svd_dmg","2000") 
  cvar_bonus = register_cvar("zp_svd_bonus","2") 
  cvar_reload = register_cvar("zp_svd_reloadtime","3.0") 
  cvar_remove = register_cvar("zp_svd_remove","0") 
  cvar_zoom = register_cvar("zp_svd_zoom", "1")
  
  // register extra item
  g_itemid = zp_register_extra_item("SVDEX",weapon_cost,ZP_TEAM_HUMAN)
  g_hegren = zp_register_extra_item("M203 for SVDEX",m203_cost, ZP_TEAM_HUMAN) 
  //message for weapon
  g_msgDeathMsg = get_user_msgid("DeathMsg")
  g_msgScoreInfo = get_user_msgid ( "ScoreInfo" )
  gMsgID = get_user_msgid("StatusIcon")

  // for recoil and sound weapon :D
  RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack")
  RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack_post",1) 
  //when player are reloading...
  RegisterHam(Ham_Weapon_Reload, "weapon_ak47", "fw_weapon_reload")
  //enable pick up the weapon
  RegisterHam(Ham_Item_AddToPlayer, "weapon_ak47", "fw_weapon_pickup")
   
}
//precache sound and model...
public plugin_precache()          
{
  
  m_iTrail = precache_model("sprites/smoke.spr")
  xplode = precache_model("sprites/zerogxplode.spr")
  precache_sound("weapons/svdex-shoot2.wav")
  for(new i = 0; i < sizeof sound_exp; i++)
  precache_sound(sound_exp[i])
  for(new i = 0; i < sizeof fire_sound; i++)
  precache_sound(fire_sound[i])
  precache_model(V_MODEL)
  precache_model(P_MODEL)
  precache_model(W_MODEL)
  precache_model(W_NADE)
  
}

public zp_user_infected_post(id)   /// Forward when user is infected
{	
   if(g_svd[id])
   ammo_hud(id,0)
   g_svd[id] = false
   g_ammo[id] = 0
}


public client_connect(id)      
{
  g_svd[id] = 0
  g_m203_loaded[id] = 1
  g_ammo[id] = 0     
}

//death/...
public player_die(id)        
{
  if(g_svd[id])
  ammo_hud(id,0)
  g_ammo[id] = 0
  g_svd[id] = 0
  return PLUGIN_CONTINUE
}

//for recoil and sound...
public fw_primary_attack(ent)
{
	new id = pev(ent,pev_owner)
	pev(id,pev_punchangle,cl_pushangle[id])
	return HAM_IGNORED
}
public fw_primary_attack_post(ent)
{
	new id = pev(ent,pev_owner)
	new clip, ammo
	new weap = get_user_weapon( id, clip, ammo )
	if( weap == CSW_AK47 && g_svd[id])
	{
		new Float:push[3]
		pev(id,pev_punchangle,push)
		xs_vec_sub(push,cl_pushangle[id],push)
		xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
		xs_vec_add(push,cl_pushangle[id],push)
		set_pev(id,pev_punchangle,push)
		if( clip > 0)
		{
		ExecuteHamB(Ham_Weapon_PlayEmptySound, ent)
		for(new i = 0; i < sizeof fire_sound; i++)
		emit_sound(id, CHAN_AUTO, fire_sound[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
		}
	}	
		      
	return HAM_IGNORED
}

//when player reload ...
public fw_weapon_reload(ent)
{
	new id = pev(ent, pev_owner)
	new button = pev(id, pev_button)
	
	if(g_svd[id] && g_hasZoom[id] && button&IN_RELOAD)
	{
		g_ammo[id] = 0
		g_hasZoom[id] = false
		cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
		
	}
	return HAM_IGNORED
}
//player pick up the weapon...
public fw_weapon_pickup(svd, id)
{
	if( is_valid_ent(svd) && is_user_connected(id) && entity_get_int(svd, EV_INT_impulse) == 1995)
	{
		// Update
		g_svd[id] = true
		
		// BP ammo
		cs_set_user_bpammo(id, CSW_AK47, pev(svd, pev_iuser2))
		
		// Reset weapon options
		entity_set_int(svd, EV_INT_impulse, 0)
		
		return HAM_HANDLED
	}
	
	return HAM_IGNORED
}	
	
public player_spawn(id)    // When player is respawn (But it the same when roudn start...So I :P )
{
             if ( get_pcvar_num(cvar_remove) == 1 &&  g_svd[id] )
            {
		      ammo_hud(id,0)
		      g_svd[id] = false
		      g_ammo[id] = 0		       
            }      	     
}
//set P and W model
public checkModel(id)
{
	if ( zp_get_user_zombie(id) )
		return PLUGIN_HANDLED
	
	new szWeapID = read_data(2)
	
	if ( szWeapID == CSW_AK47 && g_svd[id])
	{
		set_pev(id, pev_viewmodel2, V_MODEL)
		set_pev(id, pev_weaponmodel2, P_MODEL)
	}
	return PLUGIN_HANDLED
}
public checkWeapon(id)
{
	new plrClip, plrAmmo, plrWeapId
	plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
	
	
	if (plrWeapId == CSW_AK47 && g_svd[id])
	{
		checkModel(id)

		
		new Ent = get_weapon_ent(id,plrWeapId)
		new Float:N_Speed
		if(Ent) 
		{
			N_Speed = get_pcvar_float(cvar_speed)
			new Float:Delay = get_pdata_float( Ent, 46, 4) * N_Speed	
			if (Delay > 0.0) {
				set_pdata_float( Ent, 46, Delay, 4)
			}
		}
	}
	else 
	{
		return PLUGIN_CONTINUE
	}
	

	
	return PLUGIN_HANDLED
}

// Create W class for weapon :D
public forward_setmodel(Entity, const Model [])
{
	// Entity is not valid
	if (!is_valid_ent(Entity))
		return FMRES_IGNORED
		
	// Not ak47
	if(!equal(Model, "models/w_ak47.mdl")) 
		return FMRES_IGNORED;
		
	// Get classname
	static szClassName[33]
	entity_get_string(Entity, EV_SZ_classname, szClassName, charsmax(szClassName))
		
	// Not a Weapon box
	if ( !equal ( szClassName, "weaponbox" ) )
		return FMRES_IGNORED
	
	// Some vars
	static iOwner, iStoredAkID
	
	// Get owner
	iOwner = entity_get_edict(Entity, EV_ENT_owner)
	
	// Get drop weapon index
	iStoredAkID = find_ent_by_owner(-1, "weapon_ak47", Entity)
	
	// Entity classname is weaponbox, and ak47 was founded
	if(g_svd[iOwner] && is_valid_ent(iStoredAkID))
	{
		// Setting weapon options
		entity_set_int(iStoredAkID, EV_INT_impulse, 1995)
		
		
		
		// Reset user vars
		g_svd [ iOwner ] = false
		
		
		entity_set_model(Entity, W_MODEL)
		
		return FMRES_SUPERCEDE
	}
	
	return FMRES_IGNORED
}

//someone has bought our extra item...

public zp_extra_item_selected(player, itemid) 
{
    if (itemid == g_hegren)
    {
        if(!g_svd[player])
        {
            client_print(player, print_chat, "[TEO] you need have a SVDEX first")
            zp_set_user_ammo_packs(player, zp_get_user_ammo_packs(player)+ m203_cost ) 
            
            return;
        }
        
        ammo_hud(player,0);
        g_ammo[player] += 5
        client_print(player,print_chat, "You bought 5 nade for SVDEX");
        ammo_hud(player,1);
    }
    
    if(itemid == g_itemid)
    {    
        if(g_svd[player] && user_has_weapon(player, CSW_AK47))
        {
            client_print(player, print_chat, "[TEO]You already have a SVDEX")
            zp_set_user_ammo_packs(player, zp_get_user_ammo_packs(player)+ weapon_cost )
	 
            
            return;
        }
        fm_give_item(player,"weapon_ak47")
        fm_give_item(player,"ammo_9mm")      
        client_print(player,print_chat,"[TEO] You Bought a SVDEX, Time to hunt Zombie ")
        client_print(player, print_chat, "[TEO] Press key E to zoom and ATTACK2 to launch the nade")
        g_svd[player] = true
        g_ammo[player] = 5
        ammo_hud(player,1)
	cs_set_user_bpammo(player, CSW_AK47, 90)			
    }    
}  

//when player press key Attack2 or E
public forward_CmdStart(id, uc_handle, seed)
{
	new button = get_uc(uc_handle, UC_Buttons)
	new ent = find_ent_by_owner(-1, "weapon_ak47", id)
	new fInReload = get_pdata_int(ent, m_fInReload, 4)
	if(is_user_alive(id) && !zp_get_user_zombie(id) && get_user_weapon(id) == CSW_AK47 && g_svd[id])
	{
		 if(entity_get_int(id, EV_INT_button) & IN_ATTACK2)
		 {
		 	launch_nade(id)
			return FMRES_IGNORED
		 }
		 if (button & IN_USE)
		 {
			set_pev(id, pev_button, button &~ IN_USE)
			if (get_gametime() - zoom_delay[id] >= 0.5  && !fInReload && get_pcvar_num(cvar_zoom))
			{
				if (g_hasZoom[id])
				{
					g_hasZoom[id] = false
					cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
				}
				else
				{
					g_hasZoom[id] = true
					cs_set_user_zoom(id, CS_SET_AUGSG552_ZOOM, 0)
				}
				zoom_delay[id] = get_gametime()
			}
		}
	}
	return FMRES_IGNORED
}
	 	     
//dmg multipler
public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
    if ( is_user_alive( attacker ) && get_user_weapon(attacker) == CSW_AK47 && g_svd[attacker] )
    {
        SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmg_multi ) )
    }
}
   
  
//m203 fire...
public launch_nade(id)
{
  if(g_svd[id] == 0 || g_m203_loaded[id] == 0 || !(is_user_alive(id)))
    return PLUGIN_CONTINUE

  if(g_ammo[id] == 0)
  {
    client_print(id, print_center, "[TEO] You dont have more nade")
    return PLUGIN_CONTINUE
  }

  entity_set_int(id, EV_INT_weaponanim, 3)

  new Float: Origin[3], Float: Velocity[3], Float: vAngle[3], Ent

  entity_get_vector(id, EV_VEC_origin , Origin)
  entity_get_vector(id, EV_VEC_v_angle, vAngle)

  Origin[2] = Origin[2] + 10

  Ent = create_entity("info_target")

  if (!Ent) return PLUGIN_HANDLED

  entity_set_string(Ent, EV_SZ_classname, "m203_nade")
  entity_set_model(Ent, W_NADE)

  //set size
  new Float:MinBox[3] = {-1.0, -1.0, -1.0}
  new Float:MaxBox[3] = {1.0, 1.0, 1.0}
  entity_set_vector(Ent, EV_VEC_mins, MinBox)
  entity_set_vector(Ent, EV_VEC_maxs, MaxBox)

  entity_set_origin(Ent, Origin)
  entity_set_vector(Ent, EV_VEC_angles, vAngle)

  entity_set_int(Ent, EV_INT_effects, 2)
  entity_set_int(Ent, EV_INT_solid, 1)
  entity_set_int(Ent, EV_INT_movetype, 10)
  entity_set_edict(Ent, EV_ENT_owner, id)

  VelocityByAim(id, 2500 , Velocity)
  entity_set_vector(Ent, EV_VEC_velocity ,Velocity)
  //sound when lauch...
  emit_sound(id,CHAN_VOICE,"weapons/svdex-shoot2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) 

  g_m203_loaded[id] = 0

  ammo_hud(id,0)
  g_ammo[id]--
  ammo_hud(id,1)

  new parm[1]
  parm[0] = Ent

  if(get_pcvar_num(cvar_trail))
    set_task(0.2, "grentrail",id,parm,1)
  
  parm[0] = id
 
  set_task(get_pcvar_float(cvar_reload), "m203_reload",id+9910,parm,1)
  client_print(id, print_center, "[TEO]reloading")

  return PLUGIN_CONTINUE
}

public m203_reload(parm[])
{  
  g_m203_loaded[parm[0]] = 1
}
//when m203 nade touch something...
public m203_touch(Nade, Other)
{
	if(!pev_valid(Nade))
		return
		
	// Get it's origin
	static Float:origin[3]
	pev(Nade, pev_origin, origin)
	
	// Explosion
	engfunc ( EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
	write_byte (TE_EXPLOSION)
	engfunc(EngFunc_WriteCoord, origin[0]) // Position X
	engfunc(EngFunc_WriteCoord, origin[1]) // Position Y
	engfunc(EngFunc_WriteCoord, origin[2]) // Position Z
	write_short (xplode) // Sprite index
	write_byte (40) // Scale
	write_byte (30) // Frame rate
	write_byte (0) // Flags
	message_end ()
	new id = pev(Nade, pev_owner)
	
	for(new i = 0; i < sizeof sound_exp; i++)
        emit_sound(id,CHAN_VOICE,sound_exp[i], 1.0, ATTN_NORM, 0, PITCH_NORM) 
	
	
	// Owner
	static owner  ; owner = pev(Nade, pev_owner)	
	
	// Make a loop
	for(new i = 1; i < g_MaxPlayers;i++)
	{
		//not alive
		if (!is_user_alive(i))
		      continue
								
		// Godmode
		if (get_user_godmode(i) == 1)
			continue
			
		// Human/Survivor
		if (!zp_get_user_zombie(i) || zp_get_user_survivor(i))
			continue
			
		// Get victims origin
		static Float:origin2 [3]
		pev(i, pev_origin, origin2)
		
		// Get distance between those origins
		static Float:distance_f ; distance_f = get_distance_f(origin, origin2)
		
		// Convert distnace to non-float
		static distance ; distance = floatround(distance_f)
		
		// Radius
		static radius ; radius = get_pcvar_num(cvar_radius)
		
		// We are in damage radius
		if ( distance <= radius )
		{
			// Fake damage
			fakedamage(i, "grenade", 0.0, DMG_BLAST)
			
			// Max damage
			static maxdmg ; maxdmg = get_pcvar_num(cvar_damage)
			
			// Normal dmg
			new Damage
			Damage = maxdmg - floatround(floatmul(float(maxdmg), floatdiv(float(distance), float(radius))))
			
			// Calculate health
			new health = get_user_health(i)
			
			// We have at least 1 hp
			if(health - Damage >= 1)
			{
				// New health
				set_user_health(i, health - Damage) 
				make_knockback(i, origin, get_pcvar_float(cvar_knockback) * Damage)
			}
			else
			{
				// We must die
				death_message(owner,i,"grenade",1)
				
				// I hope they'll not find the bodies....
				origin2 [ 2 ] -= 45.0
			}
		}
	}
	
	// Breakable
	static ClassName[32]
	pev(Other, pev_classname, ClassName, charsmax(ClassName))
	if(equal(ClassName,"func_breakable"))
	{
		// Entity health
		static Float:health
		health = entity_get_float(Other, EV_FL_health)
		
		if (health <= get_pcvar_num(cvar_damage))
		{
			// Break it
			force_use(owner, Other)
		}
	}
	
	// Remove grenade
	engfunc(EngFunc_RemoveEntity, Nade)
}

// Death message
public death_message(Killer, Victim, const Weapon[], ScoreBoard)
{
	// Block death msg
	set_msg_block(g_msgDeathMsg, BLOCK_SET)
	ExecuteHamB(Ham_Killed, Victim, Killer, 2)
	set_msg_block(g_msgDeathMsg, BLOCK_NOT)
	
	// Death
	make_deathmsg(Killer, Victim, 0, Weapon)
	
	// Ammo packs
	zp_set_user_ammo_packs(Killer, zp_get_user_ammo_packs(Killer) + get_pcvar_num(cvar_bonus))
	
	// Update score board
	if ( ScoreBoard )
	{
		message_begin(MSG_BROADCAST, g_msgScoreInfo)
		write_byte( Killer ) // id
		write_short(pev(Killer, pev_frags)) // frags
		write_short(cs_get_user_deaths(Killer)) // deaths
		write_short(0) // class?
		write_short(get_user_team(Killer)) // team
		message_end()
		
		message_begin(MSG_BROADCAST, g_msgScoreInfo)
		write_byte(Victim) // id
		write_short(pev(Victim, pev_frags)) // frags
		write_short(cs_get_user_deaths(Victim)) // deaths
		write_short(0) // class?
		write_short(get_user_team(Victim)) // team
		message_end()
	}
}

 
ammo_hud(id, sw)
{
  new s_sprite[33]
  format(s_sprite,32,"number_%d",g_ammo[id])
  
  if(sw)
  {
    message_begin( MSG_ONE, gMsgID, {0,0,0}, id )
    write_byte( ICON_SHOW ) // status
    write_string( s_sprite ) // sprite name
    write_byte( 0 ) // red
    write_byte( 150 ) // green
    write_byte( 0 ) // blue
    message_end()
  }
  else
  {
    message_begin( MSG_ONE, gMsgID, {0,0,0}, id )
    write_byte( ICON_HIDE ) // status
    write_string( s_sprite ) // sprite name
    write_byte( 0 ) // red
    write_byte( 160 ) // green
    write_byte( 0 ) // blue
    message_end()
  }
}



public grentrail(parm[])
{
  new gid = parm[0]

  if (gid) 
  {
    message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
    write_byte( TE_BEAMFOLLOW )
    write_short(gid) // entity
    write_short(m_iTrail)  // model
    write_byte( 10 )       // life
    write_byte( 5 )        // width
    write_byte( 255 )      // r, g, b
    write_byte( 255 )    // r, g, b
    write_byte( 255 )      // r, g, b
    write_byte( 100 ) // brightness
		
    message_end() // move PHS/PVS data sending into here (SEND_ALL, SEND_PVS, SEND_PHS)
  }
}
//knock back...
public make_knockback ( Victim, Float:origin [ 3 ], Float:maxspeed )
{
	// Get and set velocity
	new Float:fVelocity[3];
	kickback ( Victim, origin, maxspeed, fVelocity)
	entity_set_vector( Victim, EV_VEC_velocity, fVelocity);

	return (1);
}

//stock...

stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
	// who knows what wpnName will be
	static newName[24];

	// need to find the name
	if(wpnid) get_weaponname(wpnid,newName,23);

	// go with what we were told
	else formatex(newName,23,"%s",wpnName);

	// prefix it if we need to
	if(!equal(newName,"weapon_",7))
		format(newName,23,"weapon_%s",newName);

	return fm_find_ent_by_owner(get_maxplayers(),newName,id);
} 

stock kickback( ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3])
{
	// Find origin
	new Float:fEntOrigin[3];
	entity_get_vector( ent, EV_VEC_origin, fEntOrigin );

	// Do some calculations
	new Float:fDistance[3];
	fDistance[0] = fEntOrigin[0] - fOrigin[0];
	fDistance[1] = fEntOrigin[1] - fOrigin[1];
	fDistance[2] = fEntOrigin[2] - fOrigin[2];
	new Float:fTime = (vector_distance( fEntOrigin,fOrigin ) / fSpeed);
	fVelocity[0] = fDistance[0] / fTime;
	fVelocity[1] = fDistance[1] / fTime;
	fVelocity[2] = fDistance[2] / fTime;

	return (fVelocity[0] && fVelocity[1] && fVelocity[2]);
}
 
@50: thank ... nhưng không được gọi tên thế nhé :-w
mà nói thẳng ra thôi :D ( tớ cần cái giống SA :D )
 
Chỉnh sửa cuối:
@Đôn Ki: Đùa đó , hihi , bên Biệt Đội nó ntn ??? ...giải thích tui sem..
@Tèo : Code nhìn quen quen...Đã nói là thay vì set health lại thì dùng ExecuteHam( Ham_TakeDamage )rồi ==" . Tui chưa test thử nhưng mà 1)Nếu ở forward reload , thì thêm check nút reload làm j ?
2) forward CMD_start , ông nên check nếu là zombie hoặc ko có SVD hoặc ko có sống hoặc không có đang cầm vũ khí đc thay thế SVD thì FMRES_IGNORED ..Như vậy thì nó sẽ không phải chạy những function thừa...
3)
PHP:
  for(new i = 0; i < sizeof sound_exp; i++) 
        emit_sound(id,CHAN_VOICE,sound_exp[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
Có bao nhiêu sound nó play hết bấy nhiêu hả ông :| .
4)
PHP:
            // Fake damage 
            fakedamage(i, "grenade", 0.0, DMG_BLAST) 
             
            // Max damage 
            static maxdmg ; maxdmg = get_pcvar_num(cvar_damage) 
             
            // Normal dmg 
            new Damage 
            Damage = maxdmg - floatround(floatmul(float(maxdmg), floatdiv(float(distance), float(radius)))) 
             
            // Calculate health 
            new health = get_user_health(i) 
             
            // We have at least 1 hp 
            if(health - Damage >= 1) 
            { 
                // New health 
                set_user_health(i, health - Damage)  
                make_knockback(i, origin, get_pcvar_float(cvar_knockback) * Damage) 
            } 
            else 
            { 
                // We must die 
                death_message(owner,i,"grenade",1) 
                 
                // I hope they'll not find the bodies.... 
                origin2 [ 2 ] -= 45.0 
            }
Dùng Hamsandwich để tạo DMG như đã nói ở trên ...Mấy dòng này có thể bỏ đc r` :P .
5) Public DeathMSG bỏ luôn ! . Hook deathmsg , check xem có cầm SVD , thỏa đkiện hay không, rồi thưởng j thì thưởng ^^!.
6) Dùng cả 2 cái kickback và knockback luôn làm jề ^^!
Nhiêu đó ý kiến thôi :D . Có lỗi j thì nói luôn đi :-s .
 
Có khả năng nào làm 1 cái plugin mà extra 1 cái đèn pin soi hẳn hoi như flashlight rồi block chức năng block flashlight thông thường không nhỉ.
 
@50: nó đại khái như thế này 00:00:00 nhưng số to :) càng to càng thích :D cái số 00 cuối cùng chạy rất nhanh
 
Đấy là tích tắc :-? Hình như cả 2 cái plug trên không có đâu.
 
Chỉnh sửa cuối:
Status
Không mở trả lời sau này.
Back
Top