Percentage Load Patch

  • Halenbane
  • Topic Author
  • Offline
  • Gold Boarder
  • Gold Boarder
More
1 year 7 months ago - 1 year 7 months ago #6289 by Halenbane
Percentage Load Patch was created by Halenbane
The Percentage Loading patch that is on the repository went in without much issue and compiled fine. But I feel like there is something missing? Nothing was done to db.c in this patch? Regardless of what I set the % to not load to, it always loads so I feel there is some math missing or part of the patch isn't there.
Last edit: 1 year 7 months ago by Halenbane. Reason: typo

Please Log in or Create an account to join the conversation.

More
1 year 7 months ago #6290 by thomas
Replied by thomas on topic Percentage Load Patch
I think you're right - that patch seem to be missing something.
This is a snippet from the old oasisolc percentage patch found here: drive.google.com/open?id=0B40XbRH2Qbx5aUwta2tWdmkybHc
diff -uN src/db.c new-src/db.c
--- src/db.c	Mon Jan 17 22:36:46 2000
+++ new-src/db.c	Thu Jan 20 00:41:22 2000
@@ -1439,7 +1439,7 @@
 void load_zones(FILE * fl, char *zonename)
 {
   static zone_rnum zone = 0;
-  int cmd_no, num_of_cmds = 0, line_num = 0, tmp, error;
+  int cmd_no, num_of_cmds = 0, line_num = 0, tmp, error, arg_num;
   char *ptr, buf[256], zname[256];
   char t1[80], t2[80];
 
@@ -1506,9 +1506,13 @@
         ZCMD.sarg2 = str_dup(t2);
       }
     } else {
-      if (sscanf(ptr, " %d %d %d %d ", &tmp, &ZCMD.arg1, &ZCMD.arg2,
-		 &ZCMD.arg3) != 4)
-	error = 1;
+      if ((arg_num = sscanf(ptr, " %d %d %d %d %d ", &tmp, &ZCMD.arg1, &ZCMD.arg2,
+                 &ZCMD.arg3, &ZCMD.arg4)) != 5){
+        if (arg_num != 4)
+          error = 1;
+        else
+          ZCMD.arg4 = 0;
+        }
     }
 
     ZCMD.if_flag = tmp;
@@ -1832,47 +1836,61 @@
   int room_vnum, room_rnum;
   struct char_data *tmob=NULL; /* for trigger assignment */
   struct obj_data *tobj=NULL;  /* for trigger assignment */
