[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.
Hồi đấy mấy server này dùng ZP cũ lắm ấy... nhìn dòng counter-terrorist win là biết chưa hoàn chỉnh hẳn 8-}
 
Topic thịnh hành nghiệp vụ counterstrike của những kẻ thích spam à hỏi hok trả lời.
Hỏi lại: ai biết các nào tăng thêm lượn đạn của súng thì cho xin
 
@mútbeyouloveme : cẩn thận hoặc ăn gạch . lượng đạn gì ( clip hay đạn dự trữ mới được )? ?? Hỏi vậy ai mà tlời cho , nc cộc lốc !
 
Hỏi hồi nào mà kêu người ta không trả lời ? Luyên thuyên thật ..
 
@mustbeyouloveme: spam đã có mod giải quyết,mọi việc vẫn hoạt động trong quỹ đạo thì ko có chuyện gì xảy ra!
Cậu đặt cậu hỏi thì phải rõ ràng và chờ người có khả năng giải đáp trả lời cho bạn,chửa chi đã rối cả lên.
 
bác 5cor fix kill team lại dùm thằng em cây mp5 launcher đi...
để thằng em conv nó qua AK ... cho SV...

---------- Post added at 08:15 ---------- Previous post was at 08:03 ----------

thằng em sắp thi... lười quá... Mong bác giúp cho...
 
Ném Code lên đây mọi người mới làm dc chứ...
 
Chief:hd tôi dùng ZD coi
ko có hd
 
code đây...
PHP:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <zombieplague>
#include <engine>
#include <hamsandwich>
#include <xs>

new Float:cl_pushangle[33][3]
new g_ak47[33]
new g_m203_loaded[33]
new g_ammo[33]
new g_lastweap[33]
new g_itemid
new g_hegren
/// new MaxPlayers

new cvar_crazynade ,cvar_knockback ,cvar_trail ,cvar_radius ,cvar_damage , cvar_bonus ,cvar_reload ,cvar_remove , cvar_zoom , cvar_recoil , cvar_dmg_multi

new gmsgDeathMsg
new gMsgID
new g_hasZoom[33]

new m_iTrail;
new xplode;


#define ICON_HIDE 0
#define ICON_SHOW 1
#define COST 2     // cost of Grenade
#define AK47COST 30 // cost of Weapon :D
#define fm_create_entity(%1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1))

public plugin_init() {
  register_plugin("[ZP] Extra Item : AK Nade Launcher","0.1","Teobrvt1995")
  
//  register_logevent("RoundEnd",2,"1=Round_End") 
  register_event("DeathMsg","player_die","abd")  
  register_event("CurWeapon","handle_gun","be","1=1")
  RegisterHam(Ham_Killed, "player", "player_die")
  RegisterHam(Ham_Spawn, "player", "player_spawn")
  RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  
  
  register_forward(FM_CmdStart, "forward_CmdStart")
  register_forward(FM_SetModel, "forward_setmodel") 
  
  cvar_recoil = register_cvar("zp_akm203_recoil", "0")
  cvar_dmg_multi = register_cvar("zp_akm203_dmg_multi", "3")
  cvar_crazynade = register_cvar("zp_akm203_crazynade","0") 
  cvar_knockback = register_cvar("zp_akm203_conc","2.0")
  cvar_trail = register_cvar("zp_akm203_trail","1") 
  cvar_radius = register_cvar("zp_akm203_rad","300")  
  cvar_damage = register_cvar("zp_akm203_dmg","1000") 
  cvar_bonus = register_cvar("zp_akm203_bonus","2") 
  cvar_reload = register_cvar("zp_akm203_reloadtime","3.0") 
  cvar_remove = register_cvar("zp_akm203_remove","0") 
  cvar_zoom = register_cvar("zp_akm203_zoom", "1")
  
  g_itemid = zp_register_extra_item("AK  Nade Launcher",AK47COST,ZP_TEAM_HUMAN)
  g_hegren = zp_register_extra_item("Grenades for AK",COST, ZP_TEAM_HUMAN) 
  gmsgDeathMsg = get_user_msgid("DeathMsg")
  gMsgID = get_user_msgid("StatusIcon")

  RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack")
  RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack_post",1) 
   
}
public plugin_precache()           /// Precache models, sounds,bla bla bla..
{
  precache_model("models/v_ak47laucher.mdl")
  precache_model("models/p_ak47laucher.mdl")
  precache_model("models/w_ak47laucher.mdl")
  precache_model("models/grenade.mdl")
  precache_sound("misc/glauncher.wav")
  precache_sound("misc/a_exm2.wav")

  m_iTrail = precache_model("sprites/smoke.spr")
  xplode = precache_model("sprites/explode_nade.spr")
}

