Date: Friday June 21, 2002 @ 2:41 Author: cameron Update of /home/netrek/cvsroot/Vanilla/ntserv In directory swashbuckler.real-time.com:/var/tmp/cvs-serv28436/ntserv Modified Files: main.c ntscmds.c transwarp.c Log Message: transwarp permissions **************************************** Index: Vanilla/ntserv/main.c diff -u Vanilla/ntserv/main.c:1.23 Vanilla/ntserv/main.c:1.24 --- Vanilla/ntserv/main.c:1.23 Tue May 1 21:00:19 2001 +++ Vanilla/ntserv/main.c Fri Jun 21 02:41:35 2002 @@ -405,6 +405,7 @@ j->voting[me->p_no] = -1; #endif me->p_candock = 1; + me->p_transwarp = PFGREEN|PFYELLOW|PFRED; /* Get input until the player quits or dies */ living++; while (living) input(); Index: Vanilla/ntserv/ntscmds.c diff -u Vanilla/ntserv/ntscmds.c:1.22 Vanilla/ntserv/ntscmds.c:1.23 --- Vanilla/ntserv/ntscmds.c:1.22 Wed Jun 19 01:50:57 2002 +++ Vanilla/ntserv/ntscmds.c Fri Jun 21 02:41:35 2002 @@ -1,4 +1,4 @@ -/* $Id: ntscmds.c,v 1.22 2002/06/19 06:50:57 cameron Exp $ +/* $Id: ntscmds.c,v 1.23 2002/06/21 07:41:35 cameron Exp $ */ /* @@ -54,6 +54,7 @@ #endif void do_password(char *comm, struct message *mess); void do_nodock(char *comm, struct message *mess); +void do_transwarp(char *comm, struct message *mess); void do_admin(char *comm, struct message *mess); const char myname[] = {"GOD"}; @@ -123,6 +124,13 @@ do_nodock }, #endif +#ifdef NOTRANSWARP + { "TRANSWARP", + C_PR_INPICKUP, + "Set transwarp permission for all players. eg. 'TRANSWARP ON|OFF'", + do_transwarp }, +#endif + #ifdef ALLOW_PAUSE { "PAUSE", 0, @@ -1213,6 +1221,66 @@ pmessage(whofrom, MINDIV, addr, "Slot %c is allowed to dock to SB", *who); } else pmessage(whofrom, MINDIV, addr, "dock usage: dock 0 on|off"); +} + +void do_transwarp(char *comm, struct message *mess) +{ + int whofrom = mess->m_from; + struct player *p = &players[whofrom]; + struct player *victim; + char *addr = addr_mess(whofrom,MINDIV); + char *who, *what; + char *usage = "transwarp usage: 'TRANSWARP ON|GREEN|YELLOW|SHIELD|OFF'"; + int slot; + + if (p->p_ship.s_type != STARBASE) { + pmessage(whofrom, MINDIV, addr, "transwarp: must be a starbase to use this"); + return; + } + +#ifdef OBSERVERS + if (p->p_status == POBSERV) { + pmessage(whofrom, MINDIV, addr, "transwarp: observers may not do this"); + return; + } +#endif + + what = strtok(comm, " "); + if (what == NULL) return; + + what = strtok(NULL, " "); + if (what == NULL) { + pmessage(whofrom, MINDIV, addr, usage); + return; + } + + if (!strcmp("off", what) ) { + me->p_transwarp = 0; + pmessage(me->p_team, MTEAM, + addr_mess(me->p_team,MTEAM), + "Starbase %s refusing transwarp", me->p_mapchars); + } else if (!strcmp("green", what)) { + me->p_transwarp = PFGREEN; + pmessage(me->p_team, MTEAM, + addr_mess(me->p_team,MTEAM), + "Starbase %s refusing transwarp in red or yellow alert", me->p_mapchars); + } else if (!strcmp("yellow", what)) { + me->p_transwarp = PFYELLOW|PFGREEN; + pmessage(me->p_team, MTEAM, + addr_mess(me->p_team,MTEAM), + "Starbase %s refusing transwarp in red alert", me->p_mapchars); + } else if (!strcmp("shield", what)) { + me->p_transwarp = PFSHIELD; + pmessage(me->p_team, MTEAM, + addr_mess(me->p_team,MTEAM), + "Starbase %s refusing transwarp while shields up", me->p_mapchars); + } else if (!strcmp("on", what)) { + me->p_transwarp = PFGREEN|PFYELLOW|PFRED; + pmessage(me->p_team, MTEAM, + addr_mess(me->p_team,MTEAM), + "Starbase %s transwarp restored", me->p_mapchars); + } + else pmessage(whofrom, MINDIV, addr, usage); } void do_admin(char *comm, struct message *mess) Index: Vanilla/ntserv/transwarp.c diff -u Vanilla/ntserv/transwarp.c:1.3 Vanilla/ntserv/transwarp.c:1.4 --- Vanilla/ntserv/transwarp.c:1.3 Sat Jul 1 02:43:31 2000 +++ Vanilla/ntserv/transwarp.c Fri Jun 21 02:41:35 2002 @@ -1,4 +1,4 @@ -/* $Id: transwarp.c,v 1.3 2000/07/01 07:43:31 xyzzy Exp $ +/* $Id: transwarp.c,v 1.4 2002/06/21 07:41:35 cameron Exp $ * transwarp.c by isae at IASTATE.EDU */ #include "copyright.h" @@ -28,8 +28,12 @@ } if (me->p_status != PALIVE) return (0); + if (!me->p_candock) { + new_warning(UNDEF, "Starbase refuses docking from us in particular, captain!", -1); + return (0); + } if (me->p_flags & PFENG) { - new_warning(UNDEF, "Engine temp is too high to initiate transwarp!", -1); + new_warning(UNDEF, "Engine temperature is too high to initiate transwarp!", -1); return (0); } if (me->p_ship.s_type == STARBASE) { @@ -56,7 +60,22 @@ return (0); } if (!(j->p_flags & PFDOCKOK)) { - new_warning(UNDEF, "Starbase refusing us transwarp permission captain!", -1); + new_warning(UNDEF, "Starbase refusing all docking permission captain!", -1); + return (0); + } + if (!(j->p_transwarp & (j->p_flags ^ PFSHIELD))) { + char *reason = ""; + switch (j->p_transwarp) { + case PFGREEN: + reason = "Starbase refusing transwarp, in red or yellow alert"; break; + case PFYELLOW|PFGREEN: + reason = "Starbase refusing transwarp, in red alert"; break; + case PFSHIELD: + reason = "Starbase refusing transwarp, her shields are up"; break; + default: + reason = "Starbase refusing transwarp, captain!"; break; + } + new_warning(UNDEF, reason, -1); return (0); } if (me->p_speed > MIN_INITIAL_SPEED) {