Migrate more strings

FossilOrigin-Name: fa4b03aacafc3bab0a52c144241ab665332f7e8e789eb17fff63f76e02e2d5c9
This commit is contained in:
Jonathan Schleifer 2025-03-08 00:48:42 +00:00
parent daeb76f126
commit 745514762e
15 changed files with 154 additions and 134 deletions

View file

@ -90,8 +90,7 @@ VARP(minmillis, 0, 5, 1000);
initclient(); initclient();
// never returns if dedicated // never returns if dedicated
initserver(dedicated, uprate, sdesc.UTF8String, ip.UTF8String, initserver(dedicated, uprate, sdesc, ip, master, passwd, maxcl);
master.UTF8String, passwd, maxcl);
log(@"world"); log(@"world");
empty_world(7, true); empty_world(7, true);

View file

@ -293,7 +293,7 @@ c2sinfo(dynent *d) // send update to the server
// update // update
packet->flags = ENET_PACKET_FLAG_RELIABLE; packet->flags = ENET_PACKET_FLAG_RELIABLE;
putint(p, SV_MAPCHANGE); putint(p, SV_MAPCHANGE);
sendstring(toservermap.UTF8String, p); sendstring(toservermap, p);
toservermap = @""; toservermap = @"";
putint(p, nextmode); putint(p, nextmode);
} else { } else {
@ -334,7 +334,7 @@ c2sinfo(dynent *d) // send update to the server
{ {
packet->flags = ENET_PACKET_FLAG_RELIABLE; packet->flags = ENET_PACKET_FLAG_RELIABLE;
putint(p, SV_TEXT); putint(p, SV_TEXT);
sendstring(ctext, p); sendstring(@(ctext), p);
ctext[0] = 0; ctext[0] = 0;
} }
if (!c2sinit) // tell other clients who I am if (!c2sinit) // tell other clients who I am
@ -342,8 +342,8 @@ c2sinfo(dynent *d) // send update to the server
packet->flags = ENET_PACKET_FLAG_RELIABLE; packet->flags = ENET_PACKET_FLAG_RELIABLE;
c2sinit = true; c2sinit = true;
putint(p, SV_INITC2S); putint(p, SV_INITC2S);
sendstring(player1->name, p); sendstring(@(player1->name), p);
sendstring(player1->team, p); sendstring(@(player1->team), p);
putint(p, player1->lifesequence); putint(p, player1->lifesequence);
} }
for (OFData *msg in messages) { for (OFData *msg in messages) {

View file

@ -191,7 +191,7 @@ sendmap(OFString *mapname)
uchar *start = packet->data; uchar *start = packet->data;
uchar *p = start + 2; uchar *p = start + 2;
putint(p, SV_SENDMAP); putint(p, SV_SENDMAP);
sendstring(mapname.UTF8String, p); sendstring(mapname, p);
putint(p, mapdata.count); putint(p, mapdata.count);
if (65535 - (p - start) < mapdata.count) { if (65535 - (p - start) < mapdata.count) {
conoutf(@"map %@ is too large to send", mapname); conoutf(@"map %@ is too large to send", mapname);

View file

@ -510,7 +510,7 @@ startmap(OFString *name) // called just after a map load
showscores(false); showscores(false);
intermission = false; intermission = false;
Cube.sharedInstance.framesInMap = 0; Cube.sharedInstance.framesInMap = 0;
conoutf(@"game mode is %s", modestr(gamemode)); conoutf(@"game mode is %@", modestr(gamemode));
} }
COMMANDN(map, changemap, ARG_1STR) COMMANDN(map, changemap, ARG_1STR)

View file

@ -15,12 +15,10 @@ neterr(OFString *s)
} }
void void
changemapserv(char *name, int mode) // forced map change from the server changemapserv(OFString *name, int mode) // forced map change from the server
{ {
gamemode = mode; gamemode = mode;
@autoreleasepool { load_world(name);
load_world(@(name));
}
} }
void void
@ -100,7 +98,7 @@ localservertoclient(
if (getint(p) == 1) if (getint(p) == 1)
conoutf(@"server is FULL, disconnecting.."); conoutf(@"server is FULL, disconnecting..");
break; break;
}; }
case SV_POS: // position of another client case SV_POS: // position of another client
{ {
@ -129,7 +127,7 @@ localservertoclient(
if (!demoplayback) if (!demoplayback)
updatepos(d); updatepos(d);
break; break;
}; }
case SV_SOUND: case SV_SOUND:
playsound(getint(p), &d->o); playsound(getint(p), &d->o);
@ -142,7 +140,9 @@ localservertoclient(
case SV_MAPCHANGE: case SV_MAPCHANGE:
sgetstr(); sgetstr();
changemapserv(text, getint(p)); @autoreleasepool {
changemapserv(@(text), getint(p));
}
mapchanged = true; mapchanged = true;
break; break;
@ -151,7 +151,7 @@ localservertoclient(
if (mapchanged) { if (mapchanged) {
senditemstoserver = false; senditemstoserver = false;
resetspawns(); resetspawns();
}; }
while ((n = getint(p)) != -1) while ((n = getint(p)) != -1)
if (mapchanged) if (mapchanged)
setspawn(n, true); setspawn(n, true);
@ -367,10 +367,11 @@ localservertoclient(
text); text);
int mapsize = getint(p); int mapsize = getint(p);
@autoreleasepool { @autoreleasepool {
writemap(@(text), mapsize, p); OFString *string = @(text);
writemap(string, mapsize, p);
p += mapsize;
changemapserv(string, gamemode);
} }
p += mapsize;
changemapserv(text, gamemode);
break; break;
} }

