Login
User Name:

Password:



Register
Forgot your password?
Vote for Us!
Bug in disarm( )
Nov 12, 2017, 6:54 pm
By GatewaySysop
Bug in will_fall( )
Oct 23, 2017, 1:35 am
By GatewaySysop
Bug in do_zap( ), do_brandish( )
Oct 18, 2017, 1:52 pm
By GatewaySysop
Bug in get_exp_worth( )
Oct 10, 2017, 1:26 am
By GatewaySysop
Bug in do_drag( )
Oct 8, 2017, 12:40 am
By GatewaySysop
LOP Heroes Edition
Author: Vladaar
Submitted by: Vladaar
Heroes sound extras
Author: Vladaar
Submitted by: Vladaar
6Dragons 4.3
Author: Vladaar
Submitted by: Vladaar
Memwatch
Author: Johan Lindh
Submitted by: Vladaar
Beastmaster 6D sound files
Author: Vladaar
Submitted by: Vladaar
Users Online
CommonCrawl, DotBot, Yandex

Members: 0
Guests: 4
Stats
Files
Topics
Posts
Members
Newest Member
476
3,704
19,231
608
LAntorcha
Today's Birthdays
There are no member birthdays today.
Related Links
» SmaugMuds.org » Codebases » SWR FUSS » Ifchecks ovnum<place> and oty...
Forum Rules | Mark all | Recent Posts

Ifchecks ovnum<place> and otype<place> not recognizing multiple objects
< Newer Topic :: Older Topic >

Pages:<< prev 1 next >>
Post is unread #1 Feb 4, 2006, 6:00 pm   Last edited Feb 4, 2006, 6:03 pm by Caius
Go to the top of the page
Go to the bottom of the page

Caius
Magician
GroupMembers
Posts132
JoinedJan 29, 2006

Say you want to have a mob giving a reward for bringing him a certain number of an object. You'd make a mobprog like so:
>act_prog 'gives you'
if ovnumcarry(60) >= 5
'Thanks.
endif

The idea is that the mob will react when he has five or more of object vnum 60 (blaster rifle under stock limbo.are). However this ifcheck doesn't count the objects properly, so the above prog doesn't work.

Here's how I fixed this:

Open mud_prog.c
Search for "ovnumcarry".

Locate this code:
for ( pObj = mob->first_carrying; pObj; pObj = pObj->next_content )
          if ( can_see_obj(mob, pObj) && pObj->pIndexData->vnum == vnum )
              lhsvl++;
 


Change it to:
for ( pObj = mob->first_carrying; pObj; pObj = pObj->next_content )
      {
          separate_obj( pObj );
          if ( can_see_obj(mob, pObj) && pObj->pIndexData->vnum == vnum )
              lhsvl++;
      }


Do the same for all these ifchecks: OvnumHere, OvnumRoom, OvnumCarry, OvnumWear, OvnumInv, OtypeHere, OtypeRoom, OtypeCarry, OtypeWear, OtypeInv.

OvnumHere and OtypeHere needs separate_obj( pObj ) in both their for(;;;) loops.

I have not checked these ifchecks in the other FUSS packages, but I suspect the same problems are there.
       
Post is unread #2 Feb 4, 2006, 6:05 pm
Go to the top of the page
Go to the bottom of the page

Samson
Black Hand
GroupAdministrators
Posts3,639
JoinedJan 1, 2002

Or you could have changed lhsvl++; to lhsvl += pObj->count;
       
Pages:<< prev 1 next >>