Migrate more strings
FossilOrigin-Name: fa4b03aacafc3bab0a52c144241ab665332f7e8e789eb17fff63f76e02e2d5c9
This commit is contained in:
parent
daeb76f126
commit
745514762e
15 changed files with 154 additions and 134 deletions
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
22
src/protos.h
22
src/protos.h
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue