[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
trình tui giờ đủ hiểu mấy cái kia. cái này này =.='. Cái quan trọng thì chả giải thích hộ =.='

Đây là 1 đoạn trong Script advance easy của 1 Tools dùng trong Minitools. copy ko thì chán lắm nên chí ít cũng cần hiểu. chính xác thì cách hiểu của ông ở đây là sai vì tui bỏ bớt thành phần trong đó rồi ;)). lý do j thì mình tui biết. (Crypto.Decode64BaseFromString).
Crypto là 1 dạng mã hóa luôn sóng đôi Decrypt và Encrypt nên nếu có 1 đoạn script biết đc key của nó thì hoàn toàn có khả năng dịch ngược lại phần mềm. ~> cái vụ dịch ngược là ông sai đấy ;)). mấy cái kia đúng. (ở đây tui ẩn key của nó đi vì lệnh này ko quan trọng).

for i=1,4 do thì tương tự bên amxx là for (int i=1;i==4;i++) {...

còn cái đoạn kia thì :-?.. vẫn chưa hiểu nó ra làm sao :|. condition àh @@
Ơ thế tui nói sai à :( xấu hổ quá dốt cứ phát biểu bừa X_X biết thế khỏi giải thích cho đỡ ê mặt
Thui lần sau chắc tui chả dám reply ai nữa ngại quá :(
 
@Ryokin : K phải, ý mình là đưa spr giống như hud máu, ap, nst_effect_killer ý
 
@legiondark:
- Cái đó thì liên quan đến hud.txt rồi
 
Ơ thế tui nói sai à :( xấu hổ quá dốt cứ phát biểu bừa X_X biết thế khỏi giải thích cho đỡ ê mặt
Thui lần sau chắc tui chả dám reply ai nữa ngại quá :(

Thôi nói tui cái đoạn X>1 and x or "" đi
 
Thôi nói tui cái đoạn X>1 and x or "" đi
Tui ko dám đoán bừa nhưng đây có vẻ như là boolean thì phải => nói đến đây chắc ông bít rùi chứ gì, ko thì ông show code lên đi (đầy đủ) chỗ nào biết tui chỉ cho
 
Ai Có khả năng sửa hộ mình cái plugin này... Nản lắm rồi... Ban đầu ngon lắm, sửa vài cái thế là hỏng luôn giờ ko biết sửa chỗ nào :))
-> Khi Assassin xuất hiện thì team ko được transfer -> Fix: sửa cho khi Assassin xuất hiện tất cả qua CT còn lại Ass là TE (đã làm rồi nhưng ko chạy)
-> Thay cách set team, set sao cho model không bị thay đổi, ví dụ: player A đang là team TE và mang model TE, nhưng khi assassin xuất hiện thì player change qua team CT nhưng vẫn giữ model TE, vì nếu sv mà cứ toàn CT thì chán lắm.
-> Sửa lại cái remove bombsite, hostage vì cái này không hoạt động

- Đây là code:
PHP:
/* =========================================
Name: Assasin Mod
Type: GamePlay
Version: 1.0
Author: Dias
-------------------------
Credits:
- Dias: Main Coder
- mercylezz: get random player code, set model, some stuff,...
- Redplane: some stuff
-------------------------
========================================= */
#include <amxmodx>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#include <cstrike>
#include <fun>
#include <xs>

#define PLUGIN "Assassin Mod"
#define VERSION "1.0"
#define AUTHOR "Dias"

// Defines
#define MODELSET_TASK 11111
#define MODELCHANGE_DELAY 0.5
#define TASK_COUNTDOWN 22222
#define TASK_ASSASSIN_APP 33333
#define TASK_TEAM 44444
#define TASK_AURA 55555

#define TASK_SHOWHUD 66666

// Vars
new const assassin_coming[][] = {
	"assassin/assassin_coming_1.wav", 
	"assassin/assassin_coming_2.wav", 
	"assassin/assassin_coming_3.wav"
}
new const assassin_win_sound[][] = {
	"assassin/assassin_win1.wav",
	"assassin/assassin_win2.wav",
	"assassin/assassin_win3.wav"
}
new const human_win_sound[][] = {
	"assassin/human_win1.wav",
	"assassin/human_win2.wav",
	"assassin/human_win3.wav"
}
new const countdown_sound[10][] =
{
	"assassin/one.wav", 
	"assassin/two.wav", 
	"assassin/three.wav", 
	"assassin/four.wav",
	"assassin/five.wav", 
	"assassin/six.wav", 
	"assassin/seven.wav", 
	"assassin/eight.wav", 
	"assassin/nine.wav", 
	"assassin/ten.wav" 
}
new const entity_remove[][] = 
{
	"func_bomb_target",
	"info_bomb_target",
	"info_vip_start",
	"func_vip_safetyzone",
	"func_escapezone",
	"hostage_entity",
	"monster_scientist",
	"func_hostage_rescue",
	"info_hostage_rescue",
	"env_fog",
	"env_rain",
	"env_snow",
	"item_longjump",
	"func_vehicle"
}

new countdown
new time_s

const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
	"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
	"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
	"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
"weapon_ak47", "weapon_knife", "weapon_p90" }

new bool:no_take_damage[33]
new bool:g_assassin[33]
new bool:is_assassin_model[33]
new bool:lock_model[33]
new const old_model[64]

new Array:g_class_name
new Array:g_class_info
new Array:g_class_model
new Array:g_class_clawmodel
new Array:g_class_health
new Array:g_class_speed
new Array:g_class_gravity

new g_class[33]
new g_classnext[33]
new g_class_i

new g_sync_hud

#define OFFSET_AMMO_338MAGNUM 377
#define OFFSET_AMMO_762NATO 378
#define OFFSET_AMMO_556NATOBOX 379
#define OFFSET_AMMO_556NATO 380
#define OFFSET_AMMO_BUCKSHOT 381
#define OFFSET_AMMO_45ACP 382
#define OFFSET_AMMO_57MM 383
#define OFFSET_AMMO_50AE 384
#define OFFSET_AMMO_357SIG 385
#define OFFSET_AMMO_9MM 386

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	// No zombie classes?
	if (!g_class_i) set_fail_state("[Assassin Mod] No Class Loaded !!!")
	
	register_event("HLTV", "event_round_start", "a", "1=0", "2=0" )
	register_event("CurWeapon", "fw_check_model", "be", "1=1")
	register_event("SendAudio", "assassin_win", "a", "2&%!MRAD_terwin")
	register_event("SendAudio", "human_win", "a", "2&%!MRAD_ctwin")  
	register_event("SendAudio", "no_one_won", "a", "2&%!MRAD_rounddraw")  
	
	register_logevent("event_round_end", 2, "1=Round_End")
	register_event("TextMsg","event_round_end","a","2=#Game_Commencing","2=#Game_will_restart_in")
	register_event("DeathMsg", "event_death", "a")
	
	register_message(get_user_msgid("Health"), "hook_health")
	register_message(get_user_msgid("TextMsg"), "hook_textmsg")
	
	RegisterHam(Ham_Touch, "weaponbox", "fw_TouchWeapon")
	RegisterHam(Ham_Touch, "armoury_entity", "fw_TouchWeapon")
	RegisterHam(Ham_Touch, "weapon_shield", "fw_TouchWeapon")
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")

	register_forward(FM_SetClientKeyValue, "set_client_key_value")
	
	for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
		if (WEAPONENTNAMES[i][0])
	{
		RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
	}

	setting_config()
	
	g_sync_hud = CreateHudSyncObj()
}

public plugin_precache()
{
	register_forward(FM_Spawn, "fw_spawn")
	
	g_class_name = ArrayCreate(32, 1)
	g_class_info = ArrayCreate(32, 1)
	g_class_model = ArrayCreate(32, 1)
	g_class_clawmodel = ArrayCreate(32, 1)
	g_class_health = ArrayCreate(1, 1)
	g_class_speed = ArrayCreate(1, 1)
	g_class_gravity = ArrayCreate(1, 1)
	
	new i, buffer[100]
	
	for (i = 0; i < ArraySize(g_class_model); i++)
	{
		ArrayGetString(g_class_model, i, buffer, charsmax(buffer))
		format(buffer, charsmax(buffer), "models/player/%s/%s.mdl", buffer, buffer)
		engfunc(EngFunc_PrecacheModel, buffer)
	}
	for (i = 0; i < ArraySize(g_class_clawmodel); i++)
	{
		ArrayGetString(g_class_clawmodel, i, buffer, charsmax(buffer))
		engfunc(EngFunc_PrecacheModel, buffer)
	}	
	for(i = 0; i < sizeof(assassin_coming); i++)
	{
		precache_sound(assassin_coming[i])
	}
	for(i = 0; i < sizeof(assassin_win_sound); i++)
	{
		precache_sound(assassin_win_sound[i])
	}
	for(i = 0; i < sizeof(human_win_sound); i++)
	{
		precache_sound(human_win_sound[i])
	}	
	for(i = 0; i < sizeof(countdown_sound); i++)
	{
		precache_sound(countdown_sound[i])
	}
}

public plugin_natives()
{
	register_native("asm_get_user_assassin", "_get_assassin", 1)
	register_native("asm_register_assassin_class", "_class_register", 1)
}

/* ====================================
------------- MAIN FORWARD ------------
======================================*/
public fw_spawn(ent)
{
	new classname[32]
	pev(ent, pev_classname, classname, sizeof(classname))
	
	for(new i = 0; i < sizeof(entity_remove); i++)
	{
		if(equal(classname, entity_remove[i]))
		return PLUGIN_HANDLED
	}
	
	return PLUGIN_CONTINUE
}

public set_client_key_value(id)
{
	if(lock_model[id])
		return FMRES_SUPERCEDE
		
	return FMRES_HANDLED
}

public event_round_start(id)
{
	balance_teams()
	
	for(new i = 1; i <= get_maxplayers(); i++)
	{
		no_take_damage[i] = true
		if(is_assassin_model[i])
		{
			fm_reset_user_model(i)
			is_assassin_model[i] = false
		}
	}
	
	time_s = 10
	countdown = 9
	set_task(5.0, "assassin_countdown", id+TASK_COUNTDOWN)
}

public event_round_end(id)
{
	if(task_exists(TASK_COUNTDOWN)) remove_task(TASK_COUNTDOWN)
	if(task_exists(TASK_ASSASSIN_APP)) remove_task(TASK_ASSASSIN_APP)
	if(task_exists(TASK_SHOWHUD)) remove_task(id+TASK_SHOWHUD)
	
	set_lights("#OFF")
	
	for(new i = 1; i <= get_maxplayers(); i++)
	{
		g_assassin[i] = false
		remove_task(id+TASK_AURA)
	}
}

public event_death(id)
{
	if(g_assassin[id])
	{
		if(task_exists(TASK_SHOWHUD)) remove_task(id+TASK_SHOWHUD)
	}
}

public assassin_win()
{
	client_cmd(0,"stopsound")

	emit_sound(0, CHAN_VOICE, assassin_win_sound[random_num(0, sizeof(assassin_win_sound))], 1.0, ATTN_NORM, 0, PITCH_NORM)
	
	return PLUGIN_CONTINUE
}

public human_win()
{
	client_cmd(0,"stopsound")
	
	emit_sound(0, CHAN_VOICE, human_win_sound[random_num(0, sizeof(human_win_sound))], 1.0, ATTN_NORM, 0, PITCH_NORM)
	
	return PLUGIN_CONTINUE
}

public no_one_won()
{
	static rand
	rand = random_num(0,2)
	
	client_cmd(0,"stopsound")
	
	switch(rand)
	{
		case 0: client_cmd(0,"spk assassin/human_win1")
		case 1: client_cmd(0,"spk assassin/human_win2")
		case 2: client_cmd(0,"spk assassin/human_win3")
	}
	
	return PLUGIN_CONTINUE
}

public hook_textmsg()
{
	new szMsg[22]
	
	get_msg_arg_string(2, szMsg, sizeof szMsg)
	
	if(equal(szMsg, "#Terrorists_Win"))
		set_msg_arg_string(2, "Assassin Win")
	else if(equal(szMsg, "#CTs_Win"))
		set_msg_arg_string(2 , "Human Win")
	else if(equal(szMsg, "#Round_Draw"))
		set_msg_arg_string(2 , "Human Win")
}  

public fw_Item_Deploy_Post(weapon_ent)
{
	static id
	id = pev(weapon_ent, pev_owner)
	
	if(is_user_alive(id) && g_assassin[id])
	{
		new class_clawmodel[32]
		ArrayGetString(g_class_clawmodel, g_class[id], class_clawmodel, sizeof(class_clawmodel))
		
		engclient_cmd(id, "weapon_knife")
		set_pev(id, pev_viewmodel2, class_clawmodel)
	}
}

public fw_TouchWeapon(weapon, id)
{
	if (is_user_alive(id) && g_assassin[id])
		return HAM_SUPERCEDE;
	
	return HAM_IGNORED;
}

public fw_check_model(id)
{
	if(!is_user_alive(id))
		return PLUGIN_CONTINUE
		
	if(g_assassin[id])
	{
		static class_clawmodel[32]
		ArrayGetString(g_class_clawmodel, g_class[id], class_clawmodel, sizeof(class_clawmodel))		
		
		if(get_user_weapon(id) == CSW_KNIFE)
		set_pev(id, pev_viewmodel2, class_clawmodel)
	}
	
	static weapon
	static ammo
	
	weapon = read_data(2)
	ammo = fm_get_user_bpammo(id, weapon)
			
	if(ammo < 1) 
	fm_set_user_bpammo(id, weapon, 254)
	
	return PLUGIN_CONTINUE
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damagebits)
{
	if(g_assassin[attacker] && get_user_weapon(attacker) == CSW_KNIFE)
	{
		SetHamParamFloat(4, damage * 1000.0)
	}
	
	if(no_take_damage[victim])
	{
		return HAM_SUPERCEDE
	}
	
	return HAM_IGNORED
}

/* ====================================
------------- MAIN PUBLIC -------------
======================================*/

public setting_config()
{
	server_cmd("mp_flashlight 1")
	server_cmd("mp_autoteambalance 0")
	server_cmd("mp_limitteams 0")
}

public assassin_countdown()
{ 
	emit_sound(0, CHAN_VOICE, countdown_sound[countdown], 1.0, ATTN_NORM, 0, PITCH_NORM)
	client_print(0, print_center, "Sat Thu se xuat hien sau: %i", time_s)
	
	countdown--
	--time_s
	
	if(time_s >= 1)
	{
		set_task(1.0, "assassin_countdown", TASK_COUNTDOWN)
	} else {
		set_task(3.0, "assassin_appear", TASK_ASSASSIN_APP)
	}
}

public assassin_appear()
{
	for(new i = 1; i <= get_maxplayers(); i++)
	{
		no_take_damage[i] = false
	}

	set_hudmessage(0, 255, 0, -1.0, 0.22, 1, 5.0, 10.0)
	show_hudmessage(0, "Sat Thu Da Xuat Hien !!!")
	
	emit_sound(0, CHAN_VOICE, assassin_coming[random_num(0, 2)], 1.0, ATTN_NORM, 0, PITCH_NORM)

	set_lights("c")
	
	static player_num
	player_num = fnGetAlive()

	new id = fnGetRandomAlive(random_num(1, player_num))
	set_assassin(id)

	for(new i = 0; i < get_maxplayers(); i++)
	{
		if(!g_assassin[i])
			cs_set_user_team(i, CS_TEAM_CT)
	}
}

public set_assassin(id)
{
	g_assassin[id] = true
	is_assassin_model[id] = true
	
	drop_all_weapon(id)
	infection_effects(id)
	
	g_class[id] = g_classnext[id]
	if(g_class[id] == -1) g_class[id] = 0
	
	static class_name[32]
	static class_info[32]
	static class_model[32]
	static class_clawmodel[32]
	static class_health
	static Float:class_speed
	static Float:class_gravity
	
	ArrayGetString(g_class_name, g_class[id], class_name, sizeof(class_name))
	ArrayGetString(g_class_info, g_class[id], class_info, sizeof(class_info))
	ArrayGetString(g_class_model, g_class[id], class_model, sizeof(class_model))
	ArrayGetString(g_class_clawmodel, g_class[id], class_clawmodel, sizeof(class_clawmodel))
	class_health = ArrayGetCell(g_class_health, g_class[id])
	class_speed = ArrayGetCell(g_class_speed, g_class[id])
	class_gravity = ArrayGetCell(g_class_gravity, g_class[id])

	cs_set_user_team(id, CS_TEAM_T)
	
	fm_set_user_model(id, class_model)
	set_pev(id, pev_viewmodel2, class_clawmodel)
	set_user_health(id, class_health)
	set_pev(id, pev_maxspeed, class_speed)
	set_pev(id, pev_gravity, class_gravity)
	
	select_class(id)
	
	set_task(0.2, "set_aura", id+TASK_AURA, _, _, "b")
	set_task(1.0, "ShowHUD", id+TASK_SHOWHUD, _, _, "b")
}

public set_aura(taskid)
{
	new id = taskid - TASK_AURA
	
	if(is_user_alive(id) && g_assassin[id])
	{
		static Float:originF[3]
		pev(id, pev_origin, originF)
		
		engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
		write_byte(TE_DLIGHT)
		engfunc(EngFunc_WriteCoord, originF[0]) // x
		engfunc(EngFunc_WriteCoord, originF[1]) // y
		engfunc(EngFunc_WriteCoord, originF[2]) // z
		write_byte(20) // radius
		write_byte(255) // red
		write_byte(10) // green
		write_byte(10) // blue
		write_byte(2) // life
		write_byte(0) // decay rate
		message_end()
	} else {
		remove_task(id+TASK_AURA)
	}
}

public hook_health(msgid, dest, id)
{
	if(is_user_alive(id) && g_assassin[id])
	{
		new health = pev(id, pev_health)
		new Float:class_health = 30000.0
		new new_health = floatround((health / class_health) * 100.0)
		new real_health = clamp(new_health, 1, 100)

		set_msg_arg_int(1, ARG_BYTE, real_health)
	}
}

infection_effects(id)
{
	message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Damage"), _, id)
	write_byte(0) // damage save
	write_byte(0) // damage take
	write_long(DMG_NERVEGAS) // damage type - DMG_RADIATION
	write_coord(0) // x
	write_coord(0) // y
	write_coord(0) // z
	message_end()
	
	// Get player's origin
	static origin[3]
	get_user_origin(id, origin)
	
	// Tracers?
	message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
	write_byte(TE_IMPLOSION) // TE id
	write_coord(origin[0]) // x
	write_coord(origin[1]) // y
	write_coord(origin[2]) // z
	write_byte(128) // radius
	write_byte(20) // count
	write_byte(3) // duration
	message_end()
	
	// Particle burst?
	
	message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
	write_byte(TE_PARTICLEBURST) // TE id
	write_coord(origin[0]) // x
	write_coord(origin[1]) // y
	write_coord(origin[2]) // z
	write_short(50) // radius
	write_byte(70) // color
	write_byte(3) // duration (will be randomized a bit)
	message_end()

	// Light sparkle?
	message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
	write_byte(TE_DLIGHT) // TE id
	write_coord(origin[0]) // x
	write_coord(origin[1]) // y
	write_coord(origin[2]) // z
	write_byte(20) // radius
	write_byte(100) // r
	write_byte(100) // g
	write_byte(100) // b
	write_byte(2) // life
	write_byte(0) // decay rate
	message_end()
}

public select_class(id)
{
	new menu = menu_create("Select Assassin Class:", "select_handle")
	
	for(new i = 0; i < g_class_i; i++)
	{
		new cname[32], str[32]
		
		ArrayGetString(g_class_name, i, cname, sizeof(cname))
		num_to_str(i, str, charsmax(str))
		menu_additem(menu, cname, str)
	}
	
	menu_display(id, menu, 0)
}

public select_handle(id, menu, item)
{
	if( item == MENU_EXIT )
	{
		menu_destroy(menu)
		
		return PLUGIN_HANDLED
	}
	
	new data[2], szName[64]
	new access, callback
	
	menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback)
	
	g_classnext[id] = str_to_num(data)
	g_class[id] = g_classnext[id]

	static class_model[32]
	static class_clawmodel[32]
	static Float:class_speed
	static Float:class_gravity
	
	ArrayGetString(g_class_model, g_class[id], class_model, sizeof(class_model))
	ArrayGetString(g_class_clawmodel, g_class[id], class_clawmodel, sizeof(class_clawmodel))
	class_speed = ArrayGetCell(g_class_speed, g_class[id])
	class_gravity = ArrayGetCell(g_class_gravity, g_class[id])

	fm_set_user_model(id, class_model)
	set_pev(id, pev_viewmodel2, class_clawmodel)
	set_pev(id, pev_maxspeed, class_speed)
	set_pev(id, pev_gravity, class_gravity)
	
	infection_effects(id)
	
	menu_destroy(menu)
	return PLUGIN_HANDLED
}

public ShowHUD(taskid)
{
	new id = taskid - TASK_SHOWHUD
	
	if(g_assassin[id])
	{
		static class_name[32]
		static class_health
	
		ArrayGetString(g_class_name, g_class[id], class_name, sizeof(class_name))
		class_health = ArrayGetCell(g_class_health, g_class[id])

		set_hudmessage(0, 255, 0, 0.02, 0.9, 0, 6.0, 1.1, 0.0, 0.0, -1)
		ShowSyncHudMsg(id, g_sync_hud, "Health: %i/%i - Assassin Class: %s", get_user_health(id), class_health, class_name)
	} else {
		remove_task(id+TASK_SHOWHUD)
	}
}

/* ====================================
------------- MAIN STOCK -------------
======================================*/

public drop_all_weapon(id)
{
	drop_weapons(id, 1)
	drop_weapons(id, 2)
	
	strip_user_weapons(id)
	give_item(id, "weapon_knife")
	
	if(g_assassin[id])
	{
		static class_clawmodel[32]
		ArrayGetString(g_class_clawmodel, g_class[id], class_clawmodel, sizeof(class_clawmodel))
		
		set_pev(id, pev_viewmodel2, class_clawmodel)
	}
}

stock drop_weapons(id, dropwhat)
{
	// Get user weapons
	static weapons[32], num, i, weaponid
	
	num = 0 // reset passed weapons count (bugfix)
	get_user_weapons(id, weapons, num)

	// Loop through them and drop primaries or secondaries
	for (i = 0; i < num; i++)
	{
		// Prevent re-indexing the array
		weaponid = weapons[i]
	
		if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
		{
			static wname[32], weapon_ent
			get_weaponname(weaponid, wname, charsmax(wname))
			weapon_ent = find_ent_by_owner(-1, wname, id)
			
			set_pev(weapon_ent, pev_iuser1, cs_get_user_bpammo(id, weaponid))
			
			engclient_cmd(id, "drop", wname)
			cs_set_user_bpammo(id, weaponid, 0)
		}	
	}
}

