[AMX] Tổng hợp Code, Plug do Mem chế hoặc giới thiệu

  • Thread starter Thread starter Orpheus
  • Ngày gửi Ngày gửi
*Theo Yêu cầu của Chief* đem class zombie sang đây post :))
--------------------------------------------
[ZP] Zombie Class: Lockerz Zombie
[spoil]
Tên: Lockerz Zombie
Loại: Zombie Class
Dành cho: Zombie Plague Mod
Tác giả: Dias

Chức năng chính của class:
- Có thể khóa súng của human, Nếu súng đã bị khóa, thì thằng human đó sẽ không thể bắn được, và đồng thời cả dao cũng bị khóa. Nói chung thằng human đó không thể làm bất cứ việc gì, ngoài việc chạy. Chạy hoặc Chết

- Sau 10 giây (Tùy chỉnh) sau khi bị zombie khóa súng, khẩu súng tự động sẽ mở lại.
- Sau 30 giây (Tủy chỉnh) sau khi khóa súng của human, có thể tiếp tục sử dụng tiếp chức năng khóa súng.

Cvar:
- ls_distance | Khoảng cách để có thể khóa được cây súng | Mặc định: 750
- lz_cooldown | Thời gian để tiếp tục sài chức năng khóa súng | Mặc định: 30
- lz_cooldown_target | Thời giản để bỏ khóa súng sau khi bị khóa | Mặc định: 10

Cách dùng:
- Vào game chọn class rồi nhắm và ấn (G). Nếu chúng thì cái thằng human đó sẽ bị khóa súng. và màn hình của bạn sẽ hiện lên chữ: "Target Locked [Hit]" để báo hiệu bắn trúng.

Tải xuống:
- Xem file đính kèm.
[/spoil]
 

Attachments

Chỉnh sửa cuối:
ai help tèo cái remove entity đi :((
PHP:
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 )
		{
			
			// 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))))
			
			set_pev(Nade, pev_classname, "grenade")
			for(new i = 1; i < g_MaxPlayers;i++)
			ExecuteHamB(Ham_TakeDamage, i, "grenade", owner, Float:Damage, DMG_BLAST)
			//remove m203 nade...
			engfunc(EngFunc_RemoveEntity, Nade)

			
			// 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)
}
thêm dòng remove entity rùi, nhưng ko dc :((
PHP:
engfunc(EngFunc_RemoveEntity, Nade)
 
ai help tèo cái remove entity đi :((
PHP:
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 )
		{
			
			// 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))))
			
			set_pev(Nade, pev_classname, "grenade")
			for(new i = 1; i < g_MaxPlayers;i++)
			ExecuteHamB(Ham_TakeDamage, i, "grenade", owner, Float:Damage, DMG_BLAST)
			//remove m203 nade...
			engfunc(EngFunc_RemoveEntity, Nade)

			
			// 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)
}
thêm dòng remove entity rùi, nhưng ko dc :((
PHP:
engfunc(EngFunc_RemoveEntity, Nade)
ko đc là sao ? nade vẫn đứng yên ở chỗ touch ?
 
Thử cái này xem:
PHP:
new grenade_class

find_ent_by_class(grenade_class , "grenade"); // grenade ở đây là class name
remove_entity(grenade_class)

@Ryokin:
- Giúp tui cái này với. tụi tạo 1 entity và set model, set int set hết cho nó sau đó tui register_touch.
Mà có register kiểu gì
khi chạm vào entity thì cái touch func vẫn ko chạy.
ông cho tui 1 đoạn code mẫu tạo entity và register touch đi

P/s đây là post thứ 500 :))
 
Chỉnh sửa cuối:
Thử cái này xem:
PHP:
new grenade_class

find_ent_by_class(grenade_class , "grenade"); // grenade ở đây là class name
remove_entity(grenade_class)

@Ryokin:
- Giúp tui cái này với. tụi tạo 1 entity và set model, set int set hết cho nó sau đó tui register_touch.
Mà có register kiểu gì
khi chạm vào entity thì cái touch func vẫn ko chạy.
ông cho tui 1 đoạn code mẫu tạo entity và register touch đi

P/s đây là post thứ 500 :))
- cái grenade ko cần làm thế , ent ở trong func đó rồi thì find ent làm gì
- cái func ông tự viết ra đi, tui chỉ giúp chỉnh sửa chứ ko làm hộ đâu , có nh` plugin dùng touch rồi ma`..
 
- Do trình độ còn dở nên làm dc vài cái plugins nhảm ;)). cái nào dc thì lấy nhá...
-------------------------------
1. FastRun (Bấm Shift để chạy nhanh | Bấm chứ không Đè)
2. Set Origin (Đứng ở chỗ này, bấm nút dịch chuyển sang chỗ khác | Khi vào game, tới chỗ mún teleport gõ "get_origin". Rồi giờ đi đâu thì đi, thoải mái, muốn trở lại chỗ lúc nãy bấm "set_origin")
3. HeGrenade Touched (Khi chọi bom he, chỉ cần đụng 1 cái gì đó là nó nổ ngay. Không chờ đợi)
4. Drop User Weapon (vào Console bấm "Bind F1 drop_weapon", rồi giờ ra ngoài chơi. gặp thằng nào chỉ vào thằng đó rồi bấm F1. phóng sét tới đánh thằng đó rớt súng =)))
5. Fix Hitboxses (Fix lại hitzone, models zombie của bạn là con mèo chẳng hạn. thì theo mặc định, mình bắn phía trên xa con mèo nhưng vẫn bị dính. nhưng đây plugins này cho phép models nào ra model đó. không có vụ bắn bắn trên dính dưới) - Plugin này là private, bạn phải giải dc pass trước :)).
- Thấy các bác vl quá share luôn =]], pass: cuong123@
------------------------------------------
Có bạn nào Vọc cái Ion Cannon bao giờ chưa ;)). Nó là thứ weapon cũng hơi "Hot" đấy. tiếc là nó nằm trong Weapon Mod. nên kiếm thời gian làm nó thành cho CS sài money $ của cs... Tác Weapon Mod ra...
[video=youtube;EyNT_JqB1JY]http://www.youtube.com/watch?v=EyNT_JqB1JY[/url][/video]



làm sao để add một plugin vào zậy bác ,chỉ với !!thấy toàn plugin hay nhug ko pít add vào
 
@ryokin
PHP:
#include <amxmodx>
#include <fakemeta>
#include <engine>

#define PLUGIN "123"
#define VERSION "1.0"
#define AUTHOR "Dias"

new gBombSprite
new Float:g_origin[3]
new Float:Mins[3]
new Float:Maxs[3]

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
         register_clcmd("set", "set_bomb")
	register_clcmd("set_explode", "explode")
	register_touch("bomb", "player", "explode")
}

public plugin_precache()
{
	precache_model("models/player/Yuna/Yuna.mdl")
	gBombSprite = precache_model( "sprites/he_new1.spr" )
}

public set_bomb(id)
{
	new yuna = create_entity("info_target")
         
	entity_get_vector(id, EV_VEC_origin, g_origin)
	entity_set_int(yuna, EV_INT_solid, 2)
	entity_set_model(yuna, "models/player/Yuna/Yuna.mdl")
	entity_set_origin(yuna, g_origin)
	entity_set_float(yuna, EV_FL_takedamage, 1.0)
	entity_set_float(yuna, EV_FL_health, 100.0)
	entity_set_size(yuna, Mins, Maxs)
	entity_set_string(yuna, EV_SZ_classname, "func_yuna")
	entity_set_edict(yuna, EV_ENT_owner, 1)
	
	
}

public explode(id)
{	
	new origin[3]
	get_user_origin(id, origin, 3)
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_EXPLOSION)
	write_coord(origin[0])
	write_coord(origin[1])
	write_coord(origin[2])
         write_short(gBombSprite)
	write_byte(100)
	write_byte(0)
	write_byte(0)
	message_end
	
	new entity1
	entity1 = find_ent_by_class(entity1, "func_yuna")
	remove_entity(entity1)
	
	
}

Sao nó ko work nhỉ mặc dù đã tạo dc entity nhưng đụng vào thì chả ra làm sao cả
 
-
PHP:
 register_touch("func_yuna", "player", "explode_touch_yuna")
- cái cmd và func touch phải để riêng
PHP:
public explode_touch_yuna(yuna, id)
{ 
    if(is_valid_ent(yuna) && is_user_alive(id))
    ....
}
 
bác nào rảnh viết nốt hướng dẫn add plugin cho mấy newbie chỉ thích dùng không thích làm đi :)
cho cả .sma và .amxx nữa
rồi nhờ mod up page 1 \m/
 
@ryokin
- để thử cái client_print khi có dấu hiệu touch, thì cứ vào chạm hoài ko thấy j hết :|

ông chỉ tui cái code entity có thể nhận dạng và tiêu diệt player dc ko ?.
 
ùa
PHP:
register_touch("m203_nade", "*", "m203_touch")
trong đó: m203_nade là class name gọi trong func launch nade.
 
có ai có cái plugin hòm tiếp tế chơi trong zombie không cho em xin :D:D:D
 
Ai Giúp tui cái này với. Tui làm class này khi bấm nút thì nó sẽ get những player ở gần nhất, và thực hiện func trên player đó.
Nhưng mà chả biết cách get. nếu cái này sài ở event_death thì nó có id victim rồi nên dễ còn cái này tui muốn get khoảng cách từ player victim đến mình,
và nếu trong phạm vi đạt yêu cầu thì func sẽ chạy.
Hd tui get với :|

PHP:
public do_skill(id)
{
	if(is_user_alive(id) && zp_get_user_zombie(id))
	{
		if(zp_get_user_zombie_class(id) == g_quark && can_do_skill[id] == true)
		{
			static Float:origin[3]
			entity_get_vector(id, EV_VEC_origin, origin)

			for(new i = 1; i < MAX_PLAYERS; i++)
			{
				if(is_user_alive(i))
					continue
				
				if(!zp_get_user_zombie(i))
					continue
				
				static Float:attacker_origin[3]
				new Float:victim_origin[3]
				new Float:current_distance
				
				pev (id, pev_origin, attacker_origin)
				pev (i, pev_origin, victim_origin)
				current_distance = get_distance_f(attacker_origin, victim_origin)
				
				if(current_distance <= distance)
				{
					set_user_maxspeed(i, -1.0)
				}
			}
			
			can_do_skill[id] = false
			set_task(get_pcvar_float(cooldown_time), "ability_reload", id)
			} else {
			client_print(id, print_chat, "[Quark Zombie] You can't do your ability now. Please wait for %i", get_pcvar_num(cooldown_time))
		}
	} else {
	}
}
 
Chỉnh sửa cuối:
-
PHP:
 for(new i = 0; i < MAX_PLAYERS; i++)
- check ent trong 1 phạm vi origin tui đã từng nói rồi mà, đừng dùng get_distance...
- cooldown thì hook float mà check, đừng dùng set task
 
Thực tình thì 2 cái ông vừa nói tui chả biết gì hết :)).
có thể giải thích lại từng cái ko

mà tui search toàn bộ post của ông thì ko thấy có cái nào là check ent trong 1 phạm vi origin cả.
=> http://forum.gamevn.com/search.php?searchid=252988&pp=

Search đi search lại thì thấy Ryokin giúp hơi nhiều, đa số toàn reply cho mình :))
 
Chỉnh sửa cuối:
Ai có plugin hiện 1 spr duy nhất cho xin đi
chứ nó hiện đè cái headshot đè lên cái ngôi sao 6 cánh ghét quá.
 
Back
Top