[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
@ALL:
- Phương pháp học cái này cũng không khó đâu,...
-> Tìm hiểu và đọc các tutorial cơ bản "của pawn", đọc tới đâu là phải hiểu tơi đó, ko hiểu hỏi ngay để xuống phần sau ko bị khó hiểu...
-> Sau khi đọc xong và hiểu hết rồi, thì tìm và vọc mấy cái plugin nhỏ nhỏ thôi tầm 0 ~ 20 ~ 30 dòng là đủ, rồi cứ thế mà vọc cao hơn. Học đi đôi với thực hành. học thấy cái này hay, ra làm 1 plugin thử đem vào CS thử nếu thành công là mình nhớ cái đó liền...
-> Ban đầu tui cũng chả biết làm 1 mode riêng, plugin riêng là thế nào hết ==". VỌc 1 hồi lâu, tự dưng biết làm luôn :))

Cái quan trọng là phải biết english. Vì các hàm trong Pawn, nghĩa của hàm là cái tên hàm luôn rồi... VD: set_user_health(id) -> Nghĩa là: Set User Health (Chỉnh Máu Cho Người Chơi). Đúng ko :))

-> Học xong nó sẽ có lợi đấy :-bd. Từ ngôn ngữ này mình có thể suy ra nhiều ngôn ngữ khác, như PHP, C++,... hoặc ngược lại. Tình hình là tui học dc nhiều ngôn ngư rồi :)). trong đấy mạnh nhất là Pawn, PHP. còn C++ khó vãi cả chuối... =="
 
Chỉnh sửa cuối:
@ALL:
- Phương pháp học cái này cũng không khó đâu,...
-> Tìm hiểu và đọc các tutorial cơ bản "của pawn", đọc tới đâu là phải hiểu tơi đó, ko hiểu hỏi ngay để xuống phần sau ko bị khó hiểu...
-> Sau khi đọc xong và hiểu hết rồi, thì tìm và vọc mấy cái plugin nhỏ nhỏ thôi tầm 0 ~ 20 ~ 50 dòng là đủ, rồi cứ thế mà vọc cao hơn. Học đi đôi với thực hành. học thấy cái này hay, ra làm 1 plugin thử đem vào CS thử nếu thành công là mình nhớ cái đó liền...
-> Ban đầu tui cũng chả biết làm 1 mode riêng, plugin riêng là thế nào hết ==". VỌc 1 hồi lâu, tự dưng biết làm luôn :))

Cái quan trọng là phải biết english. Vì các hàm trong Pawn, nghĩa của hàm là cái tên hàm luôn rồi... VD: set_user_health(id) -> Nghĩa là: Set User Health (Chỉnh Máu Cho Người Chơi). Đúng ko :))
Liệu có thực sự chỉ cần hiểu theo nghĩa tiếng anh là mình sẽ dịch đúng ko ;)). vd về 1 từ khóa trong C "Break" Tiếng anh là vỡ, gãy => Nhưng hiểu trong từ điển tin học nghĩa là gì ;)), hiểu trong lập trình sẽ là gì ;)) Nói chung thì tiếng anh cũng quan trọng 1 phần, nhưng tư duy toán học ko có thì cho dù thằng chuyên anh ngữ cũng chả thể làm nổi ;))
 
Anh dias đến cơ làm 1 ebook VIE đi,Chứ về ENG em khó hiểu lắm (Thông cảm em còn bé nên chưa học nhiều về Eng =(()
 
@MrKaii:
- Có 1 số từ eng có nhiều nghĩa,.....

@ALL:
- Ai cho tôi biết Việt Nam hiện có bao nhiêu Coder AMX nhỉ :-?
- sontung0, 5c0r, redplane, huucuong, ryokin, chief, kakaan, mrkun (tên này dạo này ko thấy đâu nữa), dias,... Còn thiếu ai thì pm nhá :))

@NguLongHaKhac:
- Tôi có viết tut tiếng VN rồi mà, kungfulon up ngoài page 1 ấy. Chờ khi tất cả các coder viết dc nhiều tut rồi gộp lại thành ebook cũng ko sao đâu :))
 
