[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
Hình như là "Lựa lời mà nói cho lòi tiền ra chứ " :))

Các bác cho em hỏi mấy câu này với :
1. Làm sao để sự kiện này có tác dụng với BOT
PHP:
RegisterHam(Ham_Spawn, "player", "fwdPlayerSpawn", 1) // Ko có tác dụng khi Bot respawm
2. Code này sai ở đâu mà BOT vẫn bị dính damage
PHP:
new bool:protect[33] 

RegisterHam(Ham_TraceAttack, "player", "no_damge") ; đăng kí rồi mà ..


public no_damge(victim, idattacker, Float:damage, Float:direction[3], traceresult, damagebits)
{
    if(protect[victim]) ; protect chỗ này  = true :)
	{
		return HAM_SUPERCEDE
	}
	return HAM_IGNORED;
}
1. Mở cái NST_WPN ra, coi phần Register Ham Zbot.
2. Ko có tác dụng với bot vì đã register cho bot đâu? Muốn register thì xem phần 1.
 
@buiducduy:
1. nếu ko tác dụng với bot thì sài register_forward FM_Spawn
2. Nếu như trên nói là cái spawn ko có tác dụng với bot thì cái Fw Take Damage này cũng vậy
3. Cứ register_native rồi ghi cái native vào 1 file inc nào đó là dc... Kiểu như là khi đã register xong thì nó nằm sẵn trong server, thích sài inc nào thì ghi native vào inc đó

---------- Post added at 20:56 ---------- Previous post was at 20:54 ----------

@buiducduy:
1. nếu ko tác dụng với bot thì sài register_forward FM_Spawn
2. Nếu như trên nói là cái spawn ko có tác dụng với bot thì cái Fw Take Damage này cũng vậy
3. Cứ register_native rồi ghi cái native vào 1 file inc nào đó là dc... Kiểu như là khi đã register xong thì nó nằm sẵn trong server, thích sài inc nào thì ghi native vào inc đó
 
@buiducduy:
1. nếu ko tác dụng với bot thì sài register_forward FM_Spawn
2. Nếu như trên nói là cái spawn ko có tác dụng với bot thì cái Fw Take Damage này cũng vậy
3. Cứ register_native rồi ghi cái native vào 1 file inc nào đó là dc... Kiểu như là khi đã register xong thì nó nằm sẵn trong server, thích sài inc nào thì ghi native vào inc đó

---------- Post added at 20:56 ---------- Previous post was at 20:54 ----------

@buiducduy:
1. nếu ko tác dụng với bot thì sài register_forward FM_Spawn
2. Nếu như trên nói là cái spawn ko có tác dụng với bot thì cái Fw Take Damage này cũng vậy
3. Cứ register_native rồi ghi cái native vào 1 file inc nào đó là dc... Kiểu như là khi đã register xong thì nó nằm sẵn trong server, thích sài inc nào thì ghi native vào inc đó
Phết pam... mi chưa register ham bot bao h à:|
 
Thanks very much...! Định làm AI mode nhưng lại ko có maps với cả cũng ko chắc chắn viết xong nó có chạy ko
Thôi thì làm Zombie & Zombie v3 vậy... (Ko được thì xem của bác tùng :) )

Nhưng mà em vẫn có 1 chút mắc cần giải quyết mà nghĩ chưa ra, các bác giúp em với!
Ý tưởng:

1. Sau 20 s thì cho set team cho tất cả nhân vật sang bên CT, 2 thằng có id bất kì sang TER rồi ẩn hết vũ khí, give_item("weapon_knife), set_pev thành hand con zombie (được)
2. Chọn 1 thằng có id bất kì khác của con zombie làm hero (được)

3. Zombie chém hunman thì thằng đó bị nhiễm độc --> Change Team --> give knife set_pev ( cái này em chưa làm được các bác giúp em với , Lúc đầu em định dùng event health kiểm tra số máu nếu khác 100 thì thành zombie, nhưng chẳng may nó nhảy từ cao xuống mât máu cũng thành zombie lun :))

4. Nếu ko cần thằng CT nào thì end_round :)

5. Hòm tiếp tế làm sao để ở các vị trí bất kì trên maps và hiện Icon của nó nữa :( ???
 
Thanks very much...! Định làm AI mode nhưng lại ko có maps với cả cũng ko chắc chắn viết xong nó có chạy ko
Thôi thì làm Zombie & Zombie v3 vậy... (Ko được thì xem của bác tùng :) )

Nhưng mà em vẫn có 1 chút mắc cần giải quyết mà nghĩ chưa ra, các bác giúp em với!
Ý tưởng:

1. Sau 20 s thì cho set team cho tất cả nhân vật sang bên CT, 2 thằng có id bất kì sang TER rồi ẩn hết vũ khí, give_item("weapon_knife), set_pev thành hand con zombie (được)
2. Chọn 1 thằng có id bất kì khác của con zombie làm hero (được)

3. Zombie chém hunman thì thằng đó bị nhiễm độc --> Change Team --> give knife set_pev ( cái này em chưa làm được các bác giúp em với , Lúc đầu em định dùng event health kiểm tra số máu nếu khác 100 thì thành zombie, nhưng chẳng may nó nhảy từ cao xuống mât máu cũng thành zombie lun :))

4. Nếu ko cần thằng CT nào thì end_round :)

5. Hòm tiếp tế làm sao để ở các vị trí bất kì trên maps và hiện Icon của nó nữa :( ???
3. Sử dụng Ham_TakeDamage rồi check team.
4. Remove toàn bộ bomb site, hostage, VIP escape zone (nói chung là toàn bộ những thứ liên quan đến round) rồi tạo 1 cái entity tên là hostage_entity, di chuyển nó về origin {8192.0, 8192.0, 8192.0}. Lúc check ở trong Ham_TakeDamage, nếu là thằng cuối thì giết nó chứ ko infect nó (nếu infect nó thì round ko end).
5. Sử dụng code random spawn là được. Còn cái icon thì có thể tham khảo trong SMA ZB3.
 
@buiducduy:
- CHú định làm Zombie Mod à :)).... Easy man
 
Dùng HAM_SUPECEDE để block damage khi infect. Chắc là dùng dc.
 
anh nào cho e hỏi ik.. e down cái plugins call of duty về òi , add zô luôn òi mà ko biet chọn class . vô game nó ghi class none
 
Các bác cho em xin code block C4,bomb site, con tin... được ko ạ?
Chế độ zombie có cứu con tin với đặt C4 thì :))
 
Chỉnh sửa cuối:
nst_zombie có rồi mờ @@....................................
 
Ai biết lỗi này sửa dùm em với:
ED_Alloc: no free edict
 
@buiducduy:
1. Code Block Entity Bombsite, hosatge,...
PHP:
new const g_remove_entities[][] = 
{ 
    "func_bomb_target",    
    "info_bomb_target", 
    "hostage_entity",      
    "monster_scientist", 
    "func_hostage_rescue", 
    "info_hostage_rescue",
    "info_vip_start",      
    "func_vip_safetyzone", 
    "func_escapezone",     
    "func_buyzone"
}

public plugin_precache()
{
    register_forward(FM_Spawn, "fwd_spawn")
}

public fwd_spawn(ent)
{
    if(!pev_valid(ent)) 
        return FMRES_IGNORED
    
    static classname[32]
    pev(ent, pev_classname, classname, 31)

    static i
    for(i = 0; i < sizeof g_remove_entities; ++i)
    {
        if(equal(classname, g_remove_entities[i]))
        {
            engfunc(EngFunc_RemoveEntity, ent)
            return FMRES_SUPERCEDE
        }
    }
    return FMRES_IGNORED
}

2. ED_Alloc: no free edict
- Chú chạy cái gì đó mà nó output quá nhiều nên vậy đó. Chả hạng như trong player think mà sài set_model là nó set liên tiếp => Lỗi no free edict
 
Chỉnh sửa cuối:
Vậy bác xem dùm em code này... chạy rất ngon nhưng khi cho đấu sniper nó bị vậy.
Với cả code bác đưa cũng hem chạy..
PHP:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <csx>
#include <cstrike>
#include <fun>

#define PLUGIN	"BDD_GameBag_Main"
#define AUTHOR	"Bui Duc Duy"
#define VERSION	"1.0"

new bool:in_protect[33] 
new bool:G_check_wpn_ok[33] 
new bdd_cvar_maxkill, maxkill , GR_score, BL_score , G_mode , bdd_cvar_mode

new const g_remove_entities[][] = 
{ 
    "func_bomb_target",    
    "info_bomb_target", 
    "hostage_entity",      
    "monster_scientist", 
    "func_hostage_rescue", 
    "info_hostage_rescue",
    "info_vip_start",      
    "func_vip_safetyzone", 
    "func_escapezone",     
    "func_buyzone"
}

enum(+=100)
{
	TASK_RESPAWM = 2000,
	TASK_REMOVE_PROTECT,
	TASK_REGISTER_BOT,
}
#define ID_RESPAWM (taskid - TASK_RESPAWM)
#define ID_REMOVE_PROTECT (taskid - TASK_REMOVE_PROTECT)
#define ID_REGISTER_BOT (taskid - TASK_REGISTER_BOT)

// register natives

public plugin_natives()
{
	register_native("bdd_maxkill", "_bdd_maxkill", 1)
	register_native("bdd_gr_score", "_gr_score", 1)
	register_native("bdd_bl_score", "_bl_score", 1)
}

public _bdd_maxkill()
	return maxkill
public _gr_score()
	return GR_score
public _bl_score()
	return BL_score

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	RegisterHam(Ham_Spawn, "player", "fm_respawm", 1)
	RegisterHam(Ham_TakeDamage, "player", "fw_takedamage")
	RegisterHam(Ham_TraceAttack, "player", "fw_trace")
	register_forward(FM_Spawn, "fwd_spawn")
	
	register_event("DeathMsg", "event_DeathMsg", "a")
	register_event("CurWeapon","event_CurWeapon","be","1=1")
	
	register_message(get_user_msgid("SendAudio"), "message_sendaudio")
	register_message(get_user_msgid("TextMsg"), "message_textmsg")
	register_message(get_user_msgid("Scenario"), "message_scenario")
	
	register_concmd("bdd_respawm_admin","respawm_admin")
}

public plugin_precache()
{
	bdd_cvar_maxkill = register_cvar("bdd_cfzero_maxkill", "100")
	bdd_cvar_mode = register_cvar("bdd_TDM_cvar_wpn", "0")
	
	G_mode = get_pcvar_num(bdd_cvar_mode)
	maxkill = get_pcvar_num(bdd_cvar_maxkill)
	
	server_cmd("sv_noroundend 1")
	set_cvar_num("sv_noroundend", 1)
}

// Event check weapon of uses
public event_CurWeapon(id)
{
	check_my_weapon(id)
	if (!G_check_wpn_ok[id]) 
	{
		strip_user_weapons(id)
		give_item(id,"weapon_knife")
	}
}

// Block all cs defaut
public fwd_spawn(ent)
{
    if(!pev_valid(ent)) 
        return FMRES_IGNORED
    
    static classname[32]
    pev(ent, pev_classname, classname, 31)

    static i
    for(i = 0; i < sizeof g_remove_entities; ++i)
    {
        if(equal(classname, g_remove_entities[i]))
        {
            engfunc(EngFunc_RemoveEntity, ent)
            return FMRES_SUPERCEDE
        }
    }
    return FMRES_IGNORED
}  
// Block roundend.

public message_textmsg()
{
	static textmsg[22]
	get_msg_arg_string(2, textmsg, sizeof textmsg - 1);

	if (equal(textmsg, "#Hostages_Not_Rescued") || equal(textmsg, "#Round_Draw") || equal(textmsg, "#Terrorists_Win") || equal(textmsg, "#CTs_Win") || equal(textmsg, "#Target_", 8))
		set_msg_arg_string(2, "")
	return PLUGIN_CONTINUE
}