View file

@ -345,17 +345,12 @@ bool
execfile(OFString *cfgfile) execfile(OFString *cfgfile)
{ {
@autoreleasepool { @autoreleasepool {
OFMutableData *data;
@try { @try {
data = [OFMutableData dataWithContentsOfFile:cfgfile]; execute([OFString stringWithContentsOfFile:cfgfile]);
} @catch (id e) { } @catch (id e) {
return false; return false;
} }
// Ensure \0 termination.
[data addItem:""];
execute(@((char *)data.mutableItems));
return true; return true;
} }
} }

View file

@ -156,7 +156,7 @@ menukey(int code, bool isdown)
OFString *action = menus[vmenu].items[menusel].action; OFString *action = menus[vmenu].items[menusel].action;
if (vmenu == 1) { if (vmenu == 1) {
@autoreleasepool { @autoreleasepool {
connects(@(getservername(menusel))); connects(getservername(menusel));
} }
} }

View file

@ -37,7 +37,7 @@ extern void newmenu(OFString *name);
// serverbrowser // serverbrowser
extern void addserver(OFString *servername); extern void addserver(OFString *servername);
extern char *getservername(int n); extern OFString *getservername(int n);
extern void writeservercfg(); extern void writeservercfg();
// rendergl // rendergl
@ -82,7 +82,7 @@ extern void neterr(OFString *s);
extern void initclientnet(); extern void initclientnet();
extern bool netmapstart(); extern bool netmapstart();
extern int getclientnum(); extern int getclientnum();
extern void changemapserv(char *name, int mode); extern void changemapserv(OFString *name, int mode);
extern void writeclientinfo(OFStream *stream); extern void writeclientinfo(OFStream *stream);
// clientgame // clientgame
@ -95,7 +95,7 @@ extern void spawnplayer(dynent *d);
extern void selfdamage(int damage, int actor, dynent *act); extern void selfdamage(int damage, int actor, dynent *act);
extern dynent *newdynent(); extern dynent *newdynent();
extern OFString *getclientmap(); extern OFString *getclientmap();
extern const char *modestr(int n); extern OFString *modestr(int n);
extern void zapdynent(dynent *&d); extern void zapdynent(dynent *&d);
extern dynent *getclient(int cn); extern dynent *getclient(int cn);
extern void timeupdate(int timeremain); extern void timeupdate(int timeremain);
@ -215,8 +215,8 @@ extern void rendermodel(OFString *mdl, int frame, int range, int tex, float rad,
extern MapModelInfo *getmminfo(int i); extern MapModelInfo *getmminfo(int i);
// server // server
extern void initserver(bool dedicated, int uprate, const char *sdesc, extern void initserver(bool dedicated, int uprate, OFString *sdesc,
const char *ip, const char *master, OFString *passwd, int maxcl); OFString *ip, OFString *master, OFString *passwd, int maxcl);
extern void cleanupserver(); extern void cleanupserver();
extern void localconnect(); extern void localconnect();
extern void localdisconnect(); extern void localdisconnect();
@ -224,15 +224,15 @@ extern void localclienttoserver(struct _ENetPacket *);
extern void serverslice(int seconds, unsigned int timeout); extern void serverslice(int seconds, unsigned int timeout);
extern void putint(uchar *&p, int n); extern void putint(uchar *&p, int n);
extern int getint(uchar *&p); extern int getint(uchar *&p);
extern void sendstring(const char *t, uchar *&p); extern void sendstring(OFString *t, uchar *&p);
extern void startintermission(); extern void startintermission();
extern void restoreserverstate(vector<entity> &ents); extern void restoreserverstate(vector<entity> &ents);
extern uchar *retrieveservers(uchar *buf, int buflen); extern uchar *retrieveservers(uchar *buf, int buflen);
extern char msgsizelookup(int msg); extern char msgsizelookup(int msg);
extern void serverms(int mode, int numplayers, int minremain, char *smapname, extern void serverms(int mode, int numplayers, int minremain,
int seconds, bool isfull); OFString *smapname, int seconds, bool isfull);
extern void servermsinit(const char *master, const char *sdesc, bool listen); extern void servermsinit(OFString *master, OFString *sdesc, bool listen);
extern void sendmaps(int n, string mapname, int mapsize, uchar *mapdata); extern void sendmaps(int n, OFString *mapname, int mapsize, uchar *mapdata);
extern ENetPacket *recvmap(int n); extern ENetPacket *recvmap(int n);
// weapon // weapon
@ -243,7 +243,7 @@ extern void shootv(int gun, OFVector3D &from, OFVector3D &to, dynent *d = 0,
extern void createrays(OFVector3D &from, OFVector3D &to); extern void createrays(OFVector3D &from, OFVector3D &to);
extern void moveprojectiles(float time); extern void moveprojectiles(float time);
extern void projreset(); extern void projreset();
extern char *playerincrosshair(); extern OFString *playerincrosshair();
extern int reloadtime(int gun); extern int reloadtime(int gun);
// monster // monster

View file

@ -367,14 +367,14 @@ gl_drawhud(int w, int h, int curfps, int nquads, int curvert, bool underwater)
@autoreleasepool { @autoreleasepool {
OFString *command = getcurcommand(); OFString *command = getcurcommand();
char *player = playerincrosshair(); OFString *player = playerincrosshair();
if (command) if (command)
draw_textf(@"> %@_", 20, 1570, 2, command); draw_textf(@"> %@_", 20, 1570, 2, command);
else if (closeent[0]) else if (closeent[0])
draw_text(@(closeent), 20, 1570, 2); draw_text(@(closeent), 20, 1570, 2);
else if (player) else if (player != nil)
draw_text(@(player), 20, 1570, 2); draw_text(player, 20, 1570, 2);
} }
renderscores(); renderscores();

View file

@ -18,7 +18,7 @@ struct client // server side version of "dynent" type
vector<client> clients; vector<client> clients;
int maxclients = 8; int maxclients = 8;
string smapname; static OFString *smapname;
struct server_entity // server side version of "entity" type struct server_entity // server side version of "entity" type
{ {
@ -96,7 +96,7 @@ send2(bool rel, int cn, int a, int b)
}; };
void void
sendservmsg(char *msg) sendservmsg(OFString *msg)
{ {
ENetPacket *packet = enet_packet_create( ENetPacket *packet = enet_packet_create(
NULL, _MAXDEFSTR + 10, ENET_PACKET_FLAG_RELIABLE); NULL, _MAXDEFSTR + 10, ENET_PACKET_FLAG_RELIABLE);
@ -109,7 +109,7 @@ sendservmsg(char *msg)
multicast(packet, -1); multicast(packet, -1);
if (packet->referenceCount == 0) if (packet->referenceCount == 0)
enet_packet_destroy(packet); enet_packet_destroy(packet);
}; }
void void
disconnect_client(int n, char *reason) disconnect_client(int n, char *reason)
@ -165,12 +165,16 @@ vote(char *map, int reqmode, int sender)
}; };
if (yes == 1 && no == 0) if (yes == 1 && no == 0)
return true; // single player return true; // single player
sprintf_sd(msg)("%s suggests %s on map %s (set map to vote)", @autoreleasepool {
clients[sender].name, modestr(reqmode), map); OFString *msg =
sendservmsg(msg); [OFString stringWithFormat:
@"%s suggests %@ on map %s (set map to vote)",
clients[sender].name, modestr(reqmode), map];
sendservmsg(msg);
}
if (yes / (float)(yes + no) <= 0.5f) if (yes / (float)(yes + no) <= 0.5f)
return false; return false;
sendservmsg("vote passed"); sendservmsg(@"vote passed");
resetvotes(); resetvotes();
return true; return true;
}; };
@ -211,7 +215,7 @@ process(ENetPacket *packet, int sender) // sender may be -1
int reqmode = getint(p); int reqmode = getint(p);
if (reqmode < 0) if (reqmode < 0)
reqmode = 0; reqmode = 0;
if (smapname[0] && !mapreload && if (smapname.length > 0 && !mapreload &&
!vote(text, reqmode, sender)) !vote(text, reqmode, sender))
return; return;
mapreload = false; mapreload = false;
@ -219,11 +223,13 @@ process(ENetPacket *packet, int sender) // sender may be -1
minremain = mode & 1 ? 15 : 10; minremain = mode & 1 ? 15 : 10;
mapend = lastsec + minremain * 60; mapend = lastsec + minremain * 60;
interm = 0; interm = 0;
strcpy_s(smapname, text); @autoreleasepool {
smapname = @(text);
}
resetitems(); resetitems();
sender = -1; sender = -1;
break; break;
}; }
case SV_ITEMLIST: { case SV_ITEMLIST: {
int n; int n;
@ -236,13 +242,13 @@ process(ENetPacket *packet, int sender) // sender may be -1
}; };
notgotitems = false; notgotitems = false;
break; break;
}; }
case SV_ITEMPICKUP: { case SV_ITEMPICKUP: {
int n = getint(p); int n = getint(p);
pickup(n, getint(p), sender); pickup(n, getint(p), sender);
break; break;
}; }
case SV_PING: case SV_PING:
send2(false, cn, SV_PONG, getint(p)); send2(false, cn, SV_PONG, getint(p));
@ -259,12 +265,14 @@ process(ENetPacket *packet, int sender) // sender may be -1
assert(size != -1); assert(size != -1);
loopi(size - 2) getint(p); loopi(size - 2) getint(p);
break; break;
}; }
case SV_SENDMAP: { case SV_SENDMAP: {
sgetstr(); sgetstr();
int mapsize = getint(p); int mapsize = getint(p);
sendmaps(sender, text, mapsize, p); @autoreleasepool {
sendmaps(sender, @(text), mapsize, p);
}
return; return;
} }
@ -307,21 +315,23 @@ send_welcome(int n)
putint(p, SV_INITS2C); putint(p, SV_INITS2C);
putint(p, n); putint(p, n);
putint(p, PROTOCOL_VERSION); putint(p, PROTOCOL_VERSION);
putint(p, smapname[0]); @autoreleasepool {
sendstring(serverpassword.UTF8String, p); putint(p, *smapname.UTF8String);
}
sendstring(serverpassword, p);
putint(p, clients.length() > maxclients); putint(p, clients.length() > maxclients);
if (smapname[0]) { if (smapname.length > 0) {
putint(p, SV_MAPCHANGE); putint(p, SV_MAPCHANGE);
sendstring(smapname, p); sendstring(smapname, p);
putint(p, mode); putint(p, mode);
putint(p, SV_ITEMLIST); putint(p, SV_ITEMLIST);
loopv(sents) if (sents[i].spawned) putint(p, i); loopv(sents) if (sents[i].spawned) putint(p, i);
putint(p, -1); putint(p, -1);
}; }
*(ushort *)start = ENET_HOST_TO_NET_16(p - start); *(ushort *)start = ENET_HOST_TO_NET_16(p - start);
enet_packet_resize(packet, p - start); enet_packet_resize(packet, p - start);
send(n, packet); send(n, packet);
}; }
void void
multicast(ENetPacket *packet, int sender) multicast(ENetPacket *packet, int sender)
@ -371,7 +381,7 @@ resetserverifempty()
{ {
loopv(clients) if (clients[i].type != ST_EMPTY) return; loopv(clients) if (clients[i].type != ST_EMPTY) return;
clients.setsize(0); clients.setsize(0);
smapname[0] = 0; smapname = @"";
resetvotes(); resetvotes();
resetitems(); resetitems();
mode = 0; mode = 0;
@ -379,7 +389,7 @@ resetserverifempty()
minremain = 10; minremain = 10;
mapend = lastsec + minremain * 60; mapend = lastsec + minremain * 60;
interm = 0; interm = 0;
}; }
int nonlocalclients = 0; int nonlocalclients = 0;
int lastconnect = 0; int lastconnect = 0;
@ -509,18 +519,21 @@ localconnect()
}; };
void void
initserver(bool dedicated, int uprate, const char *sdesc, const char *ip, initserver(bool dedicated, int uprate, OFString *sdesc, OFString *ip,
const char *master, OFString *passwd, int maxcl) OFString *master, OFString *passwd, int maxcl)
{ {
serverpassword = passwd; serverpassword = passwd;
maxclients = maxcl; maxclients = maxcl;
servermsinit(master ? master : "wouter.fov120.com/cube/masterserver/", servermsinit(master ? master : @"wouter.fov120.com/cube/masterserver/",
sdesc, dedicated); sdesc, dedicated);
if (isdedicated = dedicated) { if (isdedicated = dedicated) {
ENetAddress address = {ENET_HOST_ANY, CUBE_SERVER_PORT}; ENetAddress address = {ENET_HOST_ANY, CUBE_SERVER_PORT};
if (*ip && enet_address_set_host(&address, ip) < 0) @autoreleasepool {
printf("WARNING: server ip not resolved"); if (ip.length > 0 &&
enet_address_set_host(&address, ip.UTF8String) < 0)
printf("WARNING: server ip not resolved");
}
serverhost = enet_host_create(&address, MAXCLIENTS, 0, uprate); serverhost = enet_host_create(&address, MAXCLIENTS, 0, uprate);
if (!serverhost) if (!serverhost)
fatal(@"could not create server host\n"); fatal(@"could not create server host\n");

View file

@ -145,10 +145,12 @@ vector<serverinfo> servers;
ENetSocket pingsock = ENET_SOCKET_NULL; ENetSocket pingsock = ENET_SOCKET_NULL;
int lastinfo = 0; int lastinfo = 0;
char * OFString *
getservername(int n) getservername(int n)
{ {
return servers[n].name; @autoreleasepool {
return @(servers[n].name);
}
} }
void void
@ -272,11 +274,16 @@ refreshservers()
if (si.protocol != PROTOCOL_VERSION) if (si.protocol != PROTOCOL_VERSION)
sprintf_s(si.full)( sprintf_s(si.full)(
"%s [different cube protocol]", si.name); "%s [different cube protocol]", si.name);
else else {
sprintf_s(si.full)("%d\t%d\t%s, %s: %s %s", @autoreleasepool {
si.ping, si.numplayers, sprintf_s(si.full)(
si.map[0] ? si.map : "[unknown]", "%d\t%d\t%s, %s: %s %s", si.ping,
modestr(si.mode), si.name, si.sdesc); si.numplayers,
si.map[0] ? si.map : "[unknown]",
modestr(si.mode).UTF8String,
si.name, si.sdesc);
}
}
} else { } else {
sprintf_s(si.full)( sprintf_s(si.full)(
si.address.host != ENET_HOST_ANY si.address.host != ENET_HOST_ANY

View file

@ -12,18 +12,18 @@ httpgetsend(ENetAddress &ad, char *hostname, char *req, char *ref, char *agent)
enet_address_set_host(&ad, hostname); enet_address_set_host(&ad, hostname);
if (ad.host == ENET_HOST_ANY) if (ad.host == ENET_HOST_ANY)
return; return;
}; }
if (mssock != ENET_SOCKET_NULL) if (mssock != ENET_SOCKET_NULL)
enet_socket_destroy(mssock); enet_socket_destroy(mssock);
mssock = enet_socket_create(ENET_SOCKET_TYPE_STREAM, NULL); mssock = enet_socket_create(ENET_SOCKET_TYPE_STREAM, NULL);
if (mssock == ENET_SOCKET_NULL) { if (mssock == ENET_SOCKET_NULL) {
printf("could not open socket\n"); printf("could not open socket\n");
return; return;
}; }
if (enet_socket_connect(mssock, &ad) < 0) { if (enet_socket_connect(mssock, &ad) < 0) {
printf("could not connect\n"); printf("could not connect\n");
return; return;
}; }
ENetBuffer buf; ENetBuffer buf;
sprintf_sd(httpget)( sprintf_sd(httpget)(
"GET %s HTTP/1.0\nHost: %s\nReferer: %s\nUser-Agent: %s\n\n", req, "GET %s HTTP/1.0\nHost: %s\nReferer: %s\nUser-Agent: %s\n\n", req,
@ -32,7 +32,7 @@ httpgetsend(ENetAddress &ad, char *hostname, char *req, char *ref, char *agent)
buf.dataLength = strlen((char *)buf.data); buf.dataLength = strlen((char *)buf.data);
printf("sending request to %s...\n", hostname); printf("sending request to %s...\n", hostname);
enet_socket_send(mssock, NULL, &buf, 1); enet_socket_send(mssock, NULL, &buf, 1);
}; }
void void
httpgetrecieve(ENetBuffer &buf) httpgetrecieve(ENetBuffer &buf)
@ -110,11 +110,11 @@ retrieveservers(uchar *buf, int buflen)
}; };
ENetSocket pongsock = ENET_SOCKET_NULL; ENetSocket pongsock = ENET_SOCKET_NULL;
string serverdesc; static OFString *serverdesc;
void void
serverms(int mode, int numplayers, int minremain, char *smapname, int seconds, serverms(int mode, int numplayers, int minremain, OFString *smapname,
bool isfull) int seconds, bool isfull)
{ {
checkmasterreply(); checkmasterreply();
updatemasterserver(seconds); updatemasterserver(seconds);
@ -136,9 +136,9 @@ serverms(int mode, int numplayers, int minremain, char *smapname, int seconds,
putint(p, mode); putint(p, mode);
putint(p, numplayers); putint(p, numplayers);
putint(p, minremain); putint(p, minremain);
string mname; OFString *mname =
strcpy_s(mname, isfull ? "[FULL] " : ""); [OFString stringWithFormat:@"%@%@",
strcat_s(mname, smapname); (isfull ? @"[FULL] " : @""), smapname];
sendstring(mname, p); sendstring(mname, p);
sendstring(serverdesc, p); sendstring(serverdesc, p);
buf.dataLength = p - pong; buf.dataLength = p - pong;
@ -147,20 +147,24 @@ serverms(int mode, int numplayers, int minremain, char *smapname, int seconds,
} }
void void
servermsinit(const char *master, const char *sdesc, bool listen) servermsinit(OFString *master_, OFString *sdesc, bool listen)
{ {
const char *mid = strstr(master, "/"); @autoreleasepool {
if (!mid) const char *master = master_.UTF8String;
mid = master; const char *mid = strstr(master, "/");
strcpy_s(masterpath, mid); if (!mid)
strn0cpy(masterbase, master, mid - master + 1); mid = master;
strcpy_s(serverdesc, sdesc); strcpy_s(masterpath, mid);
strn0cpy(masterbase, master, mid - master + 1);
serverdesc = sdesc;
if (listen) { if (listen) {
ENetAddress address = {ENET_HOST_ANY, CUBE_SERVINFO_PORT}; ENetAddress address = {
pongsock = ENET_HOST_ANY, CUBE_SERVINFO_PORT};
enet_socket_create(ENET_SOCKET_TYPE_DATAGRAM, &address); pongsock = enet_socket_create(
if (pongsock == ENET_SOCKET_NULL) ENET_SOCKET_TYPE_DATAGRAM, &address);
fatal(@"could not create server info socket\n"); if (pongsock == ENET_SOCKET_NULL)
fatal(@"could not create server info socket\n");
}
} }
} }

View file

@ -40,38 +40,41 @@ getint(uchar *&p)
return n | (*p++ << 24); return n | (*p++ << 24);
} else } else
return c; return c;
}; }
void void
sendstring(const char *t, uchar *&p) sendstring(OFString *t_, uchar *&p)
{ {
while (*t) @autoreleasepool {
putint(p, *t++); const char *t = t_.UTF8String;
putint(p, 0); while (*t)
putint(p, *t++);
putint(p, 0);
}
}
static const OFString *modenames[] = {
@"SP",
@"DMSP",
@"ffa/default",
@"coopedit",
@"ffa/duel",
@"teamplay",
@"instagib",
@"instagib team",
@"efficiency",
@"efficiency team",
@"insta arena",
@"insta clan arena",
@"tactics arena",
@"tactics clan arena",
}; };
const char *modenames[] = { OFString *
"SP",
"DMSP",
"ffa/default",
"coopedit",
"ffa/duel",
"teamplay",
"instagib",
"instagib team",
"efficiency",
"efficiency team",
"insta arena",
"insta clan arena",
"tactics arena",
"tactics clan arena",
};
const char *
modestr(int n) modestr(int n)
{ {
return (n >= -2 && n < 12) ? modenames[n + 2] : "unknown"; return (n >= -2 && n < 12) ? modenames[n + 2] : @"unknown";
}; }
char msgsizesl[] = // size inclusive message token, 0 for variable or char msgsizesl[] = // size inclusive message token, 0 for variable or
// not-checked sizes // not-checked sizes
@ -94,16 +97,16 @@ msgsizelookup(int msg)
// sending of maps between clients // sending of maps between clients
string copyname; static OFString *copyname;
int copysize; int copysize;
uchar *copydata = NULL; uchar *copydata = NULL;
void void
sendmaps(int n, string mapname, int mapsize, uchar *mapdata) sendmaps(int n, OFString *mapname, int mapsize, uchar *mapdata)
{ {
if (mapsize <= 0 || mapsize > 256 * 256) if (mapsize <= 0 || mapsize > 256 * 256)
return; return;
strcpy_s(copyname, mapname); copyname = mapname;
copysize = mapsize; copysize = mapsize;
if (copydata) if (copydata)
free(copydata); free(copydata);
@ -189,7 +192,7 @@ main(int argc, char *argv[])
if (enet_initialize() < 0) if (enet_initialize() < 0)
fatal(@"Unable to initialise network module"); fatal(@"Unable to initialise network module");
initserver(true, uprate, sdesc, ip, master, @(passwd), maxcl); initserver(true, uprate, @(sdesc), @(ip), @(master), @(passwd), maxcl);
return 0; return 0;
} }
#endif #endif

