Language: 
To browser these website, it's necessary to store cookies on your computer.
The cookies contain no personal information, they are required for program control.
  the storage of cookies while browsing this website, on Login and Register.

Author Topic:  v0.10.7 development  (Read 22422 times)

0 Members and 1 Guest are viewing this topic.

smacky

« on: 25, March 2014, 23:47:52 »
New pick up/drop code is on dev. Local testing shows it works. For normal players getting and dropping should be bombproof. Please test. Everything should just work in a natural way but at the end of this post is a walkthrough of how the code (hopefully) works.

Although it should be robust enough for gmaster wiz players (MW/MM/SA) I haven't done much testing of this yet and there are a few things I want to add.

In theory monsters should be able to pick up/drop now via scripts but I haven't tested.


Picking up means means moving what to a new environment. This may be the inventory of who or where (a container). Where, if there is one, may itself be within who's inventory or entirely separate. The previous environment of what is -- at this stage -- irrelevant. In fact it needn't even have had one (IOW it was directly on a map).

Dropping means moving what from who's inventory (or a container in who's inventory) to the map. So, apart from the previous environment must be one of those two, it is irrelevant.


One thing about this new code is while technically putting an item from your inv into a container on the floor is a form of picking up, because currently that is thought of as dropping, this behaviour is duplicated here.

However, if we went for this new thinking it would mean we would be able to either pick up inv items to the open floor container OR drop them to the floor beside it. Currently we can only drop them into it.


For similar reasons we can now pick up an open container from the floor into our inv (which does close it). Before this would stupidly complain that you can't put the container into itself.


There are several new  features, several fixed features, and several old behaviours but less insanely coded. Here is a walkthrough to picking up and dropping:

Code: [Select]
/* pick_up() is called when who attempts to pick up nrof * what. If where is
 * non-NULL it is a container into which what will be put (pick up to
 * container) otherwise what is moved into who's inv (pick up to inventory).
 * The return is what (but possibly with a different ->nrof, certainly with a
 * different ->env, etc than before the function) if what was picked up or NULL
 * if it wasn't. */
    /* STEP 1: Check that the parameters are sensible. */
    /* Sanity checks: must be a who and only players and monsters can pick
     * things up; must be a what; if there is a where, it must be a
     * container (and for non-gmaster wiz players, it must be their linked
     * container). */
    /* Make sure who can reach what (and where if there is one) -- see
     * CanReach(). */
    /* Ensure nrof is a sensible value. */
        /* In shops any number of unpaid items can be picked up off the floor,
         * regardless of stack size. */
    /* STEP 2: Check that who actually can pick up nrof * what. */
    /* There are several reasons why what can't be picked up -- see
     * CanPickUp(). */
    /* STEP 3: Sort out special cases of where. */
    /* For a pick up to inv (ie, where is NULL), who might have an appropriate
     * readied container in his inventory, so check that. */
            /* The container must be applied (ready/open). */
                /* It must have enough space for what. */
                    /* Some containers can only hold specific classes of item
                     * (eg, pouches for coins) while others can hold anything.
                     * If we find a specific container that matches the item
                     * class being picked up, use that. Otherwise, use the
                     * first generic one found. */
                    /* TODO: Improve and expand these specific containers. */
    /* STEP 4: At this point we've determined that its theoretically OK for who
     * to pick up nrof * what. Now we need to determine the type of pick up (to
     * inv or to container), either of which involves further side
     * effects/checks. */
    /* If where is (still) NULL (see above) we're trying to pick up what to
     * who's inv. */
        /* If what is a container be sure to unlink (close) it for all players
         * viewing it. */
    /* When where is non-NULL we're trying to put what in it. */
        /* Containers can't be put in other containers. */
        /* where may be a container which cannot hold what. */
        /* If an applyable light is lit (has glow_radius) force it to be
         * FLAG_APPLIED so we can unapply it below. This prevents players storing
         * lit torches in bags. */
        /* Picking up to a container not in who's inventory is similar to
         * dropping in some respects so do the necessary checks -- see
         * CanDiscard(). */
    /* STEP 5: Now we've determined the pick up is possible, so lets do it! */
    /* what can have a PICKUP script on it which, if it returns true, aborts
     * the actual pick up. */
    /* where can also have a PICKUP script on it which, if it returns true,
     * aborts the actual pick up. */
    /* Picking things up from or to outside of who's inventory interrupts
     * resting. */
    /* Below here is the actual code to move what to a new environment (either
     * where or who). Also we send some appropriate messages to the client. */
    /* Picking up unpaid items from a shop floor is preliminary to buying
     * them. */
    /* Give players an appropriate message to tell them what they've done. */
    /* TODO: Currently the client plays a pick up sound whenever a pick up is
     * attempted. This means when the server decides the attempt has failed, a
     * sound is still played. This should be moved server-side. Then also the
     * client can handle the 'you pick up...' messages on receipt of the sound
     * cmd. */
    /* Yay! we're finally done. So insert what into its new environment. */

/* CanReach() ascertains if what is close enough that who can touch it. That
 * means what must be either (in a container) in who's inventory or (in a
 * container) on the same map square as who -- see below for some exceptions to
 * this basic rule.
 * The return is NULL is what is not in reach of who or, if it is, an object
 * which is one of: what if what is directly on a map; a player or monster
 * (which may be who) if what is (in a container) in that creature's inv; a
 * container which is directly on a map.
 * If who is a player an ndi is sent to the player when what is out of
 * reach. */
    /* Walk up what's environments until the one before the map. In a textbook
     * scenario if what is (in a container) in who's inv then this should be
     * who (players and monters must not have envs).
     * Afterwards this points to an object, one of: what if what is directly on
     * a map; a player or monster (which may be who) if what is (in a
     * container) in that creature's inv; a container which is directly on a
     * map. */
    /* If either who or this are airborne and the other is not (and what is not
     * in who's inventory), who can't reach what. */
    /* TODO: This makes no distinction between flying/levitating. */
    /* Gmaster wiz players can reach things in other creature's invs
     * (including in containers in those invs). All others can only fiddle with
     * themselves. */
    /* Gmaster wiz players can reach things in any container (open or closed).
     * For convenience so can monsters. Other players are limited to their
     * linked container. */
    /* If this does not point to who it must be directly on a map so check that
     * it occupies the same space as who. */

/* CanPickUp() determines if who can pick up (if appropriate, nrof *) what
 * (into where if not NULL)>
 * The return is what if who can pick it up, or NULL if who can't.
 * If who is a player an ndi is sent to the player when what can't be picked
 * up. */
    /* Multiparts are absolute no-nos because the server cannot cope with such
     * objects having an environment. Also it would be logically ridiculous to
     * have such physically large objects being pocketed. */
    /* TODO: This restriction will be lifted fo gmaster wiz players. */
    /* Normal players and mobs cannot pick up any of these items but gmaster
     * wiz's can. */
        /* If what is somebody else's ego item then who can't pick it up. */
        /* Layer 0/sys objects can't be picked up (really the one should imply the
         * other but JIC). TODO: Perhaps be strict about all layers? Really only
         * layers 3 and 4 should be pickable. */
        /* No_picks can't be picked up. */
        /* If you can't see it, you can't pick it up. */
        /* When */

/* FixAsNeeded() carries out any nnecessary fixing post-pick up/drop. */
/* TODO: While I think this works well enough, ALL fixing needs
 * reworking/making more efficient. But that is a separate job. */
/* TODO: Currently monster encumbrance probably isn't handled. */

/* drop_to_floor() is called when who attempts to drop nrof * what.
 * The return is what (but possibly with a different ->nrof, certainly with a
 * different ->env and ->map, etc than before the function) if what was dropped
 * or NULL if it wasn't. */
    /* STEP 1: Check that the parameters are sensible. */
    /* Sanity checks: must be a who and only players and monsters can drop
     * things; must be a what. */
    /* who can't drop what unless it is in (a container in) who's inventory. */
    /* STEP 2: Check that who can actually drop what. */
    /* In a shop a container that is not empty cannot be dropped. */
    /* Sometimes who cannot discard what -- see CanDiscard(). */
    /* STEP 3: Now we've determined the drop is possible, so lets do it! */
    /* If what is a container be sure to unlink (close) it for all players
     * viewing it. */
    /* what can have a DROP script on it which, if it returns true, aborts the
     * actual drop. */
    /* Dropping things interrupts resting. */
    /* Below here is the actual code to move what to the map (specifically the
     * sqaure beneath who's feet). Also we send some appropriate messages to
     * the client. */
    /* Give players an appropriate message to tell them what they've done. */
    /* TODO: Currently the client plays a drop sound whenever a drop is
     * attempted. This means when the server decides the attempt has failed, a
     * sound is still played. This should be moved server-side. Then also the
     * client can handle the 'you drop...' message on receipt of the sound
     * cmd. */
    /* No drops vanish for non-gmaster wiz players. */
    /* In a shop there are special rules. */
        /* An unpaid item is just put back in the shop. */
        /* Coins and worthless items just drop to the floor like normal but
         * everything else is sold to the shop. */
            /* TODO: This results in each coin type being picked up separately (so 4g,
             * 8s, and 6c means 3 pick ups). We need a 'cash' object into which the
             * coins can be inserted here. Then after this loop that object is inserted
             * to the map and picked up, with pick_up() knowing to extract its contents
             * and remove the empty husk within (a container in) who's inv. */
                     price -= (nr * at->clone.value);
    /* Yay! we're finally done. So insert what into its new environment if
     * necessary. */
        /* Reinsert who at the top of the object list. */

