Skip to content

Commit

Permalink
bugfix for closing chat tabs, and #expire at startup if the server se…
Browse files Browse the repository at this point in the history
…nds a packet with more than 3 chat channels in
  • Loading branch information
gregoryfenton committed Oct 23, 2012
1 parent 7e1f66e commit f0634d7
Show file tree
Hide file tree
Showing 7 changed files with 101 additions and 102 deletions.
80 changes: 33 additions & 47 deletions chat.c
Expand Up @@ -104,25 +104,12 @@ void update_tab_idx (Uint8 old_idx, Uint8 new_idx)
void set_channel_tabs (const Uint32 *chans)
{
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
int nmax =
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
#else
CHAT_CHANNEL3
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
-
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
+ 1;
int nmax = loadsofchannels;
#else // Either OTHER_LIFE or standard client
int nmax = CHAT_CHANNEL3 - CHAT_CHANNEL1 + 1;
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Uint32 chan;
Uint8 chan_nr, chan_nrp;

for (chan_nr = 0; chan_nr < nmax; chan_nr++)
{
chan = chans[chan_nr];
Expand All @@ -138,23 +125,24 @@ void set_channel_tabs (const Uint32 *chans)
// we left this channel
remove_tab (chan_nr +
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
);
continue;
}
else
{
update_tab_idx (chan_nr+
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
, chan_nrp+
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand All @@ -178,7 +166,7 @@ void set_channel_tabs (const Uint32 *chans)
// we have a new channel
add_tab (chan_nrp+
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand All @@ -199,7 +187,6 @@ void set_active_channels (Uint8 active, const Uint32 *channels, int nchan)
active_channels[i] = SDL_SwapLE32(channels[i]);
for ( ; i < MAX_ACTIVE_CHANNELS; i++)
active_channels[i] = 0;

set_channel_tabs (tmp);

current_channel = active;
Expand All @@ -210,13 +197,13 @@ void send_active_channel (Uint8 chan)
Uint8 msg[2];
if (chan >=
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
&& chan <=
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
((loadsofchannels != 3) ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
#else
CHAT_CHANNEL3
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand All @@ -227,7 +214,7 @@ void send_active_channel (Uint8 chan)
my_tcp_send (my_socket, msg, 2);
current_channel = chan -
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand All @@ -239,20 +226,20 @@ Uint32 get_active_channel (Uint8 idx)
{
if (idx >=
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
&& idx <=
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
((loadsofchannels != 3) ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
#else
CHAT_CHANNEL3
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
)
return active_channels[idx-
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand Down Expand Up @@ -360,33 +347,32 @@ int close_channel (window_info *win)
{
int id = win->window_id;
int ichan;

char str[256];

for (ichan = 0; ichan < MAX_CHAT_TABS; ichan++)
{
if (channels[ichan].tab_id == id)
{
int idx = channels[ichan].chan_nr -
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
;

if (idx >= 0 && idx < MAX_ACTIVE_CHANNELS)
{
char str[256];
safe_snprintf(str, sizeof(str), "%c#lc %d", RAW_TEXT, active_channels[idx]);
my_tcp_send(my_socket, (Uint8*)str, strlen(str+1)+1);
}

// Safe to remove?
if (tab_bar_win != -1) remove_tab_button(channels[ichan].chan_nr);

return 1;
}
}

// we shouldn't get here
LOG_ERROR ("Trying to close non-existant channel\n");
return 0;
Expand Down Expand Up @@ -418,7 +404,7 @@ void remove_chat_tab (Uint8 channel)
int add_chat_tab(int nlines, Uint8 channel)
{
int ichan;

for (ichan = 0; ichan < MAX_CHAT_TABS; ichan++)
{
if (!channels[ichan].open)
Expand Down Expand Up @@ -660,13 +646,13 @@ void switch_to_chat_tab(int id, char click)

if (channels[active_tab].chan_nr >=
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
&& channels[active_tab].chan_nr <=
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
((loadsofchannels != 3) ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
#else
CHAT_CHANNEL3
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand All @@ -686,7 +672,7 @@ void change_to_current_chat_tab(const char *input)
{
channel =
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand Down Expand Up @@ -1486,13 +1472,13 @@ void switch_to_tab(int id)
tabs[current_tab].highlighted = 0;
if(tabs[current_tab].channel >=
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
&& tabs[current_tab].channel <=
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
((loadsofchannels != 3) ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
#else
CHAT_CHANNEL3
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand Down Expand Up @@ -1523,13 +1509,13 @@ int tab_bar_button_click (widget_list *w, int mx, int my, Uint32 flags)
// Detect clicking on 'x'
if(tabs[itab].channel >=
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
&& tabs[itab].channel <=
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
((loadsofchannels != 3) ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
#else
CHAT_CHANNEL3
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand All @@ -1545,7 +1531,7 @@ int tab_bar_button_click (widget_list *w, int mx, int my, Uint32 flags)
// Drop this channel via #lc
safe_snprintf(str, sizeof(str), "%c#lc %d", RAW_TEXT, active_channels[tabs[itab].channel-
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand Down Expand Up @@ -1604,13 +1590,13 @@ chan_name *tab_label (Uint8 chan)
}
if(chan <
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
|| chan >
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
((loadsofchannels != 3) ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
#else
CHAT_CHANNEL3
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand All @@ -1621,7 +1607,7 @@ chan_name *tab_label (Uint8 chan)
}
cnr = active_channels[chan-
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand Down Expand Up @@ -1834,7 +1820,7 @@ static int draw_tab_details (widget_list *W)
for (itab = 0; itab < tabs_in_use; itab++)
if ((tabs[itab].button == W->id) && (tabs[itab].channel ==
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand Down Expand Up @@ -1922,14 +1908,14 @@ int add_tab_button (Uint8 channel)
// Make sure it's a CHANNEL first
if(tabs[itab].channel >=
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
&& tabs[itab].channel ==
&& tabs[itab].channel <=

#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
((loadsofchannels != 3) ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
#else
CHAT_CHANNEL3
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand Down Expand Up @@ -2052,7 +2038,7 @@ void change_to_current_tab(const char *input)
{
channel =
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand Down
4 changes: 2 additions & 2 deletions chat.h
Expand Up @@ -17,8 +17,8 @@ extern "C" {
#define MAX_TEXT_MESSAGE_LENGTH 160 /*!< The server will disconnect us when we send longer messages */

#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
#define MAX_CHAT_TABS 40 /*!< Size of the \see channels array */
#define MAX_ACTIVE_CHANNELS 32 /*!< Maximum number of channels in use */
#define MAX_CHAT_TABS 44 /*!< Size of the \see channels array */
#define MAX_ACTIVE_CHANNELS 42 /*!< Maximum number of channels in use */
#else
#define MAX_CHAT_TABS 12 /*!< Size of the \see channels array */
#define MAX_ACTIVE_CHANNELS 10 /*!< Maximum number of channels in use */
Expand Down
2 changes: 1 addition & 1 deletion console.c
Expand Up @@ -1747,7 +1747,7 @@ void new_minute_console(void){
if(time_warn_h >= 0 && (time_warn_h+real_game_minute)%60 == 0){
char str[75];
safe_snprintf(str, sizeof(str), time_warn_hour_str, time_warn_h);
LOG_TO_CONSOLE(c_purple1, str);
LOG_TO_CONSOLE(c_purple2, str);
}
if(time_warn_s >= 0 && (time_warn_s+real_game_minute)%180 == 30){
char str[100];
Expand Down
2 changes: 1 addition & 1 deletion elc_private.rc
Expand Up @@ -4,7 +4,7 @@
#include <windows.h> // include for version info constants


A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "elc.ico"
A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "olc.ico"

//
// TO CHANGE VERSION INFORMATION, EDIT PROJECT OPTIONS...
Expand Down
4 changes: 2 additions & 2 deletions font.c
Expand Up @@ -247,13 +247,13 @@ int draw_char_scaled(unsigned char cur_char, int cur_x, int cur_y, float display
void recolour_message(text_message *msg){
if (msg->chan_idx >=
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
((loadsofchannels != 3) ? CHAT_CHANNEL1 : ORIG_CHAT_CHANNEL1)
#else
CHAT_CHANNEL1
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
&& msg->chan_idx <=
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
(loadsofchannels ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
((loadsofchannels != 3) ? CHAT_CHANNEL32 : ORIG_CHAT_CHANNEL3)
#else
CHAT_CHANNEL3
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
Expand Down
13 changes: 11 additions & 2 deletions multiplayer.c
Expand Up @@ -103,7 +103,7 @@ short real_game_second = 0;
int is_acid_rain_day = 0, is_raining = 0;

#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
int loadsofchannels = 0; // default to only 3 channels
int loadsofchannels = 3; // default to only 3 channels
#endif // if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)

/*
Expand Down Expand Up @@ -1888,7 +1888,16 @@ void process_message_from_server (const Uint8 *in_data, int data_length)
break;
}
#if defined(OTHER_LIFE) && defined(OTHER_LIFE_EXTENDED_CHAT)
loadsofchannels = ((data_length-2)/4 == 3 ? 0 : 1);
if(loadsofchannels != (data_length-2)/4)
{
char str[256];
loadsofchannels = (data_length-2)/4;
safe_snprintf(str, sizeof(str), "You have %d chat channels available", loadsofchannels);
LOG_TO_CONSOLE(c_purple3, str);
safe_snprintf(str, sizeof(str), "%c#expire", RAW_TEXT);
my_tcp_send(my_socket, (Uint8*)str, strlen(str+1)+1);
}

#endif
set_active_channels (in_data[3], (Uint32*)(in_data+4), (data_length-2)/4);
break;
Expand Down

0 comments on commit f0634d7

Please sign in to comment.