public zp_user_infected_post(id)   /// Forward when user is infected
{	
   if(g_ak47[id])
   //client_print(id,print_chat,"[ZP] You must buy an AK Nade Launcher again.")
   ammo_hud(id,0)
   g_ak47[id] = 0
   g_ammo[id] = 0
}


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


public player_die(id)        
{
  if(g_ak47[id])
  ammo_hud(id,0)
  g_ammo[id] = 0
  g_ak47[id] = 0
//  client_print(id,print_chat,"[ZP] Dead...")
  return PLUGIN_CONTINUE
}

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_ak47[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)
	}
	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_ak47[id] )
            {
		      ammo_hud(id,0)
		      g_ak47[id] = false
		      g_ammo[id] = 0		       
	//	      client_print(id,print_chat,"[ZP] You must buy AK Nade Launcher again.") // Just check :D
            }      	     
}

public zp_extra_item_selected(player, itemid) 
{
    if (itemid == g_hegren)
    {
        if(!g_ak47[player])
        {
            client_print(player, print_chat, "[ZP] you need have an AK 47 grenade launcher first")
            zp_set_user_ammo_packs(player, zp_get_user_ammo_packs(player)+ COST ) 
            
            return;
        }
        
        ammo_hud(player,0);
        g_ammo[player] += 6
        client_print(player,print_chat, "You bought 6 nade grenade for AK");
        ammo_hud(player,1);
    }
    
    if(itemid == g_itemid)
    {    
        if(g_ak47[player] && user_has_weapon(player, CSW_AK47))
        {
            client_print(player, print_chat, "You already have an AK 47 grenade launcher")
            zp_set_user_ammo_packs(player, zp_get_user_ammo_packs(player)+ AK47COST )
	 
            
            return;
        }
        fm_give_item(player,"weapon_ak47")
        fm_give_item(player,"ammo_9mm")
        fm_give_item(player,"ammo_9mm")
        fm_give_item(player,"ammo_9mm")
        fm_give_item(player,"ammo_9mm")
        client_print(player,print_chat,"[ZP] You Bought an AK-nade launhcer, Time to hunt Zombie :D ")
        client_print(player,print_chat,"Only buy grenades when you're out of grenades.")
        g_ak47[player] = true
        g_ammo[player] = 6
        ammo_hud(player,1)
	cs_set_user_bpammo(player, CSW_AK47, 120)	
	cs_set_weapon_ammo(player, 40)
    }    
}  


public forward_setmodel(entity, model[]) 
{
  if (!is_valid_ent(entity)) 
  {
    return FMRES_IGNORED
  }

  if (equal(model, "models/w_ak47.mdl")) 
  {
    new classname[11]
    entity_get_string(entity, EV_SZ_classname, classname, 10)
  
    //client_print(0, print_chat, "Model: %s Classname: %s", model, classname)

    if (equal(classname, "weaponbox")) 
    {
      //client_print(0, print_chat, "Setting model")

      entity_set_model(entity, "models/w_ak47laucher.mdl")

      return FMRES_SUPERCEDE
    }
  }

  return FMRES_IGNORED
}

public forward_CmdStart(id, uc_handle, seed)
{
  if(is_user_alive(id) && !zp_get_user_zombie(id) && get_user_weapon(id) == CSW_AK47)
  {  	     
    if (entity_get_int(id, EV_INT_button) & IN_ATTACK2)
    {
      launch_nade(id)
      return FMRES_IGNORED
     }
     if (get_pcvar_num(cvar_zoom))
		{
			if( ( get_uc( uc_handle, UC_Buttons ) & IN_USE ) && !( pev( id, pev_oldbuttons ) & IN_USE ) )
			{
				if(!g_hasZoom[id] == true)
				{
					g_hasZoom[id] = true
					cs_set_user_zoom( id, CS_SET_FIRST_ZOOM, 0 )
					client_cmd(id,"spk weapons/zoom")
				}
				else if (g_hasZoom[id] && !g_ak47[id])
				{
					g_hasZoom[ id ] = false
					cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
				}
			
			}
			
		}
   }
   return FMRES_IGNORED
}
     		 	
public handle_gun(id)
{
  new clip, ammo
  new weap = get_user_weapon(id,clip,ammo)

  if(weap == CSW_AK47 && g_lastweap[id] != weap && g_ak47[id] )
  {
    ammo_hud(id,1)
    //client_print(id, print_chat, "Setting Model")
    entity_set_string(id, EV_SZ_viewmodel, "models/v_ak47laucher.mdl")
    entity_set_string(id, EV_SZ_weaponmodel, "models/p_ak47laucher.mdl")
  }
  else if(!g_ak47[id] || weap != CSW_AK47 )
  {
    ammo_hud(id,0)
  }
  g_lastweap[id] = weap

  return PLUGIN_HANDLED
}