/* CanDiscard() determines if who can discard what.
 * The return is what if who can discard it, or NULL if who can't.
 * If who is a player an ndi is sent to the player when what can't be
 * discarded. */
    /* Players have a few specific rules. */
        /* Locked items can't be dropped. */
        /* Under some circumstances a player cannot discard a container with
         * something in it. */
            /* Always, certain contents prevent dropping. */
    /* Monsters can't drop no drops. */
    /* If what is applied and can't be unapplied (eg, it's cursed) then it
     * can't be discarded. */

/* NoDiscardContainer() recursively checks containers for no drops and locked
 * items inside, returning a pointer to the first such object found (container
 * cannot be discarded) or NULL if none are found (container can be
 * discarded).
 * An ndi is sent to who (this function is only called for players) when the
 * container cannot be discarded. */

EDIT: This isn't on dev quite yet as for some reason that machine iisn't playing nicely with sf.  Maybe someone could try another reboot in an hour or 3. Or I will tomorrow.

EDIT 2: Rebooted. For buying from shops, only GH and Sh shops work ATM. All others won't let you pick up items.
« Last Edit: 26, March 2014, 11:19:20 by smacky »

smacky

« Reply #1 on: 02, April 2014, 21:05:41 »
Quite a few changes added. My local testing looks good, a few minor glitches. But of course I really need players to break it, so PLEASE try dev. Just pick up/drop stuff, buy and sell from shops (only GH/Sh ATM), deposit and withdraw from banks.

Here's the latest pick up/drop walkthrough (BTW gmaster wiz extended invs might get a bit confused ATM):

Code: [Select]
/* pick_up() is called when who attempts to pick up nrof * what. If where is
 * non-NULL it is a container into which what will be put (pick up to
 * container) otherwise what is moved into who's inv (pick up to inventory).
 * As a special case, when what is of type LOOT we loop through the inventory
 * of what, picking up each of those objects. The empty loot object is then
 * removed (but if who is a player he is messaged that he picked up the loot
 * object, not each of its contents). In this way we can pick up many items
 * with one call.
 * The return is what (but possibly with a different ->nrof, certainly with a
 * different ->env, etc than before the function) if what was picked up or NULL
 * if it wasn't. */
    /* Sanity checks: must be a who and only players and monsters can pick
     * things up; must be a what; if there is a where, it must be a
     * container (and for non-gmaster wiz players, it must be their linked
     * container). */
    /* Make sure who can reach what (and where if there is one) -- see
     * CanReach(). */
    /* Ensure nrof is a sensible value. */
        /* In shops any number of unpaid items can be picked up off the floor,
         * regardless of stack size. */
    /* When what is loot we go through a special process. */
        /* If the loot is empty, throw it away and return. But first message
         * who, if a player, just to let him know, and log a MAPBUG as this is
         * surely unintentional. */
        /* Loop through each of the contents of the loot. */
            /* Nested loots will be thrown away. */
            /* Each content is individually picked up -- see PickUp(). If this
             * pick up fails (if who is a player, he is messaged as to why the
             * failure happened)...*/
                /* If who is a player, keep him uptodate with what is going on
                 * (he already knows why).  */
                /* Insert all the remaining contents of the loot in wherever
                 * the loot itself is. */
                /* Reinsert who at the top of the object list (only really necessary if
                 * we had loot who couldn't pick up AND it was reinserted on who's
                 * map). */
            /* If the pick up succeeds, we just carry on with the loop. */
        /* Remove the empty loot. */
    /* When what is not loot, try to pick it up -- see PickUp(). If this fails,
     * just return NULL. */
    /* Give players an appropriate message to tell them what they've done. */
    /* TODO: Currently the client plays a pick up sound whenever a pick up is
     * attempted. This means when the server decides the attempt has failed, a
     * sound is still played. This should be moved server-side. Then also the
     * client can handle the 'you pick up...' messages on receipt of the sound
     * cmd. */
    /* Fix any involved players/monsters who need it -- see FixAsNeeded(). */
/* CanReach() ascertains if what is close enough that who can touch it. That
 * means what must be either (in a container) in who's inventory or (in a
 * container) on the same map square as who -- see below for some exceptions to
 * this basic rule.
 * The return is NULL is what is not in reach of who or, if it is, an object
 * which is one of: what if what is directly on a map; a player or monster
 * (which may be who) if what is (in a container) in that creature's inv; a
 * container which is directly on a map.
 * If who is a player an ndi is sent to the player when what is out of
 * reach. */
    /* Walk up what's environments until the one before the map. In a textbook
     * scenario if what is (in a container) in who's inv then this should be
     * who (players and monters must not have envs).
     * Afterwards this points to an object, one of: what if what is directly on
     * a map; a player or monster (which may be who) if what is (in a
     * container) in that creature's inv; a container which is directly on a
     * map. */
    /* If either who or this are airborne and the other is not (and what is not
     * in who's inventory), who can't reach what. */
    /* TODO: This makes no distinction between flying/levitating. */
    /* Gmaster wiz players can reach things in other creature's invs
     * (including in containers in those invs). All others can only fiddle with
     * themselves. */
    /* Gmaster wiz players can reach things in any container (open or closed).
     * For convenience so can monsters. Other players are limited to their
     * linked container. */
    /* If this does not point to who it must be directly on a map so check that
     * it occupies the same space as who. */
/* PickUp() is the business end of picking up an object -- see pick_up(). */
    /* For a pick up to inv (ie, where is NULL), who might have an appropriate
     * readied container in his inventory, so check that. */
            /* The container must be applied (ready/open). */
                /* It must have enough space for what. */
                    /* Some containers can only hold specific classes of item
                     * (eg, pouches for valuables) while others can hold any.
                     * If we find a specific container that matches the item
                     * class being picked up, use that. Otherwise, use the
                     * first generic one found. */
                    /* TODO: Improve and expand these specific containers. */
    /* Check that who actually can pick up nrof * what. There are several
     * reasons why what can't be picked up -- see CanPickUp(). */
    /* At this point we've determined that its theoretically OK for who to pick
     * up nrof * what. Now we need to determine the type of pick up (to
     * inventory or to container), either of which involves further side
     * effects/checks. */
    /* If where is (still) NULL (see above) we're trying to pick up what to
     * who's inv. */
        /* If what is a container be sure to unlink (close) it for all players
         * viewing it. */
    /* When where is non-NULL we're trying to put what in it. */
        /* Containers can't be put in other containers. */
        /* where may be a container which cannot hold what. */
        /* Check that where has enough space for what. */
        /* TODO: If nrof > 1 perhaps split what to fit? */
        /* If an applyable light is lit (has glow_radius) force it to be
         * FLAG_APPLIED so we can unapply it below. This prevents players storing
         * lit torches in bags. */
        /* Picking up to a container not in who's inventory is similar to
         * dropping in some respects so do the necessary checks -- see
         * CanDiscard(). */
    /* Now we've determined the pick up is possible, so lets do it! */
    /* what can have a PICKUP script on it which, if it returns true, aborts
     * the actual pick up. */
    /* where can also have a PICKUP script on it which, if it returns true,
     * aborts the actual pick up. */
    /* Picking things up from or to outside of who's inventory interrupts
     * resting. */
    /* Below here is the actual code to move what to a new environment (either
     * where or who). Also we send some appropriate messages to the client. */
    /* Picking up unpaid items from a shop floor is preliminary to buying
     * them. */
    /* As long as what is not LOOT, insert it into its new environment. */
/* CanPickUp() determines if who can pick up (if appropriate, nrof *) what
 * (into where if not NULL)>
 * The return is what if who can pick it up, or NULL if who can't.
 * If who is a player an ndi is sent to the player when what can't be picked
 * up. */
    /* Multiparts are absolute no-nos because the server cannot cope with such
     * objects having an environment. Also it would be logically ridiculous to
     * have such physically large objects being pocketed. */
    /* TODO: This restriction will be lifted fo gmaster wiz players. */
    /* Normal players and mobs cannot pick up any of these items but gmaster
     * wiz's can. */
        /* If what is somebody else's ego item then who can't pick it up. */
        /* No_picks can't be picked up. */
        /* If you can't see it, you can't pick it up. */
        /* When what is not already in (a container in) who's inv, check who
         * can lift it. */