// Transfer Player Team
balance_teams()
{
	static iPlayersnum
	iPlayersnum = get_playersnum()

	if (iPlayersnum < 1) return;

	static iTerrors, iMaxTerrors, id
	iMaxTerrors = iPlayersnum/2
	iTerrors = 0

	for (id = 1; id <= get_maxplayers(); id++)
	{
		if (!is_user_connected(id))
			continue;
		
		if (cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
			continue;
		
		remove_task(id+TASK_TEAM)
		cs_set_user_team(id, CS_TEAM_CT)
	}
	
	while (iTerrors < iMaxTerrors)
	{
		if (++id > get_maxplayers()) id = 1
		
		if (!is_user_connected(id))
			continue;
		
		if (cs_get_user_team(id) != CS_TEAM_CT)
			continue;
		
		if (random_num(0, 1))
		{
			cs_set_user_team(id, CS_TEAM_T)
			iTerrors++
		}
	}
}

fnGetAlive()
{
	static iAlive, id
	iAlive = 0
	
	for (id = 1; id <= get_maxplayers(); id++)
	{
		if (is_user_alive(id))
			iAlive++
	}
	
	return iAlive;
}

fnGetRandomAlive(n)
{
	static iAlive, id
	iAlive = 0
	
	for (id = 1; id <= get_maxplayers(); id++)
	{
		if (is_user_alive(id))
			iAlive++
		
		if (iAlive == n)
			return id;
	}
	
	return -1;
}
stock fm_get_user_bpammo(index, weapon)
{
	static offset
	switch(weapon)
	{
		case CSW_AWP: offset = OFFSET_AMMO_338MAGNUM
		case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = OFFSET_AMMO_762NATO
		case CSW_M249: offset = OFFSET_AMMO_556NATOBOX
		case CSW_FAMAS, CSW_M4A1, CSW_AUG, 
		CSW_SG550, CSW_GALI, CSW_SG552: offset = OFFSET_AMMO_556NATO
		case CSW_M3, CSW_XM1014: offset = OFFSET_AMMO_BUCKSHOT
		case CSW_USP, CSW_UMP45, CSW_MAC10: offset = OFFSET_AMMO_45ACP
		case CSW_FIVESEVEN, CSW_P90: offset = OFFSET_AMMO_57MM
		case CSW_DEAGLE: offset = OFFSET_AMMO_50AE
		case CSW_P228: offset = OFFSET_AMMO_357SIG
		case CSW_GLOCK18, CSW_TMP, CSW_ELITE, 
		CSW_MP5NAVY: offset = OFFSET_AMMO_9MM
		default: offset = 0
	}
	return offset ? get_pdata_int(index, offset) : 0
}

stock fm_set_user_bpammo(index, weapon, amount)
{
	static offset
	switch(weapon)
	{
		case CSW_AWP: offset = OFFSET_AMMO_338MAGNUM
		case CSW_SCOUT, CSW_AK47, CSW_G3SG1: offset = OFFSET_AMMO_762NATO
		case CSW_M249: offset = OFFSET_AMMO_556NATOBOX
		case CSW_FAMAS, CSW_M4A1, CSW_AUG, 
		CSW_SG550, CSW_GALI, CSW_SG552: offset = OFFSET_AMMO_556NATO
		case CSW_M3, CSW_XM1014: offset = OFFSET_AMMO_BUCKSHOT
		case CSW_USP, CSW_UMP45, CSW_MAC10: offset = OFFSET_AMMO_45ACP
		case CSW_FIVESEVEN, CSW_P90: offset = OFFSET_AMMO_57MM
		case CSW_DEAGLE: offset = OFFSET_AMMO_50AE
		case CSW_P228: offset = OFFSET_AMMO_357SIG
		case CSW_GLOCK18, CSW_TMP, CSW_ELITE, 
		CSW_MP5NAVY: offset = OFFSET_AMMO_9MM
		default: offset = 0
	}
	
	if(offset) 
		set_pdata_int(index, offset, amount)
	
	return 1
}

stock fm_set_user_model(id, const model[])
{
	lock_model[id] = false
	engfunc(EngFunc_GetInfoKeyBuffer, "model", old_model)
	engfunc(EngFunc_SetClientKeyValue, id, engfunc(EngFunc_GetInfoKeyBuffer, id), "model", model);
	lock_model[id] = true
}

stock fm_get_user_model( player, model[], len )
{
	engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, player ), "model", model, len)
}