public launch_nade(id)
{
  if(g_ak47[id] == 0 || g_m203_loaded[id] == 0 || !(is_user_alive(id)))
    return PLUGIN_CONTINUE

  if(g_ammo[id] == 0)
  {
    client_print(id, print_center, "[ZP] You dont have more nade :D")
    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)

  //client_print(id, print_center, "Origin: %f-%f-%f", Origin[0], Origin[1], Origin[2])
  //client_print(id, print_center, "vAngle: %f-%f-%f", vAngle[0], vAngle[1], vAngle[2])

  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, "models/grenade.mdl")

  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)
	
  emit_sound(id,CHAN_VOICE,"misc/glauncher.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(0, print_center, "reloading...just wait for 3s :D")

  return PLUGIN_CONTINUE
}

public m203_reload(parm[])
{  
  g_m203_loaded[parm[0]] = 1
}

public vexd_pfntouch(pToucher, pTouched) 
{
  new szClassName[32]

  if ( pToucher > 0) 
  {
    entity_get_string(pToucher, EV_SZ_classname, szClassName, 31)
  }
  if(equal(szClassName, "m203_nade")) 
  {
    if(!pTouched && get_pcvar_num(cvar_crazynade))
      return

    new damradius = get_pcvar_num(cvar_radius)
    new maxdamage = get_pcvar_num(cvar_damage)
    
    new tkill = 0
    new Float:fl_vExplodeAt[3]
    entity_get_vector(pToucher, EV_VEC_origin, fl_vExplodeAt)
    new vExplodeAt[3]
    vExplodeAt[0] = floatround(fl_vExplodeAt[0])
    vExplodeAt[1] = floatround(fl_vExplodeAt[1])
    vExplodeAt[2] = floatround(fl_vExplodeAt[2])
    new oid = entity_get_edict(pToucher, EV_ENT_owner)
    new origin[3],dist,i,Float:dRatio,damage

    for ( i = 0; i < 32; i++) 
    {
      if((is_user_alive(i)))
      {
        get_user_origin(i,origin)
	dist = get_distance(origin,vExplodeAt)
	if (dist <= damradius) 
	{	  
          dRatio = floatdiv(float(dist),float(damradius))
	  damage = maxdamage - floatround(floatmul(float(maxdamage),dRatio))

	  set_velocity_from_origin(i, fl_vExplodeAt, get_pcvar_float(cvar_knockback)*damage) 
 
          if(cvar_exists("mp_friendlyfire")) 
	  {
            if(i == oid)
              do_victim(i, oid, damage, 2)
	    else if( get_cvar_num("mp_friendlyfire")) 
	    {
	      if(get_user_team(i) == get_user_team(oid)) tkill = 0
	      do_victim(i,oid,damage,tkill)
	    }
	    else 
	    {
	      if(get_user_team(i) != get_user_team(oid)) 
	      {
		do_victim(i,oid,damage,0)
	      }	      		    	
	    }
	  }
          else if(i == oid)
            do_victim(i, oid, damage, 2)
	  else 
  	    do_victim(i,oid,damage,0)	  
        }
      }
    }

    message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    write_byte(17)
    write_coord(vExplodeAt[0])
    write_coord(vExplodeAt[1])
    write_coord(vExplodeAt[2] + 60)
    write_short(xplode)
    write_byte(20)
    write_byte(200)
    message_end()

    emit_sound(pToucher, CHAN_WEAPON, "misc/a_exm2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    
    remove_entity(pToucher)
  }
}

public do_victim(victim,attacker,damage,tk) 
{
  new namek[32],namev[32],authida[35],authidv[35],teama[32],teamv[32]
  get_user_name(victim,namev,31)
  get_user_name(attacker,namek,31)
  get_user_authid(victim,authidv,34)
  get_user_authid(attacker,authida,34)
  get_user_team(victim,teamv,31)
  get_user_team(attacker,teama,31)
  
 

  new Float:fl_dmg = float(damage)

  if(damage >= get_user_health(victim))
  {
    set_msg_block(gmsgDeathMsg,BLOCK_SET)
    fakedamage(victim, "grenade", fl_dmg, DMG_BLAST)  //user_kill(victim,1)
    set_msg_block(gmsgDeathMsg,BLOCK_NOT)

    if(is_user_alive(victim)) //some cases where damage is messed with WC3? then return
      return

    message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0,0,0}, 0)
    write_byte(attacker)
    write_byte(victim)
    write_byte(0)
    write_string("grenade")
    message_end()
    if(tk == 1)     
    {
      client_print(attacker,print_center,"%L", attacker, "KILLED_TEAMMATE")
      log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"grenade^"",
				namek,get_user_userid(attacker),authida,teama,namev,get_user_userid(victim),authidv,teamv)
    }
    else if(tk == 2)
    {
      log_message("^"%s<%d><%s><%s>^" killed self with ^"grenade^"",
				namek,get_user_userid(attacker),authida,teama)
    }
    else
    {
      new money = zp_get_user_ammo_packs(attacker)
      zp_set_user_ammo_packs(attacker, money + get_pcvar_num(cvar_bonus) )// award for kill
    }    
  }
  else 
  {
    fakedamage(victim, "grenade", fl_dmg, DMG_BLAST)

    if(tk == 1)
    {
	client_print(0,print_chat,"[ZP] You are attacking the teammate ///")
    }
  }
}

 
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()
  }
}


