[Home]QuickSnippets

TheSourcery | RecentChanges | Preferences | Index | RSS

Difference (from prior major revision) (no other diffs)

Changed: 25c25,26
sprintf(cmd, "egrep -ch \"^Vnum %d\" ../player/* | gawk \'{ s += $1 }; END { print s }\' > sum.txt", vnum);
sprintf(cmd,
"egrep -ch \"^Vnum %d\" ../player/* | gawk \'{ s += $1 }; END { print s }\' > sum.txt", vnum);

Removed: 61d61


Added: 63a64,144

MPStatus command for Mobprogs




This snippet allows you to store and read state in Mobprogs.

In mob_prog.c add this define...

#define CHK_STATUS (53)


In fn_keyword[] add this...

"status", /* if status $n == 1000 - checks status value on obj,room or mob */



In cmd_eval() near the end after case CHK_GRPSIZE: add...

case CHK_STATUS:
lval = lval_char->mprog_status;
break;



Add the following to the CHAR_DATA structure in merc.h

int mprog_status;


Add an entry to mob_cmd_table[] in mob_cmds.c

{"status", do_mpstatus},


Add this routine or similar to mob_cmds.c

void do_mpstatus (CHAR_DATA * ch, char *argument)
{
char arg[MIL];
char errbuf[MIL];

if (ch == NULL)
return;

one_argument (argument, arg);
if (!is_number (arg)) {
sprintf (errbuf, "MpStatus: invalid arg from mob vnum %d.",
ch->isNPC() ? ch->pIndexData->vnum : 0);
wiznet (errbuf, NULL, NULL, WIZ_PROGS, 0, 0);
return;
}
ch->mprog_status = atoi (arg);
}


Get it working and now your mprogs have the capability to save and query state.

The following fight trigger is an example of usage:


if status $i == 0
poke $n
say You look delicious, $n.
mob status 1
end
endif
if status $i == 1
say I have a feeling your flesh will be rather tough.
mob echo A bolt of energy flies from $I's hand!
mob cast 'force bolt' $n
chortle
mob status 2
End
endif
if status $i == 2
if rand 25
mob status 0
endif
endif
end



Quick Snippets

This page contains small code snippets that may or not be useful to mud programmers. Consider them all to be public domain.


Counting objects in player files on a ROM type mud


$ cat offcount.c
#include <stdio.h>
#include <stdlib.h>

int offline_obj_count(int vnum)
{
  FILE *f;
  char cmd[160];
  int count;

  sprintf(cmd, 
    "egrep -ch \"^Vnum %d\" ../player/* | gawk \'{ s += $1 }; END { print s }\' > sum.txt", vnum);
  system(cmd);
  f = fopen ("sum.txt", "r");
  if (!f) {
    printf("offline_obj_count: Could not read sum.txt file.");
    return 0;
  }
  fscanf(f,"%d\n", &count);
  fclose(f);
  return count;
}

int main(int argc, char** argv) {
  int vnum = atoi(argv[1]);
  int count = offline_obj_count(vnum);
  printf("Vnum:%d Count:%d", vnum, count);
  return 0;
}

$ gcc offcount.c

$ ./a 3382
Vnum:3382 Count:62

$ ./a 23008
Vnum:23008 Count:1

$ ./a 23048
Vnum:23048 Count:2

$ ./a 9999
Vnum:9999 Count:0


MPStatus command for Mobprogs

This snippet allows you to store and read state in Mobprogs.

In mob_prog.c add this define...

#define CHK_STATUS      (53)

In fn_keyword[] add this...

  "status",  /* if status $n == 1000  - checks status value on obj,room or mob */

In cmd_eval() near the end after case CHK_GRPSIZE: add...

  case CHK_STATUS:
    lval = lval_char->mprog_status;
    break; 

Add the following to the CHAR_DATA structure in merc.h

  int   mprog_status;

Add an entry to mob_cmd_table[] in mob_cmds.c

  {"status", do_mpstatus},

Add this routine or similar to mob_cmds.c

void do_mpstatus (CHAR_DATA * ch, char *argument)
{
  char arg[MIL];
  char errbuf[MIL];

  if (ch == NULL)
    return;

  one_argument (argument, arg);
  if (!is_number (arg)) {
    sprintf (errbuf, "MpStatus: invalid arg from mob vnum %d.",
        ch->isNPC() ? ch->pIndexData->vnum : 0);
    wiznet (errbuf, NULL, NULL, WIZ_PROGS, 0, 0);
    return;
  }
  ch->mprog_status = atoi (arg);
}

Get it working and now your mprogs have the capability to save and query state.

The following fight trigger is an example of usage:

if status $i == 0
  poke $n
  say You look delicious, $n.
  mob status 1
  end
endif
if status $i == 1
  say I have a feeling your flesh will be rather tough.
  mob echo A bolt of energy flies from $I's hand!
  mob cast 'force bolt' $n
  chortle
  mob status 2
  End
endif
if status $i == 2
  if rand 25
    mob status 0
  endif
endif
end


TheSourcery | RecentChanges | Preferences | Index | RSS
Edit text of this page | View other revisions
Last edited May 28, 2005 8:09 am by JonLambert (diff)
Search:
All material on this Wiki is the property of the contributing authors.
©2004-2006 by the contributing authors.
Ideas, requests, problems regarding this site? Send feedback.