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();
// never returns if dedicated
initserver(dedicated, uprate, sdesc.UTF8String, ip.UTF8String,
master.UTF8String, passwd, maxcl);
initserver(dedicated, uprate, sdesc, ip, master, passwd, maxcl);
log(@"world");
empty_world(7, true);

View file

@ -293,7 +293,7 @@ c2sinfo(dynent *d) // send update to the server
// update
packet->flags = ENET_PACKET_FLAG_RELIABLE;
putint(p, SV_MAPCHANGE);
sendstring(toservermap.UTF8String, p);
sendstring(toservermap, p);
toservermap = @"";
putint(p, nextmode);
} else {
@ -334,7 +334,7 @@ c2sinfo(dynent *d) // send update to the server
{
packet->flags = ENET_PACKET_FLAG_RELIABLE;
putint(p, SV_TEXT);
sendstring(ctext, p);
sendstring(@(ctext), p);
ctext[0] = 0;
}
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;
c2sinit = true;
putint(p, SV_INITC2S);
sendstring(player1->name, p);
sendstring(player1->team, p);
sendstring(@(player1->name), p);
sendstring(@(player1->team), p);
putint(p, player1->lifesequence);
}
for (OFData *msg in messages) {

View file

@ -191,7 +191,7 @@ sendmap(OFString *mapname)
uchar *start = packet->data;
uchar *p = start + 2;
putint(p, SV_SENDMAP);
sendstring(mapname.UTF8String, p);
sendstring(mapname, p);
putint(p, mapdata.count);
if (65535 - (p - start) < mapdata.count) {
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);
intermission = false;
Cube.sharedInstance.framesInMap = 0;
conoutf(@"game mode is %s", modestr(gamemode));
conoutf(@"game mode is %@", modestr(gamemode));
}
COMMANDN(map, changemap, ARG_1STR)

View file

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

View file

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

View file

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

View file

@ -37,7 +37,7 @@ extern void newmenu(OFString *name);
// serverbrowser
extern void addserver(OFString *servername);
extern char *getservername(int n);
extern OFString *getservername(int n);
extern void writeservercfg();
// rendergl
@ -82,7 +82,7 @@ extern void neterr(OFString *s);
extern void initclientnet();
extern bool netmapstart();
extern int getclientnum();
extern void changemapserv(char *name, int mode);
extern void changemapserv(OFString *name, int mode);
extern void writeclientinfo(OFStream *stream);
// clientgame
@ -95,7 +95,7 @@ extern void spawnplayer(dynent *d);
extern void selfdamage(int damage, int actor, dynent *act);
extern dynent *newdynent();
extern OFString *getclientmap();
extern const char *modestr(int n);
extern OFString *modestr(int n);
extern void zapdynent(dynent *&d);
extern dynent *getclient(int cn);
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);
// server
extern void initserver(bool dedicated, int uprate, const char *sdesc,
const char *ip, const char *master, OFString *passwd, int maxcl);
extern void initserver(bool dedicated, int uprate, OFString *sdesc,
OFString *ip, OFString *master, OFString *passwd, int maxcl);
extern void cleanupserver();
extern void localconnect();
extern void localdisconnect();
@ -224,15 +224,15 @@ extern void localclienttoserver(struct _ENetPacket *);
extern void serverslice(int seconds, unsigned int timeout);
extern void putint(uchar *&p, int n);
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 restoreserverstate(vector<entity> &ents);
extern uchar *retrieveservers(uchar *buf, int buflen);
extern char msgsizelookup(int msg);
extern void serverms(int mode, int numplayers, int minremain, char *smapname,
int seconds, bool isfull);
extern void servermsinit(const char *master, const char *sdesc, bool listen);
extern void sendmaps(int n, string mapname, int mapsize, uchar *mapdata);
extern void serverms(int mode, int numplayers, int minremain,
OFString *smapname, int seconds, bool isfull);
extern void servermsinit(OFString *master, OFString *sdesc, bool listen);
extern void sendmaps(int n, OFString *mapname, int mapsize, uchar *mapdata);
extern ENetPacket *recvmap(int n);
// 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 moveprojectiles(float time);
extern void projreset();
extern char *playerincrosshair();
extern OFString *playerincrosshair();
extern int reloadtime(int gun);
// monster

View file

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

View file

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

View file

