diff -BbuprN -x '*.o' suntzu/src/genzon.c suntzu-dev/src/genzon.c
--- suntzu/src/genzon.c	2003-10-31 20:11:51.000000000 -0600
+++ suntzu-dev/src/genzon.c	2003-11-21 07:40:45.000000000 -0600
@@ -356,7 +356,7 @@ void remove_room_zone_commands(zone_rnum
  */
 int save_zone(zone_rnum zone_num)
 {
-  int subcmd, arg1 = -1, arg2 = -1, arg3 = -1;
+  int subcmd, arg1 = -1, arg2 = -1, arg3 = -1, arg4 = -1;
   char fname[128], oldname[128];
   const char *comment = NULL;
   FILE *zfile;
@@ -417,30 +417,35 @@ int save_zone(zone_rnum zone_num)
       arg1 = mob_index[ZCMD(zone_num, subcmd).arg1].vnum;
       arg2 = ZCMD(zone_num, subcmd).arg2;
       arg3 = world[ZCMD(zone_num, subcmd).arg3].number;
+      arg4 = ZCMD(zone_num, subcmd).arg4;
       comment = mob_proto[ZCMD(zone_num, subcmd).arg1].player.short_descr;
       break;
     case 'O':
       arg1 = obj_index[ZCMD(zone_num, subcmd).arg1].vnum;
       arg2 = ZCMD(zone_num, subcmd).arg2;
       arg3 = world[ZCMD(zone_num, subcmd).arg3].number;
+      arg4 = ZCMD(zone_num, subcmd).arg4;
       comment = obj_proto[ZCMD(zone_num, subcmd).arg1].short_description;
       break;
     case 'G':
       arg1 = obj_index[ZCMD(zone_num, subcmd).arg1].vnum;
       arg2 = ZCMD(zone_num, subcmd).arg2;
       arg3 = -1;
+      arg4 = ZCMD(zone_num, subcmd).arg4;
       comment = obj_proto[ZCMD(zone_num, subcmd).arg1].short_description;
       break;
     case 'E':
       arg1 = obj_index[ZCMD(zone_num, subcmd).arg1].vnum;
       arg2 = ZCMD(zone_num, subcmd).arg2;
       arg3 = ZCMD(zone_num, subcmd).arg3;
+      arg4 = ZCMD(zone_num, subcmd).arg4;
       comment = obj_proto[ZCMD(zone_num, subcmd).arg1].short_description;
       break;
     case 'P':
       arg1 = obj_index[ZCMD(zone_num, subcmd).arg1].vnum;
       arg2 = ZCMD(zone_num, subcmd).arg2;
       arg3 = obj_index[ZCMD(zone_num, subcmd).arg3].vnum;
+      arg4 = ZCMD(zone_num, subcmd).arg4;
       comment = obj_proto[ZCMD(zone_num, subcmd).arg1].short_description;
       break;
     case 'D':
@@ -459,12 +464,14 @@ int save_zone(zone_rnum zone_num)
       arg1 = ZCMD(zone_num, subcmd).arg1; /* trigger type */
       arg2 = trig_index[ZCMD(zone_num, subcmd).arg2]->vnum; /* trigger vnum */
       arg3 = world[ZCMD(zone_num, subcmd).arg3].number; /* room num */
+      arg4 = ZCMD(zone_num, subcmd).arg4;
       comment = GET_TRIG_NAME(trig_index[real_trigger(arg2)]->proto); 
       break;
     case 'V':
       arg1 = ZCMD(zone_num, subcmd).arg1; /* trigger type */
       arg2 = ZCMD(zone_num, subcmd).arg2; /* context */
       arg3 = world[ZCMD(zone_num, subcmd).arg3].number;
+      arg4 = ZCMD(zone_num, subcmd).arg4;
       break;
     case '*':
       /*
@@ -476,11 +483,11 @@ int save_zone(zone_rnum zone_num)
       continue;
     }
     if (ZCMD(zone_num, subcmd).command != 'V')
-    fprintf(zfile, "%c %d %d %d %d \t(%s)\n",
-		ZCMD(zone_num, subcmd).command, ZCMD(zone_num, subcmd).if_flag, arg1, arg2, arg3, comment);
+    fprintf(zfile, "%c %d %d %d %d %d \t(%s)\n",
+		ZCMD(zone_num, subcmd).command, ZCMD(zone_num, subcmd).if_flag, arg1, arg2, arg3, arg4, comment);
     else
-      fprintf(zfile, "%c %d %d %d %d %s %s\n",
-              ZCMD(zone_num, subcmd).command, ZCMD(zone_num, subcmd).if_flag, arg1, arg2, arg3, 
+      fprintf(zfile, "%c %d %d %d %d %d %s %s\n",
+              ZCMD(zone_num, subcmd).command, ZCMD(zone_num, subcmd).if_flag, arg1, arg2, arg3, arg4,
               ZCMD(zone_num, subcmd).sarg1, ZCMD(zone_num, subcmd).sarg2);
   }
   fputs("S\n$\n", zfile);
diff -BbuprN -x '*.o' suntzu/src/oasis.h suntzu-dev/src/oasis.h
--- suntzu/src/oasis.h	2003-10-31 20:11:51.000000000 -0600
+++ suntzu-dev/src/oasis.h	2003-11-21 07:40:45.000000000 -0600
@@ -288,13 +288,14 @@ extern const char *nrm, *grn, *cyn, *yel
 #define ZEDIT_ARG1			6
 #define ZEDIT_ARG2			7
 #define ZEDIT_ARG3			8
-#define ZEDIT_ZONE_NAME			9
-#define ZEDIT_ZONE_LIFE			10
-#define ZEDIT_ZONE_BOT			11
-#define ZEDIT_ZONE_TOP			12
-#define ZEDIT_ZONE_RESET		13
-#define ZEDIT_CONFIRM_SAVESTRING	14
-#define ZEDIT_ZONE_BUILDERS		15
+#define ZEDIT_ARG4			9
+#define ZEDIT_ZONE_NAME			10
+#define ZEDIT_ZONE_LIFE			11
+#define ZEDIT_ZONE_BOT			12
+#define ZEDIT_ZONE_TOP			13
+#define ZEDIT_ZONE_RESET		14
+#define ZEDIT_CONFIRM_SAVESTRING	15
+#define ZEDIT_ZONE_BUILDERS		16
 #define ZEDIT_SARG1			20
 #define ZEDIT_SARG2			21
 
@@ -706,9 +707,9 @@ int can_edit_zone(struct char_data *ch, 
 #define CONTEXT_SCRIPT_MAIN_MENU		121
 #define CONTEXT_SCRIPT_NEW_TRIGGER		122
 #define CONTEXT_SCRIPT_DEL_TRIGGER		123
-
+#define CONTEXT_ZEDIT_ARG4			124
 /* includes number 0 */
-#define NUM_CONTEXTS 124
+#define NUM_CONTEXTS 125
 
 /* Prototypes for the context sensitive help system */
 int find_context(struct descriptor_data *d);
diff -BbuprN -x '*.o' suntzu/src/zedit.c suntzu-dev/src/zedit.c
--- suntzu/src/zedit.c	2003-10-31 20:11:51.000000000 -0600
+++ suntzu-dev/src/zedit.c	2003-11-21 08:31:37.000000000 -0600
@@ -495,45 +495,45 @@ void zedit_disp_menu(struct descriptor_d
     write_to_output(d, "%s%d - %s", nrm, counter++, yel);
     switch (MYCMD.command) {
     case 'M':
-      write_to_output(d, "%sLoad %s [%s%d%s], Max : %d",
+      write_to_output(d, "%sLoad %s [%s%d%s], Max : %d, %% Chance %d",
               MYCMD.if_flag ? " then " : "",
               mob_proto[MYCMD.arg1].player.short_descr, cyn,
-              mob_index[MYCMD.arg1].vnum, yel, MYCMD.arg2
+              mob_index[MYCMD.arg1].vnum, yel, MYCMD.arg2, MYCMD.arg4
               );
       break;
     case 'G':
-      write_to_output(d, "%sGive it %s [%s%d%s], Max : %d",
+      write_to_output(d, "%sGive it %s [%s%d%s], Max : %d, %% Chance %d",
 	      MYCMD.if_flag ? " then " : "",
 	      obj_proto[MYCMD.arg1].short_description,
 	      cyn, obj_index[MYCMD.arg1].vnum, yel,
-	      MYCMD.arg2
+	      MYCMD.arg2, MYCMD.arg4
 	      );
       break;
     case 'O':
-      write_to_output(d, "%sLoad %s [%s%d%s], Max : %d",
+      write_to_output(d, "%sLoad %s [%s%d%s], Max : %d, %% Chance %d",
 	      MYCMD.if_flag ? " then " : "",
 	      obj_proto[MYCMD.arg1].short_description,
 	      cyn, obj_index[MYCMD.arg1].vnum, yel,
-	      MYCMD.arg2
+	      MYCMD.arg2, MYCMD.arg4
 	      );
       break;
     case 'E':
-      write_to_output(d, "%sEquip with %s [%s%d%s], %s, Max : %d",
+      write_to_output(d, "%sEquip with %s [%s%d%s], %s, Max : %d, %% Chance %d",
 	      MYCMD.if_flag ? " then " : "",
 	      obj_proto[MYCMD.arg1].short_description,
 	      cyn, obj_index[MYCMD.arg1].vnum, yel,
 	      equipment_types[MYCMD.arg3],
-	      MYCMD.arg2
+	      MYCMD.arg2, MYCMD.arg4
 	      );
       break;
     case 'P':
-      write_to_output(d, "%sPut %s [%s%d%s] in %s [%s%d%s], Max : %d",
+      write_to_output(d, "%sPut %s [%s%d%s] in %s [%s%d%s], Max : %d, %% Chance %d",
 	      MYCMD.if_flag ? " then " : "",
 	      obj_proto[MYCMD.arg1].short_description,
 	      cyn, obj_index[MYCMD.arg1].vnum, yel,
 	      obj_proto[MYCMD.arg3].short_description,
 	      cyn, obj_index[MYCMD.arg3].vnum, yel,
-	      MYCMD.arg2
+	      MYCMD.arg2, MYCMD.arg4
 	      );
       break;
     case 'R':
@@ -551,22 +551,22 @@ void zedit_disp_menu(struct descriptor_d
 	      );
       break;
     case 'T':
-      write_to_output(d, "%sAttach trigger %s%s%s [%s%d%s] to %s",
+      write_to_output(d, "%sAttach trigger %s%s%s [%s%d%s] to %s, %% Chance %d",
         MYCMD.if_flag ? " then " : "",
         cyn, trig_index[MYCMD.arg2]->proto->name, yel, 
         cyn, trig_index[MYCMD.arg2]->vnum, yel,
         ((MYCMD.arg1 == MOB_TRIGGER) ? "mobile" :
           ((MYCMD.arg1 == OBJ_TRIGGER) ? "object" :
-            ((MYCMD.arg1 == WLD_TRIGGER)? "room" : "????"))));
+            ((MYCMD.arg1 == WLD_TRIGGER)? "room" : "????"))), MYCMD.arg4);
       break;
     case 'V':
-      write_to_output(d, "%sAssign global %s:%d to %s = %s",
+      write_to_output(d, "%sAssign global %s:%d to %s = %s, %% Chance %d",
         MYCMD.if_flag ? " then " : "",
         MYCMD.sarg1, MYCMD.arg2,
         ((MYCMD.arg1 == MOB_TRIGGER) ? "mobile" :
           ((MYCMD.arg1 == OBJ_TRIGGER) ? "object" :
             ((MYCMD.arg1 == WLD_TRIGGER)? "room" : "????"))),
-        MYCMD.sarg2);
+        MYCMD.sarg2, MYCMD.arg4);
       break;
     default:
       write_to_output(d, "<Unknown Command>");
@@ -760,6 +760,38 @@ void zedit_disp_arg3(struct descriptor_d
   }
   OLC_MODE(d) = ZEDIT_ARG3;
 }
+/*-------------------------------------------------------------------*/
+
+/*
+ * Print the appropriate message for the command type for arg2 and set
+ * up the input catch clause.
+ */
+void zedit_disp_arg4(struct descriptor_data *d)
+{
+  write_to_output(d, "\r\n");
+  
+  switch (OLC_CMD(d).command) {
+  case 'M':
+  case 'O':
+  case 'E':
+  case 'P':
+  case 'G':
+  case 'T':
+  case 'V':
+    write_to_output(d, "Input the percentage chance of the load NOT occurring : ");
+    break;
+  default:
+    /*
+     * We should never get here, but just in case...
+     */
+    cleanup_olc(d, CLEANUP_ALL);
+    mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: OLC: zedit_disp_arg2(): Help!");
+    write_to_output(d, "Oops...\r\n");
+    return;
+  }
+  OLC_MODE(d) = ZEDIT_ARG4;
+}
+
 
 /**************************************************************************
   The GARGANTAUN event handler
@@ -1075,11 +1107,11 @@ void zedit_parse(struct descriptor_data 
     case 'O':
       OLC_CMD(d).arg2 = MIN(MAX_DUPLICATES, atoi(arg));
       OLC_CMD(d).arg3 = real_room(OLC_NUM(d));
-      zedit_disp_menu(d);
+      zedit_disp_arg4(d);
       break;
     case 'G':
       OLC_CMD(d).arg2 = MIN(MAX_DUPLICATES, atoi(arg));
-      zedit_disp_menu(d);
+      zedit_disp_arg4(d);
       break;
     case 'P':
     case 'E':
@@ -1096,7 +1128,7 @@ void zedit_parse(struct descriptor_data 
       if (real_trigger(atoi(arg)) != NOTHING) {
         OLC_CMD(d).arg2 = real_trigger(atoi(arg)); /* trigger */
         OLC_CMD(d).arg3 = real_room(OLC_NUM(d));   
-        zedit_disp_menu(d);
+        zedit_disp_arg4(d);
       } else
         write_to_output(d, "That trigger does not exist, try again : ");
       break;
@@ -1152,13 +1184,13 @@ void zedit_parse(struct descriptor_data 
 	write_to_output(d, "Try again : ");
       else {
 	OLC_CMD(d).arg3 = pos;
-	zedit_disp_menu(d);
+	zedit_disp_arg4(d);
       }
       break;
     case 'P':
       if ((pos = real_object(atoi(arg))) != NOTHING) {
 	OLC_CMD(d).arg3 = pos;
-	zedit_disp_menu(d);
+	zedit_disp_arg4(d);
       } else
 	write_to_output(d, "That object does not exist, try again : ");
       break;
@@ -1187,6 +1219,37 @@ void zedit_parse(struct descriptor_data 
       break;
     }
     break;
+/*-------------------------------------------------------------------*/
+  case ZEDIT_ARG4:
+    /*
+     * Parse the input for arg2, and goto next quiz.
+     */
+    if (!isdigit(*arg)) {
+      write_to_output(d, "Must be a numeric value, try again : ");
+      return;
+    }
+    switch (OLC_CMD(d).command) {
+    case 'M':
+    case 'O':
+    case 'G':
+    case 'P':
+    case 'E':
+    case 'V':
+    case 'T':
+      OLC_CMD(d).arg4 = atoi(arg);
+      zedit_disp_menu(d);
+      break;
+    default:
+      /*
+       * We should never get here, but just in case...
+       */
+      cleanup_olc(d, CLEANUP_ALL);
+      mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: OLC: zedit_parse(): case ARG4: Ack!");
+      write_to_output(d, "Oops...\r\n");
+      break;
+    }
+    break;
+
 
 /*-------------------------------------------------------------------*/
   case ZEDIT_SARG1:
@@ -1202,7 +1265,7 @@ void zedit_parse(struct descriptor_data 
   case ZEDIT_SARG2:
     if (strlen(arg)) {
       OLC_CMD(d).sarg2 = strdup(arg);
-      zedit_disp_menu(d);
+      zedit_disp_arg4(d);
     } else
       write_to_output(d, "Must have some value to set it to :");
     break;