Chỉnh sửa cuối:
Từ khóa trong lập trình nhiều từ dịch ra ko đúng theo nghĩa dịch đâu. Thế nó mới phân biệt ra từ điển anh-viêt vs từ điển tin học
Coder thì cũng nham nhảm đấy, nhưng 1 số người ko xuất hiện=> Nói chung ai có kỹ năng về C rồi thì vào trong CS này làm được vài plugins đấy
 
Giải thích từng dòng=> Tôi có thể đoán được rằng cậu là người có kiến thức về english không được tốt cho lăm, nếu ko nói quá thì là tệ hại, và toán học có lẽ cũng không giỏi >:). Có giải thích thì liệu cậu có thực sự hiểu được không khi mà nền móng căn bản mình chưa nắm vững hay nói trắng ra là chưa học. Nếu dias giải thích từng dòng thì cậu cũng chỉ thể bắt chước và hiểu theo cách của cậu thôi sai hoàn toàn vs lý thuyết. Cách này rất tai hại nếu sau này mình muốn làm plugins thực sự vì ko có nền móng mà chỉ toàn bắt chước vs nhảy cóc thì sẽ chả làm nổi 1 plugins đơn giản vs 30line [-x

Cứ cho là vậy đi, em rốt Eng, tra google thì nó dịch loạn lên
Còn toán thì được có gần 9,5 thôi ^^

Ko phải em ko muốn nghiên cứu mà là ko có time, học 10 buổi/tuần rồi, thỉnh thoảng mới được sờ vào cái PC, còn mọi hum em toàn sài mobile thôi...
 
học lý thuyết đi rồi áp dụng thực hành sau. 1 đứa bé mới sinh ko thể nào đứng lên và chạy nó chỉ có thể bò. Lập trình cũng vậy cần phải bò sát vào lý thuyết nắm vững các từ khóa. Vd như này: Trong lập trình thì các hằng số là đại lượng ko thể thay đổi và bắt buộc phải viết hoa, biến là đại lượng có thể thay đổi,... Giỏi toán như thế thì là 1 lợi thế đấy
 
sự thật mà nói nhảy cóc đôi khi có lợi đấy :|................. đôi khi thôi nhé.

tui làm quen lua. nhảy cóc đọc advance ~> ok, áp dụng tốt trừ 1 số chỗ mò mãi mới ra lúc test.
~> sang amx, đọc nst_wpn. hiểu hầu hết cách hoạt động
~> sang php, làm vụ LAN đã nói, cũng tương đối vụ gửi và nhận.
... thực ra thì nhảy cóc tốt hay ko cũng tùy trường hợp và tùy người. đa số là failed.
 
Đấy là những người có khả năng tiếp thu tốt về đọc hiểu, một số người ko phải dốt nhưng mà ko thể nào nhảy cóc được
 
Túm lại là đi dần từng bước, có đam mê + học tốt toán + học tốt tiếng anh = lợi thế. Như ông Bill Gates đó, học dần dần, từ từ chứ có phải là học C++ xong 1 phát là có ngay hệ điều hành Windows đồ sộ đâu.
 
Trời ơi, nản quá, có thêm cái dòng thông báo cũng không xong nữa

Các anh xem dùm em với..
Em chỉ thêm mỗi chỗ Line 91-100
Complie được nhưng vào game thì nó báo "New message started when msg 107 has bot been sent yet" :((

PHP:
#include <amxmodx>

#define PLUGIN "Weapon Icon"
#define VERSION "1.0"
#define AUTHOR "Duc Duy"

new iconstatus;
new user_icons[32][192];
new icon_origin[3] = {0,0,0}
new pcv_show;
new pcv_iloc;

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_event ("CurWeapon", "update_icon", "ab")
	register_event("DeathMsg", "event_death", "a")
	pcv_show = register_cvar("show", "1");
	pcv_iloc = register_cvar("hide", "1");
	register_concmd("amx_weapon_icon", "weapon_icon_toggle", ADMIN_CVAR, "Toggle display of the weapon icon on/off (default on)")
	
	check_icon_loc();
}

public update_icon(id) {
	check_icon_loc();
	if(!get_pcvar_num(pcv_show) || get_pcvar_num(pcv_iloc) == 0)
		return PLUGIN_CONTINUE;
	
	if(is_user_alive(id))
	{
		new iwpn, wclip, wammo, sprite[192], icon_color[3] = {0, 160, 0}
		
		remove_weapon_icon(id)
		
		iwpn = get_user_weapon(id, wclip, wammo)
		switch(iwpn) {
			case CSW_P228: sprite = "d_p228"
				case CSW_SCOUT: sprite = "d_m700"
				case CSW_HEGRENADE: sprite = "d_grenade"
				case CSW_XM1014: sprite = "d_xm1014"
				case CSW_C4: sprite = "d_c4"
				case CSW_MAC10: sprite = "d_mac10"
				case CSW_AUG: sprite = "d_aug"
				case CSW_SMOKEGRENADE: sprite = "d_grenade"
				case CSW_ELITE: sprite = "d_elite"
				case CSW_FIVESEVEN: sprite = "d_fiveseven"
				case CSW_UMP45: sprite = "d_ump45"
				case CSW_SG550: sprite = "d_sg550"
				case CSW_GALIL: sprite = "d_galil"
				case CSW_FAMAS: sprite = "d_famas"
				case CSW_USP: sprite = "d_usp"
				case CSW_MP5NAVY: sprite = "d_mp5"
				case CSW_M249: sprite = "d_m249"
				case CSW_M3: sprite = "d_m3"
				case CSW_M4A1: sprite = "d_m4a1"
				case CSW_TMP: sprite = "d_tmp"
				case CSW_G3SG1: sprite = "d_g3sg1"
				case CSW_FLASHBANG: sprite = "d_flashbang"
				case CSW_DEAGLE: sprite = "d_deagle"
				case CSW_SG552: sprite = "d_sg552"
				case CSW_AK47: sprite = "d_ak47"
				case CSW_KNIFE: sprite = "d_knife"
				case CSW_P90: sprite = "d_p90"
				case CSW_VEST: sprite = "suit_full"
				case CSW_VESTHELM: sprite = "suithelmet_full"
				case CSW_GLOCK18: sprite = "d_glock18"
				case CSW_AWP: sprite = "d_awp"
				case 0: sprite = ""
				default: sprite = ""
		}
		if (is_user_ok(id)) {
			if (equali(sprite, "") || !is_user_ok(id)) {
				remove_weapon_icon(id)
				} else {
				// draw the sprite itself (only on a human user's screen)
				// marker ////////////////////////////////////////////////////////////////////////////////
				message_begin(MSG_ONE,iconstatus,icon_origin,id);
				write_byte(1); // status (0=hide, 1=show, 2=flash)
				write_string(sprite); // sprite name
				
				/*
				4 stages - Normal, 1 Clip, No Clip + Some ammo, Completely Out
				
				*/
				
				// ammo check, this is for the color of the icon
				get_user_ammo(id, iwpn, wammo, wclip) // update vars correctly
				
				if (wclip == 0 && wammo == 0){
					icon_color = {0, 0, 255} // outta ammo!
					client_print(id, print_chat, "Bang dan hien tai con %d, bang dan du phong con %d", 0,  0) 
				}
				if (wclip == wammo || wclip > wammo){
					icon_color = {255, 150, 150} // last clip!
					client_print(id, print_chat, "%s hay tiet kiem dan", "ban") 
				}
				if (wammo > 0 && wclip == 0) {
					icon_color = {255, 100, 100} 
					client_print(id, print_chat, "Bang dan du phong chi con %d vien", 0) 
				}
					// almost out!
				// attempt at percentage max clip & % red/green color
				// 1: Get max ammo for weapon
				//maxammo = maxclip(iwpn);
				
				
				write_byte(icon_color[0]); // red
				write_byte(icon_color[1]); // green
				write_byte(icon_color[2]); // blue
				message_end();
			}
			user_icons[id] = sprite;
		}
	}
	return PLUGIN_CONTINUE
} 

public weapon_icon_toggle(id) {
	new toggle[32], players[32], num, player, status[32] = "enabled"
	read_argv(1, toggle, 1)
	
	if (equali(toggle, "1")) {
		status = "enabled"
		} else if (equali(toggle, "0")) {
		status = "disabled"
		} else if (equali(toggle, "")) {
		console_print(id, "Usage: amx_weapon_icon <1/0> - Toggles wether or not showing the user's current weapon as an icon")
		console_print(id, "Weapon Icon is currently %s", status)
		return PLUGIN_HANDLED
	}
	
	set_cvar_string("amx_show_weapon_icon", toggle)
	client_print(0, print_chat, "Weapon Icon is now %s", status)
	get_players(players, num)
	for (new i=0; i<num; i++) {
		player = players[i]
		if (!equali(user_icons[player], "") && !equali(players[i], "") && is_user_ok(id)) {
			remove_weapon_icon(i)
		}
	}
	return PLUGIN_CONTINUE
}

public remove_weapon_icon(id) {
	if (is_user_ok(id)) {
		message_begin(MSG_ONE,iconstatus,icon_origin,id);
		write_byte(0);
		write_string(user_icons[id]);
		message_end();
	}
}

public is_user_ok(id) {
	// check if the user is "ok": they are connected, not a bot, and alive
	if (is_user_connected(id) && !is_user_bot(id) && is_user_alive(id))
		return true
	return false
}

public event_death() {
	new player = read_data(2) // the dead player's ID (1-32)
	if (is_user_connected(player) && !is_user_bot(player)) { // remove icon
		message_begin(MSG_ONE,iconstatus,icon_origin,player);
		write_byte(0);
		write_string(user_icons[player]);
		message_end();
	}
}

public check_icon_loc() {
	if(!get_pcvar_num(pcv_iloc))
		return PLUGIN_CONTINUE;
	new value = get_pcvar_num(pcv_iloc);
	if (value == 0)
		iconstatus = 0;
	if (value == 1)
		iconstatus = get_user_msgid("StatusIcon");
	if (value == 2)
		iconstatus = get_user_msgid("Scenario");
	return PLUGIN_CONTINUE;
}
 
Mấy cái AMX này có tác động đc vào AL bot k mấy bác (Kiểu như ta tạo 1 chế độ rồi hướng dẫn bot chơi theo chế độ của mình ý)
P/s:Ta nên xin sếp 1 topic bàn luận về vấn đề này đi, thấy ở đấy k phù hợp lắm (Tổng hợp code, plug cơ mà.)
 
Chỉnh sửa cuối:
Cái đó thì chắc là ko đâu. Bot lập trình ra để bắn nhau thôi, mình đâu có sửa dc suy nghĩ của bot...
 
^:)^.... hiểu đơn giản là có thể sửa cấu trúc của podbot thành 1 loại bot mới chỉ dành riêng cho chơi zombie đc. thực ra nó đc lập trình cũng hướng đối tượng, kiểm tra, bắn.

vấn đề là hiện giờ chưa đủ khả năng để sửa source nó thôi :))
 
zbot chơi Zombie cũng ổn
làm bot mới làm ji ...........
PS:có dự án
 
Chỉnh sửa cuối:
Muốn cũng khó mà làm được ...zbot chẳng qua hit & run bằng melee tốt thôi.
 
@ducduy : Quote dòng nào chú thêm ra xem :| .
 
chả hiểu cái line 170 là line nào. scan ra thì line 170 là nil @@
 
90 ~ 101
PHP:
                if (wclip == 0 && wammo == 0){ 
                    icon_color = {0, 0, 255} // outta ammo! 
                    client_print(id, print_chat, "Bang dan hien tai con %d, bang dan du phong con %d", 0,  0)  
                } 
                if (wclip == wammo || wclip > wammo){ 
                    icon_color = {255, 150, 150} // last clip! 
                    client_print(id, print_chat, "%s hay tiet kiem dan", "ban")  
                } 
                if (wammo > 0 && wclip == 0) { 
                    icon_color = {255, 100, 100}  
                    client_print(id, print_chat, "Bang dan du phong chi con %d vien", 0)  
                }

* muốn đếm dòng thì dùng notepad++, amxmodx studio, pass code vào rồi kiếm dòng... Ctrl + G
 
Chỉnh sửa cuối:
Back
Top