public message_sendaudio()
{
	static audio[17]
	get_msg_arg_string(2, audio, sizeof audio - 1)
	if(equal(audio[7], "terwin") || equal(audio[7], "ctwin") || equal(audio[7], "rounddraw"))
		set_msg_arg_string(2, "")
	return PLUGIN_CONTINUE;
}
public message_scenario()
{
	if (get_msg_args() > 1)
	{
		static sprite[8]
		get_msg_arg_string(2, sprite, sizeof sprite - 1)
		if (equal(sprite, "hostage"))
			return PLUGIN_HANDLED;
	}
	return PLUGIN_CONTINUE;
}
//end

public client_putinserver(id)
{
	set_task(0.1, "register_bot_function", id+TASK_REGISTER_BOT)
}

// register for bot
public register_bot_function(taskid)
{
	new id = ID_REGISTER_BOT
	if (is_user_bot(id) && get_cvar_num("bot_quota"))
	{
		RegisterHamFromEntity(Ham_Spawn, id, "fm_respawm", 1)
		RegisterHamFromEntity(Ham_TakeDamage, id, "fw_takedamage")
		RegisterHamFromEntity(Ham_TraceAttack, id, "fw_trace")
		
		if (is_user_alive(id))
			fm_respawm(id)
	}
}
// event respawm
public fm_respawm(id)
{
	in_protect[id] = true
	if (!is_user_bot(id)) cs_set_user_money(id,0)
	fm_set_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 16)
	if (task_exists(id+TASK_RESPAWM)) remove_task(id+TASK_RESPAWM)
	set_task(3.0,"Remove_protect",id+TASK_REMOVE_PROTECT)
}
public Remove_protect(taskid)
{
	new id = ID_REMOVE_PROTECT
	in_protect[id] = false
	fm_set_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 16)
	if (task_exists(id+TASK_REMOVE_PROTECT)) remove_task(id+TASK_REMOVE_PROTECT)
}
// check damge
public fw_takedamage(victim, inflictor, attacker, Float:damage)
{
	if (in_protect[victim]) return HAM_SUPERCEDE
	return HAM_IGNORED
}
public fw_trace(victim, idattacker, Float:damage, Float:direction[3], traceresult, damagebits)
{
	if (in_protect[victim]) return HAM_SUPERCEDE
	return HAM_IGNORED
}
// check player
public event_DeathMsg()
{
	for (new id = 1 ; id <33 ; id++)
	{
		if (!is_user_alive(id) && is_user_bot(id)) set_task(7.0,"respawm_player",id+TASK_RESPAWM)
		if (!is_user_alive(id) && !is_user_bot(id)) client_cmd(id,"bdd_respawm_admin")	
	}
	new attacker = read_data(1)
    if (cs_get_user_team(attacker) == CS_TEAM_T) BL_score++ 
    else GR_score++
}

//respawm
public respawm_player(taskid)
{
	new id = ID_RESPAWM
	ExecuteHamB(Ham_CS_RoundRespawn, id)
}

// Stock

	
stock fm_set_rendering(index, fx=kRenderFxNone, r=255, g=255, b=255, render=kRenderNormal, amount=16)
{
	set_pev(index, pev_renderfx, fx)
	new Float:RenderColor[3]
	RenderColor[0] = float(r)
	RenderColor[1] = float(g)
	RenderColor[2] = float(b)
	set_pev(index, pev_rendercolor, RenderColor)
	set_pev(index, pev_rendermode, render)
	set_pev(index, pev_renderamt, float(amount))

	return 1
}
stock show_bartime(id, total_time)
{
	emessage_begin(MSG_ONE,108,{0,0,0},id)
	ewrite_short(total_time)
	emessage_end()
	return
}

//Func 
public respawm_admin(id)
{
	set_task(7.0,"respawm_player",id+TASK_RESPAWM)
	show_bartime(id, 7)
}

check_my_weapon(id)
{
	new wpn, clip, ammo
	wpn = get_user_weapon(id,clip,ammo)
	
	if (G_mode == 0)
	{
		G_check_wpn_ok[id] = true
	}
	if (G_mode == 1)
	{
		if (wpn != CSW_AWP && wpn != CSW_SCOUT && wpn != CSW_SG550 && wpn != CSW_G3SG1 && wpn != CSW_KNIFE) G_check_wpn_ok[id] = false
		else G_check_wpn_ok[id] = true
	}
	if (G_mode == 2)
	{
		if (wpn != CSW_P228 && wpn != CSW_DEAGLE && wpn != CSW_ELITE && wpn != CSW_USP && wpn != CSW_KNIFE && wpn != CSW_GLOCK18 && wpn != CSW_FIVESEVEN) G_check_wpn_ok[id] = false
		else G_check_wpn_ok[id] = true
	}
	if (G_mode == 3)
	{
		if (wpn != CSW_KNIFE)  G_check_wpn_ok[id] = false
		else G_check_wpn_ok[id] = true
	}	
}
 
Chỉnh sửa cuối:
PHP:
public plugin_precache()
{
    bdd_cvar_maxkill = register_cvar("bdd_cfzero_maxkill", "100")
    bdd_cvar_mode = register_cvar("bdd_TDM_cvar_wpn", "0")
    
    G_mode = get_pcvar_num(bdd_cvar_mode)
    maxkill = get_pcvar_num(bdd_cvar_maxkill)
    
    server_cmd("sv_noroundend 1")
    set_cvar_num("sv_noroundend", 1)
}
- cái command register_forward của tôi đâu ?, tôi để ở đâu thì để yên đó đi... Cứ thích edit rồi lại bảo ko chạy
 
Quên ... Em quên ko register :)
Mà cái lỗi no free.... bác xem dùm em sao nó bị vậy với!
 
Đơn giản thôi là chú tìm hiểu xem plugin nào làm lỗi rồi fix. cái lỗi đó là do output quá nhiều nên crash...
 
Đơn giản thôi là chú tìm hiểu xem plugin nào làm lỗi rồi fix. cái lỗi đó là do output quá nhiều nên crash...

Cái lỗi đó là do plugins đấu đội bên trên ế :)
 
Bác cho em xin cái code ko cho nhặt súng với. Hum nay test thử zombie lúc nó nhặt được súng nó bắn chiến binh tóe cả máu :))

Với cả bác xem dùm em code này với. Vô game toàn bị lỗi ED_Alloc: no free edict

PHP:
public event_CurWeapon(id)
{
	wpn = get_user_weapon(id,clip,ammo)
	if (G_mode == 1) 
	{
		if (wpn != CSW_AWP && wpn != CSW_SCOUT && wpn != CSW_SG550 && wpn != CSW_G3SG1 && wpn != CSW_KNIFE)
		{
			strip_user_weapons(id)
			give_item(id,"weapon_knife")
		}
	}
	if (G_mode == 2) 
	{
		if (wpn != CSW_P228 && wpn != CSW_DEAGLE && wpn != CSW_ELITE && wpn != CSW_USP && wpn != CSW_KNIFE && wpn != CSW_GLOCK18 && wpn != CSW_FIVESEVEN)
		{
			strip_user_weapons(id)
			give_item(id,"weapon_knife")
		}
	}
	if (G_mode == 3) 
	{
		if (wpn != CSW_KNIFE)
		{
			strip_user_weapons(id)
			give_item(id,"weapon_knife")
		}
	}
}

public TDM_all(id)
{
	G_mode = 0
}
public TDM_sniper(id)
{
	G_mode = 1
}
public TDM_pistols(id)
{
	G_mode = 2
}
public TDM_knife(id)
{
	G_mode = 3
}
 
^ Register FM_Touch.
static s_szClassName[32];
pev(iEnt, pev_classname, s_szClassName, 31);

if (equal(s_szClassName, "weaponbox") || equal(s_szClassName, "armoury_entity") || equal(s_szClassName, "weapon_shield"))
return FMRES_SUPERCEDE;
 
Thank you :x !!!!
À cho hỏi hàm equal có tác dụng gì vậy?
pev(iEnt, pev_classname, s_szClassName, 31); nữa :)
 
Back
Top