|
|
1.1 root 1: #include "g_local.h"
2: #include "m_player.h"
3:
4:
5: char *ClientTeam (edict_t *ent)
6: {
7: char *p;
8: static char value[512];
9:
10: value[0] = 0;
11:
12: if (!ent->client)
13: return value;
14:
15: strcpy(value, Info_ValueForKey (ent->client->pers.userinfo, "skin"));
16: p = strchr(value, '/');
17: if (!p)
18: return value;
19:
20: if ((int)(dmflags->value) & DF_MODELTEAMS)
21: {
22: *p = 0;
23: return value;
24: }
25:
26: // if ((int)(dmflags->value) & DF_SKINTEAMS)
27: return ++p;
28: }
29:
30: qboolean OnSameTeam (edict_t *ent1, edict_t *ent2)
31: {
32: char ent1Team [512];
33: char ent2Team [512];
34:
35: if (!((int)(dmflags->value) & (DF_MODELTEAMS | DF_SKINTEAMS)))
36: return false;
37:
38: strcpy (ent1Team, ClientTeam (ent1));
39: strcpy (ent2Team, ClientTeam (ent2));
40:
41: if (strcmp(ent1Team, ent2Team) == 0)
42: return true;
43: return false;
44: }
45:
46:
47: void SelectNextItem (edict_t *ent, int itflags)
48: {
49: gclient_t *cl;
50: int i, index;
51: gitem_t *it;
52:
53: cl = ent->client;
54:
1.1.1.3 ! root 55: if (cl->chase_target) {
! 56: ChaseNext(ent);
! 57: return;
! 58: }
! 59:
1.1 root 60: // scan for the next valid one
61: for (i=1 ; i<=MAX_ITEMS ; i++)
62: {
63: index = (cl->pers.selected_item + i)%MAX_ITEMS;
64: if (!cl->pers.inventory[index])
65: continue;
66: it = &itemlist[index];
67: if (!it->use)
68: continue;
69: if (!(it->flags & itflags))
70: continue;
71:
72: cl->pers.selected_item = index;
73: return;
74: }
75:
76: cl->pers.selected_item = -1;
77: }
78:
79: void SelectPrevItem (edict_t *ent, int itflags)
80: {
81: gclient_t *cl;
82: int i, index;
83: gitem_t *it;
84:
85: cl = ent->client;
86:
1.1.1.3 ! root 87: if (cl->chase_target) {
! 88: ChasePrev(ent);
! 89: return;
! 90: }
! 91:
1.1 root 92: // scan for the next valid one
93: for (i=1 ; i<=MAX_ITEMS ; i++)
94: {
95: index = (cl->pers.selected_item + MAX_ITEMS - i)%MAX_ITEMS;
96: if (!cl->pers.inventory[index])
97: continue;
98: it = &itemlist[index];
99: if (!it->use)
100: continue;
101: if (!(it->flags & itflags))
102: continue;
103:
104: cl->pers.selected_item = index;
105: return;
106: }
107:
108: cl->pers.selected_item = -1;
109: }
110:
111: void ValidateSelectedItem (edict_t *ent)
112: {
113: gclient_t *cl;
114:
115: cl = ent->client;
116:
117: if (cl->pers.inventory[cl->pers.selected_item])
118: return; // valid
119:
120: SelectNextItem (ent, -1);
121: }
122:
123:
124: //=================================================================================
125:
126: /*
127: ==================
128: Cmd_Give_f
129:
130: Give items to a client
131: ==================
132: */
133: void Cmd_Give_f (edict_t *ent)
134: {
135: char *name;
136: gitem_t *it;
137: int index;
138: int i;
139: qboolean give_all;
140: edict_t *it_ent;
141:
142: if (deathmatch->value && !sv_cheats->value)
143: {
144: gi.cprintf (ent, PRINT_HIGH, "You must run the server with '+set cheats 1' to enable this command.\n");
145: return;
146: }
147:
148: name = gi.args();
149:
150: if (Q_stricmp(name, "all") == 0)
151: give_all = true;
152: else
153: give_all = false;
154:
155: if (give_all || Q_stricmp(gi.argv(1), "health") == 0)
156: {
157: if (gi.argc() == 3)
158: ent->health = atoi(gi.argv(2));
159: else
160: ent->health = ent->max_health;
161: if (!give_all)
162: return;
163: }
164:
165: if (give_all || Q_stricmp(name, "weapons") == 0)
166: {
167: for (i=0 ; i<game.num_items ; i++)
168: {
169: it = itemlist + i;
170: if (!it->pickup)
171: continue;
172: if (!(it->flags & IT_WEAPON))
173: continue;
174: ent->client->pers.inventory[i] += 1;
175: }
176: if (!give_all)
177: return;
178: }
179:
180: if (give_all || Q_stricmp(name, "ammo") == 0)
181: {
182: for (i=0 ; i<game.num_items ; i++)
183: {
184: it = itemlist + i;
185: if (!it->pickup)
186: continue;
187: if (!(it->flags & IT_AMMO))
188: continue;
189: Add_Ammo (ent, it, 1000);
190: }
191: if (!give_all)
192: return;
193: }
194:
195: if (give_all || Q_stricmp(name, "armor") == 0)
196: {
197: gitem_armor_t *info;
198:
199: it = FindItem("Jacket Armor");
200: ent->client->pers.inventory[ITEM_INDEX(it)] = 0;
201:
202: it = FindItem("Combat Armor");
203: ent->client->pers.inventory[ITEM_INDEX(it)] = 0;
204:
205: it = FindItem("Body Armor");
206: info = (gitem_armor_t *)it->info;
207: ent->client->pers.inventory[ITEM_INDEX(it)] = info->max_count;
208:
209: if (!give_all)
210: return;
211: }
212:
213: if (give_all || Q_stricmp(name, "Power Shield") == 0)
214: {
215: it = FindItem("Power Shield");
216: it_ent = G_Spawn();
217: it_ent->classname = it->classname;
218: SpawnItem (it_ent, it);
219: Touch_Item (it_ent, ent, NULL, NULL);
220: if (it_ent->inuse)
221: G_FreeEdict(it_ent);
222:
223: if (!give_all)
224: return;
225: }
226:
227: if (give_all)
228: {
229: for (i=0 ; i<game.num_items ; i++)
230: {
231: it = itemlist + i;
232: if (!it->pickup)
233: continue;
234: if (it->flags & (IT_ARMOR|IT_WEAPON|IT_AMMO))
235: continue;
236: ent->client->pers.inventory[i] = 1;
237: }
238: return;
239: }
240:
241: it = FindItem (name);
242: if (!it)
243: {
244: name = gi.argv(1);
245: it = FindItem (name);
246: if (!it)
247: {
1.1.1.2 root 248: gi.cprintf (ent, PRINT_HIGH, "unknown item\n");
1.1 root 249: return;
250: }
251: }
252:
253: if (!it->pickup)
254: {
1.1.1.2 root 255: gi.cprintf (ent, PRINT_HIGH, "non-pickup item\n");
1.1 root 256: return;
257: }
258:
259: index = ITEM_INDEX(it);
260:
261: if (it->flags & IT_AMMO)
262: {
263: if (gi.argc() == 3)
264: ent->client->pers.inventory[index] = atoi(gi.argv(2));
265: else
266: ent->client->pers.inventory[index] += it->quantity;
267: }
268: else
269: {
270: it_ent = G_Spawn();
271: it_ent->classname = it->classname;
272: SpawnItem (it_ent, it);
273: Touch_Item (it_ent, ent, NULL, NULL);
274: if (it_ent->inuse)
275: G_FreeEdict(it_ent);
276: }
277: }
278:
279:
280: /*
281: ==================
282: Cmd_God_f
283:
284: Sets client to godmode
285:
286: argv(0) god
287: ==================
288: */
289: void Cmd_God_f (edict_t *ent)
290: {
291: char *msg;
292:
293: if (deathmatch->value && !sv_cheats->value)
294: {
295: gi.cprintf (ent, PRINT_HIGH, "You must run the server with '+set cheats 1' to enable this command.\n");
296: return;
297: }
298:
299: ent->flags ^= FL_GODMODE;
300: if (!(ent->flags & FL_GODMODE) )
301: msg = "godmode OFF\n";
302: else
303: msg = "godmode ON\n";
304:
305: gi.cprintf (ent, PRINT_HIGH, msg);
306: }
307:
308:
309: /*
310: ==================
311: Cmd_Notarget_f
312:
313: Sets client to notarget
314:
315: argv(0) notarget
316: ==================
317: */
318: void Cmd_Notarget_f (edict_t *ent)
319: {
320: char *msg;
321:
322: if (deathmatch->value && !sv_cheats->value)
323: {
324: gi.cprintf (ent, PRINT_HIGH, "You must run the server with '+set cheats 1' to enable this command.\n");
325: return;
326: }
327:
328: ent->flags ^= FL_NOTARGET;
329: if (!(ent->flags & FL_NOTARGET) )
330: msg = "notarget OFF\n";
331: else
332: msg = "notarget ON\n";
333:
334: gi.cprintf (ent, PRINT_HIGH, msg);
335: }
336:
337:
338: /*
339: ==================
340: Cmd_Noclip_f
341:
342: argv(0) noclip
343: ==================
344: */
345: void Cmd_Noclip_f (edict_t *ent)
346: {
347: char *msg;
348:
349: if (deathmatch->value && !sv_cheats->value)
350: {
351: gi.cprintf (ent, PRINT_HIGH, "You must run the server with '+set cheats 1' to enable this command.\n");
352: return;
353: }
354:
355: if (ent->movetype == MOVETYPE_NOCLIP)
356: {
357: ent->movetype = MOVETYPE_WALK;
358: msg = "noclip OFF\n";
359: }
360: else
361: {
362: ent->movetype = MOVETYPE_NOCLIP;
363: msg = "noclip ON\n";
364: }
365:
366: gi.cprintf (ent, PRINT_HIGH, msg);
367: }
368:
369:
370: /*
371: ==================
372: Cmd_Use_f
373:
374: Use an inventory item
375: ==================
376: */
377: void Cmd_Use_f (edict_t *ent)
378: {
379: int index;
380: gitem_t *it;
381: char *s;
382:
383: s = gi.args();
384: it = FindItem (s);
385: if (!it)
386: {
387: gi.cprintf (ent, PRINT_HIGH, "unknown item: %s\n", s);
388: return;
389: }
390: if (!it->use)
391: {
392: gi.cprintf (ent, PRINT_HIGH, "Item is not usable.\n");
393: return;
394: }
395: index = ITEM_INDEX(it);
396: if (!ent->client->pers.inventory[index])
397: {
398: gi.cprintf (ent, PRINT_HIGH, "Out of item: %s\n", s);
399: return;
400: }
401:
402: it->use (ent, it);
403: }
404:
405:
406: /*
407: ==================
408: Cmd_Drop_f
409:
410: Drop an inventory item
411: ==================
412: */
413: void Cmd_Drop_f (edict_t *ent)
414: {
415: int index;
416: gitem_t *it;
417: char *s;
418:
419: s = gi.args();
420: it = FindItem (s);
421: if (!it)
422: {
423: gi.cprintf (ent, PRINT_HIGH, "unknown item: %s\n", s);
424: return;
425: }
426: if (!it->drop)
427: {
428: gi.cprintf (ent, PRINT_HIGH, "Item is not dropable.\n");
429: return;
430: }
431: index = ITEM_INDEX(it);
432: if (!ent->client->pers.inventory[index])
433: {
434: gi.cprintf (ent, PRINT_HIGH, "Out of item: %s\n", s);
435: return;
436: }
437:
438: it->drop (ent, it);
439: }
440:
441:
442: /*
443: =================
444: Cmd_Inven_f
445: =================
446: */
447: void Cmd_Inven_f (edict_t *ent)
448: {
449: int i;
450: gclient_t *cl;
451:
452: cl = ent->client;
453:
454: cl->showscores = false;
455: cl->showhelp = false;
456:
457: if (cl->showinventory)
458: {
459: cl->showinventory = false;
460: return;
461: }
462:
463: cl->showinventory = true;
464:
465: gi.WriteByte (svc_inventory);
466: for (i=0 ; i<MAX_ITEMS ; i++)
467: {
468: gi.WriteShort (cl->pers.inventory[i]);
469: }
470: gi.unicast (ent, true);
471: }
472:
473: /*
474: =================
475: Cmd_InvUse_f
476: =================
477: */
478: void Cmd_InvUse_f (edict_t *ent)
479: {
480: gitem_t *it;
481:
482: ValidateSelectedItem (ent);
483:
484: if (ent->client->pers.selected_item == -1)
485: {
486: gi.cprintf (ent, PRINT_HIGH, "No item to use.\n");
487: return;
488: }
489:
490: it = &itemlist[ent->client->pers.selected_item];
491: if (!it->use)
492: {
493: gi.cprintf (ent, PRINT_HIGH, "Item is not usable.\n");
494: return;
495: }
496: it->use (ent, it);
497: }
498:
499: /*
500: =================
501: Cmd_WeapPrev_f
502: =================
503: */
504: void Cmd_WeapPrev_f (edict_t *ent)
505: {
506: gclient_t *cl;
507: int i, index;
508: gitem_t *it;
509: int selected_weapon;
510:
511: cl = ent->client;
512:
513: if (!cl->pers.weapon)
514: return;
515:
516: selected_weapon = ITEM_INDEX(cl->pers.weapon);
517:
518: // scan for the next valid one
519: for (i=1 ; i<=MAX_ITEMS ; i++)
520: {
521: index = (selected_weapon + i)%MAX_ITEMS;
522: if (!cl->pers.inventory[index])
523: continue;
524: it = &itemlist[index];
525: if (!it->use)
526: continue;
527: if (! (it->flags & IT_WEAPON) )
528: continue;
529: it->use (ent, it);
530: if (cl->pers.weapon == it)
531: return; // successful
532: }
533: }
534:
535: /*
536: =================
537: Cmd_WeapNext_f
538: =================
539: */
540: void Cmd_WeapNext_f (edict_t *ent)
541: {
542: gclient_t *cl;
543: int i, index;
544: gitem_t *it;
545: int selected_weapon;
546:
547: cl = ent->client;
548:
549: if (!cl->pers.weapon)
550: return;
551:
552: selected_weapon = ITEM_INDEX(cl->pers.weapon);
553:
554: // scan for the next valid one
555: for (i=1 ; i<=MAX_ITEMS ; i++)
556: {
557: index = (selected_weapon + MAX_ITEMS - i)%MAX_ITEMS;
558: if (!cl->pers.inventory[index])
559: continue;
560: it = &itemlist[index];
561: if (!it->use)
562: continue;
563: if (! (it->flags & IT_WEAPON) )
564: continue;
565: it->use (ent, it);
566: if (cl->pers.weapon == it)
567: return; // successful
568: }
569: }
570:
571: /*
572: =================
573: Cmd_WeapLast_f
574: =================
575: */
576: void Cmd_WeapLast_f (edict_t *ent)
577: {
578: gclient_t *cl;
579: int index;
580: gitem_t *it;
581:
582: cl = ent->client;
583:
584: if (!cl->pers.weapon || !cl->pers.lastweapon)
585: return;
586:
587: index = ITEM_INDEX(cl->pers.lastweapon);
588: if (!cl->pers.inventory[index])
589: return;
590: it = &itemlist[index];
591: if (!it->use)
592: return;
593: if (! (it->flags & IT_WEAPON) )
594: return;
595: it->use (ent, it);
596: }
597:
598: /*
599: =================
600: Cmd_InvDrop_f
601: =================
602: */
603: void Cmd_InvDrop_f (edict_t *ent)
604: {
605: gitem_t *it;
606:
607: ValidateSelectedItem (ent);
608:
609: if (ent->client->pers.selected_item == -1)
610: {
611: gi.cprintf (ent, PRINT_HIGH, "No item to drop.\n");
612: return;
613: }
614:
615: it = &itemlist[ent->client->pers.selected_item];
616: if (!it->drop)
617: {
618: gi.cprintf (ent, PRINT_HIGH, "Item is not dropable.\n");
619: return;
620: }
621: it->drop (ent, it);
622: }
623:
624: /*
625: =================
626: Cmd_Kill_f
627: =================
628: */
629: void Cmd_Kill_f (edict_t *ent)
630: {
631: if((level.time - ent->client->respawn_time) < 5)
632: return;
633: ent->flags &= ~FL_GODMODE;
634: ent->health = 0;
635: meansOfDeath = MOD_SUICIDE;
636: player_die (ent, ent, ent, 100000, vec3_origin);
637: }
638:
639: /*
640: =================
641: Cmd_PutAway_f
642: =================
643: */
644: void Cmd_PutAway_f (edict_t *ent)
645: {
646: ent->client->showscores = false;
647: ent->client->showhelp = false;
648: ent->client->showinventory = false;
649: }
650:
651:
652: int PlayerSort (void const *a, void const *b)
653: {
654: int anum, bnum;
655:
656: anum = *(int *)a;
657: bnum = *(int *)b;
658:
659: anum = game.clients[anum].ps.stats[STAT_FRAGS];
660: bnum = game.clients[bnum].ps.stats[STAT_FRAGS];
661:
662: if (anum < bnum)
663: return -1;
664: if (anum > bnum)
665: return 1;
666: return 0;
667: }
668:
669: /*
670: =================
671: Cmd_Players_f
672: =================
673: */
674: void Cmd_Players_f (edict_t *ent)
675: {
676: int i;
677: int count;
678: char small[64];
679: char large[1280];
680: int index[256];
681:
682: count = 0;
683: for (i = 0 ; i < maxclients->value ; i++)
684: if (game.clients[i].pers.connected)
685: {
686: index[count] = i;
687: count++;
688: }
689:
690: // sort by frags
691: qsort (index, count, sizeof(index[0]), PlayerSort);
692:
693: // print information
694: large[0] = 0;
695:
696: for (i = 0 ; i < count ; i++)
697: {
698: Com_sprintf (small, sizeof(small), "%3i %s\n",
699: game.clients[index[i]].ps.stats[STAT_FRAGS],
700: game.clients[index[i]].pers.netname);
701: if (strlen (small) + strlen(large) > sizeof(large) - 100 )
702: { // can't print all of them in one packet
703: strcat (large, "...\n");
704: break;
705: }
706: strcat (large, small);
707: }
708:
709: gi.cprintf (ent, PRINT_HIGH, "%s\n%i players\n", large, count);
710: }
711:
712: /*
713: =================
714: Cmd_Wave_f
715: =================
716: */
717: void Cmd_Wave_f (edict_t *ent)
718: {
719: int i;
720:
721: i = atoi (gi.argv(1));
722:
723: // can't wave when ducked
724: if (ent->client->ps.pmove.pm_flags & PMF_DUCKED)
725: return;
726:
727: if (ent->client->anim_priority > ANIM_WAVE)
728: return;
729:
730: ent->client->anim_priority = ANIM_WAVE;
731:
732: switch (i)
733: {
734: case 0:
735: gi.cprintf (ent, PRINT_HIGH, "flipoff\n");
736: ent->s.frame = FRAME_flip01-1;
737: ent->client->anim_end = FRAME_flip12;
738: break;
739: case 1:
740: gi.cprintf (ent, PRINT_HIGH, "salute\n");
741: ent->s.frame = FRAME_salute01-1;
742: ent->client->anim_end = FRAME_salute11;
743: break;
744: case 2:
745: gi.cprintf (ent, PRINT_HIGH, "taunt\n");
746: ent->s.frame = FRAME_taunt01-1;
747: ent->client->anim_end = FRAME_taunt17;
748: break;
749: case 3:
750: gi.cprintf (ent, PRINT_HIGH, "wave\n");
751: ent->s.frame = FRAME_wave01-1;
752: ent->client->anim_end = FRAME_wave11;
753: break;
754: case 4:
755: default:
756: gi.cprintf (ent, PRINT_HIGH, "point\n");
757: ent->s.frame = FRAME_point01-1;
758: ent->client->anim_end = FRAME_point12;
759: break;
760: }
761: }
762:
763: /*
764: ==================
765: Cmd_Say_f
766: ==================
767: */
768: void Cmd_Say_f (edict_t *ent, qboolean team, qboolean arg0)
769: {
1.1.1.2 root 770: int i, j;
1.1 root 771: edict_t *other;
772: char *p;
773: char text[2048];
1.1.1.2 root 774: gclient_t *cl;
1.1 root 775:
776: if (gi.argc () < 2 && !arg0)
777: return;
778:
779: if (!((int)(dmflags->value) & (DF_MODELTEAMS | DF_SKINTEAMS)))
780: team = false;
781:
782: if (team)
783: Com_sprintf (text, sizeof(text), "(%s): ", ent->client->pers.netname);
784: else
785: Com_sprintf (text, sizeof(text), "%s: ", ent->client->pers.netname);
786:
787: if (arg0)
788: {
789: strcat (text, gi.argv(0));
790: strcat (text, " ");
791: strcat (text, gi.args());
792: }
793: else
794: {
795: p = gi.args();
796:
797: if (*p == '"')
798: {
799: p++;
800: p[strlen(p)-1] = 0;
801: }
802: strcat(text, p);
803: }
804:
805: // don't let text be too long for malicious reasons
806: if (strlen(text) > 150)
807: text[150] = 0;
808:
809: strcat(text, "\n");
810:
1.1.1.2 root 811: if (flood_msgs->value) {
812: cl = ent->client;
813:
814: if (level.time < cl->flood_locktill) {
815: gi.cprintf(ent, PRINT_HIGH, "You can't talk for %d more seconds\n",
816: (int)(cl->flood_locktill - level.time));
817: return;
818: }
819: i = cl->flood_whenhead - flood_msgs->value + 1;
820: if (i < 0)
821: i = (sizeof(cl->flood_when)/sizeof(cl->flood_when[0])) + i;
822: if (cl->flood_when[i] &&
823: level.time - cl->flood_when[i] < flood_persecond->value) {
824: cl->flood_locktill = level.time + flood_waitdelay->value;
825: gi.cprintf(ent, PRINT_CHAT, "Flood protection: You can't talk for %d seconds.\n",
826: (int)flood_waitdelay->value);
827: return;
828: }
829: cl->flood_whenhead = (cl->flood_whenhead + 1) %
830: (sizeof(cl->flood_when)/sizeof(cl->flood_when[0]));
831: cl->flood_when[cl->flood_whenhead] = level.time;
832: }
833:
1.1 root 834: if (dedicated->value)
835: gi.cprintf(NULL, PRINT_CHAT, "%s", text);
836:
837: for (j = 1; j <= game.maxclients; j++)
838: {
839: other = &g_edicts[j];
840: if (!other->inuse)
841: continue;
842: if (!other->client)
843: continue;
844: if (team)
845: {
846: if (!OnSameTeam(ent, other))
847: continue;
848: }
849: gi.cprintf(other, PRINT_CHAT, "%s", text);
850: }
851: }
852:
1.1.1.3 ! root 853: void Cmd_PlayerList_f(edict_t *ent)
! 854: {
! 855: int i;
! 856: char st[80];
! 857: char text[1400];
! 858: edict_t *e2;
! 859:
! 860: // connect time, ping, score, name
! 861: *text = 0;
! 862: for (i = 0, e2 = g_edicts + 1; i < maxclients->value; i++, e2++) {
! 863: if (!e2->inuse)
! 864: continue;
! 865:
! 866: sprintf(st, "%02d:%02d %4d %3d %s%s\n",
! 867: (level.framenum - e2->client->resp.enterframe) / 600,
! 868: ((level.framenum - e2->client->resp.enterframe) % 600)/10,
! 869: e2->client->ping,
! 870: e2->client->resp.score,
! 871: e2->client->pers.netname,
! 872: e2->client->resp.spectator ? " (spectator)" : "");
! 873: if (strlen(text) + strlen(st) > sizeof(text) - 50) {
! 874: sprintf(text+strlen(text), "And more...\n");
! 875: gi.cprintf(ent, PRINT_HIGH, "%s", text);
! 876: return;
! 877: }
! 878: strcat(text, st);
! 879: }
! 880: gi.cprintf(ent, PRINT_HIGH, "%s", text);
! 881: }
! 882:
! 883:
1.1 root 884: /*
885: =================
886: ClientCommand
887: =================
888: */
889: void ClientCommand (edict_t *ent)
890: {
891: char *cmd;
892:
893: if (!ent->client)
894: return; // not fully in game yet
895:
896: cmd = gi.argv(0);
897:
898: if (Q_stricmp (cmd, "players") == 0)
899: {
900: Cmd_Players_f (ent);
901: return;
902: }
903: if (Q_stricmp (cmd, "say") == 0)
904: {
905: Cmd_Say_f (ent, false, false);
906: return;
907: }
908: if (Q_stricmp (cmd, "say_team") == 0)
909: {
910: Cmd_Say_f (ent, true, false);
911: return;
912: }
913: if (Q_stricmp (cmd, "score") == 0)
914: {
915: Cmd_Score_f (ent);
916: return;
917: }
918: if (Q_stricmp (cmd, "help") == 0)
919: {
920: Cmd_Help_f (ent);
921: return;
922: }
923:
924: if (level.intermissiontime)
925: return;
926:
927: if (Q_stricmp (cmd, "use") == 0)
928: Cmd_Use_f (ent);
929: else if (Q_stricmp (cmd, "drop") == 0)
930: Cmd_Drop_f (ent);
931: else if (Q_stricmp (cmd, "give") == 0)
932: Cmd_Give_f (ent);
933: else if (Q_stricmp (cmd, "god") == 0)
934: Cmd_God_f (ent);
935: else if (Q_stricmp (cmd, "notarget") == 0)
936: Cmd_Notarget_f (ent);
937: else if (Q_stricmp (cmd, "noclip") == 0)
938: Cmd_Noclip_f (ent);
939: else if (Q_stricmp (cmd, "inven") == 0)
940: Cmd_Inven_f (ent);
941: else if (Q_stricmp (cmd, "invnext") == 0)
942: SelectNextItem (ent, -1);
943: else if (Q_stricmp (cmd, "invprev") == 0)
944: SelectPrevItem (ent, -1);
945: else if (Q_stricmp (cmd, "invnextw") == 0)
946: SelectNextItem (ent, IT_WEAPON);
947: else if (Q_stricmp (cmd, "invprevw") == 0)
948: SelectPrevItem (ent, IT_WEAPON);
949: else if (Q_stricmp (cmd, "invnextp") == 0)
950: SelectNextItem (ent, IT_POWERUP);
951: else if (Q_stricmp (cmd, "invprevp") == 0)
952: SelectPrevItem (ent, IT_POWERUP);
953: else if (Q_stricmp (cmd, "invuse") == 0)
954: Cmd_InvUse_f (ent);
955: else if (Q_stricmp (cmd, "invdrop") == 0)
956: Cmd_InvDrop_f (ent);
957: else if (Q_stricmp (cmd, "weapprev") == 0)
958: Cmd_WeapPrev_f (ent);
959: else if (Q_stricmp (cmd, "weapnext") == 0)
960: Cmd_WeapNext_f (ent);
961: else if (Q_stricmp (cmd, "weaplast") == 0)
962: Cmd_WeapLast_f (ent);
963: else if (Q_stricmp (cmd, "kill") == 0)
964: Cmd_Kill_f (ent);
965: else if (Q_stricmp (cmd, "putaway") == 0)
966: Cmd_PutAway_f (ent);
967: else if (Q_stricmp (cmd, "wave") == 0)
968: Cmd_Wave_f (ent);
1.1.1.3 ! root 969: else if (Q_stricmp(cmd, "playerlist") == 0)
! 970: Cmd_PlayerList_f(ent);
1.1 root 971: else // anything that doesn't match a command will be a chat
972: Cmd_Say_f (ent, false, true);
973: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.