#include <stdio.h> #include <stdlib.h> #include "db.h" #include "externs.h" static time_t *cmdav_list = NULL; void do_haltall(OBJ *player) { CODE *c, *cnext; if(!power(player, POW_SECURITY)) { notify(player, perm_denied()); return; } log_important(tprintf("%s executed: @haltall", name(player))); for(c = code_list;c;c = cnext) { cnext = c->next; end_program(c->program, 0); } } void do_halt(OBJ *player, char *arg) { CODE *c, *cnext; OBJ *victim; if(!*arg) victim = player; else { victim = match_object(player, arg, NOTYPE); if(!victim) { notify(player, no_match(arg)); return; } } if(!controls(player, victim, POW_MODIFY)) { notify(player, perm_denied()); return; } for(c = code_list;c;c = cnext) { cnext = c->next; if(c->executor == victim) end_program(c->program, 0); } notify(player, tprintf("%s halted.", unparse_object(player, victim))); } void do_ps(OBJ *player) { show_softcode_queue(player); } static void update_cmdav_list() { int i, j; if(!cmdav_list) { cmdav_list = (time_t *)stack_alloc(sizeof(time_t), 1, 0); *cmdav_list = 0; return; } for(i = 0;cmdav_list[i] && cmdav_list[i] < now-60;i++); /* Whole loop */ for(j = 0;cmdav_list[i];j++, i++) cmdav_list[j] = cmdav_list[i]; cmdav_list[j] = 0; cmdav_list = (time_t *)stack_realloc(cmdav_list, sizeof(time_t)*(j+1)); } static int cnt_cmdav_times(time_t seconds) { int i, j; for(i = 0;cmdav_list[i] && cmdav_list[i] < seconds;++i); /* Whole loop */ for(j = 0;cmdav_list[i];i++, j++); /* Whole loop */ return(j); } void do_cmdav(OBJ *player) { update_cmdav_list(); notify(player, "|+W|Commands in the last..."); notify(player, tprintf("|+B|5 seconds |+W|: |+C|%d", cnt_cmdav_times(now-5))); notify(player, tprintf("|+B|30 seconds|+W|: |+C|%d", cnt_cmdav_times(now-30))); notify(player, tprintf("|+B|60 seconds|+W|: |+C|%d", cnt_cmdav_times(now-60))); } void inc_cmdav() { int i; static int hits = 0; if(hits++ > 50) { update_cmdav_list(); hits = 0; } if(!cmdav_list) { cmdav_list = (time_t *)stack_alloc(sizeof(time_t)*2, 1, 0); cmdav_list[0] = now; cmdav_list[1] = 0; return; } for(i = 0;cmdav_list[i];++i); /* Whole loop */ cmdav_list = (time_t *)stack_realloc(cmdav_list, sizeof(time_t)*(i+2)); cmdav_list[i] = now; cmdav_list[i+1] = 0; } void free_cmdav(void) { stack_free(cmdav_list); }