/* FixAsNeeded() carries out any necessary fixing post-pick up/drop. */
/* TODO: While I think this works well enough, ALL fixing needs
 * reworking/making more efficient. But that is a separate job. */
/* TODO: Currently monster encumbrance probably isn't handled. */
/* drop_to_floor() is called when who attempts to drop nrof * what.
 * The return is what (but possibly with a different ->nrof, certainly with a
 * different ->env and ->map, etc than before the function) if what was dropped
 * or NULL if it wasn't. */
    /* Sanity checks: must be a who and only players and monsters can drop
     * things; must be a what. */
    /* who can't drop what unless it is in (a container in) who's inventory. */
    /* In a shop a container that is not empty cannot be dropped. */
    /* Sometimes who cannot discard what -- see CanDiscard(). */
    /* Now we've determined the drop is possible, so lets do it! */
    /* If what is a container be sure to unlink (close) it for all players
     * viewing it. */
    /* what can have a DROP script on it which, if it returns true, aborts the
     * actual drop. */
    /* Dropping things interrupts resting. */
    /* Below here is the actual code to move what to the map (specifically the
     * sqaure beneath who's feet). Also we send some appropriate messages to
     * the client. */
    /* Give players an appropriate message to tell them what they've done. */
    /* TODO: Currently the client plays a drop sound whenever a drop is
     * attempted. This means when the server decides the attempt has failed, a
     * sound is still played. This should be moved server-side. Then also the
     * client can handle the 'you drop...' message on receipt of the sound
     * cmd. */
    /* No drops vanish for non-gmaster wiz players. */
    /* In a shop there are special rules. */
        /* An unpaid item is just put back in the shop. */
        /* Coins and worthless items just drop to the floor like normal but
         * everything else is sold to the shop. */
    /* Yay! we're finally done. Insert what into its new map if necessary. */
        /* Reinsert who at the top of the object list. */
    /* Fix any involved players/monsters who need it -- see FixAsNeeded(). */
/* CanDiscard() determines if who can discard what.
 * The return is what if who can discard it, or NULL if who can't.
 * If who is a player an ndi is sent to the player when what can't be
 * discarded. */
    /* Players have a few specific rules. */
        /* Locked items can't be dropped. */
        /* Under some circumstances a player cannot discard a container with
         * something in it. */
            /* Always, certain contents prevent dropping. */
    /* Monsters can't drop no drops. */
    /* If what is applied and can't be unapplied (eg, it's cursed) then it
     * can't be discarded. */
/* NoDiscardContainer() recursively checks containers for no drops and locked
 * items inside, returning a pointer to the first such object found (container
 * cannot be discarded) or NULL if none are found (container can be
 * discarded).
 * An ndi is sent to who (this function is only called for players) when the
 * container cannot be discarded. */

smacky

« Reply #2 on: 11, April 2014, 16:39:29 »
I won't post the latest walkthrough because obviously no-one cares. :(

However, you should try dev (the code is now 0.10.7). You'll notice changes immediately but (I hope) they're all pretty non-controversial and won't need explanation. The idea is to make it all feel 'natural'.


A big change is that gmaster wiz players* can pick up anything except multiparts (but this will change) and other players. Even mobs. Which opens up a lot of possibilities. And a lot of potential for bugs so I need feedback.

*: That is MW/MM/SA. This will change, with restrictions on MM and more restrictions on MW.

Joe

« Reply #3 on: 11, April 2014, 17:00:52 »
Pretty neat!  I went around picking some flowers, then moved on to trees, and soon was picking up mobs and bringing them to town.   ;D   I had no prob's with dropping items in chests, picking up items from shop, and using the bank.
Whoever said "Out of sight, out of mind" never had a spider disappear in their bedroom.

clobber

« Reply #4 on: 11, April 2014, 17:04:11 »
Good idea restricting those pesky MMs
Posted by Clobber

Collector Of Burnt out torches, 0 and Counting.

,-.  ___ ,-.
 \/ .   .  \ / 
(___O___)
 /  \      /   )
 ( ||       || )
  000     000
Woof, Woof!

Quote from: Longir
I use caution, fear is a distraction

smacky

« Reply #5 on: 11, April 2014, 17:17:41 »
I went around picking some flowers, then moved on to trees

Speaking of which, a helpful task for those with sf commit access would be to add weight to such scenery arches.

For example, flowers at least currently have none. The number after weight is grams. Make sure the arch is no_pick 1 so normal players can't pick it up. This will be backwards compatible (currently weight 0 make things non-pickable).

clobber

« Reply #6 on: 11, April 2014, 17:41:39 »
Realistic so that peeps can't lift big trees?
Posted by Clobber

Collector Of Burnt out torches, 0 and Counting.

,-.  ___ ,-.
 \/ .   .  \ / 
(___O___)
 /  \      /   )
 ( ||       || )
  000     000
Woof, Woof!

Quote from: Longir
I use caution, fear is a distraction

Joe

« Reply #7 on: 11, April 2014, 17:52:32 »
Plant arc's are complete, added weight 100 to smaller ones, and weight 200 to the larger.
Whoever said "Out of sight, out of mind" never had a spider disappear in their bedroom.

smacky

« Reply #8 on: 11, April 2014, 23:20:02 »
Realistic so that peeps can't lift big trees?

Well, not exactly. no_pick 1 takes care of that. MW/MM/SA ignor no_pick 1 so they can lift such objects.

They also ignore weight.

The point of weight for such objects is when you place them back on the map they might be on a button or other weight-sensitive area. ATM it's more of a future-safety issue. Also, weight does/should/will play a part when you /push an object.

Thanks Joe.

Shroud

« Reply #9 on: 12, April 2014, 13:12:51 »
Here's an observation I've noticed. If I'm looting a corpse and hit g very quickly so that after I picked it up but item is still visible to client I hit g twice quickly item I picked up is then dropped if hit a total of 4 times.

In addition if there are already some in my inventory then entire new stack is deposited into corpse. I hope it makes sense. If not maybe this is easier to visualise

1. Apply corpse and see 2 silver
2. Hit g on silver and it locates item and asks count
3. Hit g to get maximum count and transfer to other active inventory (inventory)
4. Hit g on silver and it locates item (now in inventory)
5. Hit g to get maximum count and transfer to other active inventory (corpse)
Doesn't matter, you'd die anyway. ;D Shroud's a hacker. After many hours of deep thought I have came to that conclusion.

smacky

« Reply #10 on: 12, April 2014, 14:51:50 »
How fast are you pressing g?!

Well OK, maybe we need to add a tiny client-side delay (a couple of ms should do it) between get attempts. Or actually... hm.

Shroud

« Reply #11 on: 12, April 2014, 15:19:13 »
I hit it 3 or 4 times per second, maybe more. I try to loot as quickly as I can to optimise killing efficiency so I aim to clean out a corpse within a second...
Doesn't matter, you'd die anyway. ;D Shroud's a hacker. After many hours of deep thought I have came to that conclusion.

Joe

« Reply #12 on: 12, April 2014, 19:29:22 »
Added weight to all items in tree arc's.  Left the multi-arch trees alone.
Whoever said "Out of sight, out of mind" never had a spider disappear in their bedroom.

smacky

« Reply #13 on: 12, April 2014, 22:49:49 »
Hm, you can do the multiparts. Only add it to the head object.

Anyway, now only SAs have the enhanced inv (see sys objects and 'inside' everything).

MMs (and MWs on a content dev server) can still pick up anything.

And a few other similar changes (like only SAs now have access to every spell in the game).

smacky

« Reply #14 on: 17, April 2014, 17:37:46 »
So keys.

1. Clearly a large part of the point of keys being no drop is so that the server (via scripts) can decide which players have them and therefore which players have access to certain specific areas. But are there any keys which it would be catastrophic for the wrong player to have? By which I mean, if there were a black market from which anyone with enough cash could buy any key, would this have any really bad effects (ie, beyond the inconvenience of rich noobs invading your previously exclusive dungeon)?

2. I've forgotten 2.

Tags:
 

Related Topics

  Subject / Started by Replies Last post
8 Replies
1251 Views
Last post 05, June 2005, 22:47:05
by KinkoBlast
2 Replies
1020 Views
Last post 21, December 2005, 08:12:23
by Gecko
107 Replies
16083 Views
Last post 07, March 2008, 07:10:07
by Anich
0 Replies
2638 Views
Last post 14, April 2008, 05:04:49
by longir