stock get_velocity_from_origin( ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3] )
{
    new Float:fEntOrigin[3];
    entity_get_vector( ent, EV_VEC_origin, fEntOrigin );

    // Velocity = Distance / Time

    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] );
}


// Sets velocity of an entity (ent) away from origin with speed (speed)

stock set_velocity_from_origin( ent, Float:fOrigin[3], Float:fSpeed )
{
    new Float:fVelocity[3];
    get_velocity_from_origin( ent, fOrigin, fSpeed, fVelocity )

    entity_set_vector( ent, EV_VEC_velocity, fVelocity );

    return ( 1 );
} 

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)
  }
}

stock fm_give_item(index, const item[]) {
	if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
		return 0;

	new ent = fm_create_entity(item);
	if (!pev_valid(ent))
		return 0;

	new Float:origin[3];
	pev(index, pev_origin, origin);
	set_pev(ent, pev_origin, origin);
	set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
	dllfunc(DLLFunc_Spawn, ent);

	new save = pev(ent, pev_solid);
	dllfunc(DLLFunc_Touch, ent, index);
	if (pev(ent, pev_solid) != save)
		return ent;

	engfunc(EngFunc_RemoveEntity, ent);

	return -1;
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
    if ( is_user_alive( attacker ) && get_user_weapon(attacker) == CSW_AK47 && g_ak47[attacker] )
    {
        SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmg_multi ) )
    }
}
 
@teobrvt1995:
- Nói căn bệnh của nó ra để mọi người fix...
 
nice thật
mới làm thêm 1 số cái mơi hơi Imba 1 tí
 
là khi entity chạm đất nổ, zombie, nemesis không mất máu nhưng mình + team lại mất :(
help...
 
@teo xem lai func touch đi, check damage radius nên dùng thế này
PHP:
#define RADIUS 250.0 //radius dmg
	
//func touch
get orgin của rocket... = origin
	new victim = -1
	
	while((victim = engfunc(EngFunc_FindEntityInSphere, victim, origin, RADIUS)) != 0) 
	{
		if(is_user_alive(victim) && zp_get_user_zombie(victim))
			do_damage...
	}
ko cần phải check owner vì đằng nào victim cũng là zombie mà chỉ human dùng đc bazoka
 
Cái plugin đấy set knockback ảo thật... Để thấp thấp chút mà dính nade vẫn văng cao lên..
 
Chief ơi hd tôi sử dụng cái ZD đi
 
@ Tèo : Dùng cách của Ryokin đi , chứ cách tạo damage của plugin đó , cũ rồi...:) . [ K phải là k sài đc ] , Tuy nhiên chuyển sang dùng Ham sandwich thì tốt hơn .
@ Ryokin : Cứ thêm check cho chắc ăn , ko ngốn nhiu đâu ^^!.
 
mình có plugin này cầm bomb lâu trên tay sẽ nổ mình muốn chỉnh cho nó cỡ 3s ko ném sẽ tự nổ như thế nào . bạn nào chỉ mình cách đóng khung code để post lên diễn đàn nha
mình up cái grenaderealism.sma lên bạn nào fix dùm mình nha

http://www.mediafire.com/?jacqrpq07vtlz7v đay nè
 
Chỉnh sửa cuối:
khung code là
PHP:
 và kết thúc là                             .[/  php]

Nhìn cái dòng này đi Hoàng[/COLOR][/B]
[php]#define EXPLODE_DELAY 10.0

Dòng này cho biết sau 10s rút chốt bom sẽ nổ...
 
Chỉnh sửa cuối:
Status
Không mở trả lời sau này.
Back
Top