Merge from sourcemod-1.1 branch.
This commit is contained in:
commit
d2ce50f989
@ -16,7 +16,7 @@
|
||||
// "@Full Admins"
|
||||
//
|
||||
// You can also specify immunity values. Two examples:
|
||||
// "83:abcdefg" //Immunity is 83, flags are abcefgh
|
||||
// "83:abcdefgh" //Immunity is 83, flags are abcdefgh
|
||||
// "6:@Full Admins" //Immunity is 6, group is "Full Admins"
|
||||
//
|
||||
// Immunity values can be any number. An admin cannot target an admin with
|
||||
@ -37,9 +37,9 @@
|
||||
////////////////////////////////
|
||||
// Examples: (do not put // in front of real lines, as // means 'comment')
|
||||
//
|
||||
// "STEAM_0:1:16" "bce" //kick, ban, slay for this steam ID, no immunity
|
||||
// "STEAM_0:1:16" "bce" //generic, kick, unban for this steam ID, no immunity
|
||||
// "!127.0.0.1" "99:z" //all permissions for this ip, immunity value is 99
|
||||
// "BAILOPAN" "abc" "Gab3n" //name BAILOPAN, password "Gab3n": gets reservation, kick, ban
|
||||
// "BAILOPAN" "abc" "Gab3n" //name BAILOPAN, password "Gab3n": gets reservation, generic, kick
|
||||
//
|
||||
////////////////////////////////
|
||||
|
||||
|
@ -281,7 +281,7 @@ void AddFloat(char **buf_p, size_t &maxlen, double fval, int width, int prec, in
|
||||
}
|
||||
|
||||
// write the fraction part
|
||||
if (maxlen)
|
||||
if (maxlen && prec)
|
||||
{
|
||||
*buf++ = '.';
|
||||
maxlen--;
|
||||
|
@ -248,6 +248,7 @@ unsigned int TopMenu::AddToMenu2(const char *name,
|
||||
cat->serial = 1;
|
||||
|
||||
/* Add it, then update our serial change number. */
|
||||
obj->cat_id = m_Categories.size();
|
||||
m_Categories.push_back(cat);
|
||||
m_SerialNo++;
|
||||
|
||||
@ -257,6 +258,7 @@ unsigned int TopMenu::AddToMenu2(const char *name,
|
||||
else if (obj->type == TopMenuObject_Item)
|
||||
{
|
||||
/* Update the category, mark it as needing changes */
|
||||
obj->cat_id = 0;
|
||||
parent_cat->obj_list.push_back(obj);
|
||||
parent_cat->reorder = true;
|
||||
parent_cat->serial++;
|
||||
@ -407,6 +409,12 @@ bool TopMenu::DisplayMenu(int client, unsigned int hold_time, TopMenuPosition po
|
||||
|
||||
UpdateClientRoot(client, pPlayer);
|
||||
|
||||
/* This is unfortunate but it's the best solution. */
|
||||
for (size_t i = 0; i < m_Categories.size(); i++)
|
||||
{
|
||||
UpdateClientCategory(client, i, true);
|
||||
}
|
||||
|
||||
topmenu_player_t *pClient = &m_clients[client];
|
||||
if (pClient->root == NULL)
|
||||
{
|
||||
@ -443,8 +451,7 @@ bool TopMenu::DisplayCategory(int client, unsigned int category, unsigned int ho
|
||||
UpdateClientCategory(client, category);
|
||||
|
||||
topmenu_player_t *pClient = &m_clients[client];
|
||||
if (category >= pClient->cat_count
|
||||
|| pClient->cats[category].menu == NULL)
|
||||
if (category >= pClient->cat_count || pClient->cats[category].menu == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -488,19 +495,17 @@ void TopMenu::OnMenuSelect2(IBaseMenu *menu, int client, unsigned int item, unsi
|
||||
if (obj->type == TopMenuObject_Category)
|
||||
{
|
||||
/* If it's a category, the user wants to view it.. */
|
||||
for (size_t i = 0; i < m_Categories.size(); i++)
|
||||
{
|
||||
if (m_Categories[i]->obj == obj)
|
||||
{
|
||||
assert(obj->cat_id < m_Categories.size());
|
||||
assert(m_Categories[obj->cat_id]->obj == obj);
|
||||
pClient->last_root_pos = item_on_page;
|
||||
if (!DisplayCategory(client, (unsigned int)i, MENU_TIME_FOREVER, false))
|
||||
if (!DisplayCategory(client, obj->cat_id, MENU_TIME_FOREVER, false))
|
||||
{
|
||||
/* If we can't display the category, re-display the root menu */
|
||||
/* If we can't display the category, re-display the root menu.
|
||||
* This code should be dead as of bug 3256, which disables categories
|
||||
* that cannot be displayed.
|
||||
*/
|
||||
DisplayMenu(client, MENU_TIME_FOREVER, TopMenuPosition_LastRoot);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -535,6 +540,19 @@ void TopMenu::OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, uns
|
||||
|
||||
obj = *pObject;
|
||||
|
||||
/* If the category has nothing to display, disable it. */
|
||||
if (obj->type == TopMenuObject_Category)
|
||||
{
|
||||
assert(obj->cat_id < m_Categories.size());
|
||||
assert(m_Categories[obj->cat_id]->obj == obj);
|
||||
topmenu_player_t *pClient = &m_clients[client];
|
||||
if (obj->cat_id >= pClient->cat_count || pClient->cats[obj->cat_id].menu == NULL)
|
||||
{
|
||||
style = ITEMDRAW_IGNORE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
style = obj->callbacks->OnTopMenuDrawOption(this, client, obj->object_id);
|
||||
if (style != ITEMDRAW_DEFAULT)
|
||||
{
|
||||
@ -701,13 +719,18 @@ void TopMenu::UpdateClientRoot(int client, IGamePlayer *pGamePlayer)
|
||||
pClient->last_root_pos = 0;
|
||||
}
|
||||
|
||||
void TopMenu::UpdateClientCategory(int client, unsigned int category)
|
||||
void TopMenu::UpdateClientCategory(int client, unsigned int category, bool bSkipRootCheck)
|
||||
{
|
||||
bool has_access = false;
|
||||
|
||||
/* Update the client's root menu just in case it needs it. This
|
||||
* will validate that we have both a valid client and a valid
|
||||
* category structure for that client.
|
||||
*/
|
||||
if (!bSkipRootCheck)
|
||||
{
|
||||
UpdateClientRoot(client);
|
||||
}
|
||||
|
||||
/* Now it's guaranteed that our category tables will be usable */
|
||||
topmenu_player_t *pClient = &m_clients[client];
|
||||
@ -744,6 +767,13 @@ void TopMenu::UpdateClientCategory(int client, unsigned int category)
|
||||
for (size_t i = 0; i < cat->sorted.size(); i++)
|
||||
{
|
||||
cat_menu->AppendItem(cat->sorted[i]->name, ItemDrawInfo(""));
|
||||
if (!has_access && adminsys->CheckAccess(client,
|
||||
cat->sorted[i]->cmdname,
|
||||
cat->sorted[i]->flags,
|
||||
false))
|
||||
{
|
||||
has_access = true;
|
||||
}
|
||||
}
|
||||
|
||||
/* Now handle unsorted items */
|
||||
@ -761,20 +791,39 @@ void TopMenu::UpdateClientCategory(int client, unsigned int category)
|
||||
item->name,
|
||||
sizeof(item->name));
|
||||
item->obj_index = (unsigned int)i;
|
||||
if (!has_access && adminsys->CheckAccess(client, obj->cmdname, obj->flags, false))
|
||||
{
|
||||
has_access = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (has_access)
|
||||
{
|
||||
/* Sort the names */
|
||||
qsort(item_list, cat->unsorted.size(), sizeof(obj_by_name_t), _SortObjectNamesDescending);
|
||||
qsort(item_list,
|
||||
cat->unsorted.size(),
|
||||
sizeof(obj_by_name_t),
|
||||
_SortObjectNamesDescending);
|
||||
|
||||
/* Add to the menu */
|
||||
for (size_t i = 0; i < cat->unsorted.size(); i++)
|
||||
{
|
||||
cat_menu->AppendItem(cat->unsorted[item_list[i].obj_index]->name, ItemDrawInfo(""));
|
||||
}
|
||||
}
|
||||
|
||||
delete [] item_list;
|
||||
}
|
||||
|
||||
/* If the player has access to no items, don't draw a menu. */
|
||||
if (!has_access)
|
||||
{
|
||||
cat_menu->Destroy();
|
||||
player_cat->menu = NULL;
|
||||
player_cat->serial = cat->serial;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Set the menu's title */
|
||||
char renderbuf[128];
|
||||
cat->obj->callbacks->OnTopMenuDisplayTitle(this,
|
||||
|
@ -71,6 +71,7 @@ struct topmenu_object_t
|
||||
TopMenuObjectType type; /** Object Type */
|
||||
bool is_free; /** Free or not? */
|
||||
char info[255]; /** Info string */
|
||||
unsigned int cat_id; /** Set if a category */
|
||||
};
|
||||
|
||||
struct topmenu_category_t
|
||||
@ -157,7 +158,7 @@ private:
|
||||
bool DisplayCategory(int client, unsigned int category, unsigned int hold_time, bool last_position);
|
||||
void CreatePlayers(int max_clients);
|
||||
void UpdateClientRoot(int client, IGamePlayer *pGamePlayer=NULL);
|
||||
void UpdateClientCategory(int client, unsigned int category);
|
||||
void UpdateClientCategory(int client, unsigned int category, bool bSkipRootCheck=false);
|
||||
void TearDownClient(topmenu_player_t *player);
|
||||
private:
|
||||
void OnClientConnected(int client);
|
||||
|
@ -58,6 +58,23 @@
|
||||
}
|
||||
}
|
||||
|
||||
"ageofchivalry"
|
||||
{
|
||||
"Keys"
|
||||
{
|
||||
"RadioMenuTimeout" "4"
|
||||
}
|
||||
|
||||
"Offsets"
|
||||
{
|
||||
"GetDataDescMap"
|
||||
{
|
||||
"windows" "11"
|
||||
"linux" "12"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
"left4dead"
|
||||
{
|
||||
"Offsets"
|
||||
@ -88,6 +105,8 @@
|
||||
"game" "synergy"
|
||||
"game" "FortressForever"
|
||||
"game" "left4dead"
|
||||
"game" "ageofchivalry"
|
||||
"game" "obsidian"
|
||||
}
|
||||
|
||||
"Keys"
|
||||
@ -106,6 +125,8 @@
|
||||
"game" "hl2mp"
|
||||
"game" "sourceforts"
|
||||
"game" "tf"
|
||||
"game" "ageofchivalry"
|
||||
"game" "obsidian"
|
||||
}
|
||||
|
||||
"Keys"
|
||||
|
@ -33,6 +33,7 @@
|
||||
{
|
||||
"game" "dod"
|
||||
"game" "tf"
|
||||
"game" "ageofchivalry"
|
||||
}
|
||||
|
||||
"Offsets"
|
||||
@ -81,6 +82,7 @@
|
||||
{
|
||||
"game" "dod"
|
||||
"game" "tf"
|
||||
"game" "ageofchivalry"
|
||||
}
|
||||
|
||||
"Signatures"
|
||||
@ -107,6 +109,7 @@
|
||||
{
|
||||
"game" "dod"
|
||||
"game" "tf"
|
||||
"game" "ageofchivalry"
|
||||
}
|
||||
|
||||
"Offsets"
|
||||
@ -148,6 +151,7 @@
|
||||
{
|
||||
"game" "dod"
|
||||
"game" "tf"
|
||||
"game" "ageofchivalry"
|
||||
}
|
||||
|
||||
"Offsets"
|
||||
@ -226,6 +230,7 @@
|
||||
{
|
||||
"game" "dod"
|
||||
"game" "tf"
|
||||
"game" "ageofchivalry"
|
||||
}
|
||||
"Signatures"
|
||||
{
|
||||
@ -451,4 +456,180 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Afe of Chivalry */
|
||||
"ageofchivalry"
|
||||
{
|
||||
"Offsets"
|
||||
{
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "351"
|
||||
"linux" "352"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "239"
|
||||
"linux" "240"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "237"
|
||||
"linux" "238"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "194"
|
||||
"linux" "195"
|
||||
}
|
||||
"Extinguish"
|
||||
{
|
||||
"windows" "198"
|
||||
"linux" "199"
|
||||
}
|
||||
"Teleport"
|
||||
{
|
||||
"windows" "101"
|
||||
"linux" "102"
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "389"
|
||||
"linux" "389"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
"windows" "130"
|
||||
"linux" "131"
|
||||
}
|
||||
"EyeAngles"
|
||||
{
|
||||
"windows" "122"
|
||||
"linux" "123"
|
||||
}
|
||||
"AcceptInput"
|
||||
{
|
||||
"windows" "34"
|
||||
"linux" "35"
|
||||
}
|
||||
"DispatchKeyValue"
|
||||
{
|
||||
"windows" "29"
|
||||
"linux" "28"
|
||||
}
|
||||
"DispatchKeyValueFloat"
|
||||
{
|
||||
"windows" "28"
|
||||
"linux" "29"
|
||||
}
|
||||
"DispatchKeyValueVector"
|
||||
{
|
||||
"windows" "27"
|
||||
"linux" "30"
|
||||
}
|
||||
"SetEntityModel"
|
||||
{
|
||||
"windows" "23"
|
||||
"linux" "24"
|
||||
}
|
||||
"WeaponEquip"
|
||||
{
|
||||
"windows" "230"
|
||||
"linux" "231"
|
||||
}
|
||||
"Activate"
|
||||
{
|
||||
"windows" "31"
|
||||
"linux" "32"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Obsidian Conflict 1.3 */
|
||||
"obsidian"
|
||||
{
|
||||
"Offsets"
|
||||
{
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "350"
|
||||
"linux" "351"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "237"
|
||||
"linux" "238"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "235"
|
||||
"linux" "236"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "190"
|
||||
"linux" "191"
|
||||
}
|
||||
"Extinguish"
|
||||
{
|
||||
"windows" "194"
|
||||
"linux" "195"
|
||||
}
|
||||
"Teleport"
|
||||
{
|
||||
"windows" "100"
|
||||
"linux" "101"
|
||||
}
|
||||
"CommitSuicide"
|
||||
{
|
||||
"windows" "393"
|
||||
"linux" "393"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
"windows" "127"
|
||||
"linux" "128"
|
||||
}
|
||||
"EyeAngles"
|
||||
{
|
||||
"windows" "119"
|
||||
"linux" "120"
|
||||
}
|
||||
"AcceptInput"
|
||||
{
|
||||
"windows" "34"
|
||||
"linux" "35"
|
||||
}
|
||||
"DispatchKeyValue"
|
||||
{
|
||||
"windows" "29"
|
||||
"linux" "28"
|
||||
}
|
||||
"DispatchKeyValueFloat"
|
||||
{
|
||||
"windows" "28"
|
||||
"linux" "29"
|
||||
}
|
||||
"DispatchKeyValueVector"
|
||||
{
|
||||
"windows" "27"
|
||||
"linux" "30"
|
||||
}
|
||||
"SetEntityModel"
|
||||
{
|
||||
"windows" "23"
|
||||
"linux" "24"
|
||||
}
|
||||
"WeaponEquip"
|
||||
{
|
||||
"windows" "228"
|
||||
"linux" "229"
|
||||
}
|
||||
"Activate"
|
||||
{
|
||||
"windows" "31"
|
||||
"linux" "32"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -37,8 +37,7 @@
|
||||
"game" "!Dystopia"
|
||||
"game" "!Insurgency"
|
||||
"game" "pvkii"
|
||||
"game" "!SourceForts v1.9.2"
|
||||
"game" "$SourceForts v1.9.3"
|
||||
"game" "sourceforts"
|
||||
"game" "FortressForever"
|
||||
"game" "empires"
|
||||
"game" "synergy"
|
||||
@ -97,8 +96,7 @@
|
||||
"game" "!Dystopia"
|
||||
"game" "!Insurgency"
|
||||
"game" "pvkii"
|
||||
"game" "!SourceForts v1.9.2"
|
||||
"game" "$SourceForts v1.9.3"
|
||||
"game" "sourceforts"
|
||||
"game" "FortressForever"
|
||||
"game" "empires"
|
||||
"game" "synergy"
|
||||
@ -148,8 +146,7 @@
|
||||
"game" "ship"
|
||||
"game" "!Insurgency"
|
||||
"game" "pvkii"
|
||||
"game" "!SourceForts v1.9.2"
|
||||
"game" "$SourceForts v1.9.3"
|
||||
"game" "sourceforts"
|
||||
"game" "FortressForever"
|
||||
"game" "empires"
|
||||
"game" "synergy"
|
||||
@ -198,7 +195,7 @@
|
||||
"game" "hl2mp"
|
||||
"game" "!Insurgency"
|
||||
"game" "pvkii"
|
||||
"game" "$SourceForts v1.9.3"
|
||||
"game" "sourceforts"
|
||||
"game" "empires"
|
||||
"game" "synergy"
|
||||
"game" "hidden"
|
||||
@ -743,28 +740,28 @@
|
||||
/* CBasePlayer */
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "174"
|
||||
"linux" "175"
|
||||
"windows" "176"
|
||||
"linux" "177"
|
||||
}
|
||||
"Extinguish"
|
||||
{
|
||||
"windows" "175"
|
||||
"linux" "176"
|
||||
"windows" "176"
|
||||
"linux" "177"
|
||||
}
|
||||
"Teleport"
|
||||
{
|
||||
"windows" "90"
|
||||
"linux" "91"
|
||||
"windows" "91"
|
||||
"linux" "92"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
"windows" "115"
|
||||
"linux" "116"
|
||||
"windows" "116"
|
||||
"linux" "117"
|
||||
}
|
||||
"EyeAngles"
|
||||
{
|
||||
"windows" "107"
|
||||
"linux" "108"
|
||||
"windows" "108"
|
||||
"linux" "109"
|
||||
}
|
||||
"AcceptInput"
|
||||
{
|
||||
@ -893,102 +890,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* SourceForts 1.9.2 */
|
||||
"!SourceForts v1.9.2"
|
||||
{
|
||||
"Offsets"
|
||||
{
|
||||
/* CBasePlayer */
|
||||
"GiveNamedItem"
|
||||
{
|
||||
"windows" "294"
|
||||
"linux" "295"
|
||||
}
|
||||
"RemovePlayerItem"
|
||||
{
|
||||
"windows" "207"
|
||||
"linux" "208"
|
||||
}
|
||||
"Weapon_GetSlot"
|
||||
{
|
||||
"windows" "205"
|
||||
"linux" "206"
|
||||
}
|
||||
"Ignite"
|
||||
{
|
||||
"windows" "170"
|
||||
"linux" "171"
|
||||
}
|
||||
"Extinguish"
|
||||
{
|
||||
"windows" "171"
|
||||
"linux" "172"
|
||||
}
|
||||
"Teleport"
|
||||
{
|
||||
"windows" "90"
|
||||
"linux" "91"
|
||||
}
|
||||
"GetVelocity"
|
||||
{
|
||||
"windows" "114"
|
||||
"linux" "115"
|
||||
}
|
||||
"EyeAngles"
|
||||
{
|
||||
"windows" "106"
|
||||
"linux" "107"
|
||||
}
|
||||
"DispatchKeyValue"
|
||||
{
|
||||
"windows" "30"
|
||||
"linux" "29"
|
||||
}
|
||||
"DispatchKeyValueFloat"
|
||||
{
|
||||
"windows" "29"
|
||||
"linux" "30"
|
||||
}
|
||||
"DispatchKeyValueVector"
|
||||
{
|
||||
"windows" "28"
|
||||
"linux" "31"
|
||||
}
|
||||
"AcceptInput"
|
||||
{
|
||||
"windows" "34"
|
||||
"linux" "35"
|
||||
}
|
||||
"SetEntityModel"
|
||||
{
|
||||
"windows" "25"
|
||||
"linux" "26"
|
||||
}
|
||||
|
||||
"TE_GetServerClass"
|
||||
{
|
||||
"windows" "0"
|
||||
"linux" "0"
|
||||
}
|
||||
}
|
||||
|
||||
"Signatures"
|
||||
{
|
||||
"DispatchSpawn"
|
||||
{
|
||||
"library" "server"
|
||||
"linux" "@_Z13DispatchSpawnP11CBaseEntity"
|
||||
"windows" "\x53\x56\x8B\x74\x24\x0C\x85\xF6\x57\x0F\x84\x2A\x2A\x2A\x2A\x8B\x1D\x2A\x2A\x2A\x2A\x8B\x03\x8B\xCB\xFF\x50\x14\x8B\x16\x8B\xCE"
|
||||
}
|
||||
"CreateEntityByName"
|
||||
{
|
||||
"library" "server"
|
||||
"linux" "@_Z18CreateEntityByNamePKci"
|
||||
"windows" "\x56\x8B\x74\x24\x0C\x83\xFE\xFF\x57\x8B\x7C\x24\x0C\x74\x25\x8B\x0D\x2A\x2A\x2A\x2A\x8B\x01\x56\xFF\x50\x54\x85\xC0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Fortress Forever */
|
||||
"FortressForever"
|
||||
{
|
||||
@ -1269,8 +1170,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
/* SourceForts 1.9.3 */
|
||||
"$SourceForts v1.9.3"
|
||||
"sourceforts"
|
||||
{
|
||||
"Offsets"
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user