colorstatus.inc
prefix _colorStatus_
VIP Сървъри
Всички сървъри
/* ColorStatus
*
* by DarkGL
*
* This file is provided as is (no warranties).
*/
#define STATUS_TASK 486784986
#define STATUS_TASK2 471231345
#define TO_NAME "%"
enum COLOR_STATUS{
RED_STATUS,
BLUE_STATUS,
YELLOW_STATUS,
GREY_STATUS
}
new msgStatusText;
new msgStatusValue;
new msgSayText;
//prefix _colorStatus_
new oldName[33][64],oldTeam[33],MSG_TYPE[33],bool:bChangedNick[33],Float:fTimeColor[33];
stock initColorStatus(){
register_forward(FM_ClientUserInfoChanged,"fw_ColorUserInfoChanged");
msgStatusText = get_user_msgid("StatusText");
msgStatusValue = get_user_msgid("StatusValue");
msgSayText = get_user_msgid("SayText");
register_message(get_user_msgid("StatusText"),"ColorStatusText");
register_message(get_user_msgid("StatusValue"),"ColorStatusValue");
}
public ColorStatusText(msgID, msgDest,msgEnt){
if(!msgEnt || msgDest == MSG_ALL){
new Float:fTime,szRet[256];
get_msg_arg_string(2,szRet,charsmax(szRet));
for(new i = 1;i<33;i++){
if(!is_user_connected(i)) continue;
fTime = fTimeColor[i] > fTimeColor[0] ? fTimeColor[i] : fTimeColor[0];
if(fTime >= get_gametime() || fTime == -1.0) continue;
message_begin(MSG_ONE,msgStatusText,_,i);
write_byte(0);
write_string(szRet);
message_end();
}
return PLUGIN_HANDLED;
}
else if(is_user_connected(msgEnt)){
if(fTimeColor[msgEnt] >= get_gametime() || fTimeColor[msgEnt] == -1.0) return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public ColorStatusValue(msgID, msgDest,msgEnt){
if(!msgEnt || msgDest == MSG_ALL){
new Float:fTime,szRet[256];
get_msg_arg_string(2,szRet,charsmax(szRet));
for(new i = 1;i<33;i++){
if(!is_user_connected(i)) continue;
fTime = fTimeColor[i] > fTimeColor[0] ? fTimeColor[i] : fTimeColor[0];
if(fTime >= get_gametime() || fTime == -1.0) continue;
message_begin(MSG_ONE,msgStatusValue,_,i);
write_byte(get_msg_arg_int(1));
write_short(get_msg_arg_int(2));
message_end();
}
return PLUGIN_HANDLED;
}
else if(is_user_connected(msgEnt)){
if(fTimeColor[msgEnt] >= get_gametime() || fTimeColor[msgEnt] == -1.0) return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public fw_ColorUserInfoChanged(id){
if(bChangedNick[id]){
set_msg_block(msgSayText, BLOCK_ONCE);
set_user_info(id, "name", TO_NAME) ;
}
}
stock makeStatusText(id,COLOR_STATUS:color,Float:fTime = 0.0,const szText[] = "",any:...){
new szTextFormated[197];
vformat(szTextFormated, charsmax(szTextFormated), szText, 5);
if(id)
{
MSG_TYPE[id] = MSG_ONE;
fTimeColor[id] = !fTime ? -1.0 : get_gametime() + fTime;
} else {
id = FindPlayerStatus();
MSG_TYPE[id] = MSG_ALL;
if(id == -1) return ;
fTimeColor[0] = !fTime ? -1.0 : get_gametime() + fTime;
}
if(color == YELLOW_STATUS){
message_begin(MSG_TYPE[id],msgStatusText,_,id);
write_byte(0);
write_string(szTextFormated);
message_end();
return ;
}
get_user_name(id,oldName[id],charsmax(oldName));
format(szTextFormated, charsmax(szTextFormated),"%s%s","%p2",szTextFormated);
set_msg_block(msgSayText, BLOCK_ONCE);
set_user_info(id, "name", TO_NAME);
bChangedNick[id] = true;
message_begin(MSG_TYPE[id],msgStatusText,_,id);
write_byte(0);
write_string(szTextFormated);
message_end();
oldTeam[id] = get_user_team(id);
setTeamMessage(id,color == RED_STATUS ? 1 : color == BLUE_STATUS ? 2 : 3,MSG_TYPE[id]);
message_begin(MSG_TYPE[id],msgStatusValue,_,id);
write_byte(2);
write_short(id);
message_end();
remove_task(id+STATUS_TASK);
remove_task(id+STATUS_TASK2);
set_task(0.1,"returnToStatus",id+STATUS_TASK);
if(fTime != 0.0) set_task(fTime,"deleteStatus",MSG_TYPE[id] == MSG_ALL ? STATUS_TASK2 : id+STATUS_TASK2);
}
public deleteStatus(id){
id-=STATUS_TASK2;
new Float:fTime;
if(!id){
for(new i = 1;i<33;i++){
if(!is_user_connected(i)) continue;
fTime = fTimeColor[i] > fTimeColor[0] ? fTimeColor[i] : fTimeColor[0];
if(fTime >= get_gametime() || fTime == -1.0) continue;
message_begin(MSG_ONE,msgStatusText,_,i);
write_byte(0);
write_string("");
message_end();
message_begin(MSG_ONE,msgStatusValue,_,i);
write_byte(1);
write_short(0);
message_end();
message_begin(MSG_ONE,msgStatusValue,_,i);
write_byte(2);
write_short(0);
message_end();
message_begin(MSG_ONE,msgStatusValue,_,i);
write_byte(3);
write_short(0);
message_end();
}
}
else if(is_user_connected(id)){
fTime = fTimeColor[id] > fTimeColor[0] ? fTimeColor[id] : fTimeColor[0];
if(fTime >= get_gametime() || fTime == -1.0) return ;
message_begin(MSG_ONE,msgStatusText,_,id);
write_byte(0);
write_string("");
message_end();
message_begin(MSG_ONE,msgStatusValue,_,id);
write_byte(1);
write_short(0);
message_end();
message_begin(MSG_ONE,msgStatusValue,_,id);
write_byte(2);
write_short(0);
message_end();
message_begin(MSG_ONE,msgStatusValue,_,id);
write_byte(3);
write_short(0);
message_end();
}
}
public returnToStatus(id){
id-=STATUS_TASK;
bChangedNick[id] = false;
set_msg_block(msgSayText, BLOCK_ONCE);
set_user_info(id,"name",oldName[id]);
setTeamMessage(id,oldTeam[id],MSG_TYPE[id]);
}
stock setTeamMessage(id, team,type){
static msgTeamInfo;
if(!msgTeamInfo) msgTeamInfo = get_user_msgid("TeamInfo");
static TeamName[][] =
{
"",
"TERRORIST",
"CT",
"SPECTATOR"
};
message_begin(type, msgTeamInfo, _, id);
write_byte(id);
write_string(TeamName[team]);
message_end();
}
stock FindPlayerStatus()
{
static maxPlayers;
static i;
i = -1;
if(!maxPlayers) maxPlayers = get_maxplayers();
while(i <= maxPlayers)
{
if(is_user_connected(++i))
{
return i;
}
}
return -1;
}
КАК ДА ИЗПОЛЗВАМ
Добави в началото на .sma файла:
#include <colorstatus>
1. Изтегли
Свали файла от бутона по-горе
2. Копирай
Постави в
scripting/include/3. Включи
Добави #include директивата
4. Компилирай
Използвай amxxpc или scripting/compile.exe