From 0a471ec8d8262d93cef5e125d685ddfb0a823b24 Mon Sep 17 00:00:00 2001 From: Yamagi Burmeister Date: Wed, 1 May 2013 10:43:49 +0200 Subject: [PATCH] Cleanup g_cmds.c and add sanity checks --- src/g_cmds.c | 1289 +++++++++++++++++++++++++++++++------------------- 1 file changed, 814 insertions(+), 475 deletions(-) diff --git a/src/g_cmds.c b/src/g_cmds.c index 36747d1..08130f3 100644 --- a/src/g_cmds.c +++ b/src/g_cmds.c @@ -1,21 +1,38 @@ +/* ======================================================================= + * + * Game command processing. + * + * ======================================================================= + */ + #include "header/local.h" #include "monster/misc/player.h" - -char *ClientTeam (edict_t *ent) +char * +ClientTeam(edict_t *ent) { - char *p; - static char value[512]; + char *p; + static char value[512]; value[0] = 0; - + + if (!ent) + { + return value; + } + if (!ent->client) + { return value; + } - strcpy(value, Info_ValueForKey (ent->client->pers.userinfo, "skin")); + strcpy(value, Info_ValueForKey(ent->client->pers.userinfo, "skin")); p = strchr(value, '/'); + if (!p) + { return value; + } if ((int)(dmflags->value) & DF_MODELTEAMS) { @@ -23,51 +40,77 @@ char *ClientTeam (edict_t *ent) return value; } - // if ((int)(dmflags->value) & DF_SKINTEAMS) return ++p; } -qboolean OnSameTeam (edict_t *ent1, edict_t *ent2) +qboolean +OnSameTeam(edict_t *ent1, edict_t *ent2) { - char ent1Team [512]; - char ent2Team [512]; - - if (!((int)(dmflags->value) & (DF_MODELTEAMS | DF_SKINTEAMS))) + char ent1Team[512]; + char ent2Team[512]; + + if (!ent1 || !ent2) + { return false; + } + + if (!((int)(dmflags->value) & (DF_MODELTEAMS | DF_SKINTEAMS))) + { + return false; + } - strcpy (ent1Team, ClientTeam (ent1)); - strcpy (ent2Team, ClientTeam (ent2)); + strcpy(ent1Team, ClientTeam(ent1)); + strcpy(ent2Team, ClientTeam(ent2)); if (strcmp(ent1Team, ent2Team) == 0) + { return true; + } + return false; } - -void SelectNextItem (edict_t *ent, int itflags) +void +SelectNextItem(edict_t *ent, int itflags) { - gclient_t *cl; - int i, index; - gitem_t *it; - + gclient_t *cl; + int i, index; + gitem_t *it; + + if (!ent) + { + return; + } + cl = ent->client; - if (cl->chase_target) { + if (cl->chase_target) + { ChaseNext(ent); return; } - // scan for the next valid one - for (i=1 ; i<=MAX_ITEMS ; i++) + /* scan for the next valid one */ + for (i = 1; i <= MAX_ITEMS; i++) { - index = (cl->pers.selected_item + i)%MAX_ITEMS; + index = (cl->pers.selected_item + i) % MAX_ITEMS; + if (!cl->pers.inventory[index]) + { continue; + } + it = &itemlist[index]; + if (!it->use) + { continue; + } + if (!(it->flags & itflags)) + { continue; + } cl->pers.selected_item = index; return; @@ -76,30 +119,47 @@ void SelectNextItem (edict_t *ent, int itflags) cl->pers.selected_item = -1; } -void SelectPrevItem (edict_t *ent, int itflags) +void +SelectPrevItem(edict_t *ent, int itflags) { - gclient_t *cl; - int i, index; - gitem_t *it; - + gclient_t *cl; + int i, index; + gitem_t *it; + + if (!ent) + { + return; + } + cl = ent->client; - if (cl->chase_target) { + if (cl->chase_target) + { ChasePrev(ent); return; } - // scan for the next valid one - for (i=1 ; i<=MAX_ITEMS ; i++) + /* scan for the next valid one */ + for (i = 1; i <= MAX_ITEMS; i++) { - index = (cl->pers.selected_item + MAX_ITEMS - i)%MAX_ITEMS; + index = (cl->pers.selected_item + MAX_ITEMS - i) % MAX_ITEMS; + if (!cl->pers.inventory[index]) + { continue; + } + it = &itemlist[index]; + if (!it->use) + { continue; + } + if (!(it->flags & itflags)) + { continue; + } cl->pers.selected_item = index; return; @@ -108,93 +168,134 @@ void SelectPrevItem (edict_t *ent, int itflags) cl->pers.selected_item = -1; } -void ValidateSelectedItem (edict_t *ent) +void +ValidateSelectedItem(edict_t *ent) { - gclient_t *cl; - + gclient_t *cl; + + if (!ent) + { + return; + } + cl = ent->client; if (cl->pers.inventory[cl->pers.selected_item]) - return; // valid + { + return; /* valid */ + } - SelectNextItem (ent, -1); + SelectNextItem(ent, -1); } - -//================================================================================= +/* ================================================================================= */ /* -================== -Cmd_Give_f - -Give items to a client -================== -*/ -void Cmd_Give_f (edict_t *ent) + * Give items to a client + */ +void +Cmd_Give_f(edict_t *ent) { - char *name; - gitem_t *it; - int index; - int i; - qboolean give_all; - edict_t *it_ent; - + char *name; + gitem_t *it; + int index; + int i; + qboolean give_all; + edict_t *it_ent; + + if (!ent) + { + return; + } + if ((deathmatch->value || coop->value) && !sv_cheats->value) { - gi.cprintf (ent, PRINT_HIGH, "You must run the server with '+set cheats 1' to enable this command.\n"); + gi.cprintf(ent, PRINT_HIGH, + "You must run the server with '+set cheats 1' to enable this command.\n"); return; } name = gi.args(); if (Q_stricmp(name, "all") == 0) + { give_all = true; + } else + { give_all = false; + } - if (give_all || Q_stricmp(gi.argv(1), "health") == 0) + if (give_all || (Q_stricmp(gi.argv(1), "health") == 0)) { if (gi.argc() == 3) + { ent->health = atoi(gi.argv(2)); + } else + { ent->health = ent->max_health; + } + if (!give_all) + { return; + } } - if (give_all || Q_stricmp(name, "weapons") == 0) + if (give_all || (Q_stricmp(name, "weapons") == 0)) { - for (i=0 ; ipickup) + { continue; + } + if (!(it->flags & IT_WEAPON)) + { continue; + } + ent->client->pers.inventory[i] += 1; } + if (!give_all) + { return; + } } - if (give_all || Q_stricmp(name, "ammo") == 0) + if (give_all || (Q_stricmp(name, "ammo") == 0)) { - for (i=0 ; ipickup) + { continue; + } + if (!(it->flags & IT_AMMO)) + { continue; - Add_Ammo (ent, it, 1000); + } + + Add_Ammo(ent, it, 1000); } + if (!give_all) + { return; + } } - if (give_all || Q_stricmp(name, "armor") == 0) + if (give_all || (Q_stricmp(name, "armor") == 0)) { - gitem_armor_t *info; + gitem_armor_t *info; it = FindItem("Jacket Armor"); ent->client->pers.inventory[ITEM_INDEX(it)] = 0; @@ -207,162 +308,199 @@ void Cmd_Give_f (edict_t *ent) ent->client->pers.inventory[ITEM_INDEX(it)] = info->max_count; if (!give_all) + { return; + } } - if (give_all || Q_stricmp(name, "Power Shield") == 0) + if (give_all || (Q_stricmp(name, "Power Shield") == 0)) { it = FindItem("Power Shield"); it_ent = G_Spawn(); it_ent->classname = it->classname; - SpawnItem (it_ent, it); - Touch_Item (it_ent, ent, NULL, NULL); + SpawnItem(it_ent, it); + Touch_Item(it_ent, ent, NULL, NULL); + if (it_ent->inuse) + { G_FreeEdict(it_ent); + } if (!give_all) + { return; + } } if (give_all) { - for (i=0 ; ipickup) + { continue; - if (it->flags & IT_NOT_GIVEABLE) // ROGUE - continue; // ROGUE - if (it->flags & (IT_ARMOR|IT_WEAPON|IT_AMMO)) + } + + if (it->flags & IT_NOT_GIVEABLE) + { continue; + } + + if (it->flags & (IT_ARMOR | IT_WEAPON | IT_AMMO)) + { + continue; + } + ent->client->pers.inventory[i] = 1; } + return; } - it = FindItem (name); + it = FindItem(name); + if (!it) { name = gi.argv(1); - it = FindItem (name); + it = FindItem(name); + if (!it) { - gi.cprintf (ent, PRINT_HIGH, "unknown item\n"); + gi.cprintf(ent, PRINT_HIGH, "unknown item\n"); return; } } if (!it->pickup) { - gi.cprintf (ent, PRINT_HIGH, "non-pickup item\n"); + gi.cprintf(ent, PRINT_HIGH, "non-pickup item\n"); return; } - //ROGUE - if (it->flags & IT_NOT_GIVEABLE) + if (it->flags & IT_NOT_GIVEABLE) { - gi.dprintf ("item cannot be given\n"); - return; + gi.dprintf("item cannot be given\n"); + return; } - //ROGUE index = ITEM_INDEX(it); if (it->flags & IT_AMMO) { if (gi.argc() == 3) + { ent->client->pers.inventory[index] = atoi(gi.argv(2)); + } else + { ent->client->pers.inventory[index] += it->quantity; + } } else { it_ent = G_Spawn(); it_ent->classname = it->classname; - SpawnItem (it_ent, it); - // PMM - since some items don't actually spawn when you say to .. + SpawnItem(it_ent, it); + + /* since some items don't actually spawn when you say to .. */ if (!it_ent->inuse) + { return; - // pmm - Touch_Item (it_ent, ent, NULL, NULL); + } + + Touch_Item(it_ent, ent, NULL, NULL); + if (it_ent->inuse) + { G_FreeEdict(it_ent); + } } } - /* -================== -Cmd_God_f - -Sets client to godmode - -argv(0) god -================== -*/ -void Cmd_God_f (edict_t *ent) + * Sets client to godmode + */ +void +Cmd_God_f(edict_t *ent) { - char *msg; - + char *msg; + + if (!ent) + { + return; + } + if ((deathmatch->value || coop->value) && !sv_cheats->value) { - gi.cprintf (ent, PRINT_HIGH, "You must run the server with '+set cheats 1' to enable this command.\n"); + gi.cprintf(ent, PRINT_HIGH, + "You must run the server with '+set cheats 1' to enable this command.\n"); return; } ent->flags ^= FL_GODMODE; - if (!(ent->flags & FL_GODMODE) ) - msg = "godmode OFF\n"; - else - msg = "godmode ON\n"; - gi.cprintf (ent, PRINT_HIGH, msg); + if (!(ent->flags & FL_GODMODE)) + { + msg = "godmode OFF\n"; + } + else + { + msg = "godmode ON\n"; + } + + gi.cprintf(ent, PRINT_HIGH, msg); } - /* -================== -Cmd_Notarget_f - -Sets client to notarget - -argv(0) notarget -================== -*/ -void Cmd_Notarget_f (edict_t *ent) + * Sets client to notarget + */ +void +Cmd_Notarget_f(edict_t *ent) { - char *msg; - + char *msg; + + if (!ent) + { + return; + } + if ((deathmatch->value || coop->value) && !sv_cheats->value) { - gi.cprintf (ent, PRINT_HIGH, "You must run the server with '+set cheats 1' to enable this command.\n"); + gi.cprintf(ent, PRINT_HIGH, + "You must run the server with '+set cheats 1' to enable this command.\n"); return; } ent->flags ^= FL_NOTARGET; - if (!(ent->flags & FL_NOTARGET) ) - msg = "notarget OFF\n"; - else - msg = "notarget ON\n"; - gi.cprintf (ent, PRINT_HIGH, msg); + if (!(ent->flags & FL_NOTARGET)) + { + msg = "notarget OFF\n"; + } + else + { + msg = "notarget ON\n"; + } + + gi.cprintf(ent, PRINT_HIGH, msg); } - -/* -================== -Cmd_Noclip_f - -argv(0) noclip -================== -*/ -void Cmd_Noclip_f (edict_t *ent) +void +Cmd_Noclip_f(edict_t *ent) { - char *msg; - + char *msg; + + if (!ent) + { + return; + } + if ((deathmatch->value || coop->value) && !sv_cheats->value) { - gi.cprintf (ent, PRINT_HIGH, "You must run the server with '+set cheats 1' to enable this command.\n"); + gi.cprintf(ent, PRINT_HIGH, + "You must run the server with '+set cheats 1' to enable this command.\n"); return; } @@ -377,92 +515,102 @@ void Cmd_Noclip_f (edict_t *ent) msg = "noclip ON\n"; } - gi.cprintf (ent, PRINT_HIGH, msg); + gi.cprintf(ent, PRINT_HIGH, msg); } - /* -================== -Cmd_Use_f - -Use an inventory item -================== -*/ -void Cmd_Use_f (edict_t *ent) + * Use an inventory item + */ +void +Cmd_Use_f(edict_t *ent) { - int index; - gitem_t *it; - char *s; - - s = gi.args(); - it = FindItem (s); - if (!it) + int index; + gitem_t *it; + char *s; + + if (!ent) { - gi.cprintf (ent, PRINT_HIGH, "unknown item: %s\n", s); return; } + + s = gi.args(); + it = FindItem(s); + + if (!it) + { + gi.cprintf(ent, PRINT_HIGH, "unknown item: %s\n", s); + return; + } + if (!it->use) { - gi.cprintf (ent, PRINT_HIGH, "Item is not usable.\n"); + gi.cprintf(ent, PRINT_HIGH, "Item is not usable.\n"); return; } + index = ITEM_INDEX(it); + if (!ent->client->pers.inventory[index]) { - gi.cprintf (ent, PRINT_HIGH, "Out of item: %s\n", s); + gi.cprintf(ent, PRINT_HIGH, "Out of item: %s\n", s); return; } - it->use (ent, it); + it->use(ent, it); } - /* -================== -Cmd_Drop_f - -Drop an inventory item -================== -*/ -void Cmd_Drop_f (edict_t *ent) + * Drop an inventory item + */ +void +Cmd_Drop_f(edict_t *ent) { - int index; - gitem_t *it; - char *s; - + int index; + gitem_t *it; + char *s; + + if (!ent) + { + return; + } + s = gi.args(); - it = FindItem (s); + it = FindItem(s); + if (!it) { - gi.cprintf (ent, PRINT_HIGH, "unknown item: %s\n", s); + gi.cprintf(ent, PRINT_HIGH, "unknown item: %s\n", s); return; } + if (!it->drop) { - gi.cprintf (ent, PRINT_HIGH, "Item is not dropable.\n"); + gi.cprintf(ent, PRINT_HIGH, "Item is not dropable.\n"); return; } + index = ITEM_INDEX(it); + if (!ent->client->pers.inventory[index]) { - gi.cprintf (ent, PRINT_HIGH, "Out of item: %s\n", s); + gi.cprintf(ent, PRINT_HIGH, "Out of item: %s\n", s); return; } - it->drop (ent, it); + it->drop(ent, it); } - -/* -================= -Cmd_Inven_f -================= -*/ -void Cmd_Inven_f (edict_t *ent) +void +Cmd_Inven_f(edict_t *ent) { - int i; - gclient_t *cl; - + int i; + gclient_t *cl; + + if (!ent) + { + return; + } + cl = ent->client; cl->showscores = false; @@ -476,214 +624,280 @@ void Cmd_Inven_f (edict_t *ent) cl->showinventory = true; - gi.WriteByte (svc_inventory); - for (i=0 ; ipers.inventory[i]); + gi.WriteShort(cl->pers.inventory[i]); } - gi.unicast (ent, true); + + gi.unicast(ent, true); } -/* -================= -Cmd_InvUse_f -================= -*/ -void Cmd_InvUse_f (edict_t *ent) +void +Cmd_InvUse_f(edict_t *ent) { - gitem_t *it; - - ValidateSelectedItem (ent); + gitem_t *it; + + if (!ent) + { + return; + } + + ValidateSelectedItem(ent); if (ent->client->pers.selected_item == -1) { - gi.cprintf (ent, PRINT_HIGH, "No item to use.\n"); + gi.cprintf(ent, PRINT_HIGH, "No item to use.\n"); return; } it = &itemlist[ent->client->pers.selected_item]; + if (!it->use) { - gi.cprintf (ent, PRINT_HIGH, "Item is not usable.\n"); + gi.cprintf(ent, PRINT_HIGH, "Item is not usable.\n"); return; } - it->use (ent, it); + + it->use(ent, it); } -/* -================= -Cmd_WeapPrev_f -================= -*/ -void Cmd_WeapPrev_f (edict_t *ent) +void +Cmd_WeapPrev_f(edict_t *ent) { - gclient_t *cl; - int i, index; - gitem_t *it; - int selected_weapon; - + gclient_t *cl; + int i, index; + gitem_t *it; + int selected_weapon; + + if (!ent) + { + return; + } + cl = ent->client; if (!cl->pers.weapon) + { return; + } selected_weapon = ITEM_INDEX(cl->pers.weapon); - // scan for the next valid one - for (i=1 ; i<=MAX_ITEMS ; i++) + /* scan for the next valid one */ + for (i = 1; i <= MAX_ITEMS; i++) { - // PMM - prevent scrolling through ALL weapons - index = (selected_weapon + MAX_ITEMS - i)%MAX_ITEMS; + /* prevent scrolling through ALL weapons */ + index = (selected_weapon + MAX_ITEMS - i) % MAX_ITEMS; + if (!cl->pers.inventory[index]) + { continue; + } + it = &itemlist[index]; + if (!it->use) + { continue; - if (! (it->flags & IT_WEAPON) ) + } + + if (!(it->flags & IT_WEAPON)) + { continue; - it->use (ent, it); - // PMM - prevent scrolling through ALL weapons + } + + it->use(ent, it); + + /* prevent scrolling through ALL weapons */ if (cl->newweapon == it) + { return; + } } } -/* -================= -Cmd_WeapNext_f -================= -*/ -void Cmd_WeapNext_f (edict_t *ent) +void +Cmd_WeapNext_f(edict_t *ent) { - gclient_t *cl; - int i, index; - gitem_t *it; - int selected_weapon; - + gclient_t *cl; + int i, index; + gitem_t *it; + int selected_weapon; + + if (!ent) + { + return; + } + cl = ent->client; if (!cl->pers.weapon) + { return; + } selected_weapon = ITEM_INDEX(cl->pers.weapon); - // scan for the next valid one - for (i=1 ; i<=MAX_ITEMS ; i++) + /* scan for the next valid one */ + for (i = 1; i <= MAX_ITEMS; i++) { - // PMM - prevent scrolling through ALL weapons - index = (selected_weapon + i)%MAX_ITEMS; + /* prevent scrolling through ALL weapons */ + index = (selected_weapon + i) % MAX_ITEMS; + if (!cl->pers.inventory[index]) + { continue; + } + it = &itemlist[index]; + if (!it->use) + { continue; - if (! (it->flags & IT_WEAPON) ) + } + + if (!(it->flags & IT_WEAPON)) + { continue; - it->use (ent, it); - // PMM - prevent scrolling through ALL weapons + } + + it->use(ent, it); + + /* prevent scrolling through ALL weapons */ if (cl->newweapon == it) + { return; + } } } -/* -================= -Cmd_WeapLast_f -================= -*/ -void Cmd_WeapLast_f (edict_t *ent) +void +Cmd_WeapLast_f(edict_t *ent) { - gclient_t *cl; - int index; - gitem_t *it; - + gclient_t *cl; + int index; + gitem_t *it; + + if (!ent) + { + return; + } + cl = ent->client; if (!cl->pers.weapon || !cl->pers.lastweapon) + { return; + } index = ITEM_INDEX(cl->pers.lastweapon); + if (!cl->pers.inventory[index]) + { return; + } + it = &itemlist[index]; + if (!it->use) + { return; - if (! (it->flags & IT_WEAPON) ) + } + + if (!(it->flags & IT_WEAPON)) + { return; - it->use (ent, it); + } + + it->use(ent, it); } -/* -================= -Cmd_InvDrop_f -================= -*/ -void Cmd_InvDrop_f (edict_t *ent) +void +Cmd_InvDrop_f(edict_t *ent) { - gitem_t *it; - - ValidateSelectedItem (ent); + gitem_t *it; + + if (!ent) + { + return; + } + + ValidateSelectedItem(ent); if (ent->client->pers.selected_item == -1) { - gi.cprintf (ent, PRINT_HIGH, "No item to drop.\n"); + gi.cprintf(ent, PRINT_HIGH, "No item to drop.\n"); return; } it = &itemlist[ent->client->pers.selected_item]; + if (!it->drop) { - gi.cprintf (ent, PRINT_HIGH, "Item is not dropable.\n"); + gi.cprintf(ent, PRINT_HIGH, "Item is not dropable.\n"); return; } - it->drop (ent, it); + + it->drop(ent, it); } -/* -================= -Cmd_Kill_f -================= -*/ -void Cmd_Kill_f (edict_t *ent) -{ - if((level.time - ent->client->respawn_time) < 5) +void +Cmd_Kill_f(edict_t *ent) +{ + if (!ent) + { return; + } + + if ((level.time - ent->client->respawn_time) < 5) + { + return; + } + ent->flags &= ~FL_GODMODE; ent->health = 0; meansOfDeath = MOD_SUICIDE; - //ROGUE - // make sure no trackers are still hurting us. - if(ent->client->tracker_pain_framenum) - RemoveAttackingPainDaemons (ent); + /* make sure no trackers are still hurting us. */ + if (ent->client->tracker_pain_framenum) + { + RemoveAttackingPainDaemons(ent); + } if (ent->client->owned_sphere) { G_FreeEdict(ent->client->owned_sphere); ent->client->owned_sphere = NULL; } - //ROGUE - player_die (ent, ent, ent, 100000, vec3_origin); + player_die(ent, ent, ent, 100000, vec3_origin); } -/* -================= -Cmd_PutAway_f -================= -*/ -void Cmd_PutAway_f (edict_t *ent) -{ +void +Cmd_PutAway_f(edict_t *ent) +{ + if (!ent) + { + return; + } + ent->client->showscores = false; ent->client->showhelp = false; ent->client->showinventory = false; } - -int PlayerSort (void const *a, void const *b) +int +PlayerSort(void const *a, void const *b) { - int anum, bnum; - + int anum, bnum; + + if (!a || !b) + { + return 0; + } + anum = *(int *)a; bnum = *(int *)b; @@ -691,135 +905,162 @@ int PlayerSort (void const *a, void const *b) bnum = game.clients[bnum].ps.stats[STAT_FRAGS]; if (anum < bnum) + { return -1; + } + if (anum > bnum) + { return 1; + } + return 0; } -/* -================= -Cmd_Players_f -================= -*/ -void Cmd_Players_f (edict_t *ent) +void +Cmd_Players_f(edict_t *ent) { - int i; - int count; - char small[64]; - char large[1280]; - int index[256]; - + int i; + int count; + char small[64]; + char large[1280]; + int index[256]; + + if (!ent) + { + return; + } + count = 0; - for (i = 0 ; i < maxclients->value ; i++) + + for (i = 0; i < maxclients->value; i++) + { if (game.clients[i].pers.connected) { index[count] = i; count++; } - - // sort by frags - qsort (index, count, sizeof(index[0]), PlayerSort); - - // print information - large[0] = 0; - - for (i = 0 ; i < count ; i++) - { - Com_sprintf (small, sizeof(small), "%3i %s\n", - game.clients[index[i]].ps.stats[STAT_FRAGS], - game.clients[index[i]].pers.netname); - if (strlen (small) + strlen(large) > sizeof(large) - 100 ) - { // can't print all of them in one packet - strcat (large, "...\n"); - break; - } - strcat (large, small); } - gi.cprintf (ent, PRINT_HIGH, "%s\n%i players\n", large, count); + /* sort by frags */ + qsort(index, count, sizeof(index[0]), PlayerSort); + + /* print information */ + large[0] = 0; + + for (i = 0; i < count; i++) + { + Com_sprintf(small, sizeof(small), "%3i %s\n", + game.clients[index[i]].ps.stats[STAT_FRAGS], + game.clients[index[i]].pers.netname); + + if (strlen(small) + strlen(large) > sizeof(large) - 100) + { + /* can't print all of them in one packet */ + strcat(large, "...\n"); + break; + } + + strcat(large, small); + } + + gi.cprintf(ent, PRINT_HIGH, "%s\n%i players\n", large, count); } -/* -================= -Cmd_Wave_f -================= -*/ -void Cmd_Wave_f (edict_t *ent) +void +Cmd_Wave_f(edict_t *ent) { - int i; - - i = atoi (gi.argv(1)); - - // can't wave when ducked - if (ent->client->ps.pmove.pm_flags & PMF_DUCKED) + int i; + + if (!ent) + { return; + } + + i = atoi(gi.argv(1)); + + /* can't wave when ducked */ + if (ent->client->ps.pmove.pm_flags & PMF_DUCKED) + { + return; + } if (ent->client->anim_priority > ANIM_WAVE) + { return; + } ent->client->anim_priority = ANIM_WAVE; switch (i) { - case 0: - gi.cprintf (ent, PRINT_HIGH, "flipoff\n"); - ent->s.frame = FRAME_flip01-1; - ent->client->anim_end = FRAME_flip12; - break; - case 1: - gi.cprintf (ent, PRINT_HIGH, "salute\n"); - ent->s.frame = FRAME_salute01-1; - ent->client->anim_end = FRAME_salute11; - break; - case 2: - gi.cprintf (ent, PRINT_HIGH, "taunt\n"); - ent->s.frame = FRAME_taunt01-1; - ent->client->anim_end = FRAME_taunt17; - break; - case 3: - gi.cprintf (ent, PRINT_HIGH, "wave\n"); - ent->s.frame = FRAME_wave01-1; - ent->client->anim_end = FRAME_wave11; - break; - case 4: - default: - gi.cprintf (ent, PRINT_HIGH, "point\n"); - ent->s.frame = FRAME_point01-1; - ent->client->anim_end = FRAME_point12; - break; + case 0: + gi.cprintf(ent, PRINT_HIGH, "flipoff\n"); + ent->s.frame = FRAME_flip01 - 1; + ent->client->anim_end = FRAME_flip12; + break; + case 1: + gi.cprintf(ent, PRINT_HIGH, "salute\n"); + ent->s.frame = FRAME_salute01 - 1; + ent->client->anim_end = FRAME_salute11; + break; + case 2: + gi.cprintf(ent, PRINT_HIGH, "taunt\n"); + ent->s.frame = FRAME_taunt01 - 1; + ent->client->anim_end = FRAME_taunt17; + break; + case 3: + gi.cprintf(ent, PRINT_HIGH, "wave\n"); + ent->s.frame = FRAME_wave01 - 1; + ent->client->anim_end = FRAME_wave11; + break; + case 4: + default: + gi.cprintf(ent, PRINT_HIGH, "point\n"); + ent->s.frame = FRAME_point01 - 1; + ent->client->anim_end = FRAME_point12; + break; } } -/* -================== -Cmd_Say_f -================== -*/ -void Cmd_Say_f (edict_t *ent, qboolean team, qboolean arg0) +void +Cmd_Say_f(edict_t *ent, qboolean team, qboolean arg0) { - int i, j; - edict_t *other; - char *p; - char text[2048]; + int i, j; + edict_t *other; + char *p; + char text[2048]; gclient_t *cl; - - if (gi.argc () < 2 && !arg0) + + if (!ent) + { return; + } + + if ((gi.argc() < 2) && !arg0) + { + return; + } if (!((int)(dmflags->value) & (DF_MODELTEAMS | DF_SKINTEAMS))) + { team = false; + } if (team) - Com_sprintf (text, sizeof(text), "(%s): ", ent->client->pers.netname); + { + Com_sprintf(text, sizeof(text), "(%s): ", ent->client->pers.netname); + } else - Com_sprintf (text, sizeof(text), "%s: ", ent->client->pers.netname); + { + Com_sprintf(text, sizeof(text), "%s: ", ent->client->pers.netname); + } if (arg0) { - strcat (text, gi.argv(0)); - strcat (text, " "); - strcat (text, gi.args()); + strcat(text, gi.argv(0)); + strcat(text, " "); + strcat(text, gi.args()); } else { @@ -828,204 +1069,302 @@ void Cmd_Say_f (edict_t *ent, qboolean team, qboolean arg0) if (*p == '"') { p++; - p[strlen(p)-1] = 0; + p[strlen(p) - 1] = 0; } + strcat(text, p); } - // don't let text be too long for malicious reasons + /* don't let text be too long for malicious reasons */ if (strlen(text) > 150) + { text[150] = 0; + } strcat(text, "\n"); - if (flood_msgs->value) { + if (flood_msgs->value) + { cl = ent->client; - if (level.time < cl->flood_locktill) { + if (level.time < cl->flood_locktill) + { gi.cprintf(ent, PRINT_HIGH, "You can't talk for %d more seconds\n", - (int)(cl->flood_locktill - level.time)); - return; - } - i = cl->flood_whenhead - flood_msgs->value + 1; - if (i < 0) - i = (sizeof(cl->flood_when)/sizeof(cl->flood_when[0])) + i; - if (cl->flood_when[i] && - level.time - cl->flood_when[i] < flood_persecond->value) { + (int)(cl->flood_locktill - level.time)); + return; + } + + i = cl->flood_whenhead - flood_msgs->value + 1; + + if (i < 0) + { + i = (sizeof(cl->flood_when) / sizeof(cl->flood_when[0])) + i; + } + + if (cl->flood_when[i] && + (level.time - cl->flood_when[i] < flood_persecond->value)) + { cl->flood_locktill = level.time + flood_waitdelay->value; - gi.cprintf(ent, PRINT_CHAT, "Flood protection: You can't talk for %d seconds.\n", - (int)flood_waitdelay->value); - return; - } - cl->flood_whenhead = (cl->flood_whenhead + 1) % - (sizeof(cl->flood_when)/sizeof(cl->flood_when[0])); + gi.cprintf(ent, PRINT_CHAT, + "Flood protection: You can't talk for %d seconds.\n", + (int)flood_waitdelay->value); + return; + } + + cl->flood_whenhead = (cl->flood_whenhead + 1) % (sizeof(cl->flood_when) / + sizeof(cl->flood_when[0])); cl->flood_when[cl->flood_whenhead] = level.time; } if (dedicated->value) + { gi.cprintf(NULL, PRINT_CHAT, "%s", text); + } for (j = 1; j <= game.maxclients; j++) { other = &g_edicts[j]; + if (!other->inuse) + { continue; + } + if (!other->client) + { continue; + } + if (team) { if (!OnSameTeam(ent, other)) + { continue; + } } + gi.cprintf(other, PRINT_CHAT, "%s", text); } } -//====== -//ROGUE -void Cmd_Ent_Count_f (edict_t *ent) +void +Cmd_Ent_Count_f(edict_t *ent) { - int x; - edict_t *e; - - x=0; - - for (e=g_edicts;e < &g_edicts[globals.num_edicts] ; e++) + int x; + edict_t *e; + + if (!ent) { - if(e->inuse) + return; + } + + x = 0; + + for (e = g_edicts; e < &g_edicts[globals.num_edicts]; e++) + { + if (e->inuse) + { x++; + } } gi.dprintf("%d entites active\n", x); } -//ROGUE -//====== -void Cmd_PlayerList_f(edict_t *ent) +void +Cmd_PlayerList_f(edict_t *ent) { int i; char st[80]; char text[1400]; edict_t *e2; - - // connect time, ping, score, name + + if (!ent) + { + return; + } + + /* connect time, ping, score, name */ *text = 0; - for (i = 0, e2 = g_edicts + 1; i < maxclients->value; i++, e2++) { + + for (i = 0, e2 = g_edicts + 1; i < maxclients->value; i++, e2++) + { if (!e2->inuse) + { continue; + } Com_sprintf(st, sizeof(st), "%02d:%02d %4d %3d %s%s\n", - (level.framenum - e2->client->resp.enterframe) / 600, - ((level.framenum - e2->client->resp.enterframe) % 600)/10, - e2->client->ping, - e2->client->resp.score, - e2->client->pers.netname, - e2->client->resp.spectator ? " (spectator)" : ""); - if (strlen(text) + strlen(st) > sizeof(text) - 50) { - sprintf(text+strlen(text), "And more...\n"); + (level.framenum - e2->client->resp.enterframe) / 600, + ((level.framenum - e2->client->resp.enterframe) % 600) / 10, + e2->client->ping, e2->client->resp.score, + e2->client->pers.netname, + e2->client->resp.spectator ? " (spectator)" : ""); + + if (strlen(text) + strlen(st) > sizeof(text) - 50) + { + sprintf(text + strlen(text), "And more...\n"); gi.cprintf(ent, PRINT_HIGH, "%s", text); return; } + strcat(text, st); } + gi.cprintf(ent, PRINT_HIGH, "%s", text); } - -/* -================= -ClientCommand -================= -*/ -void ClientCommand (edict_t *ent) +void +ClientCommand(edict_t *ent) { - char *cmd; - + char *cmd; + + if (!ent) + { + return; + } + if (!ent->client) - return; // not fully in game yet + { + return; /* not fully in game yet */ + } cmd = gi.argv(0); - if (Q_stricmp (cmd, "players") == 0) + if (Q_stricmp(cmd, "players") == 0) { - Cmd_Players_f (ent); + Cmd_Players_f(ent); return; } - if (Q_stricmp (cmd, "say") == 0) + + if (Q_stricmp(cmd, "say") == 0) { - Cmd_Say_f (ent, false, false); + Cmd_Say_f(ent, false, false); return; } - if (Q_stricmp (cmd, "say_team") == 0) + + if (Q_stricmp(cmd, "say_team") == 0) { - Cmd_Say_f (ent, true, false); + Cmd_Say_f(ent, true, false); return; } - if (Q_stricmp (cmd, "score") == 0) + + if (Q_stricmp(cmd, "score") == 0) { - Cmd_Score_f (ent); + Cmd_Score_f(ent); return; } - if (Q_stricmp (cmd, "help") == 0) + + if (Q_stricmp(cmd, "help") == 0) { - Cmd_Help_f (ent); + Cmd_Help_f(ent); return; } if (level.intermissiontime) + { return; + } - if (Q_stricmp (cmd, "use") == 0) - Cmd_Use_f (ent); - else if (Q_stricmp (cmd, "drop") == 0) - Cmd_Drop_f (ent); - else if (Q_stricmp (cmd, "give") == 0) - Cmd_Give_f (ent); - else if (Q_stricmp (cmd, "god") == 0) - Cmd_God_f (ent); - else if (Q_stricmp (cmd, "notarget") == 0) - Cmd_Notarget_f (ent); - else if (Q_stricmp (cmd, "noclip") == 0) - Cmd_Noclip_f (ent); - else if (Q_stricmp (cmd, "inven") == 0) - Cmd_Inven_f (ent); - else if (Q_stricmp (cmd, "invnext") == 0) - SelectNextItem (ent, -1); - else if (Q_stricmp (cmd, "invprev") == 0) - SelectPrevItem (ent, -1); - else if (Q_stricmp (cmd, "invnextw") == 0) - SelectNextItem (ent, IT_WEAPON); - else if (Q_stricmp (cmd, "invprevw") == 0) - SelectPrevItem (ent, IT_WEAPON); - else if (Q_stricmp (cmd, "invnextp") == 0) - SelectNextItem (ent, IT_POWERUP); - else if (Q_stricmp (cmd, "invprevp") == 0) - SelectPrevItem (ent, IT_POWERUP); - else if (Q_stricmp (cmd, "invuse") == 0) - Cmd_InvUse_f (ent); - else if (Q_stricmp (cmd, "invdrop") == 0) - Cmd_InvDrop_f (ent); - else if (Q_stricmp (cmd, "weapprev") == 0) - Cmd_WeapPrev_f (ent); - else if (Q_stricmp (cmd, "weapnext") == 0) - Cmd_WeapNext_f (ent); - else if (Q_stricmp (cmd, "weaplast") == 0) - Cmd_WeapLast_f (ent); - else if (Q_stricmp (cmd, "kill") == 0) - Cmd_Kill_f (ent); - else if (Q_stricmp (cmd, "putaway") == 0) - Cmd_PutAway_f (ent); - else if (Q_stricmp (cmd, "wave") == 0) - Cmd_Wave_f (ent); + if (Q_stricmp(cmd, "use") == 0) + { + Cmd_Use_f(ent); + } + else if (Q_stricmp(cmd, "drop") == 0) + { + Cmd_Drop_f(ent); + } + else if (Q_stricmp(cmd, "give") == 0) + { + Cmd_Give_f(ent); + } + else if (Q_stricmp(cmd, "god") == 0) + { + Cmd_God_f(ent); + } + else if (Q_stricmp(cmd, "notarget") == 0) + { + Cmd_Notarget_f(ent); + } + else if (Q_stricmp(cmd, "noclip") == 0) + { + Cmd_Noclip_f(ent); + } + else if (Q_stricmp(cmd, "inven") == 0) + { + Cmd_Inven_f(ent); + } + else if (Q_stricmp(cmd, "invnext") == 0) + { + SelectNextItem(ent, -1); + } + else if (Q_stricmp(cmd, "invprev") == 0) + { + SelectPrevItem(ent, -1); + } + else if (Q_stricmp(cmd, "invnextw") == 0) + { + SelectNextItem(ent, IT_WEAPON); + } + else if (Q_stricmp(cmd, "invprevw") == 0) + { + SelectPrevItem(ent, IT_WEAPON); + } + else if (Q_stricmp(cmd, "invnextp") == 0) + { + SelectNextItem(ent, IT_POWERUP); + } + else if (Q_stricmp(cmd, "invprevp") == 0) + { + SelectPrevItem(ent, IT_POWERUP); + } + else if (Q_stricmp(cmd, "invuse") == 0) + { + Cmd_InvUse_f(ent); + } + else if (Q_stricmp(cmd, "invdrop") == 0) + { + Cmd_InvDrop_f(ent); + } + else if (Q_stricmp(cmd, "weapprev") == 0) + { + Cmd_WeapPrev_f(ent); + } + else if (Q_stricmp(cmd, "weapnext") == 0) + { + Cmd_WeapNext_f(ent); + } + else if (Q_stricmp(cmd, "weaplast") == 0) + { + Cmd_WeapLast_f(ent); + } + else if (Q_stricmp(cmd, "kill") == 0) + { + Cmd_Kill_f(ent); + } + else if (Q_stricmp(cmd, "putaway") == 0) + { + Cmd_PutAway_f(ent); + } + else if (Q_stricmp(cmd, "wave") == 0) + { + Cmd_Wave_f(ent); + } else if (Q_stricmp(cmd, "playerlist") == 0) + { Cmd_PlayerList_f(ent); - else if (Q_stricmp (cmd, "entcount") == 0) // PGM - Cmd_Ent_Count_f (ent); // PGM - else if (Q_stricmp (cmd, "disguise") == 0) // PGM + } + else if (Q_stricmp(cmd, "entcount") == 0) + { + Cmd_Ent_Count_f(ent); + } + else if (Q_stricmp(cmd, "disguise") == 0) { ent->flags |= FL_DISGUISED; } - else // anything that doesn't match a command will be a chat - Cmd_Say_f (ent, false, true); + else /* anything that doesn't match a command will be a chat */ + { + Cmd_Say_f(ent, false, true); + } }