781 lines
22 KiB
Plaintext
781 lines
22 KiB
Plaintext
/*
|
||
v2.39 = Borjomi edited
|
||
v1.00 = Переделаны пункты меню, убраны лишние.
|
||
v1.01 = Добавлены Block Top / Weapon Top
|
||
v1.02 = Вырезано, Map top, my top
|
||
v1.03 = Вырезано, все связанное с kz_sql = 0
|
||
v1.04 = Уничтожены все квары
|
||
v1.05 = Координальное переделывание главного меню и побочного (иммитирование 2 страницы), но на самом деле, отдельное меню, нового типа
|
||
v1.06 = Чтобы не писать для каждого пункта меню кнопку, создан отсек default
|
||
v1.07 = Чтобы везде было одинаково, создан Cosy_TypeList в _const.inc
|
||
v1.08 = Все лишние вырезано, все, что возможно, было оптимизировано.
|
||
*/
|
||
|
||
#include <amxmodx>
|
||
#include <amxmisc>
|
||
#include <celltrie>
|
||
#include <sqlx>
|
||
#include <uq_jumpstats_stocks.inc>
|
||
|
||
#define PLUGIN "UQJT"
|
||
#define VERSION "1.10"
|
||
#define AUTHOR "MichaelKheel"
|
||
|
||
#define NTOP 20 //Num of places in dat tops
|
||
#define NSHOW 9 //Num of places to show in top
|
||
|
||
new sz_Menu_Weapon[33], bool:sz_Menu_Block[33];
|
||
new Trie:JumpData,Trie:JumpData_Block;
|
||
new bool:loading_tops[33];
|
||
new sv_airaccelerate;
|
||
|
||
new Cosy_TypeList[24][] = {
|
||
"lj",
|
||
"cj",
|
||
"dcj",
|
||
"mcj",
|
||
"bj",
|
||
"sbj",
|
||
"wj",
|
||
"bhopinduck",
|
||
"ladder",
|
||
"ldbhop",
|
||
"realldbhop",
|
||
"scj",
|
||
"dscj",
|
||
"mscj",
|
||
"dropcj",
|
||
"dropdcj",
|
||
"dropmcj",
|
||
"dropbj",
|
||
"dropscj",
|
||
"dropdscj",
|
||
"dropmscj",
|
||
"upbj",
|
||
"upsbj",
|
||
"upbhopinduck"
|
||
};
|
||
|
||
public plugin_init()
|
||
{
|
||
register_plugin(PLUGIN, VERSION, AUTHOR);
|
||
|
||
register_menucmd(register_menuid("StatsTopMenu1"), 1023, "TopMenu1");
|
||
register_clcmd( "say /ljtop", "LjTopMenu" );
|
||
|
||
sv_airaccelerate = get_cvar_pointer("sv_airaccelerate");
|
||
set_task(0.3, "stats_sql");
|
||
}
|
||
|
||
public plugin_cfg()
|
||
{
|
||
JumpData = TrieCreate();
|
||
JumpData_Block = TrieCreate();
|
||
}
|
||
|
||
public client_connect(id)
|
||
{
|
||
loading_tops[id]=false;
|
||
}
|
||
|
||
public read_tops(id, type[], type_num, show_mode, wpn_rank, bool:block)
|
||
{
|
||
new sql_query[512],cData[25];
|
||
formatex(cData,17,type);
|
||
cData[19]=id;
|
||
cData[20]=show_mode;
|
||
|
||
if(weapon_maxspeed(wpn_rank) == 250)
|
||
cData[21]=0;
|
||
else
|
||
cData[21]=1;
|
||
|
||
cData[22]=weapon_maxspeed(wpn_rank);
|
||
|
||
if(block)
|
||
cData[23]=1;
|
||
else
|
||
cData[23]=0;
|
||
|
||
formatex(sql_query, 511, "SELECT pid FROM `%s%s` WHERE type='%s' and pspeed=%d LIMIT 10", block ? "uq_block_tops" : "uq_jumps", get_pcvar_num(sv_airaccelerate) == 100 ? "_100aa" : "", type, weapon_maxspeed(wpn_rank));
|
||
SQL_ThreadQuery(DB_TUPLE,"QueryHandle_type_place", sql_query, cData, 24);
|
||
}
|
||
|
||
public QueryHandle_type_place(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime)
|
||
{
|
||
|
||
if(iFailState != TQUERY_SUCCESS)
|
||
{
|
||
log_amx("uq_jumpstats: SQL Error #%d - %s", iErrnum, szError);
|
||
return PLUGIN_HANDLED;
|
||
}
|
||
|
||
new id=cData[19];
|
||
new mode=cData[20];
|
||
new pspeed=cData[22];
|
||
new block=cData[23];
|
||
|
||
formatex(cData,17,cData);
|
||
|
||
new i=0;
|
||
while(SQL_MoreResults(hQuery))
|
||
{
|
||
i++;
|
||
SQL_NextRow(hQuery);
|
||
}
|
||
|
||
SQL_FreeHandle(hQuery);
|
||
|
||
new sql_query[512],bData[26];
|
||
formatex(bData,17,cData);
|
||
bData[19]=id;
|
||
bData[20]=i;
|
||
bData[21]=mode;
|
||
bData[23]=pspeed;
|
||
if(block)
|
||
bData[24]=1;
|
||
else
|
||
bData[24]=0;
|
||
|
||
set_hudmessage(255, 0, 109, 0.05, 0.5, 0, 6.0, 0.3);
|
||
show_hudmessage(id, "Loading %s %s for Weapon with maxspeed: %d - 0%%", cData, block ? "Block Top" : "Top", pspeed);
|
||
|
||
formatex(sql_query, 511, "SELECT * FROM %s%s WHERE type='%s' and pspeed=%d ORDER BY %sdistance DESC LIMIT 10", block ? "uq_block_tops" : "uq_jumps", get_pcvar_num(sv_airaccelerate) == 100 ? "_100aa" : "", cData,pspeed, block ? "block DESC," : "", NSHOW);
|
||
SQL_ThreadQuery(DB_TUPLE,"QueryHandle_LoadTops", sql_query, bData, 25);
|
||
|
||
return PLUGIN_CONTINUE;
|
||
}
|
||
|
||
public QueryHandle_LoadTops(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime)
|
||
{
|
||
if(iFailState != TQUERY_SUCCESS)
|
||
{
|
||
log_amx("uq_jumpstats: SQL Error #%d - %s", iErrnum, szError);
|
||
return PLUGIN_HANDLED;
|
||
}
|
||
|
||
new id=cData[19];
|
||
new max_place=cData[20];
|
||
new mode=cData[21];
|
||
new pspeed=cData[23];
|
||
new block_bool=cData[24];
|
||
|
||
formatex(cData,17,cData);
|
||
|
||
new t_pspeed[NSHOW+1],pid[NSHOW+1], distance[NSHOW+1], maxspeed[NSHOW+1], prestrafe[NSHOW+1], strafes[NSHOW+1], sync[NSHOW+1], ddbh[NSHOW+1],wpn[NSHOW+1][15], jumpoff[NSHOW+1], block[NSHOW+1];
|
||
new tmp_type;
|
||
|
||
for(new i = 0; i < 24 ;i++)
|
||
{
|
||
if(equali(cData,Cosy_TypeList[i]))
|
||
{
|
||
tmp_type=i;
|
||
}
|
||
}
|
||
|
||
new i=0;
|
||
while(SQL_MoreResults(hQuery))
|
||
{
|
||
pid[i] = SQL_ReadResult(hQuery,0);
|
||
distance[i] = SQL_ReadResult(hQuery,2);
|
||
if(block_bool == 0)
|
||
{
|
||
maxspeed[i] = SQL_ReadResult(hQuery,3);
|
||
prestrafe[i] = SQL_ReadResult(hQuery,4);
|
||
strafes[i] = SQL_ReadResult(hQuery,5);
|
||
sync[i] = SQL_ReadResult(hQuery,6);
|
||
ddbh[i] = SQL_ReadResult(hQuery,7);
|
||
t_pspeed[i] = SQL_ReadResult(hQuery,8);
|
||
SQL_ReadResult(hQuery,9,wpn[i],24);
|
||
pid_in_name(mode,max_place,i,id,cData,t_pspeed[i],tmp_type,pid[i], distance[i], maxspeed[i], prestrafe[i], strafes[i], sync[i], ddbh[i],wpn[i]);
|
||
}
|
||
else
|
||
{
|
||
jumpoff[i] = SQL_ReadResult(hQuery,3);
|
||
block[i] = SQL_ReadResult(hQuery,4);
|
||
t_pspeed[i] = SQL_ReadResult(hQuery,5);
|
||
SQL_ReadResult(hQuery,6,wpn[i],24);
|
||
pid_in_name_block(mode,max_place,i,id,cData,t_pspeed[i],tmp_type,pid[i], distance[i], jumpoff[i], block[i],wpn[i]);
|
||
}
|
||
i++;
|
||
SQL_NextRow(hQuery);
|
||
}
|
||
|
||
if(i==0)
|
||
{
|
||
if(block_bool == 0)
|
||
tmp_show_tops_weapon(id,cData,tmp_type,weapon_rank(pspeed));
|
||
else
|
||
show_tops_block_weapon_tmp(id,cData,tmp_type, weapon_rank(pspeed));
|
||
|
||
switch(mode)
|
||
{
|
||
case 0:
|
||
uqTopmenu1(id,weapon_rank(pspeed), sz_Menu_Block[id]);
|
||
case 1:
|
||
uqTopmenu2(id,weapon_rank(pspeed), sz_Menu_Block[id]);
|
||
}
|
||
loading_tops[id]=false;
|
||
}
|
||
SQL_FreeHandle(hQuery);
|
||
|
||
return PLUGIN_CONTINUE;
|
||
}
|
||
|
||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MENU ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
public LjTopMenu(id)
|
||
{
|
||
uqTopmenu1(id, 0, false);
|
||
}
|
||
|
||
public uqTopmenu1(id, weapon, bool:block)
|
||
{
|
||
if(weapon > 0)
|
||
sz_Menu_Weapon[id] = weapon;
|
||
else
|
||
sz_Menu_Weapon[id] = 0;
|
||
|
||
if(block)
|
||
sz_Menu_Block[id] = true;
|
||
else
|
||
sz_Menu_Block[id] = false;
|
||
|
||
new MenuBody[512], len, keys;
|
||
|
||
len = format(MenuBody, 511, "\yLongJump Stats ^n");
|
||
len += format(MenuBody[len], 511, "\dType \w/ljsmenu \dto see option menu^n");
|
||
|
||
len += format(MenuBody[len], 511-len, "^n\d[\r1\d]\w \wLongJump Top");
|
||
keys |= (1<<0);
|
||
len += format(MenuBody[len], 511-len, "^n\d[\r2\d]\w \wCountJump Top");
|
||
keys |= (1<<1);
|
||
len += format(MenuBody[len], 511-len, "^n\d[\r3\d]\w \wDouble CountJump Top");
|
||
keys |= (1<<2);
|
||
len += format(MenuBody[len], 511-len, "^n\d[\r4\d]\w \wMulti CountJump Top");
|
||
keys |= (1<<3);
|
||
len += format(MenuBody[len], 511-len, "^n\d[\r5\d]\w \wBhopJump Top");
|
||
keys |= (1<<4);
|
||
len += format(MenuBody[len], 511-len, "^n\d[\r6\d]\w \wStandUp BhopJump Top");
|
||
keys |= (1<<5);
|
||
if(block)
|
||
len += format(MenuBody[len], 511-len, "^n^n\d[\r7\d]\w \rBlock ON");
|
||
else
|
||
len += format(MenuBody[len], 511-len, "^n^n\d[\r7\d]\w \yBlock OFF");
|
||
keys |= (1<<6);
|
||
if(weapon > 0)
|
||
len += format(MenuBody[len], 511-len, "^n\d[\r8\d]\w \rWeapon %d", weapon_maxspeed(sz_Menu_Weapon[id]));
|
||
else
|
||
len += format(MenuBody[len], 511-len, "^n\d[\r8\d]\w \yWeapon Top");
|
||
keys |= (1<<7);
|
||
len += format(MenuBody[len], 511-len, "^n^n\d[\r9\d]\w \wNext Page");
|
||
keys |= (1<<8);
|
||
len += format(MenuBody[len], 511-len, "^n^n\d[\r0\d]\w \wExit");
|
||
keys |= (1<<9);
|
||
show_menu(id, keys, MenuBody, -1, "StatsTopMenu1");
|
||
|
||
return PLUGIN_HANDLED;
|
||
}
|
||
public TopMenu1(id, key)
|
||
{
|
||
switch((key+1))
|
||
{
|
||
case 7:
|
||
{
|
||
if(sz_Menu_Block[id])
|
||
uqTopmenu1(id, sz_Menu_Weapon[id], false);
|
||
else
|
||
uqTopmenu1(id, sz_Menu_Weapon[id], true);
|
||
}
|
||
case 8:
|
||
{
|
||
uqMainWpnMenu(id);
|
||
}
|
||
case 9:
|
||
{
|
||
uqTopmenu2(id, sz_Menu_Weapon[id], sz_Menu_Block[id]); // next page
|
||
}
|
||
case 10:
|
||
{
|
||
return PLUGIN_HANDLED;
|
||
}
|
||
default:
|
||
{
|
||
read_tops(id,Cosy_TypeList[key], key, 0, sz_Menu_Weapon[id], sz_Menu_Block[id]);
|
||
}
|
||
}
|
||
return PLUGIN_HANDLED;
|
||
}
|
||
|
||
public uqTopmenu2(id, weapon, bool:block)
|
||
{
|
||
if(weapon > 0)
|
||
sz_Menu_Weapon[id] = weapon;
|
||
else
|
||
sz_Menu_Weapon[id] = 0;
|
||
|
||
if(block)
|
||
sz_Menu_Block[id] = true;
|
||
else
|
||
sz_Menu_Block[id] = false;
|
||
|
||
new txt[64];
|
||
formatex(txt, 63, "Weapon: \r%d\w^nBlock: \r%s\w^n^nLongJump Stats ->", weapon_maxspeed(sz_Menu_Weapon[id]), sz_Menu_Block[id] ? "True" : "False");
|
||
new menu = menu_create(txt, "uqTopmenu2Handler");
|
||
|
||
|
||
menu_additem( menu, "WeirdJump Top", "1" );
|
||
menu_additem( menu, "Bhop In Duck Top", "2");
|
||
menu_additem( menu, "LadderJump Top", "3" );
|
||
menu_additem( menu, "Ladder BhopJump Top", "4" );
|
||
menu_additem( menu, "Real Ladder Bhop Top", "5" );
|
||
menu_additem( menu, "StandUp CountJump Top", "6" );
|
||
menu_additem( menu, "Double StandUp CountJump Top", "7" );
|
||
menu_additem( menu, "Multi StandUp CountJump Top", "8");
|
||
menu_additem( menu, "Drop CountJump Top", "10" );
|
||
menu_additem( menu, "Double Drop CountJump Top", "11");
|
||
menu_additem( menu, "Multi Drop CountJump Top", "12");
|
||
menu_additem( menu, "Drop BhopJump Top", "13" );
|
||
menu_additem( menu, "Drop StandUp CountJump Top", "14");
|
||
menu_additem( menu, "Drop Double StandUp CountJump Top", "15");
|
||
menu_additem( menu, "Drop Multi StandUp CountJump Top", "16");
|
||
menu_additem( menu, "Up Bhop Top", "17");
|
||
menu_additem( menu, "Up StandBhop Top", "18");
|
||
menu_additem( menu, "Up Bhop In Duck Top", "19");
|
||
|
||
menu_setprop(menu, MPROP_NEXTNAME, "Next");
|
||
menu_setprop(menu, MPROP_BACKNAME, "Back");
|
||
menu_setprop(menu, MPROP_EXITNAME, "Exit");
|
||
|
||
menu_display(id, menu, 0);
|
||
}
|
||
|
||
public uqTopmenu2Handler(id, menu, item)
|
||
{
|
||
if( item == MENU_EXIT )
|
||
{
|
||
uqTopmenu1(id, sz_Menu_Weapon[id], sz_Menu_Block[id]);
|
||
return PLUGIN_HANDLED;
|
||
}
|
||
switch(item)
|
||
{
|
||
default:
|
||
{
|
||
read_tops(id,Cosy_TypeList[item+6], item+6, 1, sz_Menu_Weapon[id], sz_Menu_Block[id]);
|
||
}
|
||
}
|
||
return PLUGIN_HANDLED;
|
||
}
|
||
|
||
public uqMainWpnMenu(id)
|
||
{
|
||
new menu = menu_create("\yStats Top Menu\w", "uqMainWpnMenuHandler");
|
||
|
||
menu_additem( menu, "Weapon maxspeed - 250", "1" );
|
||
menu_additem( menu, "Weapon maxspeed - 210", "2" );
|
||
menu_additem( menu, "Weapon maxspeed - 220", "3" );
|
||
menu_additem( menu, "Weapon maxspeed - 221", "4" );
|
||
menu_additem( menu, "Weapon maxspeed - 230", "5" );
|
||
menu_additem( menu, "Weapon maxspeed - 235", "6" );
|
||
menu_additem( menu, "Weapon maxspeed - 240", "7" );
|
||
menu_additem( menu, "Weapon maxspeed - 245", "8" );
|
||
|
||
menu_setprop(menu, MPROP_PERPAGE, 0);
|
||
menu_display(id, menu, 0);
|
||
}
|
||
|
||
public uqMainWpnMenuHandler(id, menu, item)
|
||
{
|
||
if( item == MENU_EXIT )
|
||
{
|
||
return PLUGIN_HANDLED;
|
||
}
|
||
|
||
switch(item)
|
||
{
|
||
default:
|
||
{
|
||
uqTopmenu1(id, item, sz_Menu_Block[id]);
|
||
}
|
||
}
|
||
return PLUGIN_HANDLED;
|
||
}
|
||
|
||
|
||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Подсчет людей ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
public pid_in_name(mode,max_place,num,id,type[],pspeed,type_num,pid, distance, maxspeed, prestrafe, strafes, sync, ddbh,wpn[])
|
||
{
|
||
new sql_query[512],cData[44];
|
||
formatex(cData,17,type);
|
||
cData[18]=id;
|
||
cData[19]=num;
|
||
cData[20]=pspeed;
|
||
cData[21]=type_num;
|
||
cData[22]=distance;
|
||
cData[23]=maxspeed;
|
||
cData[24]=prestrafe;
|
||
cData[25]=strafes;
|
||
cData[26]=sync;
|
||
cData[27]=ddbh;
|
||
cData[28]=max_place;
|
||
cData[29]=mode;
|
||
|
||
for(new i=0;i<14;i++)
|
||
{
|
||
formatex(cData[30+i],1,wpn[i]);
|
||
}
|
||
|
||
formatex(sql_query, 511, "SELECT name FROM uq_players WHERE id=%d",pid);
|
||
SQL_ThreadQuery(DB_TUPLE,"QueryHandle_pidName", sql_query, cData, 45);
|
||
|
||
}
|
||
public QueryHandle_pidName(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime)
|
||
{
|
||
if(iFailState != TQUERY_SUCCESS)
|
||
{
|
||
log_amx("uq_jumpstats: SQL Error #%d - %s", iErrnum, szError);
|
||
return PLUGIN_HANDLED;
|
||
}
|
||
|
||
new mode,num,type[18],id,type_num,pspeed,max_place,wpn[14];
|
||
new name[33],distance, maxspeed, prestrafe, strafes, sync, ddbh;
|
||
|
||
formatex(type,17,cData);
|
||
type_num=cData[21];
|
||
pspeed=cData[20];
|
||
num=cData[19];
|
||
id=cData[18];
|
||
distance=cData[22];
|
||
maxspeed=cData[23];
|
||
prestrafe=cData[24];
|
||
strafes=cData[25];
|
||
sync=cData[26];
|
||
ddbh=cData[27];
|
||
max_place=cData[28];
|
||
mode=cData[29];
|
||
new block;
|
||
for(new i=0;i<14;i++)
|
||
{
|
||
formatex(wpn[i],1,cData[30+i]);
|
||
}
|
||
|
||
if (!SQL_NumResults(hQuery))
|
||
{
|
||
log_amx("Bug with id=0");
|
||
|
||
name="unknow";
|
||
}
|
||
else
|
||
{
|
||
SQL_ReadResult(hQuery,0,name,33);
|
||
}
|
||
|
||
new Trie:JumpStat;
|
||
JumpStat = TrieCreate();
|
||
|
||
TrieSetString(JumpStat, "name", name);
|
||
TrieSetCell(JumpStat, "distance", distance);
|
||
TrieSetCell(JumpStat, "maxspeed", maxspeed);
|
||
TrieSetCell(JumpStat, "prestrafe", prestrafe);
|
||
TrieSetCell(JumpStat, "strafes", strafes);
|
||
TrieSetCell(JumpStat, "sync", sync);
|
||
TrieSetCell(JumpStat, "ddbh", ddbh);
|
||
TrieSetCell(JumpStat, "pspeed", pspeed);
|
||
TrieSetString(JumpStat, "wpn", wpn);
|
||
|
||
new tmp_type[33];
|
||
formatex(tmp_type,32,"%s_%d_%d",type,num,pspeed);
|
||
|
||
TrieSetCell(JumpData, tmp_type, JumpStat);
|
||
|
||
SQL_FreeHandle(hQuery);
|
||
|
||
if(num==max_place-1)
|
||
{
|
||
tmp_show_tops_weapon(id,type,type_num,weapon_rank(pspeed));
|
||
switch(mode)
|
||
{
|
||
case 0:
|
||
uqTopmenu1(id, weapon_rank(pspeed), sz_Menu_Block[id]);
|
||
case 1:
|
||
uqTopmenu2(id, weapon_rank(pspeed), sz_Menu_Block[id]);
|
||
}
|
||
loading_tops[id]=false;
|
||
}
|
||
else
|
||
{
|
||
new load=100/max_place;
|
||
|
||
set_hudmessage(255, 0, 109, 0.05, 0.5, 0, 6.0, 0.3);
|
||
show_hudmessage(id, "Loading %s %s for Weapon with maxspeed: %d - %d%%", cData, block ? "Block Top" : "Top", pspeed, (num+2)*load);
|
||
}
|
||
|
||
return PLUGIN_CONTINUE;
|
||
}
|
||
|
||
public pid_in_name_block(mode,max_place,num,id,type[],pspeed,type_num,pid, distance, jumpoff, block,wpn[])
|
||
{
|
||
new sql_query[512],cData[44];
|
||
formatex(cData,17,type);
|
||
cData[18]=id;
|
||
cData[19]=num;
|
||
cData[20]=pspeed;
|
||
cData[21]=type_num;
|
||
cData[22]=distance;
|
||
cData[23]=jumpoff;
|
||
cData[24]=block;
|
||
cData[25]=max_place;
|
||
cData[26]=mode;
|
||
|
||
for(new i=0;i<14;i++)
|
||
{
|
||
formatex(cData[27+i],1,wpn[i]);
|
||
}
|
||
|
||
formatex(sql_query, 511, "SELECT name FROM uq_players WHERE id=%d",pid);
|
||
SQL_ThreadQuery(DB_TUPLE,"QueryHandle_pidName_block", sql_query, cData, 45);
|
||
|
||
}
|
||
public QueryHandle_pidName_block(iFailState, Handle:hQuery, szError[], iErrnum, cData[], iSize, Float:fQueueTime)
|
||
{
|
||
if(iFailState != TQUERY_SUCCESS)
|
||
{
|
||
log_amx("uq_jumpstats: SQL Error #%d - %s", iErrnum, szError);
|
||
return PLUGIN_HANDLED;
|
||
}
|
||
|
||
new block,mode,num,type[18],id,type_num,pspeed,max_place,wpn[14];
|
||
new name[33],distance, Float:jumpoff;
|
||
|
||
formatex(type,17,cData);
|
||
type_num=cData[21];
|
||
pspeed=cData[20];
|
||
num=cData[19];
|
||
id=cData[18];
|
||
distance=cData[22];
|
||
jumpoff=cData[23]/1000000.0;
|
||
block=cData[24];
|
||
max_place=cData[25];
|
||
mode=cData[26];
|
||
|
||
for(new i=0;i<14;i++)
|
||
{
|
||
formatex(wpn[i],1,cData[27+i]);
|
||
}
|
||
|
||
SQL_ReadResult(hQuery,0,name,33);
|
||
|
||
new Trie:JumpStat;
|
||
JumpStat = TrieCreate();
|
||
|
||
TrieSetString(JumpStat, "name", name);
|
||
TrieSetCell(JumpStat, "distance", distance);
|
||
TrieSetCell(JumpStat, "jumpoff", jumpoff);
|
||
TrieSetCell(JumpStat, "block", block);
|
||
TrieSetCell(JumpStat, "pspeed", pspeed);
|
||
TrieSetString(JumpStat, "wpn", wpn);
|
||
|
||
new tmp_type[33];
|
||
formatex(tmp_type,32,"block_%s_%d_%d",type,num,pspeed);
|
||
|
||
TrieSetCell(JumpData_Block, tmp_type, JumpStat);
|
||
|
||
SQL_FreeHandle(hQuery);
|
||
|
||
if(num==max_place-1)
|
||
{
|
||
show_tops_block_weapon_tmp(id,type,type_num,weapon_rank(pspeed));
|
||
switch(mode)
|
||
{
|
||
case 0:
|
||
uqTopmenu1(id,weapon_rank(pspeed), sz_Menu_Block[id]);
|
||
case 1:
|
||
uqTopmenu2(id,weapon_rank(pspeed), sz_Menu_Block[id]);
|
||
}
|
||
loading_tops[id]=false;
|
||
}
|
||
else
|
||
{
|
||
new load=100/max_place;
|
||
set_hudmessage(255, 0, 109, 0.05, 0.5, 0, 6.0, 0.3);
|
||
show_hudmessage(id, "Loading %s BlockTop for Weapon with maxspeed: %d - %d%%",type,pspeed,(num+2)*load);
|
||
}
|
||
|
||
return PLUGIN_CONTINUE;
|
||
}
|
||
|
||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MOTD ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
public show_tops_block_weapon_tmp(id,type[],type_num,wpn_rank)
|
||
{
|
||
static buffer[2368], name[128], len, i;
|
||
new oldblock,Float:find_jumpoff[NTOP+1];
|
||
|
||
new tmp_oldtype[33];
|
||
new Trie:JS_old, block_for_old;
|
||
|
||
for( i = 0; i < NSHOW; i++ )
|
||
{
|
||
format(tmp_oldtype, 32, "block_%s_%d_%d", type,i,weapon_maxspeed(wpn_rank));
|
||
|
||
if(TrieKeyExists(JumpData_Block, tmp_oldtype))
|
||
{
|
||
TrieGetCell(JumpData_Block, tmp_oldtype, JS_old);
|
||
|
||
if(i==0) TrieGetCell(JS_old, "block", block_for_old);
|
||
|
||
TrieGetCell(JS_old, "jumpoff", find_jumpoff[i]);
|
||
}
|
||
}
|
||
|
||
new Float:minjof=find_min_jumpoff(find_jumpoff);
|
||
oldblock=block_for_old;
|
||
|
||
len = format(buffer[len], 2367-len,"<STYLE>body{background:#232323;color:#cfcbc2;font-family:sans-serif}table{width:100%%;font-size:12px}</STYLE><table cellpadding=2 cellspacing=0 border=0>");
|
||
len += format(buffer[len], 2367-len, "<tr align=center bgcolor=#52697B><th width=5%%> # <th width=34%% align=left> Name <th width=20%%> Block <th width=20%%> Distance <th width=30%%> Jumpoff <th width=30%%> Weapon");
|
||
|
||
new oldjj,jj;
|
||
for( i = 0,jj=1; i < NSHOW; i++ )
|
||
{
|
||
new Trie:JS;
|
||
new tmp_names[33],tmp_weap_names[33],distance,Float:jumpoff,block;
|
||
new tmp_type[33];
|
||
|
||
format(tmp_type, 32, "block_%s_%d_%d", type, i,weapon_maxspeed(wpn_rank));
|
||
|
||
if(TrieKeyExists(JumpData_Block, tmp_type))
|
||
{
|
||
TrieGetCell(JumpData_Block, tmp_type, JS);
|
||
|
||
TrieGetCell(JS, "distance", distance);
|
||
TrieGetCell(JS, "jumpoff", jumpoff);
|
||
TrieGetCell(JS, "block", block);
|
||
TrieGetString(JS,"name",tmp_names,32);
|
||
TrieGetString(JS,"wpn",tmp_weap_names,32);
|
||
}
|
||
|
||
if(oldblock!=block)
|
||
{
|
||
len += format(buffer[len], 2367-len, "<tr><td COLSPAN=9><br></td></tr>");
|
||
|
||
if((jj%2)==0)
|
||
{
|
||
jj=oldjj;
|
||
}
|
||
}
|
||
if( block == 0)
|
||
{
|
||
len += format(buffer[len], 2367-len, "<tr align=center%s><td> %d <td align=left> %s <td> %s <td> %s <td> %s <td> %s", ((i%2)==0) ? "" : " bgcolor=#2f3030", (i+1), "-", "-", "-", "-", "-");
|
||
i=NSHOW;
|
||
}
|
||
else
|
||
{
|
||
name = tmp_names;
|
||
while( containi(name, "<") != -1 )
|
||
replace(name, 127, "<", "<");
|
||
while( containi(name, ">") != -1 )
|
||
replace(name, 127, ">", ">");
|
||
if(minjof==jumpoff)
|
||
{
|
||
len += format(buffer[len], 2367-len, "<tr align=center%s><td> %d <td align=left> %s <td> %d <td> %d.%01d <td><font color=red> %f <td> %s", ((jj%2)==0) ? "" : " bgcolor=#2f3030", (i+1), name,block, (distance/1000000), (distance%1000000/100000), jumpoff,tmp_weap_names);
|
||
}
|
||
else len += format(buffer[len], 2367-len, "<tr align=center%s><td> %d <td align=left> %s <td> %d <td> %d.%01d <td> %0.4f <td> %s", ((jj%2)==0) ? "" : " bgcolor=#2f3030", (i+1), name,block, (distance/1000000), (distance%1000000/100000), jumpoff,tmp_weap_names);
|
||
}
|
||
|
||
oldblock=block;
|
||
oldjj=jj;
|
||
jj++;
|
||
}
|
||
len += format(buffer[len], 2367-len, "</table></body>");
|
||
static strin[34];
|
||
|
||
if(type_num==9)
|
||
{
|
||
format(strin,33, "Block Top %d hj (maxspeed - %d)",NSHOW,weapon_maxspeed(wpn_rank));
|
||
}
|
||
else format(strin,33, "Block Top %d %s (maxspeed - %d)", NSHOW,type,weapon_maxspeed(wpn_rank));
|
||
|
||
show_motd(id, buffer, strin);
|
||
}
|
||
|
||
public tmp_show_tops_weapon(id,type[],type_num,wpn_rank)
|
||
{
|
||
static buffer[2368], name[128], len, i;
|
||
|
||
len = format(buffer[len], 2367-len,"<STYLE>body{background:#232323;color:#cfcbc2;font-family:sans-serif}table{width:100%%;line-height:160%%;font-size:12px}.q{border:1px solid #4a4945}.b{background:#2a2a2a}</STYLE><table cellpadding=2 cellspacing=0 border=0>");
|
||
len += format(buffer[len], 2367-len, "<tr align=center bgcolor=#52697B><th width=5%%> # <th width=34%% align=left> Name <th width=10%%> Distance <th width=10%%> MaxSpeed <th width=11%%> PreStrafe <th width=9%%> Strafes <th width=6%%> Sync <th width=6%%> Weapon");
|
||
|
||
for( i = 0; i < (NSHOW); i++ )
|
||
{
|
||
new Trie:JS;
|
||
new tmp_names[33],tmp_weap_names[33],distance,maxspeed,prestrafe,strafes,sync;
|
||
new tmp_type[33];
|
||
|
||
format(tmp_type, 32, "%s_%d_%d", type, i,weapon_maxspeed(wpn_rank));
|
||
|
||
if(TrieKeyExists(JumpData, tmp_type))
|
||
{
|
||
TrieGetCell(JumpData, tmp_type, JS);
|
||
|
||
TrieGetCell(JS, "distance", distance);
|
||
TrieGetCell(JS, "maxspeed", maxspeed);
|
||
TrieGetCell(JS, "prestrafe", prestrafe);
|
||
TrieGetCell(JS, "strafes", strafes);
|
||
TrieGetCell(JS, "sync", sync);
|
||
TrieGetString(JS,"name",tmp_names,32);
|
||
TrieGetString(JS,"wpn",tmp_weap_names,32);
|
||
//TrieGetCell(JS, "ddbh", ddbh);
|
||
}
|
||
|
||
|
||
if( distance == 0)
|
||
{
|
||
len += format(buffer[len], 2367-len, "<tr align=center%s><td> %d <td align=left> %s <td> %s <td> %s <td> %s <td> %s <td> %s <td> %s", ((i%2)==0) ? "" : " bgcolor=#2f3030", (i+1), "-", "-", "-", "-", "-", "-", "-");
|
||
i=NSHOW;
|
||
}
|
||
else
|
||
{
|
||
name = tmp_names;
|
||
while( containi(name, "<") != -1 )
|
||
replace(name, 127, "<", "<");
|
||
while( containi(name, ">") != -1 )
|
||
replace(name, 127, ">", ">");
|
||
|
||
len += format(buffer[len], 2367-len, "<tr align=center%s><td> %d <td align=left> %s <td> %d.%01d <td> %d.%01d <td> %d.%01d <td> %d <td> %d <td> %s", ((i%2)==0) ? "" : " bgcolor=#2f3030", (i+1), name,(distance/1000000), (distance%1000000/100000), (maxspeed/1000000), (maxspeed%1000000/100000), (prestrafe/1000000), (prestrafe%1000000/100000), strafes,sync,tmp_weap_names);
|
||
}
|
||
}
|
||
len += format(buffer[len], 2367-len, "</table></body>");
|
||
|
||
static strin[64];
|
||
format(strin,63, "Top %d %s (maxspeed - %d)",NSHOW,Cosy_TypeList[type_num],weapon_maxspeed(wpn_rank));
|
||
|
||
show_motd(id, buffer, strin);
|
||
}
|
||
|
||
public Float:find_min_jumpoff(Float:TmpArray[NTOP+1])
|
||
{
|
||
new num_min;
|
||
num_min=0;
|
||
for (new i = 0; i < NSHOW; i++)
|
||
{
|
||
if(TmpArray[num_min]>TmpArray[i] && TmpArray[i]!=0.0)
|
||
{
|
||
num_min=i;
|
||
}
|
||
}
|
||
return TmpArray[num_min];
|
||
}
|
||
|
||
public plugin_end()
|
||
{
|
||
if(DB_TUPLE)
|
||
SQL_FreeHandle(DB_TUPLE);
|
||
if(SqlConnection)
|
||
SQL_FreeHandle(SqlConnection);
|
||
} |