AES (fork) informer

Сообщения
345
Реакции
77
Помог
14 раз(а)
Ошибка
Меняется положение информера при смене разрешения
ОС
Linux
Билд
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.4.0.633-dev
Build date: 16:48:34 Jan 31 2018 (1390)
Build from: https://github.com/dreamstalker/rehlds/commit/82ee1b0
ReGamedll
ReGameDLL version: 5.7.0.295-dev
Build date: 15:10:22 Feb 19 2018
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/aa329db
Список метамодулей
[ 1] Reunion          RUN   -    reunion_mm_i386.so         v0.1.75          ini  Start Never
[ 2] SafeNameAndChat RUN - SafeNameAndChat.so v1.1 ini ANY ANY
[ 3] hackdetector RUN - hackdetector_amxx_i386.so v0.15.328.lite ini ANY ANY
[ 4] Rechecker RUN - rechecker_mm_i386.so v2.4 ini Chlvl ANY
[ 5] ReAuthCheck RUN - reauthcheck_mm_i386.so v0.1.6 ini Start Never
[ 6] VoiceTranscoder RUN - VoiceTranscoder.so v2017RC3 ini ANY ANY
[ 7] AMX Mod X RUN - amxmodx_mm_i386.so v1.8.3-dev+5154 ini Start ANY
[ 8] FakeMeta RUN - fakemeta_amxx_i386.so v1.8.3-dev+5154 pl7 ANY ANY
[ 9] MySQL RUN - mysql_amxx_i386.so v1.8.3-dev+5154 pl7 ANY ANY
[10] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.8.3-dev+5154 pl7 ANY ANY
[11] CSX RUN - csx_amxx_i386.so v1.8.3-dev+5154 pl7 ANY ANY
[12] ReAPI RUN - reapi_amxx_i386.so v5.5.0.150-dev pl7 ANY Never
[13] Engine RUN - engine_amxx_i386.so v1.8.3-dev+5154 pl7 ANY ANY
[14] CStrike RUN - cstrike_amxx_i386.so v1.8.3-dev+5154 pl7 ANY ANY
[15] Fun RUN - fun_amxx_i386.so v1.8.3-dev+5154 pl7 ANY ANY
15 plugins, 15 running
Список плагинов
[  1] Admin Loader            3.1         neygomon          admin_loader.am  running  
[ 2] FreshBans 1.3.8b kanagava fresh_bans_for_ running
[ 3] CSStatsX SQL 0.7.4 serfreeman1337 csstatsx_sql.am running
[ 4] Stats Configuration 1.8.3-dev+ AMXX Dev Team statscfg.amxx running
[ 5] Multi-Lingual System 1.8.3-dev+ AMXX Dev Team multilingual.am running
[ 6] Players Menu 1.8.3-dev+ AMXX Dev Team plmenu.amxx running
[ 7] Maps Menu 1.8.3-dev+ AMXX Dev Team mapsmenu.amxx running
[ 8] AES: StatsX 0.5 Vega serfreeman1337 aes_statsx_cstr running
[ 9] Advanced MapChooser 1.4 neygomon map_chooser.amx running
[ 10] Train Killer 1.0 Pastout! trainkiller.amx running
[ 11] get_user_info 0.0.1 holy new_hook.amxx running
[ 12] MG Grab 1.0 Nickron mg_grab.amxx running
[ 13] [ReAPI] Parachute 1.1 ReHLDS Team parachute.amxx running
[ 14] [ReAPI] Custom Models 1.6.1 neugomon custom_models.a running
[ 15] Cam Change 1.1 Bl0ck Cam_Change.amxx running
[ 16] NoRound Balancer 1.3 neygomon noround_balance running
[ 17] menu on key m 228 unknown menu.amxx running
[ 18] Change Team 1.1 neygomon changeteam.amxx running
[ 19] Super Bunny Hopper 1.2 Cheesy Peteza bunnyhop.amxx running
[ 20] Ultimate Chats Control 4.1 neygomon ucc.amxx running
[ 21] Knife DeathMatch: VIP 1.0.2 Salvatore vipmenu.amxx running
[ 22] СуперМаркет 3.0 Pain market.amxx debug
[ 23] Duels 0.75 Psycrow next21_duels_v2 running
[ 24] Menus Front-End 1.5 neugomon menufront_end.a running
[ 25] Plugins Controller 1.0 neygomon plugins_control stopped
[ 26] RC BaseChanger freesrv AMXX rc_basechanger. running
[ 27] ReChecker Logging freesrv AMXX rc_logging.amxx running
[ 28] Map Spawns Editor 1.0.16 iG_os map_spawns_edit running
[ 29] 35hp 1.0 TBONTB map_35hp.amxx running
[ 30] resetscore(ReAPI) 1.0 Phantom resetscore.amxx running
[ 31] Auto Demo Recorder 2.2.1 F@nt0M demo_recorder.a running
[ 32] [ReAPI] Block 'Fire in 0.0.1 sergrib reapi_block_FIT running
[ 33] NameChangeTime 0.0.1 Vaqtincha block_change_ni running
[ 34] Radio Block 1.0 alliedmods Block_Radio_nor running
[ 35] Ping Checker 26.0.1 RC1 h1k3 ping_checker.am running
[ 36] Spec Money Save 0.2 F@nt0M spec_money_save running
[ 37] Lite Translit 2.8 neygomon lite_translit1. running
[ 38] Advanced Experience Sy 0.5.9 [REA serfreeman1337/s aes_main.amxx running
[ 39] AES: CStrike Addon 0.5.9 [REA serfreeman1337/s aes_exp_cstrike running
[ 40] AES: Informer 0.5.9 [REA serfreeman1337/s aes_informer.am running
40 plugins, 39 running
Исходный код
/*
Advanced Experience System
by serfreeman1337 http://gf.hldm.org/
*/

/*
HUD Informer
*/

#include <amxmodx>
#include <amxmisc>
#include <reapi>

#define CSSTATSX_SQL // расскомментируйте для поддержки CSstatsX SQL (http://1337.uz/csstatsx-sql/)




#include <aes_v>
#if defined CSSTATSX_SQL
#include <csstatsx_sql>
#endif

#define PLUGIN "AES: Informer"
#define VERSION "0.5.9 [REAPI]"
#define AUTHOR "serfreeman1337/sonyx"
#define LASTUPDATE "12, March (03), 2018"

#if AMXX_VERSION_NUM < 183
#include <colorchat>

#define print_team_default DontChange
#define print_team_grey Grey
#define print_team_red Red
#define print_team_blue Blue

#define MAX_NAME_LENGTH 32
#define MAX_PLAYERS 32

#define client_disconnected client_disconnect
#endif

#define PLAYER_HUD_OFFSET 86444

/* - CVARS - */

enum _:cvars_num {
CVAR_HUD_UPDATE,
CVAR_HUD_INFO_DEFAULT,
CVAR_HUD_INFO_TYPE,
CVAR_HUD_INFO_COLOR,
CVAR_HUD_INFO_POS,
CVAR_HUD_INFO_TYPE_D,
CVAR_HUD_INFO_COLOR_D,
CVAR_HUD_INFO_POS_D,
CVAR_TPL_MODE,
CVAR_HUD_ANEW_TYPE,
CVAR_HUD_ANEW_POS,
CVAR_HUD_ANEW_COLOR,
CVAR_CHAT_NEW_LEVEL
}

new cvar[cvars_num];

/* - CACHED VALUES - */

// кеш от души
new Float:hudUpdateInterval;
new bool:hudInfoOn, Float:hudInfoxPos,Float:hudInfoyPos,hudInfoColor[3],bool:hudInfoColorRandom;
new bool:hudDeadOn, Float:hudDeadxPos, Float:hudDeadyPos,hudDeadColor[3],bool:hudDeadColorRandom;
new bool:hudaNewOn, Float:hudaNewxPos,Float:hudaNewyPos,hudaNewColor[3];
new chatLvlUpStyle,bonusEnabledPointer,bool:isTplMode,aesMaxLevel,g_trackmode;
new playerLevel[MAX_PLAYERS + 1][AES_MAX_LEVEL_LENGTH],playerWatchLevel[MAX_PLAYERS + 1];

/* - SYNC HUD OBJ - */
new informerSyncObj,aNewSyncObj;

/* - FILE STORAGE - */

new Trie:g_DisabledInformer;

#if AMXX_VERSION_NUM < 183
new Array:g_ADisabledInformer;
#endif

#if defined CSSTATSX_SQL
new const g_skill_letters[][] = {
"L-",
"L",
"L+",
"M-",
"M",
"M+",
"H-",
"H",
"H+",
"P-",
"P",
"P+",
"G"
}

new g_cvar_skill;
new Float:g_skill_opt[sizeof g_skill_letters];
#endif

enum _:tplInfo {
INF_EXP,
INF_LEVELEXP,
INF_NEEDEXP,
INF_LEVEL,
INF_MAXLEVEL,
INF_RANK,
INF_NAME,
INF_STEAMID,
INF_BONUS,
#if defined CSSTATSX_SQL
INF_SKILL,
#endif

INF_EXF,
INF_LXF,
INF_NXF
}

new const tplKeys[tplInfo][] = {
"<exp>",
"<levelexp>",
"<needexp>",
"<level>",
"<maxlevel>",
"<rank>",
"<name>",
"<steamid>",
"<bonus>",
#if defined CSSTATSX_SQL
"<skill>",
#endif

"<exf>",
"<lxf>",
"<nxf>"
}

enum _:tplVario {
TPL_INF,
TPL_INF_D,
TPL_UP,
TPL_UP_ALL
}

new tplBitSum[tplVario]

new const teamColor[] = {
print_team_grey,
print_team_red,
print_team_blue
}

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

cvar[CVAR_TPL_MODE] = register_cvar("aes_informer_tpl","0");
cvar[CVAR_HUD_UPDATE] = register_cvar("aes_hud_update","1.5");
cvar[CVAR_HUD_INFO_DEFAULT] = register_cvar("aes_hud_info_default","1");
cvar[CVAR_HUD_INFO_TYPE] = register_cvar("aes_hud_info_type","1");
cvar[CVAR_HUD_INFO_COLOR] = register_cvar("aes_hud_info_color","100 100 100");
cvar[CVAR_HUD_INFO_POS] = register_cvar("aes_hud_info_pos","0.01 0.13");
cvar[CVAR_HUD_ANEW_TYPE] = register_cvar("aes_hud_anew_type","1");
cvar[CVAR_HUD_ANEW_COLOR] = register_cvar("aes_hud_anew_color","100 100 100");
cvar[CVAR_HUD_ANEW_POS] = register_cvar("aes_hud_anew_pos","-1.0 0.90");
cvar[CVAR_CHAT_NEW_LEVEL] = register_cvar("aes_newlevel_chat","2");

cvar[CVAR_HUD_INFO_TYPE_D] = register_cvar("aes_hud_info_default_d","1");
cvar[CVAR_HUD_INFO_COLOR_D] = register_cvar("aes_hud_info_color_d","60 60 60");
cvar[CVAR_HUD_INFO_POS_D] = register_cvar("aes_hud_info_pos_d","0.01 0.15");
#if defined CSSTATSX_SQL
g_cvar_skill = register_cvar("aes_statsx_skill","60.0 75.0 85.0 100.0 115.0 130.0 140.0 150.0 165.0 180.0 195.0 210.0");
#endif

register_clcmd("say /aenable","Informer_Switch",0,"- switch experience informer on/off");
}

public plugin_cfg()
{
#if defined CSSTATSX_SQL
new levelString[512], stPos, ePos, rawPoint[20], cnt;
get_pcvar_string(g_cvar_skill, levelString, charsmax(levelString));

// парсер значений для скилла
do {
ePos = strfind(levelString[stPos], " ");

formatex(rawPoint, ePos, levelString[stPos]);
g_skill_opt[cnt] = str_to_float(rawPoint);

stPos += ePos + 1;

cnt++;

// narkoman wole suka
if(cnt > charsmax(g_skill_letters))
break;
} while (ePos != -1)
#endif
bonusEnabledPointer = get_cvar_pointer("aes_bonus_enable");

hudUpdateInterval = get_pcvar_float(cvar[CVAR_HUD_UPDATE]);
hudInfoOn = get_pcvar_num(cvar[CVAR_HUD_INFO_DEFAULT]) > 0 ? true : false;
hudDeadOn = get_pcvar_num(cvar[CVAR_HUD_INFO_TYPE_D]) > 0 ? true : false;
hudaNewOn = get_pcvar_num(cvar[CVAR_HUD_ANEW_TYPE]) > 0 ? true : false;
chatLvlUpStyle = get_pcvar_num(cvar[CVAR_CHAT_NEW_LEVEL]);
isTplMode = get_pcvar_num(cvar[CVAR_TPL_MODE]) > 0 ? true : false;

if(!bonusEnabledPointer)
hudaNewOn = false;

new temp[15],sColor[3][6];

if(hudInfoOn){
get_pcvar_string(cvar[CVAR_HUD_INFO_COLOR],temp,14);

if(strcmp(temp,"random") != 0)
{
parse(temp,sColor[0],3,sColor[1],3,sColor[2],3);

hudInfoColor[0] = str_to_num(sColor[0]);
hudInfoColor[1] = str_to_num(sColor[1]);
hudInfoColor[2] = str_to_num(sColor[2]);
}
else
hudInfoColorRandom = true;

get_pcvar_string(cvar[CVAR_HUD_INFO_POS],temp,14);
parse(temp,sColor[0],5,sColor[1],5);

hudInfoxPos = str_to_float(sColor[0]);
hudInfoyPos = str_to_float(sColor[1]);

informerSyncObj = CreateHudSyncObj();

if(isTplMode){ // sum
new tplString[256];
formatex(tplString,charsmax(tplString),"%L",LANG_SERVER,"AES_HUD_TPL");

for(new i ; i < tplInfo ; i++)
{
if(contain(tplString,tplKeys[i]) != -1)
tplBitSum[TPL_INF] |= (1<<i);
}
}
}

if(hudDeadOn)
{
get_pcvar_string(cvar[CVAR_HUD_INFO_COLOR_D],temp,14);

if(strcmp(temp,"random") != 0)
{
parse(temp,sColor[0],3,sColor[1],3,sColor[2],3);

hudDeadColor[0] = str_to_num(sColor[0]);
hudDeadColor[1] = str_to_num(sColor[1]);
hudDeadColor[2] = str_to_num(sColor[2]);
}
else
hudDeadColorRandom = true;

get_pcvar_string(cvar[CVAR_HUD_INFO_POS_D],temp,14);
parse(temp,sColor[0],5,sColor[1],5);

hudDeadxPos = str_to_float(sColor[0]);
hudDeadyPos = str_to_float(sColor[1]);

if(!informerSyncObj)
informerSyncObj = CreateHudSyncObj();

if(isTplMode)
{ // sum
new tplString[256];
formatex(tplString,charsmax(tplString),"%L",LANG_SERVER,"AES_HUD_TPL_D");

for(new i ; i < tplInfo ; i++)
{
if(contain(tplString,tplKeys[i]) != -1)
tplBitSum[TPL_INF_D] |= (1<<i);
}
}
}

if(isTplMode)
{ // bit sum for chat notify messages
switch(chatLvlUpStyle )
{
case 1:
{
new tplString[256];
formatex(tplString,charsmax(tplString),"%L",LANG_SERVER,"AES_NEWLEVEL_TPL");

for(new i ; i < tplInfo ; i++)
{
if(contain(tplString,tplKeys[i]) != -1)
tplBitSum[TPL_UP] |= (1<<i);
}

}
case 2:
{
new tplString[256];
formatex(tplString,charsmax(tplString),"%L",LANG_SERVER,"AES_NEWLEVEL_TPL");

for(new i ; i < tplInfo ; i++)
{
if(contain(tplString,tplKeys[i]) != -1)
tplBitSum[TPL_UP] |= (1<<i);
}

formatex(tplString,charsmax(tplString),"%L",LANG_SERVER,"AES_NEWLEVEL_ALL_TPL");

for(new i ; i < tplInfo ; i++)
{
if(contain(tplString,tplKeys[i]) != -1)
tplBitSum[TPL_UP_ALL] |= (1<<i);
}
}
}
}

if(hudaNewOn)
{
get_pcvar_string(cvar[CVAR_HUD_ANEW_COLOR],temp,14);
parse(temp,sColor[0],3,sColor[1],3,sColor[2],3);

hudaNewColor[0] = str_to_num(sColor[0]);
hudaNewColor[1] = str_to_num(sColor[1]);
hudaNewColor[2] = str_to_num(sColor[2]);

get_pcvar_string(cvar[CVAR_HUD_ANEW_POS],temp,14);
parse(temp,sColor[0],5,sColor[1],5);

hudaNewxPos = str_to_float(sColor[0]);
hudaNewyPos = str_to_float(sColor[1]);

aNewSyncObj = CreateHudSyncObj();
}

aesMaxLevel = aes_get_max_level() - 1;

g_trackmode = get_cvar_num("aes_track_mode");
g_DisabledInformer = TrieCreate();

#if AMXX_VERSION_NUM < 183
g_ADisabledInformer = ArrayCreate(36);
#endif

new fPath[256],len;

// TODO: directory autocreate
len += get_datadir(fPath,charsmax(fPath));
len += formatex(fPath[len],charsmax(fPath) - len,"/aes/informer.ini");

new f = fopen(fPath,"r");

if(f)
{
new buffer[512];

while(!feof(f))
{
fgets(f,buffer,511);
trim(buffer);

if(!strlen(buffer) || buffer[0] == ';')
continue;

remove_quotes(buffer);

TrieSetCell(g_DisabledInformer,buffer,true);

#if AMXX_VERSION_NUM < 183
ArrayPushString(g_ADisabledInformer,buffer);
#endif
}

fclose(f);

}
}

public plugin_end()
{
new fPath[256],len;
len += get_datadir(fPath,charsmax(fPath));
len += formatex(fPath[len],charsmax(fPath) - len,"/aes/informer.ini");

#if AMXX_VERSION_NUM < 183
if(ArraySize(g_ADisabledInformer))
{
new f = fopen(fPath,"w+");

fprintf(f,"; %s^n; by %s^n^n; Disable informer for SteamID^n",PLUGIN,AUTHOR);

new trackId[36];

for(new i ; i < ArraySize(g_ADisabledInformer) ; ++i)
{
ArrayGetString(g_ADisabledInformer,i,trackId,35);

if(!TrieKeyExists(g_DisabledInformer,trackId))
continue;

fprintf(f,"^n^"%s^"",trackId);
}

fclose(f);
}
#else
new Snapshot:trieIterator = TrieSnapshotCreate(g_DisabledInformer);

if(TrieSnapshotLength(trieIterator))
{
new f = fopen(fPath,"w+");
fprintf(f,"; %s^n; by %s^n^n; Disable informer for SteamID^n",PLUGIN,AUTHOR);

new trackId[36];

for(new i,trieSize = TrieSnapshotLength(trieIterator) ; i < trieSize ; i++)
{
TrieSnapshotGetKey(trieIterator,i,trackId,charsmax(trackId));
fprintf(f,"^n^"%s^"",trackId);
}

fclose(f);
}
#endif

else
{
if(file_exists(fPath))
delete_file(fPath);
}

#if AMXX_VERSION_NUM >= 183
TrieSnapshotDestroy(trieIterator);
#endif
}

public Informer_Switch(id)
{
if(!hudInfoOn && !hudDeadOn)
return 0;

new trackId[36];

if(!get_player_trackid(id,trackId,charsmax(trackId)))
return 0;

if(!TrieKeyExists(g_DisabledInformer,trackId))
{
TrieSetCell(g_DisabledInformer,trackId,1);

#if AMXX_VERSION_NUM < 183
if(!CheckStringInArray(g_ADisabledInformer,trackId))
ArrayPushArray(g_ADisabledInformer,trackId);
#endif

client_print_color(id,print_team_red,"%L %L",id,"AES_TAG",id,"AES_INFORMER_DISABLED");

remove_task(PLAYER_HUD_OFFSET + id);
}
else
{
TrieDeleteKey(g_DisabledInformer,trackId);
set_task(hudUpdateInterval,"Show_Hud_Informer",PLAYER_HUD_OFFSET + id,.flags="b");

client_print_color(id,print_team_blue,"%L %L",id,"AES_TAG",id,"AES_INFORMER_ENABLED");
}

return 0;
}

#if AMXX_VERSION_NUM < 183
CheckStringInArray(Array:which,string[])
{
new str[64];

for(new i,arrSize = ArraySize(which) ; i < arrSize ; ++i)
{
ArrayGetString(which,i,str,charsmax(str));

if(strcmp(string,str) == 0)
return true;
}

return false;
}
#endif

public client_putinserver(id)
{
if((hudInfoOn || hudaNewOn) && !is_user_bot(id))
{
new trackId[36];
get_player_trackid(id,trackId,charsmax(trackId));

if(!TrieKeyExists(g_DisabledInformer,trackId))
set_task(hudUpdateInterval,"Show_Hud_Informer",PLAYER_HUD_OFFSET + id,.flags="b");
}
}

public client_disconnected(id)
{
if((hudInfoOn || hudaNewOn) &&!is_user_bot(id))
remove_task(PLAYER_HUD_OFFSET + id);
}

public aes_player_levelup(id,newlevel,oldlevel)
{
new levelName[AES_MAX_LEVEL_LENGTH];

switch(chatLvlUpStyle)
{
case 1:
{
aes_get_level_name(newlevel,levelName,charsmax(levelName),id);

if(!isTplMode)
client_print_color(id,print_team_default,"%L %L",id,"AES_TAG",id,"AES_NEWLEVEL_ID",levelName);
else
{
new msg[191],len;
tplFormatNewLevel(id,msg,len,"AES_NEWLEVEL_TPL",id,TPL_UP);

client_print_color(id,print_team_default,msg);
}
}
case 2:
{
new pls[32],pnum,name[32];
get_players(pls,pnum,"c");
get_user_name(id,name,charsmax(name));

new upTeam = get_user_team(id);

if(!(0 <= upTeam < sizeof teamColor))
upTeam = 0;

for(new i,player; i < pnum ; ++i)
{
player = pls[i];

aes_get_level_name(newlevel,levelName,charsmax(levelName),player);

if(player != id)
{
if(!isTplMode)
client_print_color(player,teamColor[upTeam],"%L %L",player,"AES_TAG",player,"AES_NEWLEVEL_ALL",name,levelName);
else
{
new msg[191],len;
tplFormatNewLevel(id,msg,len,"AES_NEWLEVEL_ALL_TPL",player,TPL_UP_ALL);

client_print_color(player,teamColor[upTeam],msg);
}
}
else
{
if(!isTplMode)
client_print_color(id,teamColor[upTeam],"%L %L",id,"AES_TAG",id,"AES_NEWLEVEL_ID",levelName)
else
{
new msg[191],len;
tplFormatNewLevel(id,msg,len,"AES_NEWLEVEL_TPL",id,TPL_UP);

client_print_color(id,teamColor[upTeam],msg);
}
}
}
}
default: return;
}
}

public tplFormatNewLevel(id,msg[],len,tplKey[],idLang,tplType)
{
new Float:player_exp = aes_get_player_exp(id);
new Float:player_reqexp = aes_get_player_reqexp(id);
new player_level = aes_get_player_level(id);
new player_bonus = aes_get_player_bonus(id);

len = formatex(msg[len],190-len,"%L ",idLang,"AES_TAG");

len += parse_informer_tpl(
id,id,msg,len,190,tplKey,tplType,idLang,

player_exp,
player_level,
player_reqexp,
player_bonus
);

return len;
}

public Show_Hud_Informer(taskId)
{
new id = taskId - PLAYER_HUD_OFFSET;
new watchId = id;
new isAlive = is_user_alive(id);

if(informerSyncObj != 0)
ClearSyncHud(id,informerSyncObj);

if(!isAlive){
watchId = get_entvar(id, var_iuser2);

if(!watchId)
return;
}

new hudMessage[256],len;

new Float:player_exp = aes_get_player_exp(watchId);
new Float:player_reqexp = aes_get_player_reqexp(watchId);
new player_level = aes_get_player_level(watchId);
new player_bonus = aes_get_player_bonus(watchId);


new bool:status = true;

if(player_exp == -1.0)
status = false;

if(hudInfoOn){
ClearSyncHud(id,informerSyncObj);

if(status)
{
if(!isTplMode)
{
if(playerWatchLevel[id] != player_level || !playerLevel[id][0])
{
aes_get_level_name(player_level,playerLevel[id],charsmax(playerLevel[]),id);
playerWatchLevel[id] = player_level;
}

if(watchId != id)
{
new watchName[32];
get_user_name(watchId,watchName,charsmax(watchName));

len += formatex(hudMessage[len],charsmax(hudMessage) - len,"%L^n",id,"AES_INFORMER0",watchName);
}

len += formatex(hudMessage[len],charsmax(hudMessage) - len,"%L^n",id,"AES_INFORMER1",playerLevel[id]);

if(player_reqexp != -1.0)
len += formatex(hudMessage[len],charsmax(hudMessage) - len,"%L",id,"AES_INFORMER2",player_exp,player_reqexp);
else
len += formatex(hudMessage[len],charsmax(hudMessage) - len,"%L",id,"AES_PLAYER_XP_MAX");
}
else
{
if(isAlive)
{
len += parse_informer_tpl(
id,watchId,
hudMessage,len,charsmax(hudMessage),"AES_HUD_TPL",TPL_INF,id,

player_exp,
player_level,
player_reqexp,
player_bonus
);
}
else if(!isAlive && hudDeadOn)
{
len += parse_informer_tpl(
id,watchId,
hudMessage,len,charsmax(hudMessage),"AES_HUD_TPL_D",TPL_INF_D,id,

player_exp,
player_level,
player_reqexp,
player_bonus
);
}
}

}
else
len += formatex(hudMessage[len],charsmax(hudMessage) - len,"%L",id,"AES_INFORMER_FAIL");

if(isAlive)
{
if(hudInfoColorRandom)
{
hudInfoColor[0] = random(255);
hudInfoColor[1] = random(255);
hudInfoColor[2] = random(255);
}

set_hudmessage(hudInfoColor[0], hudInfoColor[1], hudInfoColor[2], hudInfoxPos , hudInfoyPos,.holdtime = hudUpdateInterval,.channel = 3);
}
else if(!isAlive && hudDeadOn)
{
if(hudDeadColorRandom)
{
hudDeadColor[0] = random(255);
hudDeadColor[1] = random(255);
hudDeadColor[2] = random(255);
}

set_hudmessage(hudDeadColor[0],hudDeadColor[1],hudDeadColor[2],hudDeadxPos,hudDeadyPos,0,.holdtime = hudUpdateInterval,.channel = 3);
}

replace_all(hudMessage,charsmax(hudMessage),"\n","^n");
ShowSyncHudMsg(id,informerSyncObj,hudMessage);

len = 0;
hudMessage[0] = 0;
}

if(hudaNewOn && get_pcvar_num(bonusEnabledPointer) == 1 && player_bonus > 0 && watchId == id)
{
ClearSyncHud(id,aNewSyncObj);

len += formatex(hudMessage[len],charsmax(hudMessage) - len,"%L",id,"AES_ANEW_HUD",player_bonus);
replace_all(hudMessage,charsmax(hudMessage),"\n","^n");

set_hudmessage(hudaNewColor[0],hudaNewColor[1],hudaNewColor[2],hudaNewxPos,hudaNewyPos,0,.holdtime = hudUpdateInterval);
ShowSyncHudMsg(id,aNewSyncObj,hudMessage);
}
}

public parse_informer_tpl(id,watchId,string[],len,maxLen,tplKey[],tplType,idLang,Float:player_exp,player_level,Float:player_reqexp,player_bonus)
{

static tpl[256],tmp[AES_MAX_LEVEL_LENGTH],i;

tpl[0] = 0;
tmp[0] = 0;

formatex(tpl,charsmax(tpl),"%L",idLang,tplKey);

player_exp = _:player_exp >= 0 ? player_exp + 0.005 : player_exp - 0.005;
player_reqexp = _:player_reqexp >= 0 ? player_reqexp + 0.005 : player_reqexp - 0.005;

for(i = 0; i < tplInfo ; i++)
{
if(tplBitSum[tplType] & (1 << i))
{
tmp[0] = 0;

switch(i)
{
case INF_EXP: formatex(tmp,charsmax(tmp),"%.0f",player_exp);
case INF_LEVELEXP:
{
if(player_reqexp >= 0)
formatex(tmp,charsmax(tmp),"%.0f",player_reqexp);
else
formatex(tmp,charsmax(tmp),"MAX");
}
case INF_NEEDEXP:
{
if(player_reqexp >= 0)
formatex(tmp,charsmax(tmp),"%.0f",player_reqexp - player_exp);
else
formatex(tmp,charsmax(tmp),"-");
}
case INF_LEVEL: formatex(tmp,charsmax(tmp),"%d",player_level + 1);
case INF_MAXLEVEL: formatex(tmp,charsmax(tmp),"%d",aesMaxLevel);
case INF_RANK:
{
if(playerWatchLevel[id] != player_level || !playerLevel[id][0])
{
aes_get_level_name(player_level,playerLevel[id],charsmax(playerLevel[]),idLang);
playerWatchLevel[id] = player_level;
}

copy(tmp,charsmax(tmp),playerLevel[id]);
}
case INF_NAME: get_user_name(watchId,tmp,charsmax(tmp));
case INF_STEAMID: get_user_authid(watchId,tmp,charsmax(tmp));
case INF_BONUS: formatex(tmp,charsmax(tmp),"%d",player_bonus);
#if defined CSSTATSX_SQL
case INF_SKILL: statsx_get_user_skill_name(watchId, tmp, charsmax(tmp));
#endif
case INF_EXF: formatex(tmp,charsmax(tmp),"%.2f",player_exp);
case INF_LXF: formatex(tmp,charsmax(tmp),"%.2f",player_reqexp);
case INF_NXF: formatex(tmp,charsmax(tmp),"%.2f",player_reqexp - player_exp);
}

if(tmp[0])
replace(tpl,charsmax(tpl),tplKeys[i],tmp);
}
}

len += formatex(string[len],maxLen-len,tpl);

return len;
}

get_player_trackid(id,trackId[],trackLen)
{
switch(g_trackmode)
{
case 0: get_user_name(id,trackId,trackLen);
case 1:
{
get_user_authid(id,trackId,trackLen);

if(!strcmp(trackId,"STEAM_ID_LAN") || !strcmp(trackId,"VALVE_ID_LAN") || !strcmp(trackId,"BOT") || !strcmp(trackId,"HLTV"))
return 0;
}
case 2: get_user_ip(id,trackId,trackLen,1);
}

return 1;
}
#if defined CSSTATSX_SQL
statsx_get_user_skill_name(id, name[], len)
{
new tmp[10],Float:skill;
get_user_skill(id, skill);

new skill_id = statsx_get_skill_id(skill);
formatex(tmp,charsmax(tmp),"%s %.2f",g_skill_letters[skill_id], skill);
copy(name, len, tmp);
}

statsx_get_skill_id(Float:skill)
{
for(new i = 0; i < sizeof(g_skill_opt); i++)
{
if(skill < g_skill_opt[i])
return i;
}
return charsmax(g_skill_opt);
}
#endif
Доброго времени суток.
При смене разрешения меняется положение информера. Возможно ли пофиксить эту "проблему"?
Я хочу сделать сверху посередине, но что-то не катит. Люди играющие на 640x480 меня убьют скоро за это.
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
KOLOKOLb4UK, по секрету скажу - нигде нельзя это сделать, худ/дхуд позиционируется не попиксельно, а в % от ширины/высоты экрана.
 
Сообщения
345
Реакции
77
Помог
14 раз(а)
KOLOKOLb4UK, по секрету скажу - нигде нельзя это сделать, худ/дхуд позиционируется не попиксельно, а в % от ширины/высоты экрана.
Ну в некоторых информерах - это как-то же реализовано. Помню на сервере одном худ растянулся, но он остался по середине экрана...
 
Сообщения
94
Реакции
64
Помог
5 раз(а)
KOLOKOLb4UK, ставь значение по х -1.0 и будет худ по середине сверху на всех разрешениях
 
Сообщения
2,143
Реакции
1,225
Помог
44 раз(а)
Насколько же плохо нужно играть, чтобы опуститься до такого расширения 640x480?
 
Сообщения
345
Реакции
77
Помог
14 раз(а)
Насколько же плохо нужно играть, чтобы опуститься до такого расширения 640x480?
На кнайф сервере LUL. А так, полностью поддерживаю твою мысль.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу