On Mon, Jan 21, 2002 at 07:40:32PM -0500, Zizazat Lazuras wrote:
>I answered my own question with more debugging. Code to follow:
>
>found = FALSE;
> switch (GET_CLASS(ch)) {
> case CLASS_THIEF:
> if (GET_POS(ch) == POS_STANDING && (!MOB_FLAGGED(ch, MOB_SPEC)) ) {
> for (vict = world[ch->in_room].people; vict && !found; vict =
>vict->next_in_room)
> if (GET_LEVEL(vict) < LVL_IMMORT && (ch != vict)) {
> if (number(1, 100) <= GET_MSKILL(ch, SKILL_STEAL)) {
> npc_steal(ch, vict);
> }
> found = TRUE;
> continue;
> }
> }
> break;
> }
>
>Of course GET_MSKILL doesn't work for most people. But you get the idea.
>There is a skill check to see if the mob is even interested in trying to
>steal from someone. This is functional, and opens the door for me to do much
>cooler things since I have the functionallity :)
>
>I am going to scrap npc_steal and use do_steal, for starters.
>
>I do wonder though if anyone can give me ideas/pointers about trying to
>choose a random vict from world[ch->in_room].people. Right now the theif
>always goes after the first person. Would I do something like mob scavenger
>code, where it would try to determine the best_vict from world[].people?
(mailer code)
struct char_data *rand_vict(struct char_data *ch)
{
int i = 0, tmp;
struct char_data *vict;
/* count the people in the room */
for(i = 0, vict = world[ch->in_room].people; vict; vict = vict->next, i++);
/* pick one */
tmp = number(0,i);
/* count up to it */
for(i = 0, vict = world[ch->in_room].people; i < tmp; vict = vict->next, i++);
return(vict);
}
sorta sloppy but it works.
-me
--
+---------------------------------------------------------------+
| FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
| Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
| Newbie List: http://groups.yahoo.com/group/circle-newbies/ |
+---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT