[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
@legiondark = -> == , bao h có thời gian tui fix lại cho
 
@Ryokin: thanks nhá...complie không có Warnings nào ^^
À, bác có thể chỉ em mấy cái event được ko?? Tìm chẳng ở đâu có :(

@LDK: Đang làm plugins đánh bomb liều chết hả? =))

P/S: các bác cho em hỏi cái:
1. Có các nào để add 1 SPR vào 1 vị trí nhất định không?
(Ví dụ: như SPR number mặc định của CS...Chứ SPR mình add mỗi độ phân giải nó lại ở 1 chỗ..=> chỉ chơi được ở 1 độ phân giải)
2. Có cách nào để show_hudmessage luôn luôn hiện không? (em dùng thì khoảng 10s nó tự biến mất)...
3. Dùng hàm nào để set màu, set font cho "show_hudmessage" ạ?


---------- Post added at 14:36 ---------- Previous post was at 14:34 ----------

Với cả SET size cho nó nữa
Các bác giúp em với...Nếu ko dùng show_hudmessage thì dùng hàm nào được ạ?


(Em muốn làm 1 dòng chữ màu trắng hiện trên màn hình --> hiển thị số máu thay cho hud number)
 
Cái số 1 thì dùng metahook mới mong làm đc, sử dụng v32 để sử dụng metahook
 
Mấy bác cho em hỏi:
Nếu dùng: native file_exists(const file[]);
Thì đường dẫn được xác định ntn ạ?
Ví dụ : cstrike\ducduy.txt
Hay là D\:cs\cstrike\ducduy.txt
...đại loại là thế ^^
 
thực ra cái số 1 dùng ent + fw addtofullpack vẫn làm đc

code bomb suicide đây, đã sửa lài toàn bộ

PHP:
#include <amxmodx>
#include <engine>
#include <hamsandwich>

#define PLUGIN    "Suicide Bombings"
#define AUTHOR    "LegionDark+Ryokin"
#define VERSION    "1.0"

new cvar_onoff, cvar_fradius, cvar_fdamage, explodespr

public plugin_precache()
{
	explodespr = precache_model("sprites/zerogxplode.spr")
}

public plugin_init()
{
	register_plugin(PLUGIN,AUTHOR,VERSION);
	register_concmd("LD_sb", "sui_bomb");
	cvar_onoff = register_cvar("LD_sb_onoff","1");
	cvar_fradius = register_cvar("LD_sb_radius", "100");
	cvar_fdamage = register_cvar("LD_sb_dmg","100");
}

public sui_bomb(id)
{
	if(!get_pcvar_num(cvar_onoff))
	{
		client_print(id, print_center, "Plugin nay chua duoc bat");
		return;
	}
		
	new i, iPlayers[32], iNum, iPlayer, Float:fDmgAmt, Float:fDmgDis, Float:fDistance;
	get_players(iPlayers, iNum, "ae", "CT");
	fDmgAmt = get_pcvar_float(cvar_fdamage);
	fDmgDis = get_pcvar_float(cvar_fradius);
	
	if(iNum)
	{
		for(i = 0; i < iNum; i++)
		{
			iPlayer = iPlayers[i];
			
			fDistance = entity_range(id, iPlayer);
			
			if(fDistance > fDmgDis)
				continue;
			
			new Float:fDamage = fDmgAmt - (fDmgAmt / fDmgDis * fDistance);
					
			ExecuteHam(Ham_TakeDamage, iPlayer, 0, id, fDamage, DMG_BLAST);
		}
	}
	
	new iOrigin[3];
	get_user_origin(id, iOrigin);
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iOrigin);
	write_byte(TE_EXPLOSION);
	write_coord(iOrigin[0]);
	write_coord(iOrigin[1]);
	write_coord(iOrigin[2]);
	write_short(explodespr);
	write_byte(30);
	write_byte(15);
	write_byte(0);
	message_end();
	
	if(is_user_alive(id))
		user_kill(id);
}
 
Chỉnh sửa cuối:
@buiduchuy:
1. Dùng set_task(0.2, "show_hud", id, _, _, "b") // b để lặp lại. Khi cần thì remove_task
2. Set màu của set_hudmessage thì có gì khó đâu, đã bảo là sài amx studio bốc màu cho dễ.
3. Ví dụ:
PHP:
file_exists("addons/amxmodx/configs/botadder/botlists/index.cfg")
- Hiểu rồi đấy.

@Ryokin:
- Cái forward AddToFullPack nó dc call khi nào vậy :-?. Tui tưởng khi player nhặt item là nó dc call chứ
 
@Ryokin:
- Cái forward AddToFullPack nó dc call khi nào vậy :-?. Tui tưởng khi player nhặt item là nó dc call chứ

call nhiều hơn player's think @@
 
Cũng giống forward think nhưng call nhiều hơn àh :-?
 
@Ryokin: Thank, bác viết lại thế e lại vọc thêm đc nhiều thứ, càng thêm nhiều thứ khó hiểu --> càng tốt =))
PHP:
#include <amxmodx> 
#include <engine> 
#include <hamsandwich> 

#define PLUGIN    "Suicide Bombings" 
#define AUTHOR    "LegionDark+Ryokin" 
#define VERSION    "1.0" 

new cvar_onoff, cvar_fradius, cvar_fdamage, explodespr 

public plugin_precache() 
{ 
    explodespr = precache_model("sprites/zerogxplode.spr") 
} 

public plugin_init() 
{ 
    register_plugin(PLUGIN,AUTHOR,VERSION); 
    register_concmd("LD_sb", "sui_bomb"); 
    cvar_onoff = register_cvar("LD_sb_onoff","1"); 
    cvar_fradius = register_cvar("LD_sb_radius", "100"); 
    cvar_fdamage = register_cvar("LD_sb_dmg","100"); 
} 

public sui_bomb(id) 
{ 
    if(!get_pcvar_num(cvar_onoff)) 
    { 
        client_print(id, print_center, "Plugin nay chua duoc bat"); 
        return; 
    } 
         
    new i, iPlayers[32], iNum, iPlayer, Float:fDmgAmt, Float:fDmgDis, Float:fDistance; 
    get_players(iPlayers, iNum, "ae", "CT"); //--> iNum trong này có nghĩa là j` ?
    fDmgAmt = get_pcvar_float(cvar_fdamage); 
    fDmgDis = get_pcvar_float(cvar_fradius); 
     
    if(iNum) //Như trên
    { 
        for(i = 0; i < iNum; i++) 
        { 
            iPlayer = iPlayers[i]; 
             
            fDistance = entity_range(id, iPlayer); //Lấy k cách giữa 2 vật thì id và iPlayer là 2 vật à ??
             
            if(fDistance > fDmgDis) 
                continue; 
             
            new Float:fDamage = fDmgAmt - (fDmgAmt / fDmgDis * fDistance); //Khoảng cách càng xa thì càng yếu, k nghĩ ra cái này
                     
            ExecuteHam(Ham_TakeDamage, iPlayer, 0, id, fDamage, DMG_BLAST); //Chưa hiểu lắm cái đoạn này
        } 
    } 
     
    new iOrigin[3]; 
    get_user_origin(id, iOrigin); 
     
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iOrigin); 
    write_byte(TE_EXPLOSION); 
    write_coord(iOrigin[0]); 
    write_coord(iOrigin[1]); 
    write_coord(iOrigin[2]); 
    write_short(explodespr); 
    write_byte(30); 
    write_byte(15); 
    write_byte(0); 
    message_end(); 
     
    if(is_user_alive(id)) 
        user_kill(id); 
}
P/s:Tuy nhiên vẫn thiếu phần check team, ý của e là chỉ sử dụng plugin cho Ter thôi(chứ ai đời cảnh sát lại đánh bom bao h =)))
Ask: Muốn check team thì phải dùng native nào và dùng thế nào bác ??
 
Chỉnh sửa cuối:
Bác Ryokin cũng giỏi toán nhỉ, công trừ nhân chia lung tung :)). Tui cũng chịu
 
Lâu rồi mình ko vào đây support nhỉ
059.gif
 
Cứ ngồi đó mà cưa mìn đi con :))
 
ko hỉu sao mấy bác này giỏi tính damage thế nhỉ???
mình là chịu rùi...
 
Mi muốn mìn thì có mìn ngay
bomb.gif
 
@buiduchuy:
1. Dùng set_task(0.2, "show_hud", id, _, _, "b") // b để lặp lại. Khi cần thì remove_task
2. Set màu của set_hudmessage thì có gì khó đâu, đã bảo là sài amx studio bốc màu cho dễ.
3. Ví dụ:
PHP:
file_exists("addons/amxmodx/configs/botadder/botlists/index.cfg")
- Hiểu rồi đấy.