+   int mob_load = FALSE; /* ### */
+   int obj_load = FALSE; /* ### */
+
   
   for (cmd_no = 0; ZCMD.command != 'S'; cmd_no++) {
 
-    if (ZCMD.if_flag && !last_cmd)
+    if (ZCMD.if_flag && !last_cmd && !mob_load && !obj_load)
       continue;
 
+     if (!ZCMD.if_flag) { /* ### */
+       mob_load = FALSE;
+       obj_load = FALSE;
+     }
+
     switch (ZCMD.command) {
     case '*':			/* ignore command */
       last_cmd = 0;
       break;
 
     case 'M':			/* read a mobile */
-      if (mob_index[ZCMD.arg1].number < ZCMD.arg2) {
+      if ((mob_index[ZCMD.arg1].number < ZCMD.arg2) &&
+           (number(1, 100) >= ZCMD.arg4)) {
 	mob = read_mobile(ZCMD.arg1, REAL);
 	char_to_room(mob, ZCMD.arg3);
 	load_mtrigger(mob);
 	tmob = mob;
 	last_cmd = 1;
+         mob_load = TRUE;
       } else
 	last_cmd = 0;
       break;
 
     case 'O':			/* read an object */
-      if (obj_index[ZCMD.arg1].number < ZCMD.arg2) {
+       if ((obj_index[ZCMD.arg1].number < ZCMD.arg2) &&
+           (number(1, 100) >= ZCMD.arg4)) {
 	if (ZCMD.arg3 >= 0) {
 	  obj = read_object(ZCMD.arg1, REAL);
 	  obj_to_room(obj, ZCMD.arg3);
 	  load_otrigger(obj);
 	  last_cmd = 1;
 	  tobj = obj;
+          obj_load = TRUE;
 	} else {
 	  obj = read_object(ZCMD.arg1, REAL);
 	  obj->in_room = NOWHERE;
 	  last_cmd = 1;
+          obj_load = TRUE;
 	}
       } else
 	last_cmd = 0;
       break;
 
     case 'P':			/* object to object */
-      if (obj_index[ZCMD.arg1].number < ZCMD.arg2) {
+       if ((obj_index[ZCMD.arg1].number < ZCMD.arg2) &&
+           obj_load && (number(1, 100) >= ZCMD.arg4)) {
 	obj = read_object(ZCMD.arg1, REAL);
 	if (!(obj_to = get_obj_num(ZCMD.arg3))) {
 	  ZONE_ERROR("target obj not found, command disabled");
@@ -1893,7 +1911,8 @@
 	ZCMD.command = '*';
 	break;
       }
-      if (obj_index[ZCMD.arg1].number < ZCMD.arg2) {
+      if ((obj_index[ZCMD.arg1].number < ZCMD.arg2) &&
+          mob_load && (number(1, 100) >= ZCMD.arg3)) {
 	obj = read_object(ZCMD.arg1, REAL);
 	load_otrigger(obj);
 	tobj = obj;
@@ -1909,7 +1928,8 @@
 	ZCMD.command = '*';
 	break;
       }
-      if (obj_index[ZCMD.arg1].number < ZCMD.arg2) {
+      if ((obj_index[ZCMD.arg1].number < ZCMD.arg2) &&
+          mob_load && (number(1, 100) >= ZCMD.arg4)) {
 	if (ZCMD.arg3 < 0 || ZCMD.arg3 >= NUM_WEARS) {
 	  ZONE_ERROR("invalid equipment pos number");
 	} else {
diff -uN src/db.h new-src/db.h
--- src/db.h	Fri Nov 26 23:02:54 1999
+++ new-src/db.h	Thu Jan 20 00:36:16 2000
@@ -141,6 +141,7 @@
    int	arg1;		/*                                      */
    int	arg2;		/* Arguments to the command             */
    int	arg3;		/*                                      */
+   int  arg4;		/* percentages variable			*/
    int line;		/* line number this command appears on  */
    char *sarg1;		/* string argument                      */
    char *sarg2;		/* string argument                      */

I can't guarantee it will work as good as the other patch did, but it might just work.

Please Log in or Create an account to join the conversation.

  • Halenbane
  • Topic Author
  • Offline
  • Gold Boarder
  • Gold Boarder
More
1 year 7 months ago #6309 by Halenbane
Replied by Halenbane on topic Percentage Load Patch
I didn't end up using the code above but was certainly able to get some good reference from it. My % loads are now working great :) I will probably work up a snippet / tutorial for it soon.

Thanks!

Please Log in or Create an account to join the conversation.

  • Halenbane
  • Topic Author
  • Offline
  • Gold Boarder
  • Gold Boarder
More
1 year 7 months ago #6310 by Halenbane
Replied by Halenbane on topic Percentage Load Patch
The only other thing I see that I may need help with is multiple items on % loads.
Use the screenshot below for reference..
puu.sh/srvpR/bcb2ab9d95.png
When I put in the 2nd item to load onto the mob, it asked me if I wanted it to be dependent on the previous.
In this instance, I need it to be dependent, but not to the dagger but the bakers loading, just as the dagger is
based on him loading.

Without being confusing, I need to find a way to tell the game if there is more than one item having a chance to load
to a mob, don't base the dependency on another item unless specified. So in the screenshot , Run Command #2 even if #1 doesn't fire, but as long as #0 does.

Does that make any sense?

Please Log in or Create an account to join the conversation.

  • Halenbane
  • Topic Author
  • Offline
  • Gold Boarder
  • Gold Boarder
More
1 year 7 months ago #6311 by Halenbane
Replied by Halenbane on topic Percentage Load Patch
So maybe somehow make it so When you choose the Y/N for the dependency check in zedit, it then asks you which Command List # you want to base that dependency on. Until % loads this was never a problem.

Please Log in or Create an account to join the conversation.

More
1 year 7 months ago - 1 year 7 months ago #6312 by JTP
Replied by JTP on topic Percentage Load Patch
Sounds great with a tbamud working snippet for procentage load.
Good play test first.
Last edit: 1 year 7 months ago by JTP.

Please Log in or Create an account to join the conversation.

  • Halenbane
  • Topic Author
  • Offline
  • Gold Boarder
  • Gold Boarder
More
1 year 7 months ago #6314 by Halenbane
Replied by Halenbane on topic Percentage Load Patch
I have tested it rather thoroughly and it works great. I'll write up a snippet over the weekend.
The following user(s) said Thank You: thomas

Please Log in or Create an account to join the conversation.

More
1 year 7 months ago #6354 by JTP
Replied by JTP on topic Percentage Load Patch
Have you made the patch yet ?

Please Log in or Create an account to join the conversation.

  • Halenbane
  • Topic Author
  • Offline
  • Gold Boarder
  • Gold Boarder
More
1 year 7 months ago #6355 by Halenbane
Replied by Halenbane on topic Percentage Load Patch
I was trying to sort out one more part before I did. I'll let you know.

Please Log in or Create an account to join the conversation.

More
1 year 7 months ago - 1 year 7 months ago #6368 by Liko
Replied by Liko on topic Percentage Load Patch

Halenbane wrote: I was trying to sort out one more part before I did. I'll let you know.


I remember this patch. The issue I had with it was that items didn't load. I had to create triggers for npcs to have inventories.

Theory: Try testing in a room that loads multiple npcs with different and multiple items to each.

DragonBall: Tournament (1.2.0)
Owner/Developer
Last edit: 1 year 7 months ago by Liko.

Please Log in or Create an account to join the conversation.

  • Halenbane
  • Topic Author
  • Offline
  • Gold Boarder
  • Gold Boarder
More
1 year 7 months ago #6372 by Halenbane
Replied by Halenbane on topic Percentage Load Patch
I only used the original as a base but had to change quite a bit. The only thing I need to figure out now is how to make it so I can specify WHICH step I want something to be dependent on. Right now, it says "Dependent on the previous step". I instead, would like to be able to say Dependent on which step? and then you input which. That way you can have multiple objects loading on one mob at different %'s but not dependent on each other.

Please Log in or Create an account to join the conversation.

  • Halenbane
  • Topic Author
  • Offline
  • Gold Boarder
  • Gold Boarder
More
1 year 7 months ago #6375 by Halenbane
Replied by Halenbane on topic Percentage Load Patch
So after some further testing, it does kinda flip out when there are 2 mobs loading to the room, really not sure what is causing it..

Please Log in or Create an account to join the conversation.

Time to create page: 2.668 seconds