#include "dialog_multiplayer_join_serverinfo.qh"
#include <common/mapinfo.qh>
+void SL_ProcessCategoryOverrides(.string override_field_string, .float override_field)
+{
+ string s;
+ for (int i = 0; i < category_ent_count; ++i)
+ {
+ s = categories[i].override_field_string;
+ if (s != "" && s != categories[i].cat_name)
+ {
+ int catnum = 0;
+ for (int x = 0; x < category_ent_count; ++x)
+ {
+ if(categories[x].cat_name == s)
+ {
+ catnum = x + 1;
+ break;
+ }
+ }
+ if (catnum)
+ {
+ strfree(categories[i].override_field_string);
+ categories[i].override_field = catnum;
+ continue;
+ }
+ LOG_INFOF("RegisterSLCategories(): Improper override '%s' for category '%s'!", s, categories[i].cat_name);
+ }
+ strfree(categories[i].override_field_string);
+ categories[i].override_field = 0;
+ }
+}
+
void RegisterSLCategories()
{
entity cat;
SLIST_CATEGORIES
#undef SLIST_CATEGORY
- int i, x, catnum;
- string s;
-
- #define PROCESS_OVERRIDE(override_string,override_field) \
- for(i = 0; i < category_ent_count; ++i) \
- { \
- s = categories[i].override_string; \
- if((s != "") && (s != categories[i].cat_name)) \
- { \
- catnum = 0; \
- for(x = 0; x < category_ent_count; ++x) \
- { if(categories[x].cat_name == s) { \
- catnum = (x+1); \
- break; \
- } } \
- if(catnum) \
- { \
- strunzone(categories[i].override_string); \
- categories[i].override_string = string_null; \
- categories[i].override_field = catnum; \
- continue; \
- } \
- else \
- { \
- LOG_INFOF( \
- "RegisterSLCategories(): Improper override '%s' for category '%s'!\n", \
- s, \
- categories[i].cat_name \
- ); \
- } \
- } \
- strunzone(categories[i].override_string); \
- categories[i].override_string = string_null; \
- categories[i].override_field = 0; \
- }
- PROCESS_OVERRIDE(cat_enoverride_string, cat_enoverride)
- PROCESS_OVERRIDE(cat_dioverride_string, cat_dioverride)
- #undef PROCESS_OVERRIDE
+ SL_ProcessCategoryOverrides(cat_enoverride_string, cat_enoverride);
+ SL_ProcessCategoryOverrides(cat_dioverride_string, cat_dioverride);
}
// Supporting Functions
if(gethostcachevalue(SLIST_HOSTCACHEVIEWCOUNT) != me.nItems)
return; // sorry, it would be wrong
- if(me.selectedServer)
- strunzone(me.selectedServer);
- me.selectedServer = strzone(gethostcachestring(SLIST_FIELD_CNAME, me.selectedItem));
+ strcpy(me.selectedServer, gethostcachestring(SLIST_FIELD_CNAME, me.selectedItem));
me.ipAddressBox.setText(me.ipAddressBox, me.selectedServer);
me.ipAddressBox.cursorPos = strlen(me.selectedServer);
}
else { me.nItems = gethostcachevalue(SLIST_HOSTCACHEVIEWCOUNT); }
- me.connectButton.disabled = ((me.nItems == 0) && (me.ipAddressBox.text == ""));
- me.infoButton.disabled = ((me.nItems == 0) || !owned);
- me.favoriteButton.disabled = ((me.nItems == 0) && (me.ipAddressBox.text == ""));
+ me.connectButton.disabled = (me.lockedSelectedItem || (me.nItems == 0 && me.ipAddressBox.text == ""));
+ me.disconnectButton.disabled = (!(gamestatus & (GAME_ISSERVER | GAME_CONNECTED)));
+ me.infoButton.disabled = (me.lockedSelectedItem || me.nItems == 0 || !owned);
+ me.favoriteButton.disabled = (me.lockedSelectedItem || (me.nItems == 0 && me.ipAddressBox.text == ""));
if(me.lockedSelectedItem)
{
{
if(gethostcachestring(SLIST_FIELD_CNAME, me.selectedItem) != me.selectedServer)
{
- if(me.selectedServer)
- strunzone(me.selectedServer);
- me.selectedServer = strzone(gethostcachestring(SLIST_FIELD_CNAME, me.selectedItem));
+ strcpy(me.selectedServer, gethostcachestring(SLIST_FIELD_CNAME, me.selectedItem));
}
found = true;
}
// selected server disappeared, select the last server (scrolling to it)
if(me.selectedItem >= me.nItems)
SUPER(XonoticServerList).setSelected(me, me.nItems - 1);
- if(me.selectedServer)
- strunzone(me.selectedServer);
- me.selectedServer = strzone(gethostcachestring(SLIST_FIELD_CNAME, me.selectedItem));
+ strcpy(me.selectedServer, gethostcachestring(SLIST_FIELD_CNAME, me.selectedItem));
}
}
}
void ServerList_Filter_Change(entity box, entity me)
{
- if(me.filterString)
- strunzone(me.filterString);
+ strfree(me.filterString);
if(box.text != "")
me.filterString = strzone(box.text);
- else
- me.filterString = string_null;
me.refreshServerList(me, REFRESHSERVERLIST_REFILTER);
me.ipAddressBox.setText(me.ipAddressBox, "");
me.sortButton4.forcePressed = 0;
me.sortButton5.forcePressed = (fld == SLIST_FIELD_NUMHUMANS);
me.selectedItem = 0;
- if(me.selectedServer)
- strunzone(me.selectedServer);
- me.selectedServer = string_null;
+ strfree(me.selectedServer);
me.refreshServerList(me, REFRESHSERVERLIST_REFILTER);
}
void XonoticServerList_positionSortButton(entity me, entity btn, float theOrigin, float theSize, string theTitle, void(entity, entity) theFunc)
}
void ServerList_Connect_Click(entity btn, entity me)
{
- localcmd(sprintf("connect %s\n",
- ((me.ipAddressBox.text != "") ?
- me.ipAddressBox.text : me.selectedServer
- )
- ));
+ if (me.lockedSelectedItem)
+ return;
+ string sv = (me.ipAddressBox.text != "") ? me.ipAddressBox.text : me.selectedServer;
+ localcmd(sprintf("connect %s\n", sv));
}
void ServerList_Favorite_Click(entity btn, entity this)
{
vector oldscale = draw_scale;
vector oldshift = draw_shift;
#define SET_YRANGE(start,end) \
- draw_scale = boxToGlobalSize(eX * 1 + eY * (end - start), oldscale); \
+ draw_scale = boxToGlobalSize(eX + eY * (end - start), oldscale); \
draw_shift = boxToGlobal(eY * start, oldshift, oldscale);
for (j = 0; j < category_draw_count; ++j) {
}
}
- if(isSelected)
+ if(isSelected && !me.lockedSelectedItem)
draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
else if(isFocused)
{
bool XonoticServerList_keyDown(entity me, int scan, bool ascii, bool shift)
{
- vector org, sz;
-
- org = boxToGlobal(eY * (me.selectedItem * me.itemHeight - me.scrollPos), me.origin, me.size);
- sz = boxToGlobalSize(eY * me.itemHeight + eX * (1 - me.controlWidth), me.size);
-
if(scan == K_ENTER || scan == K_KP_ENTER)
{
ServerList_Connect_Click(NULL, me);
{
if(me.nItems != 0)
{
+ vector org = boxToGlobal(eY * (me.selectedItem * me.itemHeight - me.scrollPos), me.origin, me.size);
+ vector sz = boxToGlobalSize(eY * me.itemHeight + eX * (1 - me.controlWidth), me.size);
m_play_click_sound(MENU_SOUND_OPEN);
main.serverInfoDialog.loadServerInfo(main.serverInfoDialog, me.selectedItem);
DialogOpenButton_Click_withCoords(me, main.serverInfoDialog, org, sz);