@Ryokin:
- Cái forward AddToFullPack nó dc call khi nào vậy :-?. Tui tưởng khi player nhặt item là nó dc call chứ

Bác cho em vài ví dụ cho dễ hiểu đi bác
 
Ví dụ về cái nào ?........
 
@Ryokin: Thank, bác viết lại thế e lại vọc thêm đc nhiều thứ, càng thêm nhiều thứ khó hiểu --> càng tốt =))
PHP:
#include <amxmodx> 
#include <engine> 
#include <hamsandwich> 

#define PLUGIN    "Suicide Bombings" 
#define AUTHOR    "LegionDark+Ryokin" 
#define VERSION    "1.0" 

new cvar_onoff, cvar_fradius, cvar_fdamage, explodespr 

public plugin_precache() 
{ 
    explodespr = precache_model("sprites/zerogxplode.spr") 
} 

public plugin_init() 
{ 
    register_plugin(PLUGIN,AUTHOR,VERSION); 
    register_concmd("LD_sb", "sui_bomb"); 
    cvar_onoff = register_cvar("LD_sb_onoff","1"); 
    cvar_fradius = register_cvar("LD_sb_radius", "100"); 
    cvar_fdamage = register_cvar("LD_sb_dmg","100"); 
} 

public sui_bomb(id) 
{ 
    if(!get_pcvar_num(cvar_onoff)) 
    { 
        client_print(id, print_center, "Plugin nay chua duoc bat"); 
        return; 
    } 
         
    new i, iPlayers[32], iNum, iPlayer, Float:fDmgAmt, Float:fDmgDis, Float:fDistance; 
    get_players(iPlayers, iNum, "ae", "CT"); //--> iNum trong này có nghĩa là j` ?
    fDmgAmt = get_pcvar_float(cvar_fdamage); 
    fDmgDis = get_pcvar_float(cvar_fradius); 
     
    if(iNum) //Như trên
    { 
        for(i = 0; i < iNum; i++) 
        { 
            iPlayer = iPlayers[i]; 
             
            fDistance = entity_range(id, iPlayer); //Lấy k cách giữa 2 vật thì id và iPlayer là 2 vật à ??
             
            if(fDistance > fDmgDis) 
                continue; 
             
            new Float:fDamage = fDmgAmt - (fDmgAmt / fDmgDis * fDistance); //Khoảng cách càng xa thì càng yếu, k nghĩ ra cái này
                     
            ExecuteHam(Ham_TakeDamage, iPlayer, 0, id, fDamage, DMG_BLAST); //Chưa hiểu lắm cái đoạn này
        } 
    } 
     
    new iOrigin[3]; 
    get_user_origin(id, iOrigin); 
     
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iOrigin); 
    write_byte(TE_EXPLOSION); 
    write_coord(iOrigin[0]); 
    write_coord(iOrigin[1]); 
    write_coord(iOrigin[2]); 
    write_short(explodespr); 
    write_byte(30); 
    write_byte(15); 
    write_byte(0); 
    message_end(); 
     
    if(is_user_alive(id)) 
        user_kill(id); 
}
P/s:Tuy nhiên vẫn thiếu phần check team, ý của e là chỉ sử dụng plugin cho Ter thôi(chứ ai đời cảnh sát lại đánh bom bao h =)))
Ask: Muốn check team thì phải dùng native nào và dùng thế nào bác ??

tui cứ tưởng là chỉ ct bị dính dmg, thế thì nên dùng check player trong radius = find ent in sphere, muốn check chỉ team ter đc dùng thì dùng native
PHP:
//cstrike
if(cs_get_user_team(id) == CS_TEAM_T)
hoặc
PHP:
//engine
if(get_user_team(id) == 1)

nên dùng cstrike's native

cái iNum để lấy số player trong team ct(alive)
 
@LDK: Mình giải thích được chút ý nè
PHP:
#include <amxmodx> 
#include <engine> 
#include <hamsandwich> 

#define PLUGIN    "Suicide Bombings" 
#define AUTHOR    "LegionDark+Ryokin" 
#define VERSION    "1.0" 

new cvar_onoff, cvar_fradius, cvar_fdamage, explodespr  //Khai báo

public plugin_precache() 
{ 
    explodespr = precache_model("sprites/zerogxplode.spr") //Load models
} 

public plugin_init() 
{ 
    register_plugin(PLUGIN,AUTHOR,VERSION);    //Đăng kí plugins, lệnh, cvar..
    register_concmd("LD_sb", "sui_bomb"); 
    cvar_onoff = register_cvar("LD_sb_onoff","1"); 
    cvar_fradius = register_cvar("LD_sb_radius", "100"); 
    cvar_fdamage = register_cvar("LD_sb_dmg","100"); 
} 

public sui_bomb(id) 
{ 
    if(!get_pcvar_num(cvar_onoff)) //Nếu khác get_pcvar_num(cvar_onoff) (chưa bật)
    { 
        client_print(id, print_center, "Plugin nay chua duoc bat"); 
        return; 
    } 
         
    new i, iPlayers[32], iNum, iPlayer, Float:fDmgAmt, Float:fDmgDis, Float:fDistance;  // Khai báo biến
    get_players(iPlayers, iNum, "ae", "CT"); //--> iNum trong này có nghĩa là j` ?
    fDmgAmt = get_pcvar_float(cvar_fdamage);  // Lấy số trong cvar "cvar_fdamage" ở trên
    fDmgDis = get_pcvar_float(cvar_fradius); // Lấy số trong cvar "cvar_fdamage" ở trên
     
    if(iNum) // If cho iNum
    { 
        for(i = 0; i < iNum; i++)  // Cho i=0, điều kiện : i<iNum , i+1...Lặp lại như thế..
        {  
            iPlayer = iPlayers[i]; // gán biến iPlayer = Khe i của biến iPlayers[32]
             
            fDistance = entity_range(id, iPlayer); //Hàm này ko bít
             
            if(fDistance > fDmgDis)  // Nếu fDistance > fDmgDis
                continue; //tiếp tục
             
            new Float:fDamage = fDmgAmt - (fDmgAmt / fDmgDis * fDistance); // Khai báo biên fDamage = "số của  cvar_fdamage" - ("số của  cvar_fdamage" chia  "số cvar cvar_fdamage" nhân "giá trị của [entity_range(id, iPlayer)]

//Notes: Số cvar xác định bởi lệnh "LD_sb_radius <giá trị>"
             Số cvar xác định bởi lệnh "LD_sb_dmg <giá trị>"
                     
            ExecuteHam(Ham_TakeDamage, iPlayer, 0, id, fDamage, DMG_BLAST); //Chưa hiểu lắm cái đoạn này
        } 
    } 
     
    new iOrigin[3]; 
    get_user_origin(id, iOrigin); 
     
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iOrigin); //ADD SPR...
    write_byte(TE_EXPLOSION); 
    write_coord(iOrigin[0]); 
    write_coord(iOrigin[1]); 
    write_coord(iOrigin[2]); 
    write_short(explodespr); 
    write_byte(30); 
    write_byte(15); 
    write_byte(0); 
    message_end(); 
     
    if(is_user_alive(id)) 
        user_kill(id); 
}


---------- Post added at 20:30 ---------- Previous post was at 20:28 ----------

Ví dụ về cái nào ?........

1.Set_hudmessage (đặt tọa độ, đặt kiểu Font, đặt size, đặt màu)
2. Cố định SPR cho mọi độ phân giải


Thanks bác trước
 
@bdh:
PHP:
set_hudmessage(0, 255, 0, 0.40, 0.50, 0, 6.0, 12.0)
show_hudmessage(id, "Hello Wold")
0, 255, 0 là màu
0.40, 0.50 là tọa độ
0 là effect

Mã:
set_hudmessage - Sets the format for a HUD message 
Syntax:

     set_hudmessage ( red=200, green=100, blue=0, Float:x=-1.0, Float:y=0.35, effects=0, Float:fxtime=6.0, Float:holdtime=12.0, Float:fadeintime=0.1, Float:fadeouttime=0.2, channel=4 )
Type:

    Native
Notes:

There are 4 hud channels pr player. This means you can send a 2 diffrent messages to player a & b via channel 1. 

Use index 0 if you want to send a message to everyone. 
Use show_hudmessage to show the message. 

effects types: 
0 = fade in/fade out 
1 = flickery credits 
2 = write out (training room) 

Plugins that can be helpfull. 
This plugin allows you to easly change the pos/color of a hud message: 
http://forums.alliedmods.net/showthread.php?p=19439 

Note - as of AMX Mod X 1.61, setting the channel to -1 will automatically choose the next available HUD channel for a player.
dịch đi
 
Back
Top