PennMUSH 1.8.3p11
authorRick L Bird <nveid@yahoo.com>
Fri, 6 May 2011 00:53:22 +0000 (20:53 -0400)
committerRick L Bird <nveid@yahoo.com>
Fri, 6 May 2011 00:53:22 +0000 (20:53 -0400)
Author: talvo@talvo.com
<talvo@talvo.com@ba372814-4f39-11de-9ad6-1127a62b9fcd>
Date:   Fri Nov 27 00:01:23 2009 +0000

    Issue 140, @pemit <name>= would show nospoof info to <name>

Author: talvo@talvo.com
<talvo@talvo.com@ba372814-4f39-11de-9ad6-1127a62b9fcd>
Date:   Thu Nov 26 23:53:54 2009 +0000

    Issue 142, @pemit/port and pemit(<port>, <msg>).

Fixes #164
Fixes #129

hdrs/game.h
src/bsd.c
src/cmds.c
src/command.c
src/funmisc.c
src/speech.c

index 31cb2298d9d74fc9f02d6a6d3fdd138c7f5fb2f6..59bff4fe1998a7f0730ee514e6aa44b62bf3df36 100644 (file)
@@ -135,6 +135,7 @@ extern void do_page(dbref player, const char *arg1, const char *arg2,
                     dbref cause, int noeval, int multipage, int override,
                     int has_eq);
 extern void do_page_port(dbref player, dbref cause, const char *arg1, const char *arg2, bool noeval_msg);
+extern void do_pemit_port(dbref player, const char *pc, const char *msg, int flags);
 extern void do_think(dbref player, const char *message);
 #define PEMIT_SILENT 0x1
 #define PEMIT_LIST   0x2
index edfb67fcf51742304bc9ec4d4d4ad06b58c98403..7dc130f174a6cc82272ceae851d396618fa7745a 100644 (file)
--- a/src/bsd.c
+++ b/src/bsd.c
@@ -3107,10 +3107,51 @@ player_desc(dbref player)
   return (DESC *) NULL;
 }
 
+
+/** Pemit to a specified socket.
+ * \param player the enactor.
+ * \param pc string containing port number to send message to.
+ * \param message message to send.
+ * \param flags PEMIT_* flags
+ */
+void
+do_pemit_port(dbref player, const char *pc, const char *message, int flags) {
+       DESC *d;
+       int port;
+
+       if (!Site(player)) {
+               notify(player, T("Permission denied."));
+               return;
+       }
+
+       port = atoi(pc);
+       if (port <= 0) {
+               notify(player, T("That's not a port number."));
+               return;
+       }
+
+       if (!*message) {
+               return;
+       }
+
+       d = port_desc(port);
+       if (!d) {
+               notify(player, T("That port is not active."));
+               return;
+       }
+
+       if (!(flags & PEMIT_SILENT))
+               notify_format(player, T("You pemit \"%s\" to %s."), message, (d->connected ? Name(d->player) : T("a connecting player")));
+       queue_string_eol(d, message);
+
+}
+
 /** Page a specified socket.
  * \param player the enactor.
+ * \param cause the cause
  * \param pc string containing port number to send message to.
  * \param message message to send.
+ * \param eval_msg Should message be evaluated?
  */
 void
 do_page_port(dbref player, dbref cause, const char *pc,
index 498c5f1f7ff9461f1c109a960bbf40e0797b6326..e3969e165b136a443e912ae7c32148851a5a9e29 100644 (file)
@@ -849,13 +849,19 @@ COMMAND(cmd_pemit)
 {
   int flags;
 
-  SPOOF(player, cause, sw);
   if (SW_ISSET(sw, SWITCH_SILENT))
     flags = PEMIT_SILENT;
   else if (SW_ISSET(sw, SWITCH_NOISY))
     flags = 0;
   else
     flags = SILENT_PEMIT ? PEMIT_SILENT : 0;
+  
+  if(SW_ISSET(sw, SWITCH_PORT)) {
+    do_pemit_port(player, arg_left, arg_right, flags);
+    return;
+  } 
+
+  SPOOF(player, cause, sw); 
 
   if (!strcmp(cmd->name, "@NSPEMIT"))
     flags |= PEMIT_SPOOF;
index 1b68689d5b2c33c485df049c55e18fddf21eca52..f7a13ca4b66c75d5ec58abbac58291f92d7b3935 100644 (file)
@@ -251,7 +251,7 @@ COMLIST commands[] = {
    | CMD_T_RS_NOPARSE | CMD_T_NOGUEST, NULL},
   {"@PCREATE", NULL, cmd_pcreate, CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_RS_ARGS, "!POWER^GUEST"},
 
-  {"@PEMIT", "LIST CONTENTS SILENT NOISY NOEVAL SPOOF", cmd_pemit,
+  {"@PEMIT", "LIST CONTENTS SILENT NOISY NOEVAL PORT SPOOF", cmd_pemit,
    CMD_T_ANY | CMD_T_EQSPLIT | CMD_T_NOGAGGED, NULL},
   {"@POLL", "CLEAR", cmd_poll, CMD_T_ANY, NULL},
   {"@POOR", NULL, cmd_poor, CMD_T_ANY, NULL},
index 3770caf4a5c4728117b85948cf4dcd55bbabf3ce..98a0701f6af17466f5cc6f2c4550e087cd1286cc 100644 (file)
@@ -69,7 +69,7 @@ FUNCTION(fun_valid)
 FUNCTION(fun_pemit)
 {
   int ns = string_prefix(called_as, "NS");
-  int flags = PEMIT_LIST;
+  int flags = PEMIT_LIST | PEMIT_SILENT;
   dbref saved_orator = orator;
   if (!command_check_byname(executor, ns ? "@nspemit" : "@pemit") ||
       fun->flags & FN_NOSIDEFX) {
@@ -79,7 +79,10 @@ FUNCTION(fun_pemit)
   orator = executor;
   if (ns)
     flags |= PEMIT_SPOOF;
-  do_pemit_list(executor, args[0], args[1], flags);
+  if (is_strict_integer(args[0]))
+       do_pemit_port(executor, args[0], args[1], flags);
+  else
+       do_pemit_list(executor, args[0], args[1], flags);
   orator = saved_orator;
 }
 
index 69be7c63c2e4e6dac4c4bd85703d6fc50a867829..0969a5fa4ada78ad9a74974f12edb5f1fdfd255d 100644 (file)
@@ -533,6 +533,9 @@ do_pemit(dbref player, const char *arg1, const char *arg2, int flags)
   dbref who;
   int silent, nospoof;
 
+  if(!arg2 || !*arg2)
+    return;
+
   silent = (flags & PEMIT_SILENT) ? 1 : 0;
   nospoof = (flags & PEMIT_SPOOF) ? 0 : 1;