tFix for dopewars.sco install; player IDs now used in messages - vaccinewars - … | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit f6eb1f80293e4987d855294318867a02ca6a9541 | |
parent f2393f7aef862474382e97307175f7f189dc5ceb | |
Author: Ben Webb <[email protected]> | |
Date: Wed, 13 Sep 2000 04:21:22 +0000 | |
Fix for dopewars.sco install; player IDs now used in messages | |
Diffstat: | |
M ChangeLog | 3 ++- | |
M Makefile.am | 1 + | |
M Makefile.in | 1 + | |
M po/dopewars.pot | 620 ++++++++++++++++-------------… | |
M src/AIPlayer.c | 8 ++------ | |
M src/curses_client.c | 7 +++---- | |
M src/dopewars.c | 28 ++++++++++++++++++++++++++++ | |
M src/dopewars.h | 2 ++ | |
M src/gtk_client.c | 5 ++--- | |
M src/message.c | 116 ++++++++++++++++++++---------… | |
M src/message.h | 4 ++-- | |
M src/serverside.c | 27 +++++++++++++++++++-------- | |
M src/win32_client.c | 4 ++-- | |
13 files changed, 448 insertions(+), 378 deletions(-) | |
--- | |
diff --git a/ChangeLog b/ChangeLog | |
t@@ -3,7 +3,8 @@ | |
- 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 | |
- allow backwards-compatible protocol extensions | |
+ allow backwards-compatible protocol extensions; player IDs used rather | |
+ than player names to save bandwidth, with newer client+server | |
- Longer T>alk and P>age messages allowed in curses client | |
- Minor bug fixes to configure options | |
- Client-side code moved out of clientside.c and dopewars.c; | |
diff --git a/Makefile.am b/Makefile.am | |
t@@ -3,6 +3,7 @@ SUBDIRS = src doc po intl | |
DISTFILES = ABOUT-NLS | |
install-data-local: | |
+ ${mkinstalldirs} ${datadir} | |
touch ${datadir}/dopewars.sco | |
chown root.games ${datadir}/dopewars.sco | |
chmod 0660 ${datadir}/dopewars.sco | |
diff --git a/Makefile.in b/Makefile.in | |
t@@ -376,6 +376,7 @@ mostlyclean distclean maintainer-clean | |
install-data-local: | |
+ ${mkinstalldirs} ${datadir} | |
touch ${datadir}/dopewars.sco | |
chown root.games ${datadir}/dopewars.sco | |
chmod 0660 ${datadir}/dopewars.sco | |
diff --git a/po/dopewars.pot b/po/dopewars.pot | |
t@@ -6,7 +6,7 @@ | |
msgid "" | |
msgstr "" | |
"Project-Id-Version: PACKAGE VERSION\n" | |
-"POT-Creation-Date: 2000-09-13 01:58+0100\n" | |
+"POT-Creation-Date: 2000-09-13 05:02+0100\n" | |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
"Language-Team: LANGUAGE <[email protected]>\n" | |
t@@ -738,53 +738,53 @@ msgstr "" | |
msgid "Drugs can be your friend!" | |
msgstr "" | |
-#: src/dopewars.c:1074 | |
+#: src/dopewars.c:1102 | |
msgid "Unable to process configuration file line" | |
msgstr "" | |
-#: src/dopewars.c:1135 | |
+#: src/dopewars.c:1163 | |
msgid "" | |
"Configuration can only be changed interactively when no\n" | |
"players are logged on. Wait for all players to log off, or remove\n" | |
"them with the push or kill commands, and try again." | |
msgstr "" | |
-#: src/dopewars.c:1196 | |
+#: src/dopewars.c:1224 | |
#, c-format | |
msgid "Index into %s array should be between 1 and %d" | |
msgstr "" | |
-#: src/dopewars.c:1215 | |
+#: src/dopewars.c:1243 | |
#, c-format | |
msgid "%s is %d\n" | |
msgstr "" | |
-#: src/dopewars.c:1220 | |
+#: src/dopewars.c:1248 | |
#, c-format | |
msgid "%s is %s\n" | |
msgstr "" | |
-#: src/dopewars.c:1223 | |
+#: src/dopewars.c:1251 | |
#, c-format | |
msgid "%s is \"%s\"\n" | |
msgstr "" | |
-#: src/dopewars.c:1227 | |
+#: src/dopewars.c:1255 | |
#, c-format | |
msgid "%s[%d] is %s\n" | |
msgstr "" | |
-#: src/dopewars.c:1230 | |
+#: src/dopewars.c:1258 | |
#, c-format | |
msgid "%s is { " | |
msgstr "" | |
-#: src/dopewars.c:1261 | |
+#: src/dopewars.c:1289 | |
#, c-format | |
msgid "Resized structure list to %d elements\n" | |
msgstr "" | |
-#: src/dopewars.c:1404 | |
+#: src/dopewars.c:1432 | |
#, c-format | |
msgid "" | |
"Usage: dopewars [OPTION]...\n" | |
t@@ -998,7 +998,7 @@ msgstr "" | |
msgid "CLQP" | |
msgstr "" | |
-#: src/curses_client.c:371 src/gtk_client.c:808 | |
+#: src/curses_client.c:371 src/gtk_client.c:807 | |
msgid "Where to, dude ? " | |
msgstr "" | |
t@@ -1015,11 +1015,11 @@ msgstr "" | |
msgid "How many do you drop? " | |
msgstr "" | |
-#: src/curses_client.c:454 src/curses_client.c:827 | |
+#: src/curses_client.c:454 src/curses_client.c:826 | |
msgid "What do you wish to buy? " | |
msgstr "" | |
-#: src/curses_client.c:456 src/curses_client.c:829 | |
+#: src/curses_client.c:456 src/curses_client.c:828 | |
msgid "What do you wish to sell? " | |
msgstr "" | |
t@@ -1084,7 +1084,7 @@ msgstr "" | |
msgid " Are you sure? " | |
msgstr "" | |
-#: src/curses_client.c:544 src/curses_client.c:562 src/curses_client.c:1689 | |
+#: src/curses_client.c:544 src/curses_client.c:562 src/curses_client.c:1688 | |
msgid "YN" | |
msgstr "" | |
t@@ -1104,7 +1104,7 @@ msgstr "" | |
msgid "The server has terminated. Reverting to single player mode." | |
msgstr "" | |
-#: src/curses_client.c:646 src/gtk_client.c:337 src/serverside.c:250 | |
+#: src/curses_client.c:646 src/gtk_client.c:337 src/serverside.c:259 | |
#, c-format | |
msgid "%s joins the game!" | |
msgstr "" | |
t@@ -1129,224 +1129,224 @@ msgid "" | |
"it." | |
msgstr "" | |
-#: src/curses_client.c:745 | |
+#: src/curses_client.c:744 | |
msgid "H I G H S C O R E S" | |
msgstr "" | |
-#: src/curses_client.c:801 | |
+#: src/curses_client.c:800 | |
msgid "Will you B>uy, S>ell, or L>eave? " | |
msgstr "" | |
-#: src/curses_client.c:806 | |
+#: src/curses_client.c:805 | |
msgid "BSL" | |
msgstr "" | |
-#: src/curses_client.c:811 | |
+#: src/curses_client.c:810 | |
#, c-format | |
msgid "You don't have any %s to sell!" | |
msgstr "" | |
-#: src/curses_client.c:818 src/gtk_client.c:1084 | |
+#: src/curses_client.c:817 src/gtk_client.c:1083 | |
#, c-format | |
msgid "You'll need more %s to carry any more %s!" | |
msgstr "" | |
-#: src/curses_client.c:840 src/gtk_client.c:1088 | |
+#: src/curses_client.c:839 src/gtk_client.c:1087 | |
#, c-format | |
msgid "You don't have enough space to carry that %s!" | |
msgstr "" | |
-#: src/curses_client.c:848 src/gtk_client.c:1092 | |
+#: src/curses_client.c:847 src/gtk_client.c:1091 | |
#, c-format | |
msgid "You don't have enough cash to buy that %s!" | |
msgstr "" | |
-#: src/curses_client.c:861 src/gtk_client.c:1096 | |
+#: src/curses_client.c:860 src/gtk_client.c:1095 | |
msgid "You don't have any to sell!" | |
msgstr "" | |
-#: src/curses_client.c:885 | |
+#: src/curses_client.c:884 | |
msgid "How much money do you pay back? " | |
msgstr "" | |
-#: src/curses_client.c:891 src/curses_client.c:921 src/gtk_client.c:1931 | |
+#: src/curses_client.c:890 src/curses_client.c:920 src/gtk_client.c:1930 | |
msgid "You don't have that much money!" | |
msgstr "" | |
-#: src/curses_client.c:911 | |
+#: src/curses_client.c:910 | |
msgid "Do you want to D>eposit money, W>ithdraw money, or L>eave ? " | |
msgstr "" | |
-#: src/curses_client.c:914 | |
+#: src/curses_client.c:913 | |
msgid "DWL" | |
msgstr "" | |
-#: src/curses_client.c:916 | |
+#: src/curses_client.c:915 | |
msgid "How much money? " | |
msgstr "" | |
-#: src/curses_client.c:924 src/gtk_client.c:1924 | |
+#: src/curses_client.c:923 src/gtk_client.c:1923 | |
msgid "There isn't that much money in the bank..." | |
msgstr "" | |
-#: src/curses_client.c:1003 | |
+#: src/curses_client.c:1002 | |
msgid "Press any key..." | |
msgstr "" | |
-#: src/curses_client.c:1134 | |
+#: src/curses_client.c:1133 | |
msgid "Messages" | |
msgstr "" | |
-#: src/curses_client.c:1141 src/gtk_client.c:1382 | |
+#: src/curses_client.c:1140 src/gtk_client.c:1381 | |
msgid "Stats" | |
msgstr "" | |
-#: src/curses_client.c:1144 | |
+#: src/curses_client.c:1143 | |
#, c-format | |
msgid "Cash %17s" | |
msgstr "" | |
-#: src/curses_client.c:1151 | |
+#: src/curses_client.c:1150 | |
#, c-format | |
msgid "Health %3d" | |
msgstr "" | |
-#: src/curses_client.c:1153 | |
+#: src/curses_client.c:1152 | |
#, c-format | |
msgid "Bank %17s" | |
msgstr "" | |
-#: src/curses_client.c:1157 | |
+#: src/curses_client.c:1156 | |
#, c-format | |
msgid "Debt %17s" | |
msgstr "" | |
-#: src/curses_client.c:1161 | |
+#: src/curses_client.c:1160 | |
#, c-format | |
msgid "Space %6d" | |
msgstr "" | |
-#: src/curses_client.c:1163 | |
+#: src/curses_client.c:1162 | |
#, c-format | |
msgid "%s %3d Space %6d" | |
msgstr "" | |
-#: src/curses_client.c:1174 | |
+#: src/curses_client.c:1173 | |
msgid "Trenchcoat" | |
msgstr "" | |
-#: src/curses_client.c:1214 | |
+#: src/curses_client.c:1213 | |
#, c-format | |
msgid "Spy reports for %s" | |
msgstr "" | |
-#: src/curses_client.c:1218 src/curses_client.c:1223 | |
+#: src/curses_client.c:1217 src/curses_client.c:1222 | |
#, c-format | |
msgid "%s..." | |
msgstr "" | |
-#: src/curses_client.c:1244 | |
+#: src/curses_client.c:1243 | |
msgid "No other players are currently logged on!" | |
msgstr "" | |
-#: src/curses_client.c:1249 | |
+#: src/curses_client.c:1248 | |
msgid "Players currently logged on:-" | |
msgstr "" | |
-#: src/curses_client.c:1397 | |
+#: src/curses_client.c:1396 | |
msgid "Hey dude, what's your name? " | |
msgstr "" | |
-#: src/curses_client.c:1431 | |
+#: src/curses_client.c:1430 | |
#, c-format | |
msgid "Hey dude, the prices of %s here are:" | |
msgstr "" | |
-#: src/curses_client.c:1443 | |
+#: src/curses_client.c:1442 | |
msgid "Will you B>uy" | |
msgstr "" | |
-#: src/curses_client.c:1444 | |
+#: src/curses_client.c:1443 | |
msgid ", S>ell" | |
msgstr "" | |
-#: src/curses_client.c:1445 | |
+#: src/curses_client.c:1444 | |
msgid ", D>rop" | |
msgstr "" | |
-#: src/curses_client.c:1446 | |
+#: src/curses_client.c:1445 | |
msgid ", T>alk, P>age, L>ist" | |
msgstr "" | |
-#: src/curses_client.c:1449 | |
+#: src/curses_client.c:1448 | |
msgid ", G>ive" | |
msgstr "" | |
-#: src/curses_client.c:1452 | |
+#: src/curses_client.c:1451 | |
msgid ", F>ight" | |
msgstr "" | |
-#: src/curses_client.c:1456 | |
+#: src/curses_client.c:1455 | |
msgid ", J>et" | |
msgstr "" | |
-#: src/curses_client.c:1458 src/curses_client.c:1473 | |
+#: src/curses_client.c:1457 src/curses_client.c:1472 | |
msgid ", or Q>uit? " | |
msgstr "" | |
-#: src/curses_client.c:1466 | |
+#: src/curses_client.c:1465 | |
msgid "Do you " | |
msgstr "" | |
-#: src/curses_client.c:1468 | |
+#: src/curses_client.c:1467 | |
msgid "F>ight, " | |
msgstr "" | |
-#: src/curses_client.c:1469 | |
+#: src/curses_client.c:1468 | |
msgid "S>tand, " | |
msgstr "" | |
-#: src/curses_client.c:1471 | |
+#: src/curses_client.c:1470 | |
msgid "R>un, " | |
msgstr "" | |
-#: src/curses_client.c:1472 | |
+#: src/curses_client.c:1471 | |
msgid "D>eal " | |
msgstr "" | |
-#: src/curses_client.c:1515 | |
+#: src/curses_client.c:1514 | |
msgid "Connection to server lost! Reverting to single player mode" | |
msgstr "" | |
-#: src/curses_client.c:1544 | |
+#: src/curses_client.c:1543 | |
msgid "BSDTPLGFJQ" | |
msgstr "" | |
-#: src/curses_client.c:1546 | |
+#: src/curses_client.c:1545 | |
msgid "DRFSQ" | |
msgstr "" | |
-#: src/curses_client.c:1574 | |
+#: src/curses_client.c:1573 | |
msgid "List what? P>layers or S>cores? " | |
msgstr "" | |
-#: src/curses_client.c:1575 | |
+#: src/curses_client.c:1574 | |
msgid "PS" | |
msgstr "" | |
-#: src/curses_client.c:1584 | |
+#: src/curses_client.c:1583 | |
msgid "Whom do you want to page (talk privately to) ? " | |
msgstr "" | |
-#: src/curses_client.c:1599 | |
+#: src/curses_client.c:1598 | |
msgid "Talk: " | |
msgstr "" | |
-#: src/curses_client.c:1688 | |
+#: src/curses_client.c:1687 | |
msgid "Play again? " | |
msgstr "" | |
-#: src/curses_client.c:1700 | |
+#: src/curses_client.c:1699 | |
msgid "" | |
"No curses client available - rebuild the binary passing the\n" | |
"--enable-curses-client option to configure, or use a windowed\n" | |
t@@ -1445,7 +1445,7 @@ msgstr "" | |
msgid "Inventory" | |
msgstr "" | |
-#: src/gtk_client.c:236 src/gtk_client.c:2167 src/gtk_client.c:2535 | |
+#: src/gtk_client.c:236 src/gtk_client.c:2166 src/gtk_client.c:2534 | |
msgid "Close" | |
msgstr "" | |
t@@ -1484,173 +1484,173 @@ msgstr "" | |
msgid "<main>/Errands/Tipoff" | |
msgstr "" | |
-#: src/gtk_client.c:403 | |
+#: src/gtk_client.c:402 | |
msgid "High Scores" | |
msgstr "" | |
-#: src/gtk_client.c:437 src/gtk_client.c:1035 src/gtk_client.c:1495 | |
-#: src/gtk_client.c:1840 src/gtk_client.c:2005 src/gtk_client.c:2284 | |
-#: src/gtk_client.c:2442 | |
+#: src/gtk_client.c:436 src/gtk_client.c:1034 src/gtk_client.c:1494 | |
+#: src/gtk_client.c:1839 src/gtk_client.c:2004 src/gtk_client.c:2283 | |
+#: src/gtk_client.c:2441 | |
msgid "OK" | |
msgstr "" | |
-#: src/gtk_client.c:519 | |
+#: src/gtk_client.c:518 | |
msgid "Fight" | |
msgstr "" | |
-#: src/gtk_client.c:546 | |
+#: src/gtk_client.c:545 | |
#, c-format | |
msgid "_Deal %s" | |
msgstr "" | |
-#: src/gtk_client.c:550 src/gtk_client.c:1128 src/gtk_client.c:1325 | |
+#: src/gtk_client.c:549 src/gtk_client.c:1127 src/gtk_client.c:1324 | |
msgid "_Fight" | |
msgstr "" | |
-#: src/gtk_client.c:553 | |
+#: src/gtk_client.c:552 | |
msgid "_Stand" | |
msgstr "" | |
-#: src/gtk_client.c:556 src/gtk_client.c:1127 | |
+#: src/gtk_client.c:555 src/gtk_client.c:1126 | |
msgid "_Run" | |
msgstr "" | |
-#: src/gtk_client.c:799 | |
+#: src/gtk_client.c:798 | |
msgid "Jet to location" | |
msgstr "" | |
-#: src/gtk_client.c:868 | |
+#: src/gtk_client.c:867 | |
#, c-format | |
msgid "at %s" | |
msgstr "" | |
-#: src/gtk_client.c:873 | |
+#: src/gtk_client.c:872 | |
#, c-format | |
msgid "You are currently carrying %d %s" | |
msgstr "" | |
-#: src/gtk_client.c:878 | |
+#: src/gtk_client.c:877 | |
#, c-format | |
msgid "Available space: %d" | |
msgstr "" | |
-#: src/gtk_client.c:883 | |
+#: src/gtk_client.c:882 | |
#, c-format | |
msgid "You can afford %d" | |
msgstr "" | |
-#: src/gtk_client.c:933 src/gtk_client.c:1064 | |
+#: src/gtk_client.c:932 src/gtk_client.c:1063 | |
msgid "Buy" | |
msgstr "" | |
-#: src/gtk_client.c:934 src/gtk_client.c:1065 | |
+#: src/gtk_client.c:933 src/gtk_client.c:1064 | |
msgid "Sell" | |
msgstr "" | |
-#: src/gtk_client.c:935 src/gtk_client.c:1066 | |
+#: src/gtk_client.c:934 src/gtk_client.c:1065 | |
msgid "Drop" | |
msgstr "" | |
-#: src/gtk_client.c:1023 | |
+#: src/gtk_client.c:1022 | |
#, c-format | |
msgid "%s how many?" | |
msgstr "" | |
-#: src/gtk_client.c:1041 src/gtk_client.c:1840 src/gtk_client.c:2016 | |
-#: src/gtk_client.c:2292 | |
+#: src/gtk_client.c:1040 src/gtk_client.c:1839 src/gtk_client.c:2015 | |
+#: src/gtk_client.c:2291 | |
msgid "Cancel" | |
msgstr "" | |
-#: src/gtk_client.c:1080 | |
+#: src/gtk_client.c:1079 | |
#, c-format | |
msgid "You don't have any %s!" | |
msgstr "" | |
-#: src/gtk_client.c:1127 src/gtk_client.c:1841 | |
+#: src/gtk_client.c:1126 src/gtk_client.c:1840 | |
msgid "_Yes" | |
msgstr "" | |
-#: src/gtk_client.c:1127 src/gtk_client.c:1841 | |
+#: src/gtk_client.c:1126 src/gtk_client.c:1840 | |
msgid "_No" | |
msgstr "" | |
-#: src/gtk_client.c:1128 | |
+#: src/gtk_client.c:1127 | |
msgid "_Attack" | |
msgstr "" | |
-#: src/gtk_client.c:1128 | |
+#: src/gtk_client.c:1127 | |
msgid "_Evade" | |
msgstr "" | |
-#: src/gtk_client.c:1146 | |
+#: src/gtk_client.c:1145 | |
msgid "Question" | |
msgstr "" | |
-#: src/gtk_client.c:1255 | |
+#: src/gtk_client.c:1254 | |
msgid "<main>/Talk" | |
msgstr "" | |
-#: src/gtk_client.c:1257 | |
+#: src/gtk_client.c:1256 | |
msgid "<main>/List" | |
msgstr "" | |
-#: src/gtk_client.c:1259 | |
+#: src/gtk_client.c:1258 | |
msgid "<main>/Errands" | |
msgstr "" | |
-#: src/gtk_client.c:1275 | |
+#: src/gtk_client.c:1274 | |
msgid "Space" | |
msgstr "" | |
-#: src/gtk_client.c:1280 | |
+#: src/gtk_client.c:1279 | |
msgid "Cash" | |
msgstr "" | |
-#: src/gtk_client.c:1285 | |
+#: src/gtk_client.c:1284 | |
msgid "Debt" | |
msgstr "" | |
-#: src/gtk_client.c:1290 | |
+#: src/gtk_client.c:1289 | |
msgid "Bank" | |
msgstr "" | |
-#: src/gtk_client.c:1305 | |
+#: src/gtk_client.c:1304 | |
msgid "Health" | |
msgstr "" | |
-#: src/gtk_client.c:1325 | |
+#: src/gtk_client.c:1324 | |
msgid "_Jet!" | |
msgstr "" | |
-#: src/gtk_client.c:1356 | |
+#: src/gtk_client.c:1355 | |
msgid "dopewars" | |
msgstr "" | |
-#: src/gtk_client.c:1442 | |
+#: src/gtk_client.c:1441 | |
msgid "Drug Dealing and Research" | |
msgstr "" | |
-#: src/gtk_client.c:1443 | |
+#: src/gtk_client.c:1442 | |
msgid "Play Testing" | |
msgstr "" | |
-#: src/gtk_client.c:1444 | |
+#: src/gtk_client.c:1443 | |
msgid "Extensive Play Testing" | |
msgstr "" | |
-#: src/gtk_client.c:1446 | |
+#: src/gtk_client.c:1445 | |
msgid "Constructive Criticism" | |
msgstr "" | |
-#: src/gtk_client.c:1448 | |
+#: src/gtk_client.c:1447 | |
msgid "Unconstructive Criticism" | |
msgstr "" | |
-#: src/gtk_client.c:1452 | |
+#: src/gtk_client.c:1451 | |
msgid "About dopewars" | |
msgstr "" | |
-#: src/gtk_client.c:1461 | |
+#: src/gtk_client.c:1460 | |
msgid "" | |
"Based on John E. Dell's old Drug Wars game, dopewars is a simulation of an\n" | |
"imaginary drug market. dopewars is an All-American game which features\n" | |
t@@ -1662,151 +1662,151 @@ msgid "" | |
"have one month of game time to make your fortune.\n" | |
msgstr "" | |
-#: src/gtk_client.c:1469 | |
+#: src/gtk_client.c:1468 | |
#, c-format | |
msgid "" | |
"Version %s Copyright (C) 1998-2000 Ben Webb [email protected]\n" | |
"dopewars is released under the GNU General Public Licence\n" | |
msgstr "" | |
-#: src/gtk_client.c:1487 | |
+#: src/gtk_client.c:1486 | |
msgid "" | |
"\n" | |
"For information on the command line options, type dopewars -h at your\n" | |
"Unix prompt. This will display a help screen, listing the availableoptions." | |
msgstr "" | |
-#: src/gtk_client.c:1525 src/gtk_client.c:1548 | |
+#: src/gtk_client.c:1524 src/gtk_client.c:1547 | |
#, c-format | |
msgid "Status: Could not connect (%s)" | |
msgstr "" | |
-#: src/gtk_client.c:1536 | |
+#: src/gtk_client.c:1535 | |
#, c-format | |
msgid "Status: Attempting to contact %s..." | |
msgstr "" | |
-#: src/gtk_client.c:1596 | |
+#: src/gtk_client.c:1595 | |
#, c-format | |
msgid "%d of %d" | |
msgstr "" | |
-#: src/gtk_client.c:1660 src/gtk_client.c:1701 src/gtk_client.c:1742 | |
+#: src/gtk_client.c:1659 src/gtk_client.c:1700 src/gtk_client.c:1741 | |
msgid "Server" | |
msgstr "" | |
-#: src/gtk_client.c:1661 src/gtk_client.c:1716 | |
+#: src/gtk_client.c:1660 src/gtk_client.c:1715 | |
msgid "Port" | |
msgstr "" | |
-#: src/gtk_client.c:1662 | |
+#: src/gtk_client.c:1661 | |
msgid "Version" | |
msgstr "" | |
-#: src/gtk_client.c:1663 | |
+#: src/gtk_client.c:1662 | |
msgid "Players" | |
msgstr "" | |
-#: src/gtk_client.c:1664 | |
+#: src/gtk_client.c:1663 | |
msgid "Comment" | |
msgstr "" | |
-#: src/gtk_client.c:1677 | |
+#: src/gtk_client.c:1676 | |
msgid "New Game" | |
msgstr "" | |
-#: src/gtk_client.c:1686 | |
+#: src/gtk_client.c:1685 | |
msgid "Hey dude, what's your _name?" | |
msgstr "" | |
-#: src/gtk_client.c:1708 | |
+#: src/gtk_client.c:1707 | |
msgid "Host name" | |
msgstr "" | |
-#: src/gtk_client.c:1731 src/gtk_client.c:1794 | |
+#: src/gtk_client.c:1730 src/gtk_client.c:1793 | |
msgid "_Connect" | |
msgstr "" | |
-#: src/gtk_client.c:1744 src/gtk_client.c:1765 | |
+#: src/gtk_client.c:1743 src/gtk_client.c:1764 | |
msgid "Single player" | |
msgstr "" | |
-#: src/gtk_client.c:1750 | |
+#: src/gtk_client.c:1749 | |
msgid "_Antique mode" | |
msgstr "" | |
-#: src/gtk_client.c:1757 | |
+#: src/gtk_client.c:1756 | |
msgid "_Start single-player game" | |
msgstr "" | |
-#: src/gtk_client.c:1767 src/gtk_client.c:1805 | |
+#: src/gtk_client.c:1766 src/gtk_client.c:1804 | |
msgid "Metaserver" | |
msgstr "" | |
-#: src/gtk_client.c:1784 | |
+#: src/gtk_client.c:1783 | |
msgid "_Update" | |
msgstr "" | |
-#: src/gtk_client.c:1809 | |
+#: src/gtk_client.c:1808 | |
msgid "Status: Waiting for user input" | |
msgstr "" | |
-#: src/gtk_client.c:1962 | |
+#: src/gtk_client.c:1961 | |
#, c-format | |
msgid "Cash: %s" | |
msgstr "" | |
-#: src/gtk_client.c:1969 | |
+#: src/gtk_client.c:1968 | |
#, c-format | |
msgid "Debt: %s" | |
msgstr "" | |
-#: src/gtk_client.c:1972 | |
+#: src/gtk_client.c:1971 | |
#, c-format | |
msgid "Bank: %s" | |
msgstr "" | |
-#: src/gtk_client.c:1980 | |
+#: src/gtk_client.c:1979 | |
msgid "Pay back:" | |
msgstr "" | |
-#: src/gtk_client.c:1983 | |
+#: src/gtk_client.c:1982 | |
msgid "Deposit" | |
msgstr "" | |
-#: src/gtk_client.c:1987 | |
+#: src/gtk_client.c:1986 | |
msgid "Withdraw" | |
msgstr "" | |
-#: src/gtk_client.c:2011 | |
+#: src/gtk_client.c:2010 | |
msgid "Pay all" | |
msgstr "" | |
-#: src/gtk_client.c:2033 | |
+#: src/gtk_client.c:2032 | |
msgid "Player List" | |
msgstr "" | |
-#: src/gtk_client.c:2122 | |
+#: src/gtk_client.c:2121 | |
msgid "Talk to player(s)" | |
msgstr "" | |
-#: src/gtk_client.c:2144 | |
+#: src/gtk_client.c:2143 | |
msgid "Talk to all players" | |
msgstr "" | |
-#: src/gtk_client.c:2148 | |
+#: src/gtk_client.c:2147 | |
msgid "Message:-" | |
msgstr "" | |
-#: src/gtk_client.c:2161 | |
+#: src/gtk_client.c:2160 | |
msgid "Send" | |
msgstr "" | |
-#: src/gtk_client.c:2254 | |
+#: src/gtk_client.c:2253 | |
msgid "Spy On Player" | |
msgstr "" | |
-#: src/gtk_client.c:2256 | |
+#: src/gtk_client.c:2255 | |
#, c-format | |
msgid "" | |
"Please choose the player to spy on. Your %s will\n" | |
t@@ -1816,11 +1816,11 @@ msgid "" | |
"you, so any %s or %s that he's carrying may be lost!" | |
msgstr "" | |
-#: src/gtk_client.c:2264 | |
+#: src/gtk_client.c:2263 | |
msgid "Tip Off The Cops" | |
msgstr "" | |
-#: src/gtk_client.c:2266 | |
+#: src/gtk_client.c:2265 | |
#, c-format | |
msgid "" | |
"Please choose the player to tip off the cops to. Your %s will\n" | |
t@@ -1829,71 +1829,71 @@ msgid "" | |
"so any %s or %s that he's carrying may be lost!" | |
msgstr "" | |
-#: src/gtk_client.c:2306 | |
+#: src/gtk_client.c:2305 | |
#, c-format | |
msgid "Sack %s" | |
msgstr "" | |
-#: src/gtk_client.c:2307 | |
+#: src/gtk_client.c:2306 | |
#, c-format | |
msgid "" | |
"Are you sure? (Any %s or %s carried\n" | |
"by this %s may be lost!)" | |
msgstr "" | |
-#: src/gtk_client.c:2328 | |
+#: src/gtk_client.c:2327 | |
msgid "Name" | |
msgstr "" | |
-#: src/gtk_client.c:2329 | |
+#: src/gtk_client.c:2328 | |
msgid "Price" | |
msgstr "" | |
-#: src/gtk_client.c:2330 | |
+#: src/gtk_client.c:2329 | |
msgid "Number" | |
msgstr "" | |
-#: src/gtk_client.c:2332 | |
+#: src/gtk_client.c:2331 | |
msgid "_Buy ->" | |
msgstr "" | |
-#: src/gtk_client.c:2333 | |
+#: src/gtk_client.c:2332 | |
msgid "<- _Sell" | |
msgstr "" | |
-#: src/gtk_client.c:2334 | |
+#: src/gtk_client.c:2333 | |
msgid "_Drop <-" | |
msgstr "" | |
-#: src/gtk_client.c:2339 | |
+#: src/gtk_client.c:2338 | |
#, c-format | |
msgid "%s here" | |
msgstr "" | |
-#: src/gtk_client.c:2342 | |
+#: src/gtk_client.c:2341 | |
#, c-format | |
msgid "%s carried" | |
msgstr "" | |
-#: src/gtk_client.c:2418 | |
+#: src/gtk_client.c:2417 | |
msgid "Change Name" | |
msgstr "" | |
-#: src/gtk_client.c:2428 | |
+#: src/gtk_client.c:2427 | |
msgid "" | |
"Unfortunately, somebody else is already using \"your\" name. Please change " | |
"it:-" | |
msgstr "" | |
-#: src/gtk_client.c:2487 | |
+#: src/gtk_client.c:2486 | |
msgid "Done" | |
msgstr "" | |
-#: src/gtk_client.c:2521 | |
+#: src/gtk_client.c:2520 | |
msgid "Spy reports" | |
msgstr "" | |
-#: src/gtk_client.c:2592 | |
+#: src/gtk_client.c:2591 | |
msgid "" | |
"No GTK+ client available - rebuild the binary passing the\n" | |
"--enable-gtk-client option to configure, or use the curses\n" | |
t@@ -1948,77 +1948,77 @@ msgstr "" | |
msgid "cannot read high score file\n" | |
msgstr "" | |
-#: src/serverside.c:257 | |
+#: src/serverside.c:269 | |
#, c-format | |
msgid "MaxClients (%d) exceeded - dropping connection" | |
msgstr "" | |
-#: src/serverside.c:261 | |
+#: src/serverside.c:273 | |
msgid "" | |
"Sorry, but this server has a limit of 1 player, which has been " | |
"reached.^Please try connecting again later." | |
msgstr "" | |
-#: src/serverside.c:266 | |
+#: src/serverside.c:278 | |
#, c-format | |
msgid "" | |
"Sorry, but this server has a limit of %d players, which has been " | |
"reached.^Please try connecting again later." | |
msgstr "" | |
-#: src/serverside.c:279 | |
+#: src/serverside.c:291 | |
#, c-format | |
msgid "%s will now be known as %s" | |
msgstr "" | |
-#: src/serverside.c:294 | |
+#: src/serverside.c:306 | |
msgid "Your dealing time is up..." | |
msgstr "" | |
-#: src/serverside.c:305 | |
+#: src/serverside.c:317 | |
#, c-format | |
msgid "%s: DENIED jet to %s" | |
msgstr "" | |
-#: src/serverside.c:362 | |
+#: src/serverside.c:374 | |
#, c-format | |
msgid "%s now spying on %s" | |
msgstr "" | |
-#: src/serverside.c:370 | |
+#: src/serverside.c:382 | |
#, c-format | |
msgid "%s spy on %s: DENIED" | |
msgstr "" | |
-#: src/serverside.c:376 | |
+#: src/serverside.c:388 | |
#, c-format | |
msgid "%s tipped off the cops to %s" | |
msgstr "" | |
-#: src/serverside.c:384 | |
+#: src/serverside.c:396 | |
#, c-format | |
msgid "%s tipoff about %s: DENIED" | |
msgstr "" | |
-#: src/serverside.c:492 | |
+#: src/serverside.c:503 | |
msgid "--More--" | |
msgstr "" | |
-#: src/serverside.c:503 | |
+#: src/serverside.c:514 | |
msgid "Pager exited abnormally - using stdout instead..." | |
msgstr "" | |
-#: src/serverside.c:518 | |
+#: src/serverside.c:529 | |
#, c-format | |
msgid "Maintaining pid file %s" | |
msgstr "" | |
-#: src/serverside.c:522 | |
+#: src/serverside.c:533 | |
#, c-format | |
msgid "Cannot create pid file %s" | |
msgstr "" | |
-#: src/serverside.c:571 | |
+#: src/serverside.c:582 | |
#, c-format | |
msgid "" | |
"Cannot open high score file %s.\n" | |
t@@ -2026,144 +2026,144 @@ msgid "" | |
"specify an alternate high score file with the -f command line option." | |
msgstr "" | |
-#: src/serverside.c:608 | |
+#: src/serverside.c:619 | |
#, c-format | |
msgid "" | |
"dopewars server version %s ready and waiting for connections\n" | |
"on port %d. For assistance with server commands, enter the command \"help\"\n" | |
msgstr "" | |
-#: src/serverside.c:625 | |
+#: src/serverside.c:636 | |
msgid "Cannot install SIGUSR1 interrupt handler!" | |
msgstr "" | |
-#: src/serverside.c:631 | |
+#: src/serverside.c:642 | |
msgid "Cannot install SIGINT interrupt handler!" | |
msgstr "" | |
-#: src/serverside.c:634 | |
+#: src/serverside.c:645 | |
msgid "Cannot install SIGTERM interrupt handler!" | |
msgstr "" | |
-#: src/serverside.c:637 | |
+#: src/serverside.c:648 | |
msgid "Cannot install SIGHUP interrupt handler!" | |
msgstr "" | |
-#: src/serverside.c:642 | |
+#: src/serverside.c:653 | |
msgid "Cannot install pipe handler!" | |
msgstr "" | |
-#: src/serverside.c:665 | |
+#: src/serverside.c:676 | |
msgid "Users currently logged on:-\n" | |
msgstr "" | |
-#: src/serverside.c:670 | |
+#: src/serverside.c:681 | |
msgid "No users currently logged on!" | |
msgstr "" | |
-#: src/serverside.c:674 | |
+#: src/serverside.c:685 | |
#, c-format | |
msgid "Pushing %s" | |
msgstr "" | |
-#: src/serverside.c:676 src/serverside.c:684 | |
+#: src/serverside.c:687 src/serverside.c:695 | |
msgid "No such user!" | |
msgstr "" | |
-#: src/serverside.c:680 | |
+#: src/serverside.c:691 | |
#, c-format | |
msgid "%s killed" | |
msgstr "" | |
-#: src/serverside.c:686 | |
+#: src/serverside.c:697 | |
msgid "Unknown command - try \"help\" for help..." | |
msgstr "" | |
-#: src/serverside.c:703 | |
+#: src/serverside.c:714 | |
#, c-format | |
msgid "got connection from %s" | |
msgstr "" | |
-#: src/serverside.c:719 | |
+#: src/serverside.c:730 | |
#, c-format | |
msgid "%s leaves the server!" | |
msgstr "" | |
-#: src/serverside.c:787 | |
+#: src/serverside.c:798 | |
msgid "Standard input closed." | |
msgstr "" | |
-#: src/serverside.c:930 | |
+#: src/serverside.c:941 | |
#, c-format | |
msgid "Unable to read high score file %s" | |
msgstr "" | |
-#: src/serverside.c:950 | |
+#: src/serverside.c:961 | |
msgid "Congratulations! You made the high scores!" | |
msgstr "" | |
-#: src/serverside.c:963 | |
+#: src/serverside.c:974 | |
msgid "You didn't even make the high score table..." | |
msgstr "" | |
-#: src/serverside.c:977 | |
+#: src/serverside.c:988 | |
#, c-format | |
msgid "Unable to write high score file %s" | |
msgstr "" | |
-#: src/serverside.c:996 | |
+#: src/serverside.c:1007 | |
msgid "(R.I.P.)" | |
msgstr "" | |
-#: src/serverside.c:1031 | |
+#: src/serverside.c:1042 | |
#, c-format | |
msgid "%s: Tipoff from %s" | |
msgstr "" | |
-#: src/serverside.c:1048 | |
+#: src/serverside.c:1059 | |
#, c-format | |
msgid "One of your %s was spying for %s.^The spy %s!" | |
msgstr "" | |
-#: src/serverside.c:1056 | |
+#: src/serverside.c:1067 | |
#, c-format | |
msgid "Your spy working with %s has been discovered!^The spy %s!" | |
msgstr "" | |
-#: src/serverside.c:1079 | |
+#: src/serverside.c:1090 | |
#, c-format | |
msgid " The lady next to you on the subway said,^ \"%s\"%s" | |
msgstr "" | |
-#: src/serverside.c:1082 | |
+#: src/serverside.c:1093 | |
msgid "^ (at least, you -think- that's what she said)" | |
msgstr "" | |
-#: src/serverside.c:1084 | |
+#: src/serverside.c:1095 | |
#, c-format | |
msgid " You hear someone playing %s" | |
msgstr "" | |
-#: src/serverside.c:1093 src/serverside.c:1102 src/serverside.c:1111 | |
-#: src/serverside.c:1120 | |
+#: src/serverside.c:1104 src/serverside.c:1113 src/serverside.c:1122 | |
+#: src/serverside.c:1131 | |
#, c-format | |
msgid "YN^Would you like to visit %s?" | |
msgstr "" | |
-#: src/serverside.c:1131 | |
+#: src/serverside.c:1142 | |
#, c-format | |
msgid "YN^^Would you like to hire %s %s for %s?" | |
msgstr "" | |
-#: src/serverside.c:1132 | |
+#: src/serverside.c:1143 | |
msgid "an" | |
msgstr "" | |
-#: src/serverside.c:1132 | |
+#: src/serverside.c:1143 | |
msgid "a" | |
msgstr "" | |
-#: src/serverside.c:1144 | |
+#: src/serverside.c:1155 | |
#, c-format | |
msgid "AE^%s is already here!^Do you Attack, or Evade?" | |
msgstr "" | |
t@@ -2172,336 +2172,336 @@ msgstr "" | |
#. The format string used for this purpose can be altered by | |
#. passing non-NULL "LoneMessage" (for unaccompanied Officer | |
#. Hardass) and/or "DeputyMessage" (for him with x deputies) | |
-#: src/serverside.c:1213 | |
+#: src/serverside.c:1224 | |
#, c-format | |
msgid "YN^Officer %s is chasing you!" | |
msgstr "" | |
-#: src/serverside.c:1215 | |
+#: src/serverside.c:1226 | |
#, c-format | |
msgid "YN^Officer %s and %d of his deputies are chasing you!" | |
msgstr "" | |
-#: src/serverside.c:1236 | |
+#: src/serverside.c:1247 | |
msgid "^Do you run?" | |
msgstr "" | |
-#: src/serverside.c:1239 | |
+#: src/serverside.c:1250 | |
msgid "^Do you Run, or Fight?" | |
msgstr "" | |
-#: src/serverside.c:1254 | |
+#: src/serverside.c:1265 | |
#, c-format | |
msgid "%s: tipoff by %s finished OK." | |
msgstr "" | |
-#: src/serverside.c:1260 | |
+#: src/serverside.c:1271 | |
#, c-format | |
msgid "Following your tipoff, the cops ambushed %s, who was shot dead" | |
msgstr "" | |
-#: src/serverside.c:1264 | |
+#: src/serverside.c:1275 | |
#, c-format | |
msgid "Following your tipoff, the cops ambushed %s, who escaped with %d %s. " | |
msgstr "" | |
-#: src/serverside.c:1301 | |
+#: src/serverside.c:1312 | |
msgid "^You stand there like an idiot." | |
msgstr "" | |
-#: src/serverside.c:1305 | |
+#: src/serverside.c:1316 | |
msgid "^You lose him in the alleys." | |
msgstr "" | |
-#: src/serverside.c:1307 | |
+#: src/serverside.c:1318 | |
msgid "^You lose them in the alleys." | |
msgstr "" | |
-#: src/serverside.c:1315 | |
+#: src/serverside.c:1326 | |
msgid "^You can't shake him, man!" | |
msgstr "" | |
-#: src/serverside.c:1317 | |
+#: src/serverside.c:1328 | |
msgid "^You can't shake them, man!" | |
msgstr "" | |
-#: src/serverside.c:1328 | |
+#: src/serverside.c:1339 | |
#, c-format | |
msgid "^You killed Officer %s! You find %s on his corpse!" | |
msgstr "" | |
-#: src/serverside.c:1342 | |
+#: src/serverside.c:1353 | |
#, c-format | |
msgid "YN^^^^Do you pay a doctor %s to sew your %s up?" | |
msgstr "" | |
-#: src/serverside.c:1346 | |
+#: src/serverside.c:1357 | |
#, c-format | |
msgid "YN^^^^Do you pay a doctor %s to sew you up?" | |
msgstr "" | |
-#: src/serverside.c:1358 | |
+#: src/serverside.c:1369 | |
msgid "^You got one, man!" | |
msgstr "" | |
-#: src/serverside.c:1361 | |
+#: src/serverside.c:1372 | |
msgid "^You missed!" | |
msgstr "" | |
-#: src/serverside.c:1365 | |
+#: src/serverside.c:1376 | |
msgid "^He's firing on you, man! " | |
msgstr "" | |
-#: src/serverside.c:1367 | |
+#: src/serverside.c:1378 | |
msgid "^They're firing on you, man! " | |
msgstr "" | |
-#: src/serverside.c:1370 | |
+#: src/serverside.c:1381 | |
msgid "You've been hit! " | |
msgstr "" | |
-#: src/serverside.c:1377 | |
+#: src/serverside.c:1388 | |
msgid "He wasted you, man! What a drag!" | |
msgstr "" | |
-#: src/serverside.c:1379 | |
+#: src/serverside.c:1390 | |
msgid "They wasted you, man! What a drag!" | |
msgstr "" | |
-#: src/serverside.c:1387 | |
+#: src/serverside.c:1398 | |
#, c-format | |
msgid "You lost one of your %s!" | |
msgstr "" | |
-#: src/serverside.c:1396 | |
+#: src/serverside.c:1407 | |
msgid "He missed!" | |
msgstr "" | |
-#: src/serverside.c:1398 | |
+#: src/serverside.c:1409 | |
msgid "They missed!" | |
msgstr "" | |
-#: src/serverside.c:1418 | |
+#: src/serverside.c:1429 | |
msgid "You were mugged in the subway!" | |
msgstr "" | |
-#: src/serverside.c:1429 | |
+#: src/serverside.c:1440 | |
#, c-format | |
msgid "You meet a friend! He gives you %d %s." | |
msgstr "" | |
-#: src/serverside.c:1434 | |
+#: src/serverside.c:1445 | |
#, c-format | |
msgid "You meet a friend! You give him %d %s." | |
msgstr "" | |
-#: src/serverside.c:1441 | |
+#: src/serverside.c:1452 | |
msgid "Sanitized away a RandomOffer" | |
msgstr "" | |
-#: src/serverside.c:1446 | |
+#: src/serverside.c:1457 | |
#, c-format | |
msgid "" | |
"Police dogs chase you for %d blocks! You dropped some %s! That's a drag, man!" | |
msgstr "" | |
-#: src/serverside.c:1460 | |
+#: src/serverside.c:1471 | |
#, c-format | |
msgid "You find %d %s on a dead dude in the subway!" | |
msgstr "" | |
-#: src/serverside.c:1472 | |
+#: src/serverside.c:1483 | |
#, c-format | |
msgid "Your mama made brownies with some of your %s! They were great!" | |
msgstr "" | |
-#: src/serverside.c:1480 | |
+#: src/serverside.c:1491 | |
msgid "" | |
"YN^There is some weed that smells like paraquat here!^It looks good! Will " | |
"you smoke it? " | |
msgstr "" | |
-#: src/serverside.c:1487 | |
+#: src/serverside.c:1498 | |
#, c-format | |
msgid "You stopped to %s." | |
msgstr "" | |
-#: src/serverside.c:1508 | |
+#: src/serverside.c:1519 | |
#, c-format | |
msgid "Would you like to buy a bigger trenchcoat for %s?" | |
msgstr "" | |
-#: src/serverside.c:1513 | |
+#: src/serverside.c:1524 | |
#, c-format | |
msgid "YN^Hey dude! I'll help carry your %s for a mere %s. Yes or no?" | |
msgstr "" | |
-#: src/serverside.c:1525 | |
+#: src/serverside.c:1536 | |
#, c-format | |
msgid "YN^Would you like to buy a %s for %s?" | |
msgstr "" | |
-#: src/serverside.c:1626 src/serverside.c:1737 | |
+#: src/serverside.c:1637 src/serverside.c:1748 | |
#, c-format | |
msgid "%s: offer was on behalf of %s" | |
msgstr "" | |
-#: src/serverside.c:1629 | |
+#: src/serverside.c:1640 | |
#, c-format | |
msgid "%s has accepted your %s!^Use the G key to contact your spy." | |
msgstr "" | |
-#: src/serverside.c:1675 | |
+#: src/serverside.c:1686 | |
msgid "" | |
"You hallucinated for three days on the wildest trip you ever imagined!^Then " | |
"you died because your brain disintegrated!" | |
msgstr "" | |
-#: src/serverside.c:1714 | |
+#: src/serverside.c:1725 | |
#, c-format | |
msgid "Too late - %s has just left!" | |
msgstr "" | |
-#: src/serverside.c:1740 | |
+#: src/serverside.c:1751 | |
#, c-format | |
msgid "%s has rejected your %s!" | |
msgstr "" | |
-#: src/serverside.c:1775 | |
+#: src/serverside.c:1786 | |
#, c-format | |
msgid "%s has got away!" | |
msgstr "" | |
-#: src/serverside.c:1816 | |
+#: src/serverside.c:1827 | |
#, c-format | |
msgid "%s has run off!" | |
msgstr "" | |
-#: src/serverside.c:1828 | |
+#: src/serverside.c:1839 | |
msgid "Coward! You successfully escaped from the fight." | |
msgstr "" | |
-#: src/serverside.c:1884 | |
+#: src/serverside.c:1895 | |
msgid "pitifully armed" | |
msgstr "" | |
-#: src/serverside.c:1885 | |
+#: src/serverside.c:1896 | |
msgid "lightly armed" | |
msgstr "" | |
-#: src/serverside.c:1886 | |
+#: src/serverside.c:1897 | |
msgid "moderately well armed" | |
msgstr "" | |
-#: src/serverside.c:1887 | |
+#: src/serverside.c:1898 | |
msgid "heavily armed" | |
msgstr "" | |
-#: src/serverside.c:1888 | |
+#: src/serverside.c:1899 | |
msgid "armed to the teeth" | |
msgstr "" | |
-#: src/serverside.c:1889 | |
+#: src/serverside.c:1900 | |
msgid " fires and " | |
msgstr "" | |
-#: src/serverside.c:1890 | |
+#: src/serverside.c:1901 | |
msgid " stands and takes it." | |
msgstr "" | |
-#: src/serverside.c:1893 | |
+#: src/serverside.c:1904 | |
#, c-format | |
msgid "%s arrives, with %d %s, %s,^%s" | |
msgstr "" | |
-#: src/serverside.c:1897 | |
+#: src/serverside.c:1908 | |
#, c-format | |
msgid "%s arrives, %s,^%s" | |
msgstr "" | |
-#: src/serverside.c:1902 | |
+#: src/serverside.c:1913 | |
#, c-format | |
msgid "%s fires and " | |
msgstr "" | |
-#: src/serverside.c:1904 | |
+#: src/serverside.c:1915 | |
#, c-format | |
msgid "%s stands and takes it." | |
msgstr "" | |
-#: src/serverside.c:1916 | |
+#: src/serverside.c:1927 | |
msgid "misses you!" | |
msgstr "" | |
-#: src/serverside.c:1917 | |
+#: src/serverside.c:1928 | |
#, c-format | |
msgid "You failed to hit %s." | |
msgstr "" | |
-#: src/serverside.c:1920 | |
+#: src/serverside.c:1931 | |
msgid "You stand and take it." | |
msgstr "" | |
-#: src/serverside.c:1924 | |
+#: src/serverside.c:1935 | |
msgid "hits you, man!" | |
msgstr "" | |
-#: src/serverside.c:1927 | |
+#: src/serverside.c:1938 | |
msgid " You've been wasted! What a drag!" | |
msgstr "" | |
-#: src/serverside.c:1928 | |
+#: src/serverside.c:1939 | |
#, c-format | |
msgid "You hit and killed %s" | |
msgstr "" | |
-#: src/serverside.c:1943 src/serverside.c:1976 | |
+#: src/serverside.c:1954 src/serverside.c:1987 | |
msgid ", and loot the body!" | |
msgstr "" | |
-#: src/serverside.c:1952 | |
+#: src/serverside.c:1963 | |
#, c-format | |
msgid "^You lost a %s, man!" | |
msgstr "" | |
-#: src/serverside.c:1957 | |
+#: src/serverside.c:1968 | |
#, c-format | |
msgid "You are paid a bounty of %s in reward for killing^one of %s's %s" | |
msgstr "" | |
-#: src/serverside.c:1965 | |
+#: src/serverside.c:1976 | |
#, c-format | |
msgid "You killed one of %s's %s (%d left)" | |
msgstr "" | |
-#: src/serverside.c:1983 | |
+#: src/serverside.c:1994 | |
#, c-format | |
msgid "You fire, and hit %s!" | |
msgstr "" | |
-#: src/serverside.c:2023 | |
+#: src/serverside.c:2034 | |
msgid "YN^Officer %%s spots you dropping %s, and chases you!" | |
msgstr "" | |
-#: src/serverside.c:2025 | |
+#: src/serverside.c:2036 | |
msgid "" | |
"YN^Officer %%s and %%d of his deputies spot you dropping %s, and chase you!" | |
msgstr "" | |
-#: src/serverside.c:2180 | |
+#: src/serverside.c:2191 | |
msgid "Player removed due to idle timeout" | |
msgstr "" | |
-#: src/serverside.c:2190 | |
+#: src/serverside.c:2201 | |
msgid "Player removed due to connect timeout" | |
msgstr "" | |
-#: src/serverside.c:2196 src/serverside.c:2202 | |
+#: src/serverside.c:2207 src/serverside.c:2213 | |
#, c-format | |
msgid "%s fails to return fire..." | |
msgstr "" | |
-#: src/message.c:437 | |
+#: src/message.c:449 | |
#, c-format | |
msgid "" | |
"This server is version %s, while your client is version %s.\n" | |
t@@ -2510,27 +2510,27 @@ msgid "" | |
"for the latest version." | |
msgstr "" | |
-#: src/message.c:576 | |
+#: src/message.c:588 | |
msgid "Could not find host" | |
msgstr "" | |
-#: src/message.c:577 | |
+#: src/message.c:589 | |
msgid "Could not create network socket" | |
msgstr "" | |
-#: src/message.c:578 src/message.c:611 | |
+#: src/message.c:590 src/message.c:623 | |
msgid "Connection refused or no server present" | |
msgstr "" | |
-#: src/message.c:757 | |
+#: src/message.c:789 | |
msgid "Cannot locate metaserver" | |
msgstr "" | |
-#: src/message.c:758 | |
+#: src/message.c:790 | |
msgid "Cannot create socket" | |
msgstr "" | |
-#: src/message.c:760 | |
+#: src/message.c:792 | |
msgid "Metaserver not running HTTP or connection denied" | |
msgstr "" | |
t@@ -2564,26 +2564,26 @@ msgstr "" | |
msgid "Using name %s\n" | |
msgstr "" | |
-#: src/AIPlayer.c:130 | |
+#: src/AIPlayer.c:131 | |
msgid "Players in this game:-\n" | |
msgstr "" | |
-#: src/AIPlayer.c:160 | |
+#: src/AIPlayer.c:161 | |
#, c-format | |
msgid "%s joins the game.\n" | |
msgstr "" | |
-#: src/AIPlayer.c:163 | |
+#: src/AIPlayer.c:164 | |
#, c-format | |
msgid "%s has left the game.\n" | |
msgstr "" | |
-#: src/AIPlayer.c:171 | |
+#: src/AIPlayer.c:172 | |
#, c-format | |
msgid "Jetting to %s with %s cash and %s debt" | |
msgstr "" | |
-#: src/AIPlayer.c:191 | |
+#: src/AIPlayer.c:192 | |
msgid "AI Player killed. Terminating normally.\n" | |
msgstr "" | |
t@@ -2591,75 +2591,75 @@ msgstr "" | |
msgid "Game time is up. Leaving game.\n" | |
msgstr "" | |
-#: src/AIPlayer.c:216 | |
+#: src/AIPlayer.c:215 | |
msgid "AI Player pushed from the server.\n" | |
msgstr "" | |
-#: src/AIPlayer.c:220 | |
+#: src/AIPlayer.c:218 | |
msgid "The server has terminated.\n" | |
msgstr "" | |
-#: src/AIPlayer.c:276 | |
+#: src/AIPlayer.c:272 | |
#, c-format | |
msgid "Selling %d %s at %s\n" | |
msgstr "" | |
-#: src/AIPlayer.c:292 | |
+#: src/AIPlayer.c:288 | |
#, c-format | |
msgid "Buying %d %s at %s\n" | |
msgstr "" | |
-#: src/AIPlayer.c:321 | |
+#: src/AIPlayer.c:317 | |
#, c-format | |
msgid "Buying a %s for %s at the gun shop\n" | |
msgstr "" | |
-#: src/AIPlayer.c:361 | |
+#: src/AIPlayer.c:357 | |
#, c-format | |
msgid "Debt of %s paid off to loan shark\n" | |
msgstr "" | |
-#: src/AIPlayer.c:386 | |
+#: src/AIPlayer.c:382 | |
#, c-format | |
msgid "Loan shark located at %s\n" | |
msgstr "" | |
-#: src/AIPlayer.c:394 | |
+#: src/AIPlayer.c:390 | |
#, c-format | |
msgid "Gun shop located at %s\n" | |
msgstr "" | |
-#: src/AIPlayer.c:402 | |
+#: src/AIPlayer.c:398 | |
#, c-format | |
msgid "Pub located at %s\n" | |
msgstr "" | |
-#: src/AIPlayer.c:415 | |
+#: src/AIPlayer.c:411 | |
#, c-format | |
msgid "Bank located at %s\n" | |
msgstr "" | |
-#: src/AIPlayer.c:439 | |
+#: src/AIPlayer.c:435 | |
msgid "Call yourselves drug dealers?" | |
msgstr "" | |
-#: src/AIPlayer.c:440 | |
+#: src/AIPlayer.c:436 | |
msgid "A trained monkey could do better..." | |
msgstr "" | |
-#: src/AIPlayer.c:441 | |
+#: src/AIPlayer.c:437 | |
msgid "Think you're hard enough to deal with the likes of me?" | |
msgstr "" | |
-#: src/AIPlayer.c:442 | |
+#: src/AIPlayer.c:438 | |
msgid "Zzzzz... are you dealing in candy or what?" | |
msgstr "" | |
-#: src/AIPlayer.c:443 | |
+#: src/AIPlayer.c:439 | |
msgid "Reckon I'll just have to shoot you for your own good." | |
msgstr "" | |
-#: src/AIPlayer.c:452 | |
+#: src/AIPlayer.c:448 | |
msgid "" | |
"This binary has been compiled without networking support, and thus cannot " | |
"act as an AI player.\n" | |
diff --git a/src/AIPlayer.c b/src/AIPlayer.c | |
t@@ -121,7 +121,8 @@ int HandleAIMessage(char *Message,Player *AIPlay) { | |
gchar *prstr,*prstr2; | |
struct timeval tv; | |
gboolean Handled; | |
- if (ProcessMessage(Message,&From,&AICode,&Code,&To,&Data,FirstClient)==-1) { | |
+ if (ProcessMessage(Message,AIPlay,&From,&AICode,&Code,&To, | |
+ &Data,FirstClient)==-1) { | |
g_warning("Bad network message. Oops."); return 0; | |
} | |
Handled=HandleGenericClientMessage(From,AICode,Code,To,Data,NULL); | |
t@@ -189,7 +190,6 @@ int HandleAIMessage(char *Message,Player *AIPlay) { | |
} | |
if (AIPlay->Health==0) { | |
g_print(_("AI Player killed. Terminating normally.\n")); | |
- g_free(Data); | |
return 1; | |
} | |
break; | |
t@@ -210,22 +210,18 @@ int HandleAIMessage(char *Message,Player *AIPlay) { | |
break; | |
case C_ENDHISCORE: | |
g_print(_("Game time is up. Leaving game.\n")); | |
- g_free(Data); | |
return 1; | |
case C_PUSH: | |
g_print(_("AI Player pushed from the server.\n")); | |
- g_free(Data); | |
return 1; | |
case C_QUIT: | |
g_print(_("The server has terminated.\n")); | |
- g_free(Data); | |
return 1; | |
default: | |
if (!Handled) g_message("%s^%c^%s%s\n",GetPlayerName(From),Code, | |
GetPlayerName(To),Data); | |
break; | |
} | |
- g_free(Data); | |
return 0; | |
} | |
diff --git a/src/curses_client.c b/src/curses_client.c | |
t@@ -587,9 +587,9 @@ void HandleClientMessage(char *Message,Player *Play) { | |
int i; | |
gboolean Handled; | |
-/* Ignore To: field (use tmp Player pointer for this) - all messages | |
- will be for Player "Play" */ | |
- if (ProcessMessage(Message,&From,&AICode,&Code,&tmp,&Data,FirstClient)==-1)… | |
+/* Ignore To: field - all messages will be for Player "Play" */ | |
+ if (ProcessMessage(Message,Play,&From,&AICode,&Code,NULL, | |
+ &Data,FirstClient)==-1) { | |
return; | |
} | |
t@@ -732,7 +732,6 @@ void HandleClientMessage(char *Message,Player *Play) { | |
} | |
break; | |
} | |
- g_free(Data); | |
} | |
void PrepareHighScoreScreen() { | |
diff --git a/src/dopewars.c b/src/dopewars.c | |
t@@ -490,6 +490,21 @@ GSList *AddPlayer(int fd,Player *NewPlayer,GSList *First)… | |
/* start of the list. If this function is called by the server, then */ | |
/* it should pass the file descriptor of the socket used to */ | |
/* communicate with the client player. */ | |
+ Player *tmp; | |
+ GSList *list; | |
+ list=First; | |
+ NewPlayer->ID=0; | |
+/* Generate a unique player ID, if we're the server (clients get their IDs | |
+ from the server, so don't need to generate IDs) */ | |
+ if (Server) while (list) { | |
+ tmp=(Player *)list->data; | |
+ if (tmp->ID==NewPlayer->ID) { | |
+ NewPlayer->ID++; | |
+ list=First; | |
+ } else { | |
+ list=g_slist_next(list); | |
+ } | |
+ } | |
NewPlayer->fd=-1; | |
NewPlayer->Name=NULL; | |
SetPlayerName(NewPlayer,NULL); | |
t@@ -573,6 +588,19 @@ void SetPlayerName(Player *Play,char *Name) { | |
else Play->Name = g_strdup(Name); | |
} | |
+Player *GetPlayerByID(guint ID,GSList *First) { | |
+/* Searches the linked list starting at "First" for a Player structure */ | |
+/* with the given ID. Returns a pointer to this structure, or NULL if */ | |
+/* no match can be found. */ | |
+ GSList *list; | |
+ Player *Play; | |
+ for (list=First;list;list=g_slist_next(list)) { | |
+ Play=(Player *)list->data; | |
+ if (Play->ID==ID) return Play; | |
+ } | |
+ return NULL; | |
+} | |
+ | |
Player *GetPlayerByName(char *Name,GSList *First) { | |
/* Searches the linked list starting at "First" for a Player structure */ | |
/* with the name "Name". Returns a pointer to this structure, or NULL */ | |
diff --git a/src/dopewars.h b/src/dopewars.h | |
t@@ -283,6 +283,7 @@ typedef struct tagConnBuf { | |
} ConnBuf; | |
struct PLAYER_T { | |
+ guint ID; | |
int Turn; | |
price_t Cash,Debt,Bank; | |
int Health; | |
t@@ -338,6 +339,7 @@ extern GSList *ServerList; | |
extern GScannerConfig ScannerConfig; | |
GSList *RemovePlayer(Player *Play,GSList *First); | |
+Player *GetPlayerByID(guint ID,GSList *First); | |
Player *GetPlayerByName(gchar *Name,GSList *First); | |
int CountPlayers(GSList *First); | |
GSList *AddPlayer(int fd,Player *NewPlayer,GSList *First); | |
diff --git a/src/gtk_client.c b/src/gtk_client.c | |
t@@ -287,8 +287,8 @@ void HandleClientMessage(char *pt,Player *Play) { | |
GtkWidget *MenuItem; | |
GSList *list; | |
-/* Ignore To: field (bin it in "tmp") as all messages should be for "Play" */ | |
- if (ProcessMessage(pt,&From,&AICode,&Code,&tmp,&Data,FirstClient)==-1) { | |
+/* Ignore To: field as all messages should be for "Play" */ | |
+ if (ProcessMessage(pt,Play,&From,&AICode,&Code,NULL,&Data,FirstClient)==-1)… | |
return; | |
} | |
t@@ -388,7 +388,6 @@ void HandleClientMessage(char *pt,Player *Play) { | |
} | |
break; | |
} | |
- g_free(Data); | |
} | |
struct HiScoreDiaStruct { | |
diff --git a/src/message.c b/src/message.c | |
t@@ -92,9 +92,16 @@ void SendClientMessage(Player *From,char AICode,char Code, | |
Player *ServerFrom; | |
g_assert(BufOwn!=NULL); | |
text=g_string_new(NULL); | |
- g_string_sprintf(text,"%s^%s^%c%c%s",From ? GetPlayerName(From) : "", | |
- To ? GetPlayerName(To) : "",AICode,Code, | |
- Data ? Data : ""); | |
+ if (HaveAbility(BufOwn,A_PLAYERID)) { | |
+ if (From) g_string_sprintf(text,"%d",From->ID); | |
+ g_string_append_c(text,'^'); | |
+ if (To) g_string_sprintfa(text,"%d",To->ID); | |
+ g_string_sprintfa(text,"^%c%c%s",AICode,Code,Data ? Data : ""); | |
+ } else { | |
+ g_string_sprintf(text,"%s^%s^%c%c%s",From ? GetPlayerName(From) : "", | |
+ To ? GetPlayerName(To) : "",AICode,Code, | |
+ Data ? Data : ""); | |
+ } | |
#if NETWORKING | |
if (!Network) { | |
t@@ -135,15 +142,17 @@ void SendServerMessage(Player *From,char AICode,char Cod… | |
/* Sends a message from the server to client player "To" with computer */ | |
/* code "AICode", human-readable code "Code" and data "Data". The message */ | |
/* will claim to be from or on behalf of player "From" */ | |
- gchar *text; | |
+ GString *text; | |
if (!Network) { | |
- text=g_strdup_printf("%s^%s^%c%c%s",From ? GetPlayerName(From) : "", | |
- To ? GetPlayerName(To) : "",AICode,Code, | |
- Data ? Data : ""); | |
+ text=g_string_new(""); | |
+ if (From) g_string_sprintf(text,"%d",From->ID); | |
+ g_string_append_c(text,'^'); | |
+ if (To) g_string_sprintfa(text,"%d",To->ID); | |
+ g_string_sprintfa(text,"^%c%c%s",AICode,Code,Data ? Data : ""); | |
if (ClientMessageHandlerPt) { | |
- (*ClientMessageHandlerPt)(text,(Player *)(FirstClient->data)); | |
+ (*ClientMessageHandlerPt)(text->str,(Player *)(FirstClient->data)); | |
} | |
- g_free(text); | |
+ g_string_free(text,TRUE); | |
} else SendClientMessage(From,AICode,Code,To,Data,To); | |
} | |
t@@ -191,7 +200,7 @@ void CombineAbilities(Player *Play) { | |
gboolean HaveAbility(Player *Play,gint Type) { | |
if (Type<0 || Type>=A_NUM) return FALSE; | |
- else return (Play->Abil.Shared[Type]=='1'); | |
+ else return (Play->Abil.Shared[Type]); | |
} | |
#if NETWORKING | |
t@@ -404,17 +413,19 @@ void SendSpyReport(Player *To,Player *SpiedOn) { | |
} | |
void SendInitialData(Player *To) { | |
- gchar *text; | |
+ GString *text; | |
if (!Network) return; | |
- text=g_strdup_printf("%s^%d^%d^%d^%s^%s^%s^%s^%s^%s^%s^%s^", | |
- VERSION,NumLocation,NumGun,NumDrug, | |
- Names.Bitch,Names.Bitches,Names.Gun,Names.Guns, | |
- Names.Drug,Names.Drugs,Names.Month,Names.Year); | |
- SendServerMessage(NULL,C_NONE,C_INIT,To,text); | |
- g_free(text); | |
+ text=g_string_new(""); | |
+ g_string_sprintf(text,"%s^%d^%d^%d^%s^%s^%s^%s^%s^%s^%s^%s^", | |
+ VERSION,NumLocation,NumGun,NumDrug, | |
+ Names.Bitch,Names.Bitches,Names.Gun,Names.Guns, | |
+ Names.Drug,Names.Drugs,Names.Month,Names.Year); | |
+ if (HaveAbility(To,A_PLAYERID)) g_string_sprintfa(text,"%d^",To->ID); | |
+ SendServerMessage(NULL,C_NONE,C_INIT,To,text->str); | |
+ g_string_free(text,TRUE); | |
} | |
-void ReceiveInitialData(char *Data) { | |
+void ReceiveInitialData(Player *Play,char *Data) { | |
char *pt,*ServerVersion; | |
GSList *list; | |
pt=Data; | |
t@@ -433,6 +444,7 @@ void ReceiveInitialData(char *Data) { | |
AssignName(&Names.Drugs,GetNextWord(&pt,"")); | |
AssignName(&Names.Month,GetNextWord(&pt,"")); | |
AssignName(&Names.Year,GetNextWord(&pt,"")); | |
+ if (HaveAbility(Play,A_PLAYERID)) Play->ID=GetNextInt(&pt,0); | |
if (strcmp(VERSION,ServerVersion)!=0) { | |
g_message(_("This server is version %s, while your client is " | |
"version %s.\nBe warned that different versions may not be fully compatible!\n" | |
t@@ -663,33 +675,50 @@ void ShutdownNetwork() { | |
Client=Network=Server=FALSE; | |
} | |
-int ProcessMessage(char *Msg,Player **From,char *AICode,char *Code, | |
+int ProcessMessage(char *Msg,Player *Play,Player **From,char *AICode,char *Cod… | |
Player **To,char **Data,GSList *First) { | |
/* Given a "raw" message in "Msg" and a pointer to the start of the linked */ | |
/* list of known players in "First", sets the other arguments to the message */ | |
-/* fields. Data is a dynamically-allocated buffer, which must be g_free'd by */ | |
-/* the caller. Returns 0 on success, -1 on failure. */ | |
- gchar **split; | |
- Player *tmp; | |
+/* fields. Data is returned as a pointer into the message "Msg", and should */ | |
+/* therefore NOT be g_free'd. "Play" is a pointer to the player which is */ | |
+/* receiving the message. Returns 0 on success, -1 on failure. */ | |
+ gchar *pt,*buf; | |
+ guint ID; | |
+ | |
+ *AICode=*Code=C_NONE; | |
+ pt=Msg; | |
+ buf=GetNextWord(&pt,NULL); | |
+ if (From) { | |
+ if (HaveAbility(Play,A_PLAYERID)) { | |
+ if (buf[0]) { | |
+ ID=atoi(buf); | |
+ *From=GetPlayerByID(ID,First); | |
+ } else *From=&Noone; | |
+ } else { | |
+ *From=GetPlayerByName(buf,First); | |
+ } | |
+ if (!(*From)) return -1; | |
+ } | |
- *Data=NULL; | |
- split=g_strsplit(Msg,"^",2); | |
- if (split[0]) { | |
- tmp=GetPlayerByName(split[0],First); | |
- if (tmp && split[1]) { | |
- *From=tmp; | |
- tmp=GetPlayerByName(split[1],First); | |
- if (tmp && split[2]) { | |
- *To=tmp; | |
- *AICode=split[2][0]; | |
- *Code=split[2][1]; | |
- *Data=g_strdup(split[2]+2); | |
- g_strfreev(split); | |
- return 0; | |
- } | |
+ buf=GetNextWord(&pt,NULL); | |
+ if (To) { | |
+ if (HaveAbility(Play,A_PLAYERID)) { | |
+ if (buf[0]) { | |
+ ID=atoi(buf); | |
+ *To=GetPlayerByID(ID,First); | |
+ } else *To=&Noone; | |
+ } else { | |
+ *To=GetPlayerByName(buf,First); | |
} | |
+ if (!(*To)) return -1; | |
+ } | |
+ | |
+ if (strlen(pt)>=2) { | |
+ *AICode=pt[0]; | |
+ *Code=pt[1]; | |
+ *Data=&pt[2]; | |
+ return 0; | |
} | |
- g_strfreev(split); | |
return -1; | |
} | |
t@@ -707,20 +736,23 @@ void ReceiveDrugsHere(char *text,Player *To) { | |
} | |
gboolean HandleGenericClientMessage(Player *From,char AICode,char Code, | |
- Player *To,char *Data,char *DisplayMode) { | |
+ Player *To,char *Data,char *DisplayMode) { | |
/* Handles messages that both human clients and AI players deal with in the */ | |
/* same way. */ | |
Player *tmp; | |
+ gchar *pt; | |
switch(Code) { | |
case C_LIST: case C_JOIN: | |
tmp=g_new(Player,1); | |
FirstClient=AddPlayer(0,tmp,FirstClient); | |
- SetPlayerName(tmp,Data); | |
+ pt=Data; | |
+ SetPlayerName(tmp,GetNextWord(&pt,NULL)); | |
+ if (HaveAbility(To,A_PLAYERID)) tmp->ID=GetNextInt(&pt,0); | |
break; | |
case C_DATA: | |
ReceiveMiscData(Data); break; | |
case C_INIT: | |
- ReceiveInitialData(Data); break; | |
+ ReceiveInitialData(To,Data); break; | |
case C_ABILITIES: | |
ReceiveAbilities(To,Data); CombineAbilities(To); | |
break; | |
diff --git a/src/message.h b/src/message.h | |
t@@ -122,7 +122,7 @@ void SendPlayerData(Player *To); | |
void SendSpyReport(Player *To,Player *SpiedOn); | |
void ReceivePlayerData(char *text,Player *From); | |
void SendInitialData(Player *To); | |
-void ReceiveInitialData(char *data); | |
+void ReceiveInitialData(Player *Play,char *data); | |
void SendMiscData(Player *To); | |
void ReceiveMiscData(char *Data); | |
gchar *GetNextWord(gchar **Data,gchar *Default); | |
t@@ -133,7 +133,7 @@ char *SetupNetwork(gboolean NonBlocking); | |
char *FinishSetupNetwork(); | |
void ShutdownNetwork(); | |
void SwitchToSinglePlayer(Player *Play); | |
-int ProcessMessage(char *Msg,Player **From,char *AICode,char *Code, | |
+int ProcessMessage(char *Msg,Player *Play,Player **From,char *AICode,char *Cod… | |
Player **To,char **Data,GSList *First); | |
void ReceiveDrugsHere(char *text,Player *To); | |
gboolean HandleGenericClientMessage(Player *From,char AICode,char Code, | |
diff --git a/src/serverside.c b/src/serverside.c | |
t@@ -187,6 +187,18 @@ void HandleServerPlayer(Player *Play) { | |
} | |
} | |
+void SendPlayerDetails(Player *Play,Player *To,char Code) { | |
+/* Sends details (name, ID) about player "Play" to player "To", using */ | |
+/* message code "Code" */ | |
+ GString *text; | |
+ text=g_string_new(GetPlayerName(Play)); | |
+ if (HaveAbility(To,A_PLAYERID)) { | |
+ g_string_sprintfa(text,"^%d",Play->ID); | |
+ } | |
+ SendServerMessage(NULL,C_NONE,Code,To,text->str); | |
+ g_string_free(text,TRUE); | |
+} | |
+ | |
void HandleServerMessage(gchar *buf,Player *Play) { | |
/* Given a message "buf", from player "Play", performs processing and */ | |
/* sends suitable replies. */ | |
t@@ -198,8 +210,8 @@ void HandleServerMessage(gchar *buf,Player *Play) { | |
int i; | |
price_t money; | |
-/* Ignore client's From: field (bin it in tmp) - should always be "Play" */ | |
- if (ProcessMessage(buf,&tmp,&AICode,&Code,&To,&Data,FirstServer)==-1) { | |
+/* Ignore client's From: field - should always be "Play" */ | |
+ if (ProcessMessage(buf,Play,NULL,&AICode,&Code,&To,&Data,FirstServer)==-1) { | |
g_warning("Bad message"); | |
return; | |
} | |
t@@ -237,10 +249,7 @@ void HandleServerMessage(gchar *buf,Player *Play) { | |
SetPlayerName(Play,Data); | |
for (list=FirstServer;list;list=g_slist_next(list)) { | |
pt=(Player *)list->data; | |
- if (pt!=Play) { | |
- SendServerMessage(NULL,C_NONE,C_LIST,Play, | |
- GetPlayerName(pt)); | |
- } | |
+ if (pt!=Play) SendPlayerDetails(pt,Play,C_LIST); | |
} | |
SendServerMessage(NULL,C_NONE,C_ENDLIST,Play,NULL); | |
RegisterWithMetaServer(TRUE,FALSE); | |
t@@ -249,7 +258,10 @@ void HandleServerMessage(gchar *buf,Player *Play) { | |
if (Network) { | |
g_message(_("%s joins the game!"),GetPlayerName(Play)); | |
} | |
- BroadcastToClients(C_NONE,C_JOIN,GetPlayerName(Play),NULL,Play); | |
+ for (list=FirstServer;list;list=g_slist_next(list)) { | |
+ pt=(Player *)list->data; | |
+ if (pt!=Play) SendPlayerDetails(Play,pt,C_JOIN); | |
+ } | |
Play->EventNum=E_ARRIVE; | |
SendPlayerData(Play); | |
SendEvent(Play); | |
t@@ -398,7 +410,6 @@ void HandleServerMessage(gchar *buf,Player *Play) { | |
GetPlayerName(To),Data); | |
break; | |
} | |
- g_free(Data); | |
} | |
void ClientLeftServer(Player *Play) { | |
diff --git a/src/win32_client.c b/src/win32_client.c | |
t@@ -241,8 +241,8 @@ static void HandleClientMessage(char *pt,Player *Play) { | |
gchar *text; | |
LRESULT Answer; | |
GSList *list; | |
-/* Ignore server's To: field (bin it in tmp); use "Play" instead */ | |
- if (ProcessMessage(pt,&From,&AICode,&Code,&tmp,&Data,FirstClient)==-1) { | |
+/* Ignore server's To: field; use "Play" instead */ | |
+ if (ProcessMessage(pt,Play,&From,&AICode,&Code,NULL,&Data,FirstClient)==-1)… | |
return; | |
} | |
Handled=HandleGenericClientMessage(From,AICode,Code,Play,Data,&DisplayMode); |