stock fm_reset_user_model(id)
{
	lock_model[id] = false
	dllfunc(DLLFunc_ClientUserInfoChanged, id, engfunc(EngFunc_GetInfoKeyBuffer, id))
	lock_model[id] = true
}

/* ====================================
------------- MAIN NATIVE -------------
======================================*/
public _get_assassin(id)
{
	return g_assassin[id]
}

public _class_register(const classname[], const classinfo[], const classmodel[], const classclawmodel[], health, Float:speed, Float:gravity)
{
	param_convert(1)
	param_convert(2)
	param_convert(3)
	param_convert(4)
	
	ArrayPushString(g_class_name, classname)
	ArrayPushString(g_class_info, classinfo)
	ArrayPushString(g_class_model, classmodel)
	ArrayPushString(g_class_clawmodel, classclawmodel)	
	
	ArrayPushCell(g_class_health, health)
	ArrayPushCell(g_class_speed, speed)
	ArrayPushCell(g_class_gravity, gravity)
	
	g_class_i++
}

- Đây là class:
PHP:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <assassin_mod>

#define PLUGIN "[ASM] Class: Normal"
#define VERSION "1.0"
#define AUTHOR "Dias"

new const class_name[] = "Normal Assassin"
new const class_info[] = "Just a normal class"
new const class_model[] = "assassin1"
new const class_clawmodel[] = "models/v_knife_assassin.mdl"
new const class_health = 30000
new const Float:class_speed = 300.0
new const Float:class_gravity = 0.75

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
}

public plugin_precache()
{
	precache_model(class_clawmodel)
	asm_register_assassin_class(class_name, class_info, class_model, class_clawmodel, class_health, class_speed, class_gravity)
}

- Ai thích lấy thì lấy, nhưng phải sửa dc trước đã :))
- Cái này mình làm lâu rồi, nhưng mà hỏng quá @@ nên bỏ, giờ có tâm huyết mới chịu làm tiếp @@
 
Chỉnh sửa cuối:
@legiondark:
- Cái đó thì liên quan đến hud.txt rồi
Biết là liên quan r`, nhưng phải làm thế nào để nó hiện đc
Còn cái assassin complie ngon mà .
 
Compiel ngon nhưng vào game nó lỗi
 
@Kai: này thì đầy đủ :|
PHP:
local Path=_TempFolder;
if not File.DoesExist(Path.."\\btn_BTN.btn") then
	for x=1, 4 do
		Crypto.Base64DecodeFromString(BTN.Buttons[x], Path.."\\btn_BTN"..((x>1) and x or "")..".btn");
	end
end
 
@Dias : Hướng dẫn cụ thể đi .
P/s : Dạo này có vẻ anh Tùng trở lại forum rồi, thấy ngày nào cũng lên
 
@Kai: này thì đầy đủ :|
PHP:
local Path=_TempFolder;
if not File.DoesExist(Path.."\\btn_BTN.btn") then
	for x=1, 4 do
		Crypto.Base64DecodeFromString(BTN.Buttons[x], Path.."\\btn_BTN"..((x>1) and x or "")..".btn");
	end
end
CÁi ams này có vẻ hơi khó giải thích
((x>1) and x or "")..".btn") nếu làm trong pascal hay c thì đây là đoạn code dùng để kiểm tra true or false
Tôi hiểu theo cách của tôi nghĩa là:
VẾ code đấy có nghĩa là kiểm tra đường xuất dẫn file đấy. ĐỂ ý kĩ đoạn dưới ".btn" => export ra vs dạng mở rộng .btn
Còn ((x>1) and x or "") là phép toán dùng để kiểm tra nếu đúng thì sẽ trả về true sai thì ngược lại
Lấy 1 vd cho ông hiểu
(5+2>4) and not (true or(5-3=8)) = false
=> AND vs Or là từ khóa trong lập trình dùng để so sánh thường đi kèm vs các dạng như: vòng lặp, kiểm tra điều kiện, kiểm tra tính đúng sai...
 
Anh dias cho em xin yahoo với.... Hỏi trên forum chẳng ai trả lời dùm... :(
 
hỏi thì thêm chữ @dias vào để người ta biết ==" tôi cũng chả biết bác hỏi lúc nào nữa
 
@Dias: Thế cách đưa spr lên màn hình ntn đây ??
 
Việc đưa spr lên màn hình thì add tên spr vào hud.txt rồi vào amx viết 1 message là StatusIcon
cái phần string thì điền tên cái spr lúc nãy mình thêm vào hud.txt. Các thêm thì hỏi theanh11a5
 
nhớ tạo 1 var về spr rồi precache nó trước khi đưa var vô cái write_string/write_short nha :D
như thế này nè
PHP:
new my_sprites

public plugin_precache()
{
my_sprites = precache_model("models/my_spr.spr")
}
public my_func()
{
...
write_string(my_sprites)
...
}
 
Chỉnh sửa cuối:
@teobrvt1995:
- Spr hiện lên màn hình thì khỏi precache cũng dc
 
nhớ tạo 1 var về spr rồi precache nó trước khi đưa var vô cái write_string/write_short nha :D
như thế này nè
PHP:
new my_sprites

public plugin_precache()
{
my_sprites = precache_model("models/my_spr.spr")
}
public my_func()
{
...
write_string(my_sprites)
...
}
my_sprtes là kiểu int sao lại dùng write_string thế kia hả giời*facepalm*
 
my_sprtes là kiểu int sao lại dùng write_string thế kia hả giời*facepalm*

phải dùng write_short(my_spirte) đúng ko nhỉ... Ai dạy mình tạo 1 sự kiên new round, mỗi new round thực hiên 1 lênh với...
Example:
PHP:
register_event("new_round","new_round","ab")
public new_round(id)
{
client_cmd(id, "nst_wpn")
return plugin_continue
}


---------- Post added at 18:33 ---------- Previous post was at 18:28 ----------

Nhưng sự kiên "ván mới" mình ko biết nên ko đc.
À, ai dạy mình cach đọc\ghi ini đươc ko?
 
Xem ra chỉ còn cái topic này là thoát spammer ! Bức xúc quá !
Có lẽ mình mượn tạm cái thread này show hàng CSCFE nhé ! Các bạn đồng ý ko? Ko muốn lập cái mới và cũng thề ko post bài bên thread kia nữa.
@buiducduy: thấy có vẻ cũng thành tâm học code đấy. Nhưng anh khuyên 1 câu nè (thật tình): Luyện thì phải đúng cách, nếu ko thành thói quen sai ko sửa được (giống tẩu hỏa nhập ma trong võ thuật lắm đó.) Cứ bắt đầu với + - * : trong c, c+=, Passcal là tốt nhất đó em!
 
Back
Top