Guest User

Untitled

a guest
Jul 20th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.39 KB | None | 0 0
  1. Index: game.h
  2. ===================================================================
  3. --- game.h (revision 2062)
  4. +++ game.h (working copy)
  5. @@ -602,6 +602,7 @@
  6. extern string clientmap;
  7. extern int minremain;
  8. extern bool intermission;
  9. + extern int maptimeleft;
  10. extern int maptime, maprealtime;
  11. extern fpsent *player1;
  12. extern vector<fpsent *> players, clients;
  13. @@ -722,6 +723,7 @@
  14.  
  15. // scoreboard
  16. extern void showscores(bool on);
  17. + extern int getscores(vector<int> &v);
  18. extern void getbestplayers(vector<fpsent *> &best);
  19. extern void getbestteams(vector<const char *> &best);
  20.  
  21. Index: client.cpp
  22. ===================================================================
  23. --- client.cpp (revision 2062)
  24. +++ client.cpp (working copy)
  25. @@ -579,6 +579,7 @@
  26. {
  27. connected = true;
  28. remote = _remote;
  29. + maptimeleft = remote ? -1 : 0;
  30. if(editmode) toggleedit();
  31. }
  32.  
  33. Index: render.cpp
  34. ===================================================================
  35. --- render.cpp (revision 2062)
  36. +++ render.cpp (working copy)
  37. @@ -10,6 +10,7 @@
  38. VARP(ragdollfade, 0, 1000, 300000);
  39. VARFP(playermodel, 0, 0, 4, { if(player1->clientnum < 0) player1->playermodel = playermodel; });
  40. VARP(forceplayermodels, 0, 0, 1);
  41. + VARP(overridemodel, -1, -1, 4);
  42.  
  43. vector<fpsent *> ragdolls;
  44.  
  45. @@ -65,6 +66,7 @@
  46.  
  47. const playermodelinfo *getplayermodelinfo(int n)
  48. {
  49. + if(overridemodel != -1) return &playermodels[overridemodel];
  50. if(size_t(n) >= sizeof(playermodels)/sizeof(playermodels[0])) return NULL;
  51. return &playermodels[n];
  52. }
  53. Index: scoreboard.cpp
  54. ===================================================================
  55. --- scoreboard.cpp (revision 2062)
  56. +++ scoreboard.cpp (working copy)
  57. @@ -10,7 +10,96 @@
  58. VARP(showspectators, 0, 1, 1);
  59. VARP(highlightscore, 0, 1, 1);
  60. VARP(showconnecting, 0, 0, 1);
  61. + VARP(colorclans, 0, 1, 1);
  62. + VARP(showfrags, 0, 1, 1);
  63.  
  64. + int createname(const char *name, char *gclan, char *gname) {
  65. + // Automatic colors go here
  66. + int colors[] = {0xFFD300, 0x787EB7, 0x759536, 0x6B8775, 0xF5F5B3, 0xFB000D, 0x61D7A4, 0x532881, 0xF08BCB, 0xDC9630, 0xFEFCFF, 0x99A1DE};
  67. + int colorsCount = 12;
  68. + // Custom colors go here
  69. + int customColors[] = { 0x679FD2 };
  70. + const char *customNames[] = { "mVa", 0 };
  71. +
  72. + if(strchr(name, ' ') != NULL) // Fail on bot [128]
  73. + return -1;
  74. +
  75. + int clannamestart = 0;
  76. + int clannameend = 0;
  77. + int clantagstart = 0;
  78. + int clantagend = 0;
  79. + int realnamestart = 0;
  80. + int realnameend = 0;
  81. + int len = strlen(name);
  82. + char clanname[250], realname[250];
  83. + const char *startchars = "[|{}=<(/\\.";
  84. + const char *endchars = "]|{}=>):/\\.";
  85. +
  86. + while(strchr(startchars, name[clannamestart]) != NULL) // Move clannamestart up
  87. + clannamestart ++;
  88. + if(clannamestart == 0) {
  89. + int p = len-1;
  90. + while(strchr(endchars, name[p]) != NULL) // Check for name|tag|
  91. + p --;
  92. + if(p != len-1) { // name|tag| found
  93. + clannameend = len;
  94. + clannamestart = p;
  95. + while(strchr(startchars, name[clannamestart]) == NULL) // Move clannamestart back
  96. + clannamestart --;
  97. + realnamestart = 0;
  98. + realnameend = clannamestart;
  99. + clannamestart ++;
  100. + while(strchr(startchars, name[realnameend]) != NULL)
  101. + realnameend --;
  102. + realnameend ++;
  103. + }
  104. + }
  105. + if(clannameend == 0) { // name|tag| not found, look for |tag|name
  106. + clannameend = clannamestart;
  107. + while(strchr(endchars, name[clannameend]) == NULL)
  108. + clannameend ++;
  109. + clantagend = clannameend;
  110. + while(strchr(endchars, name[clantagend]) != NULL)
  111. + clantagend ++;
  112. + realnamestart = clantagend;
  113. + realnameend = len;
  114. + }
  115. + if(clannameend == len) {
  116. + clannameend = 0;
  117. + realnamestart = 0;
  118. + }
  119. + if(realnameend == len && clannamestart == 0 && len < clannameend+realnamestart) {
  120. + int a = clannameend, b = clannamestart;
  121. + clannameend = realnameend;
  122. + clannamestart = realnamestart;
  123. + realnameend = a;
  124. + realnamestart = b;
  125. + }
  126. + if(realnamestart > strlen(name)) // Todo: Why does this happen. <name>
  127. + return -1;
  128. + strlcpy(clanname, name+clannamestart, clannameend-clannamestart+1);
  129. + strlcpy(realname, name+realnamestart, realnameend+1);
  130. + if(!strlen(clanname) || !strlen(realname))
  131. + return -1;
  132. +
  133. + // Pick a color
  134. + int color = 0xFFFFFF;
  135. + int i = 0;
  136. + while(customNames[i] && strcmp(customNames[i], clanname))
  137. + i ++;
  138. + if(customNames[i])
  139. + color = customColors[i];
  140. + else {
  141. + int c = 0;
  142. + for(int i = 1; i < strlen(clanname); i ++)
  143. + c += clanname[i] ^ clanname[i-1];
  144. + color = colors[c % colorsCount];
  145. + }
  146. + strcpy(gclan, clanname);
  147. + strcpy(gname, realname);
  148. + return color;
  149. + }
  150. +
  151. static int playersort(const fpsent **a, const fpsent **b)
  152. {
  153. if((*a)->state==CS_SPECTATOR)
  154. @@ -183,13 +272,27 @@
  155. g.pushlist(); // horizontal
  156. }
  157.  
  158. - if(!cmode || !cmode->hidefrags())
  159. + if(showfrags)
  160. {
  161. g.pushlist();
  162. - g.strut(7);
  163. - g.text("frags", fgcolor);
  164. - loopscoregroup(o, g.textf("%d", 0xFFFFDD, NULL, o->frags));
  165. + g.strut(3);
  166. + g.text("K", fgcolor);
  167. + loopv(sg.players)
  168. + {
  169. + fpsent *o = sg.players[i];
  170. + g.textf("%d", 0xFFFFDD, NULL, o->frags);
  171. + }
  172. g.poplist();
  173. +
  174. + g.pushlist();
  175. + g.strut(5);
  176. + g.text("D", fgcolor);
  177. + loopv(sg.players)
  178. + {
  179. + fpsent *o = sg.players[i];
  180. + g.textf("%d", 0xFFFFDD, NULL, o->deaths);
  181. + }
  182. + g.poplist();
  183. }
  184.  
  185. if(multiplayer(false) || demoplayback)
  186. @@ -226,6 +329,9 @@
  187. g.pushlist();
  188. g.text("name", fgcolor);
  189. g.strut(10);
  190. +
  191. + char *name = (char *)calloc(250, 1);
  192. + char *clan = (char *)calloc(250, 1);
  193. loopscoregroup(o,
  194. {
  195. int status = o->state!=CS_DEAD ? 0xFFFFDD : 0x606060;
  196. @@ -234,8 +340,25 @@
  197. status = o->privilege>=PRIV_ADMIN ? 0xFF8000 : 0x40FF80;
  198. if(o->state==CS_DEAD) status = (status>>1)&0x7F7F7F;
  199. }
  200. - g.text(colorname(o), status);
  201. + g.pushlist();
  202. + if(colorclans)
  203. + {
  204. + int color = createname(colorname(o), clan, name);
  205. + if(color != -1)
  206. + {
  207. + g.text(clan, color);
  208. + g.text(" ", 0xFFFFFF);
  209. + g.text(name, status);
  210. + }
  211. + else
  212. + g.text(colorname(o), status);
  213. + }
  214. + else
  215. + g.text(colorname(o), status);
  216. + g.poplist();
  217. });
  218. + free(name);
  219. + free(clan);
  220. g.poplist();
  221.  
  222. if(showclientnum || player1->privilege>=PRIV_MASTER)
  223. @@ -268,19 +391,36 @@
  224.  
  225. g.pushlist();
  226. g.text("spectator", 0xFFFF80, "server");
  227. + g.strut(10);
  228. + char *name = (char *)calloc(250, 1);
  229. + char *clan = (char *)calloc(250, 1);
  230. loopv(spectators)
  231. {
  232. fpsent *o = spectators[i];
  233. int status = 0xFFFFDD;
  234. if(o->privilege) status = o->privilege>=PRIV_ADMIN ? 0xFF8000 : 0x40FF80;
  235. + g.pushlist();
  236. if(o==player1 && highlightscore)
  237. + g.background(0x808080, 3);
  238. + g.text("", 0xFFFFFF, "spectator");
  239. + if(colorclans)
  240. {
  241. - g.pushlist();
  242. - g.background(0x808080, 3);
  243. + int color = createname(colorname(o), clan, name);
  244. + if(color != -1)
  245. + {
  246. + g.text(clan, color);
  247. + g.text(" ", 0xFFFFFF);
  248. + g.text(name, status);
  249. + }
  250. + else
  251. + g.text(colorname(o), status);
  252. }
  253. - g.text(colorname(o), status, "spectator");
  254. - if(o==player1 && highlightscore) g.poplist();
  255. + else
  256. + g.text(colorname(o), status);
  257. + g.poplist();
  258. }
  259. + free(clan);
  260. + free(name);
  261. g.poplist();
  262.  
  263. g.space(1);
  264. @@ -289,6 +429,21 @@
  265. loopv(spectators) g.textf("%d", 0xFFFFDD, NULL, spectators[i]->clientnum);
  266. g.poplist();
  267.  
  268. + if(showping)
  269. + {
  270. + g.space(1);
  271. + g.pushlist();
  272. + g.text("ping", 0xFFFF80);
  273. + loopv(spectators)
  274. + {
  275. + fpsent *p = spectators[i];
  276. + if(!showpj && p->state==CS_LAGGED) g.text("LAG", 0xFFFFDD);
  277. + else g.textf("%d", 0xFFFFDD, NULL, p->ping);
  278. + };
  279. + g.poplist();
  280. + }
  281. +
  282. +
  283. g.poplist();
  284. }
  285. else
  286. @@ -318,6 +473,29 @@
  287. }
  288. }
  289.  
  290. + static int scoresort(const int *a, const int *b)
  291. + {
  292. + return *b-*a;
  293. + }
  294. + int getscores(vector<int> &v)
  295. + {
  296. + int numgroups = groupplayers();
  297. + loopk(numgroups)
  298. + {
  299. + scoregroup &sg = *groups[k];
  300. + if(sg.team && m_teammode)
  301. + v.add(sg.score);
  302. + }
  303. + v.sort(scoresort);
  304. + loopk(numgroups)
  305. + {
  306. + scoregroup &sg = *groups[k];
  307. + if(isteam(player1->team, sg.team))
  308. + return k;
  309. + }
  310. + return -1;
  311. + }
  312. +
  313. struct scoreboardgui : g3d_callback
  314. {
  315. bool showing;
  316. Index: fps.cpp
  317. ===================================================================
  318. --- fps.cpp (revision 2062)
  319. +++ fps.cpp (working copy)
  320. @@ -3,7 +3,7 @@
  321. namespace game
  322. {
  323. bool intermission = false;
  324. - int maptime = 0, maprealtime = 0, minremain = 0;
  325. + int maptime = 0, maprealtime = 0, minremain = 0, maptimeleft = 0;
  326. int respawnent = -1;
  327. int lasthit = 0, lastspawnattempt = 0;
  328.  
  329. @@ -378,6 +378,7 @@
  330. else
  331. {
  332. d->move = d->strafe = 0;
  333. + d->deaths ++;
  334. d->resetinterp();
  335. d->smoothmillis = 0;
  336. playsound(S_DIE1+rnd(2), &d->o);
  337. @@ -443,6 +444,7 @@
  338. {
  339. conoutf(CON_GAMEINFO, "\f2time remaining: %d %s", timeremain, timeremain==1 ? "minute" : "minutes");
  340. }
  341. + maptimeleft = (lastmillis+timeremain*60000)*(maptimeleft==-1 ? -1 : 1);
  342. }
  343.  
  344. vector<fpsent *> clients;
  345. @@ -813,6 +815,48 @@
  346. return 0;
  347. }
  348.  
  349. + VAR(showtimeleft, 0, 1, 1);
  350. +
  351. + void rendertimeleft(int w, int h, int fonth)
  352. + {
  353. + if(showtimeleft && !m_sp && hudplayer()->state!=CS_EDITING)
  354. + {
  355. + int remain = maptimeleft;
  356. + if(maptimeleft<0) remain*=-1;
  357. + int t = intermission ? 0 : m_edit ? lastmillis/1000 : (remain+1000-lastmillis)/1000;
  358. + int m = t/60, s = t%60;
  359. + if(!m_edit && !m && s && s<30 && lastmillis%1000>=500) return; // Blinking in last 30 seconds
  360. + if(maptimeleft>-1 || m_edit) draw_textf("%s%d:%-2.2d", w*3-9*fonth, h*3-fonth*3/2, (!m_edit && !m) ? "\f3" : (!s) ? "\f1" : "", m, s);
  361. + else draw_textf("%s<%d min", w*3-9*fonth, h*3-fonth*3/2, (!m_edit && !m) ? "\f3" : (!s) ? "\f1" : "", m+1);
  362. + }
  363. + }
  364. +
  365. + VARP(showscorehud, 0, 0, 1);
  366. +
  367. + void renderscorehud(int w, int h, int fonth)
  368. + {
  369. + if(showscorehud && !m_sp && hudplayer()->state!=CS_EDITING)
  370. + {
  371. + vector<int> scores;
  372. + int n = getscores(scores);
  373. + char str[50];
  374. + int c = 0;
  375. + loopv(scores)
  376. + c += sprintf(str+c, "%s%s%d\f7", !c ? "" : "-", n == i ? "\f1" : "\f7", scores[i]);
  377. + draw_textf(str, w*3-13*fonth,h*3-fonth*3/2);
  378. + }
  379. + }
  380. +
  381. + VARP(showpinghud, 0, 0, 1);
  382. +
  383. + void renderpinghud(int w, int h, int fonth)
  384. + {
  385. + if(showpinghud && !m_sp && hudplayer()->state!=CS_EDITING)
  386. + {
  387. + draw_textf("%d", w*3-16*fonth, h*3-fonth*3/2, player1->ping);
  388. + }
  389. + }
  390. +
  391. VARP(teamcrosshair, 0, 1, 1);
  392. VARP(hitcrosshair, 0, 425, 1000);
Add Comment
Please, Sign In to add comment