tFixed "Abilities" code to synchronise properly - vaccinewars - be a doctor and try to vaccinate the world
(HTM) git clone git://src.adamsgaard.dk/vaccinewars
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 301f2895a1c13bd146df427d73cea33b0f90b672
(DIR) parent c726f79d0a085621f247609620335ba90536bbf9
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Tue, 12 Sep 2000 11:17:28 +0000
Fixed "Abilities" code to synchronise properly
Diffstat:
M ChangeLog | 2 +-
M src/message.c | 9 ++++++++-
M src/message.h | 1 +
M src/serverside.c | 1 +
4 files changed, 11 insertions(+), 2 deletions(-)
---
(DIR) diff --git a/ChangeLog b/ChangeLog
t@@ -2,7 +2,7 @@
- Internationalization (i18n) support
- Networking revamped - now uses nonblocking sockets to improve server
responsiveness and to remove deadlocks (previously, any client could
- halt server by sending an unterminated message); Abilities added to
+ halt server by sending an unterminated message); "abilities" added to
allow backwards-compatible protocol extensions
- Longer T>alk and P>age messages allowed in curses client
- Minor bug fixes to configure options
(DIR) diff --git a/src/message.c b/src/message.c
t@@ -175,6 +175,12 @@ void ReceiveAbilities(Player *Play,gchar *Data) {
Length=MIN(strlen(Data),A_NUM);
for (i=0;i<Length;i++) {
Play->Abil.Remote[i]= (Data[i]=='1' ? TRUE : FALSE);
+ }
+}
+
+void CombineAbilities(Player *Play) {
+ int i;
+ for (i=0;i<A_NUM;i++) {
Play->Abil.Shared[i]= (Play->Abil.Remote[i] && Play->Abil.Local[i]);
}
}
t@@ -712,7 +718,8 @@ gboolean HandleGenericClientMessage(Player *From,char AICode,char Code,
case C_INIT:
ReceiveInitialData(Data); break;
case C_ABILITIES:
- ReceiveAbilities(To,Data); break;
+ ReceiveAbilities(To,Data); CombineAbilities(To);
+ break;
case C_LEAVE:
if (From!=&Noone) FirstClient=RemovePlayer(From,FirstClient);
break;
(DIR) diff --git a/src/message.h b/src/message.h
t@@ -144,6 +144,7 @@ void ReadMetaServerData(int HttpSock);
void InitAbilities(Player *Play);
void SendAbilities(Player *Play);
void ReceiveAbilities(Player *Play,gchar *Data);
+void CombineAbilities(Player *Play);
gboolean HaveAbility(Player *Play,gint Type);
#endif
(DIR) diff --git a/src/serverside.c b/src/serverside.c
t@@ -240,6 +240,7 @@ void HandleServerMessage(gchar *buf,Player *ReallyFrom) {
Network) || (!Network && From==&Noone)) && Data[0]) {
if (CountPlayers(FirstServer)<MaxClients || !Network) {
SendAbilities(ReallyFrom);
+ CombineAbilities(ReallyFrom);
SendInitialData(ReallyFrom);
SendMiscData(ReallyFrom);
if (!Network) {