MCPcopy Create free account
hub / github.com/assaultcube/AC / addmsg

Function addmsg

source/src/client.cpp:303–356  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

301vector<uchar> messages;
302
303void addmsg(int type, const char *fmt, ...)
304{
305 static uchar buf[MAXTRANS];
306 ucharbuf p(buf, MAXTRANS);
307 putint(p, type);
308 int numi = 1, nums = 0;
309 bool reliable = false;
310 if(fmt)
311 {
312 va_list args;
313 va_start(args, fmt);
314 while(*fmt) switch(*fmt++)
315 {
316 case 'r': reliable = true; break;
317 case 'v':
318 {
319 int n = va_arg(args, int);
320 int *v = va_arg(args, int *);
321 loopi(n) putint(p, v[i]);
322 numi += n;
323 break;
324 }
325
326 case 'i':
327 {
328 int n = isdigit(*fmt) ? *fmt++-'0' : 1;
329 loopi(n) putint(p, va_arg(args, int));
330 numi += n;
331 break;
332 }
333 case 'a':
334 {
335 int n = isdigit(*fmt) ? *fmt++-'0' : 1;
336 loopi(n) putaint(p, va_arg(args, int));
337 numi += n;
338 break;
339 }
340 case 's':
341 {
342 const char *t = va_arg(args, const char *);
343 sendstring(t, p);
344 nums++;
345 break;
346 }
347 }
348 va_end(args);
349 }
350 int num = nums?0:numi, msgsize = msgsizelookup(type);
351 if(msgsize && num!=msgsize) { fatal("inconsistent msg size for %d (%d != %d)", type, num, msgsize); }
352 int len = p.length();
353 messages.add(len&0xFF);
354 messages.add((len>>8)|(reliable ? 0x80 : 0));
355 loopi(len) messages.add(buf[i]);
356}
357
358static int lastupdate = -1000, lastping = 0;
359bool sendmapidenttoserver = false;

Callers 15

delentFunction · 0.85
newentityFunction · 0.85
mapenlargeFunction · 0.85
mapshrinkFunction · 0.85
newmapFunction · 0.85
parsemessagesFunction · 0.85
_toserverFunction · 0.85
pmFunction · 0.85
deleteservermapFunction · 0.85
getdemoFunction · 0.85
listdemosFunction · 0.85
checkweaponswitchFunction · 0.85

Calls 7

putintFunction · 0.85
sendstringFunction · 0.85
msgsizelookupFunction · 0.85
loopiFunction · 0.70
fatalFunction · 0.70
lengthMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected