[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
Cho mình hỏi là ngôn ngữ pawn với pascal thì cái nào phức tạp hơn nhỉ :)

đươc như pascal đã tôt, minh đã hoc pascal, c, autoit nhưng chưa thấy cai nao kho như cái này.
Hàm trong inc thi ko có ví dụ, lại còn id cua player, học mà nản!
 
ai cho xin cái plugin lúc mình có máu ~25HP thì nó hiện lên màn hình đỏ và ghi "you're hurt, get to cover", giống mw2 ý
10xetyg.jpg
hỏi ở đây khó vãi luyện , đếck ai trả lời :-w
 
VN-zombie: Không có plugins như thế hoặc là có thì cũng ko ai dỗi hơi đi nhận làm đặt hàng :-"
 
@sontung0:
- Tui làm dc 1 phần rồi, đó là khi bt` thì nó sẽ không hiện. Nhưng khi bị dính bomb, thì cái ent nó hiện lên, nhưng cái player nó ko ẩn đi, thành ra nó dính 2 cái lại với nhau. ông xem tui viết sai chỗ nào trong cái đoạn AddToFUlLPack sửa hộ tui đi, vọc cả từ sáng rồi. chưa ra

- Ent thì khi plugin chạy tui tạo 32 ent cho 32 player ồi, nên khi sài thì có hiện nó lên thôi. Nên phải check cho nó hiện đúng lúc, ko phải đang chơi mà nó hiện lên. 1 cái là check cho ent hiện hoặc ẩn, 1 cái là check cho player ẩn hay hiện....

PHP:
public fw_WhatsTheFuckPost(es,e,ent,host,hostflags,player,pSet)
{
	if(is_user_connected(host))
	{
		if(!player && is_valid_ent(ent))
		{
			if(!g_illusion_stat[host])
			{
				static classname[32]
				pev(ent, pev_classname, classname, sizeof(classname))
				
				if(equal(classname, "fakep"))
					set_es(es, ES_Effects, EF_NODRAW)
			}
		} else if(player && is_user_connected(ent))
		{
			if(g_illusion_stat[host])
			if(is_user_alive(ent) && cs_get_user_team(ent) == CS_TEAM_T)
			{
				set_es(es, ES_Effects, EF_NODRAW)
			}
		}
		
	}
	
	
	return FMRES_IGNORED
}
 
Chỉnh sửa cuối:
@dias: Fake hoàn hảo :>
PHP:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>

#define PLUGIN "Fake Player"
#define VERSION "1.0"
#define AUTHOR "NST"


#define CLASSNAME_FAKE_PLAYER "fake_player"
new g_iConfusing[33], g_iEntFake[33]
new cv[32]


public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_forward(FM_AddToFullPack, "Forward_AddToFullPack_Post", 1)
	
	cv[0] = register_cvar("fake_attacker", "2")
}

public Forward_AddToFullPack_Post(es_handled, inte, ent, host, hostflags, player, pSet)
{
	// neu host ko con song thi bo qua
	if ( !is_user_alive(host) )
		return FMRES_IGNORED
	
	// neu host ko bi dinh bomb hc thang attacker da chet
	g_iConfusing[host] = get_pcvar_num(cv[0])
	new iAttacker = g_iConfusing[host]
	if ( !iAttacker || iAttacker == host || !is_user_alive(iAttacker) )
		return FMRES_IGNORED
	
	
	// neu ent chinh la thang dap bom
	if (ent == iAttacker)
	{
		// an? thang do'
		set_es(es_handled, ES_RenderMode, kRenderTransAdd)
		set_es(es_handled, ES_RenderAmt, 0.0)
		
		// tao ent fake cho attacker neu chua co
		new iEntFake = find_ent_by_owner(-1, CLASSNAME_FAKE_PLAYER, iAttacker)
		if ( !iEntFake || !pev_valid(iEntFake) )
		{
			iEntFake = create_fake_player(iAttacker)
		}
		g_iEntFake[iAttacker] = iEntFake
	}
	
	// neu ent la fake player cua attack
	else if (ent == g_iEntFake[iAttacker])
	{
		// show hang' cho thang host xem
		set_es(es_handled, ES_RenderMode, kRenderNormal)
		set_es(es_handled, ES_RenderAmt, 255.0)
		
		// set model cua host cho ent fake
		set_es(es_handled, ES_ModelIndex, pev(host, pev_modelindex) )
	}
	
	return FMRES_IGNORED
}

create_fake_player(id)
{
	new iEntFake = create_entity("info_target")
	set_pev(iEntFake, pev_classname, CLASSNAME_FAKE_PLAYER)
	set_pev(iEntFake, pev_modelindex, pev(id, pev_modelindex) )
	set_pev(iEntFake, pev_movetype, MOVETYPE_FOLLOW)
	set_pev(iEntFake, pev_solid, SOLID_NOT)
	set_pev(iEntFake, pev_aiment, id)
	set_pev(iEntFake, pev_owner, id)
	
	// an? fake player
	set_pev(iEntFake, pev_rendermode, kRenderTransAdd)
	set_pev(iEntFake, pev_renderamt, 0.0)
	
	return iEntFake
}
 

Attachments

@sontung0:
- Cám ơn, để check xem nào :x
 
@dias: Fake hoàn hảo :>
PHP:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>

#define PLUGIN "Fake Player"
#define VERSION "1.0"
#define AUTHOR "NST"


#define CLASSNAME_FAKE_PLAYER "fake_player"
new g_iConfusing[33], g_iEntFake[33]
new cv[32]


public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_forward(FM_AddToFullPack, "Forward_AddToFullPack_Post", 1)
	
	cv[0] = register_cvar("fake_attacker", "2")
}

public Forward_AddToFullPack_Post(es_handled, inte, ent, host, hostflags, player, pSet)
{
	// neu host ko con song thi bo qua
	if ( !is_user_alive(host) )
		return FMRES_IGNORED
	
	// neu host ko bi dinh bomb hc thang attacker da chet
	g_iConfusing[host] = get_pcvar_num(cv[0])
	new iAttacker = g_iConfusing[host]
	if ( !iAttacker || iAttacker == host || !is_user_alive(iAttacker) )
		return FMRES_IGNORED
	
	
	// neu ent chinh la thang dap bom
	if (ent == iAttacker)
	{
		// an? thang do'
		set_es(es_handled, ES_RenderMode, kRenderTransAdd)
		set_es(es_handled, ES_RenderAmt, 0.0)
		
		// tao ent fake cho attacker neu chua co
		new iEntFake = find_ent_by_owner(-1, CLASSNAME_FAKE_PLAYER, iAttacker)
		if ( !iEntFake || !pev_valid(iEntFake) )
		{
			iEntFake = create_fake_player(iAttacker)
		}
		g_iEntFake[iAttacker] = iEntFake
	}
	
	// neu ent la fake player cua attack
	else if (ent == g_iEntFake[iAttacker])
	{
		// show hang' cho thang host xem
		set_es(es_handled, ES_RenderMode, kRenderNormal)
		set_es(es_handled, ES_RenderAmt, 255.0)
		
		// set model cua host cho ent fake
		set_es(es_handled, ES_ModelIndex, pev(host, pev_modelindex) )
	}
	
	return FMRES_IGNORED
}

create_fake_player(id)
{
	new iEntFake = create_entity("info_target")
	set_pev(iEntFake, pev_classname, CLASSNAME_FAKE_PLAYER)
	set_pev(iEntFake, pev_modelindex, pev(id, pev_modelindex) )
	set_pev(iEntFake, pev_movetype, MOVETYPE_FOLLOW)
	set_pev(iEntFake, pev_solid, SOLID_NOT)
	set_pev(iEntFake, pev_aiment, id)
	set_pev(iEntFake, pev_owner, id)
	
	// an? fake player
	set_pev(iEntFake, pev_rendermode, kRenderTransAdd)
	set_pev(iEntFake, pev_renderamt, 0.0)
	
	return iEntFake
}
Giống y chang cách fake của mình=))
 
@sontung0:
- Vậy giờ set model cho nó thế nào đây. Tạo thêm 1 biến là is_confusing[id] cho dễ hiểu đi :-?, giờ nếu bị confusing thì nhìn team CT thành team TE :-? Chứ code kia...vẫn chưa hiểu :))
 
Tớ học pascal toàn 4 điểm mà viết pawn đủ thứ súg ốg ý...
 
Có vẻ như ông Sontung0 ko hiểu vấn đề của mình rồi :(. Xin phép explain lại
-> cái này tôi làm theo cách là tạo sẵn entity cho 32 player, rồi đến khi sài chỉ việc hiện nó lên thôi. ent fake ẩn còn player hiện thì làm dc rồi, nhưng còn player ẩn ent fake hiện (cái quan trọng) thì lại chưa làm được. Làm mãi không được làm mà nó toàn hiện cả 2 không chịu ẩn player đi
 
@dias:
cái plugin trên kia đã bao gồm việc tạo fake ent, gán model victim cho fake ent và ẩn attacker
công việc của cậu bây giờ đơn giản chỉ là set giá trị cho biến g_iConfusing đê biết player nào đang bị dính bom và ai là attacker thôi
 
à dc rồi, để vọc xem :-?.
 
Chỉnh sửa cuối:
cho mình hỏi chút có plugin nào mà bỏ giới hạn tiền 16000 đi ko ?
 
@Dias: Cho em hỏi tí..
Nếu mình dùng
client_print(id,print_chat,"Hello")
Thì dòng chat "Hello" sẽ gửi đến toàn bộ player đang chơi trong server đúng ko? (id == All player)

Còn mình dùng
client_print(1,print_chat,"Hello")
Thì dòng chat "Hello" sẽ gửi đến ngưởi chơi có id = 1 đúng ko ?

Thế cái id nó từ 1 trở đi (Theo thứ tự cấp số cộng, công sai 1: 1,2,3..) hay là lung tung hả anh...?
 
@Dias: Cho em hỏi tí..
Nếu mình dùng
client_print(id,print_chat,"Hello")
Thì dòng chat "Hello" sẽ gửi đến toàn bộ player đang chơi trong server đúng ko? (id == All player)

Còn mình dùng
client_print(1,print_chat,"Hello")
Thì dòng chat "Hello" sẽ gửi đến ngưởi chơi có id = 1 đúng ko ?

Thế cái id nó từ 1 trở đi (Theo thứ tự cấp số cộng, công sai 1: 1,2,3..) hay là lung tung hả anh...?

id là index cũa player, nếu dùng như chú thì nó chỉ send cái "hello" cho player nhất định dc set thôi.
mún nó send cho cả SV thì index sẽ là 0
PHP:
client_print(0,print_chat,"Hello")
 
@buiduchuy:
- Nhầm rồi, gửi đến id là id thằng player hiện tại. Chứ ko phải gửi hết khi nào client_print(0, print_chat,.... khi đó mới send hết. VD:
PHP:
register_clcmd("say /set", "set")

public set(id)
{
       client_print(id, print_chat, "Hello World")
}
-> Khi đó, thằng nào mà gõ /set thì nó sẽ gửi tới thằng đó vì cái chữ id bên cạnh cái public set là để chứa đựng id thằng thực thi cái cmd đó

2. nếu client_print(1, print_chat,,.... thì gửi tới thằng có id = 1 :))
 
@buiduchuy:
- Nhầm rồi, gửi đến id là id thằng player hiện tại. Chứ ko phải gửi hết khi nào client_print(0, print_chat,.... khi đó mới send hết. VD:
PHP:
register_clcmd("say /set", "set")

public set(id)
{
       client_print(id, print_chat, "Hello World")
}
-> Khi đó, thằng nào mà gõ /set thì nó sẽ gửi tới thằng đó vì cái chữ id bên cạnh cái public set là để chứa đựng id thằng thực thi cái cmd đó

2. nếu client_print(1, print_chat,,.... thì gửi tới thằng có id = 1 :))

Không ý em là lúc đăng kí mấy cái sự kiện cơ...
Nếu đăng kí sự kiện DeathMsg thì id xác định như thế nào? Hay CurWeapon chẳng hạn...

Tiện thể bác cho em xin lun cái code lấy kill và dead của player nhé! :D
Làm sao để kiểm tra thằng nào có số kill cao nhất nhỉ?

for(id;id<32;id++)
{
xong làm sao đây, em vẫn ngu cái chỗ này... :)
}

2..Cho em hỏi luôn cái sự kiện DeathMsg lúc nào cũng có chỗ read_data(1) (2) (3) là đọc cái gì vậy ạ? sao lại thế?
3. Nếu em muốn làm chế độ đấu dao (admin ko được dùng súng) thì dùng sự kiện nào để gán câu lệnh drop ạ?
Nhưng dùng drop thì súng của mình rơi xuống đất (phi thực tế quá) có cách nào để khóa ko cho dùng súng ko anh?

Thanks anh trước nha!
 
1. Mấy cái đó tôi cũng không rành cho lắm, mở mấy cái const ra là có
PHP:
/* Registers event on which a given function will be called
* Flags:
* "a" - global event.
* "b" - specified.
* "c" - send only once when repeated to other players.
* "d" - call if is send to dead player.
* "e" - to alive.
* NOTE: Due to a long-standing bug that would break compatibility with old plugins,
*       the client id should be checked for alive/dead state if you use d or e.
* Examples for conditions:
* "2=c4" - 2nd parameter of message must be sting "c4".
* "3>10" - 3rd parameter must be greater then 10.
* "3!4" - 3rd must be different from 4.
* "2&Buy" - 2nd parameter of message must contain "Buy" substring.
* "2!Buy" - 2nd parameter of message can't contain "Buy" substring. */
native register_event(const event[],const function[],const flags[],const cond[]="", ... );
2. lấy kill death của player.
- get_user_frags(id) // return kill count
- get_user_deaths(id) // return death count
3.
PHP:
for(khởi tạo; điều kiện; tăng)
{
     // Nếu điều kiện đúng, thì tăng và thực hiện code
}

VD:
PHP:
#define MAX 10

for(new i = 0; i < MAX; i++)
{
      client_print(player, "%i", i)
}
--- Mang vào CS test là biết
4. DeathMSG
- data 1 = attacker
- data 2 = victim
- data 3 = headshot
--- nếu tôi ko lầm thì trong const có
5.
* Drop súng:
- strip_user_weapon(id)

* Không cho lượm súng:
PHP:
RegisterHam(Ham_Touch, "weaponbox", "fw_touch_weapon")

public fw_touch_weapon(ent, id)
{
      return HAM_SUPERCEDE
}
 
Chỉnh sửa cuối:
Back
Top