@ -145,10 +145,12 @@ vector<serverinfo> servers;
ENetSocket pingsock = ENET_SOCKET_NULL;
int lastinfo = 0;
char *
OFString *
getservername(int n)
{
return servers[n].name;
@autoreleasepool {
return @(servers[n].name);
}
}
void
@ -272,11 +274,16 @@ refreshservers()
if (si.protocol != PROTOCOL_VERSION)
sprintf_s(si.full)(
"%s [different cube protocol]", si.name);
else
sprintf_s(si.full)("%d\t%d\t%s, %s: %s %s",
si.ping, si.numplayers,
si.map[0] ? si.map : "[unknown]",
modestr(si.mode), si.name, si.sdesc);
else {
@autoreleasepool {
sprintf_s(si.full)(
"%d\t%d\t%s, %s: %s %s", si.ping,
si.numplayers,
si.map[0] ? si.map : "[unknown]",
modestr(si.mode).UTF8String,
si.name, si.sdesc);
}
}
} else {
sprintf_s(si.full)(
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);
if (ad.host == ENET_HOST_ANY)
return;
};
}
if (mssock != ENET_SOCKET_NULL)
enet_socket_destroy(mssock);
mssock = enet_socket_create(ENET_SOCKET_TYPE_STREAM, NULL);
if (mssock == ENET_SOCKET_NULL) {
printf("could not open socket\n");
return;
};
}
if (enet_socket_connect(mssock, &ad) < 0) {
printf("could not connect\n");
return;
};
}
ENetBuffer buf;
sprintf_sd(httpget)(
"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);
printf("sending request to %s...\n", hostname);
enet_socket_send(mssock, NULL, &buf, 1);
};
}
void
httpgetrecieve(ENetBuffer &buf)
@ -110,11 +110,11 @@ retrieveservers(uchar *buf, int buflen)
};
ENetSocket pongsock = ENET_SOCKET_NULL;
string serverdesc;
static OFString *serverdesc;
void
serverms(int mode, int numplayers, int minremain, char *smapname, int seconds,
bool isfull)
serverms(int mode, int numplayers, int minremain, OFString *smapname,
int seconds, bool isfull)
{
checkmasterreply();
updatemasterserver(seconds);
@ -136,9 +136,9 @@ serverms(int mode, int numplayers, int minremain, char *smapname, int seconds,
putint(p, mode);
putint(p, numplayers);
putint(p, minremain);
string mname;
strcpy_s(mname, isfull ? "[FULL] " : "");
strcat_s(mname, smapname);
OFString *mname =
[OFString stringWithFormat:@"%@%@",
(isfull ? @"[FULL] " : @""), smapname];
sendstring(mname, p);
sendstring(serverdesc, p);
buf.dataLength = p - pong;
@ -147,20 +147,24 @@ serverms(int mode, int numplayers, int minremain, char *smapname, int seconds,
}
void
servermsinit(const char *master, const char *sdesc, bool listen)
servermsinit(OFString *master_, OFString *sdesc, bool listen)
{
const char *mid = strstr(master, "/");
if (!mid)
mid = master;
strcpy_s(masterpath, mid);
strn0cpy(masterbase, master, mid - master + 1);
strcpy_s(serverdesc, sdesc);
@autoreleasepool {
const char *master = master_.UTF8String;
const char *mid = strstr(master, "/");
if (!mid)
mid = master;
strcpy_s(masterpath, mid);
strn0cpy(masterbase, master, mid - master + 1);
serverdesc = sdesc;
if (listen) {
ENetAddress address = {ENET_HOST_ANY, CUBE_SERVINFO_PORT};
pongsock =
enet_socket_create(ENET_SOCKET_TYPE_DATAGRAM, &address);
if (pongsock == ENET_SOCKET_NULL)
fatal(@"could not create server info socket\n");
if (listen) {
ENetAddress address = {
ENET_HOST_ANY, CUBE_SERVINFO_PORT};
pongsock = enet_socket_create(
ENET_SOCKET_TYPE_DATAGRAM, &address);
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);
} else
return c;
};
}
void
sendstring(const char *t, uchar *&p)
sendstring(OFString *t_, uchar *&p)
{
while (*t)
putint(p, *t++);
putint(p, 0);
@autoreleasepool {
const char *t = t_.UTF8String;
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[] = {
"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 *
OFString *
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
// not-checked sizes
@ -94,16 +97,16 @@ msgsizelookup(int msg)
// sending of maps between clients
string copyname;
static OFString *copyname;
int copysize;
uchar *copydata = NULL;
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)
return;
strcpy_s(copyname, mapname);
copyname = mapname;
copysize = mapsize;
if (copydata)
free(copydata);
@ -189,7 +192,7 @@ main(int argc, char *argv[])
if (enet_initialize() < 0)
fatal(@"Unable to initialise network module");
initserver(true, uprate, sdesc, ip, master, @(passwd), maxcl);
initserver(true, uprate, @(sdesc), @(ip), @(master), @(passwd), maxcl);
return 0;
}
#endif

View file

@ -48,14 +48,9 @@ typedef unsigned int uint;
#define loopk(m) loop(k, m)
#define loopl(m) loop(l, m)
#ifdef WIN32
# pragma warning(3 : 4189)
// #pragma comment(linker,"/OPT:NOWIN98")
# define PATHDIV '\\'
#else
#ifndef OF_WINDOWS
# define __cdecl
# define _vsnprintf vsnprintf
# define PATHDIV '/'
#endif
// 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);
}
char *
OFString *
playerincrosshair()
{
if (demoplayback)
@ -121,8 +121,11 @@ playerincrosshair()
dynent *o = players[i];
if (!o)
continue;
if (intersect(o, player1->o, worldpos))
return o->name;
if (intersect(o, player1->o, worldpos)) {
@autoreleasepool {
return @(o->name);
}
}
}
return NULL;
}