View file

@ -48,14 +48,9 @@ typedef unsigned int uint;
#define loopk(m) loop(k, m) #define loopk(m) loop(k, m)
#define loopl(m) loop(l, m) #define loopl(m) loop(l, m)
#ifdef WIN32 #ifndef OF_WINDOWS
# pragma warning(3 : 4189)
// #pragma comment(linker,"/OPT:NOWIN98")
# define PATHDIV '\\'
#else
# define __cdecl # define __cdecl
# define _vsnprintf vsnprintf # define _vsnprintf vsnprintf
# define PATHDIV '/'
#endif #endif
// easy safe strings // easy safe strings

View file

@ -111,7 +111,7 @@ intersect(dynent *d, OFVector3D &from,
p->z <= d->o.z + d->aboveeye && p->z >= d->o.z - d->eyeheight); p->z <= d->o.z + d->aboveeye && p->z >= d->o.z - d->eyeheight);
} }
char * OFString *
playerincrosshair() playerincrosshair()
{ {
if (demoplayback) if (demoplayback)
@ -121,8 +121,11 @@ playerincrosshair()
dynent *o = players[i]; dynent *o = players[i];
if (!o) if (!o)
continue; continue;
if (intersect(o, player1->o, worldpos)) if (intersect(o, player1->o, worldpos)) {
return o->name; @autoreleasepool {
return @(o->name);
}
}
} }
return NULL; return NULL;
} }