PDA

View Full Version : Multi-Questing?


Somekid123
02-07-2010, 02:55 PM
I hear this cant be done on our server, nor any other Emu servers.

Is this something that can be fixed if the staff felt like doing it? If so would it ever be considered? MQ was a huge part of classic, such as the ancient cyclops ring, or even bigger, epics!

I remember finding so many epic mobs up [Specificly tainted for druid epic] without friends being on, loot it and MQ it later to help that person out.

Goobles
02-07-2010, 03:01 PM
Doesn't work

Otis
02-07-2010, 03:03 PM
While you are correct that it was a major part of Classic, I would say that I wouldn't miss MQing. I never did it, and don't think I ever had the opportunity to.

Zithax
02-07-2010, 03:08 PM
I think as a solution we should make all quest items droppable so they can be sold. LET IT BE DONE.

Cwall
02-07-2010, 03:23 PM
It would be nice to have that in.. I remember selling ancient cyclops ring MQ as one of my main ways of making money.

Reiker
02-07-2010, 05:39 PM
Nope and not exactly fixable either. EQEmu is coded for a quest NPC to expect all items at once, whereas on live quest NPCs didn't care how many turn-ins were made, they "stored" what was left to complete their specific quest.

Tobius
05-26-2010, 11:31 AM
So this is unfixeable? Why did EQEMU code it that way, that is dumb, would posting on the General EQEMU forums help? Or would they not change it anyway? Is it worth asking them to make no drops items tradeable? I know that wasnt classic but neither is no MQ'ing...

Bruman
05-26-2010, 11:33 AM
So this is unfixeable? Why did EQEMU code it that way, that is dumb, would posting on the General EQEMU forums help? Or would they not change it anyway? Is it worth asking them to make no drops items tradeable? I know that wasnt classic but neither is no MQ'ing...

Yeah, I don't know what a good solution is. It's nice not to have NPCs eat your items if turn in the wrong thing, or if the quest isn't implemented yet.

On the other hand, this means I can't have Raster's idol MQ'd for me like I did on live.

mgellan
05-26-2010, 12:26 PM
So this is unfixeable? Why did EQEMU code it that way, that is dumb, would posting on the General EQEMU forums help? Or would they not change it anyway? Is it worth asking them to make no drops items tradeable? I know that wasnt classic but neither is no MQ'ing...

EQEMU implements quests as PERL scripts, that fire based on events rather than being a database. So, when you hand in an item, it fires a script and if it's not written to spit back the item, it won't. I don't see why the scripts CAN'T be written to store lists of items handed in so MQing can be done, but none of them appear to. Interestingly each script uses "plugin::check_handin" each time something is handed in, which might be modifiable to allow MQing, I haven't dug into the scripting environment enough to understand where that code is and how it can be changed, has anyone else?

As an example here's the script that implements the quest handins for Totemic Armor (not from P1999, from the AXClassic PEQ distro of eqemu.) Interestingly this one is written not to eat incorrect handins.

# Quest for Vrynn in Lakerathe - Shaman Totemic Armor (low 30's armor)
# kiladiveus - completed subevents for this quest NPC. I created the ending statement since i can't find any. Same as exp.
# Kiladiveus - In najena, need to add loot "19041 Terror Spines" into "44013 Tentacle_Terror" in Lootdrop 45905. 50% chance?
# Kiladiveus - In unrest, need to add loot "19038 Ghoul Carrion" into "63008 A carrion Ghoul" in Lootdrop 16772. 50% chance?

sub EVENT_SAY {
if($text=~/Hail/i){
quest::say("Greetings. spiritwalker. I am called Vrynn. If you have banded armor, my wife Kyralynn and I can form it into a new shaman armor using this totem and some reagents for the ritual. I make armor from banded [boots]. [gauntlets]. [sleeves]. and [leggings].");
}
if($text=~/boots/i){
quest::say("The boots require banded boots. 1 dufrenite. an orc chief's tongue from Lesser Faydark. and terror spines from a tentacle terror in Najena.");
}
if($text=~/gauntlets/i){
quest::say("The gauntlets require banded gauntlets. 1 crushed dufrenite. a mammoth rib bone. and a griffenne downfeather.");
}
if($text=~/sleeves/i){
quest::say("The sleeves require banded sleeves. 1 ground dufrenite. ghoul carrion from Estate of Unrest. and charger hoof chips.");
}
if($text=~/leggings/i){
quest::say("The leggings require banded leggings. 1 powdered dufrenite. a Permafrost snowball from a goblin wizard. and bone barbs from Estate of Unrest.");
}
}

sub EVENT_ITEM(){
if (plugin::check_handin(\%itemcount, 3064 => 1, 10073 => 1, 19039 => 1, 19041 => 1)) {
quest::ding(); quest::exp(200);
quest::summonitem(4941);
quest::say("I have crafted your boots, use it well.");
}
elsif (plugin::check_handin(\%itemcount, 3062 => 1, 19050 => 1, 19043 => 1, 19046 => 1)) {
quest::ding(); quest::exp(200);
quest::summonitem(4942);
quest::say("I have crafted your gauntlets, use it well.");
}
elsif (plugin::check_handin(\%itemcount, 3060 => 1, 19051 => 1, 19038 => 1, 19045 => 1)) {
quest::ding(); quest::exp(200);
quest::summonitem(4943);
quest::say("I have crafted your sleeves, use it well.");
}
elsif (plugin::check_handin(\%itemcount, 3063 => 1, 19052 => 1, 19034 => 1, 19037 => 1)) {
quest::ding(); quest::exp(200);
quest::summonitem(4944);
quest::say("I have crafted your leggings, use it well.");
}
else {
quest::say("You have given me incomplete or the wrong reagents.");
plugin::return_items(\%itemcount);
}
}

#END of FILE Zone:lakerathe ID:51059 -- Vrynn

Regards,
Mg

YendorLootmonkey
05-26-2010, 12:29 PM
I like no MQ'ing... you want the quest item, you camp the parts yourself.

mgellan
05-26-2010, 12:32 PM
I don't see why the scripts CAN'T be written to store lists of items handed in so MQing can be done, but none of them appear to.

By the way, I'm sure the Devs would be thrilled if someone volunteered to take this on :)

Regards,
Mg

Bumamgar
05-26-2010, 12:55 PM
It would have to be done in the base code, not just the perl.

Basically, npc's would have to have to keep a list of all items handed to them, and then the EVENT_ITEM() call to perl would have to be modified to provide this list to the perl script. Then in the quest script you would have to scan the item list and see if the most recent item turned in to the NPC (the item that triggered EVENT_ITEM) combined with any combination of items in it's list, resulted in a quest reward. If so, then remove those items from the list and do the quest just as it currently does. If not, add the item to the list and exit out.

There would have to be sanity checks in place on the c++ side of things to keep the list small enough to not cause issues, and probably need some sort of timer (5 minutes?) after which items on the list would simply poof.

In other words, it's doable, but requires a fair bit of effort in both the core EMU code and then in re-writing all of the quest scripts. That last bit is extremely non-trivial.

Then again, maybe it could be done without changing the perl EVENT_ITEM() api... I'll have to think on it some more...

Packet
05-26-2010, 01:10 PM
As stated above, perl scripts do not work this way. To re-write the handin function for EVERY script would be not only annoying but a project on an atomic scale. I salute anyone who attempts this as I promise, you will be underwater for a long time. You'd need at least 5 people hitting this daily, testing and confirming each and every script to ensure that it works. With 5 people, working on this within a 2 - 6 hour time span might finish in a few months.

The fun thing about perl is that the slightest change can break the entire quest. So this means you need perl-savvy writers doing this mind numbing work day in and day out. There MAY be a method to change how hand ins are handled in the source but I think there are more concerns at hand right now than enabling multi-questing. MQing was a nice touch but I think it is unnecessary. Ofcourse that is my opinion and I don't speak for everyone.

On a side note, if P99 did do this and sifted through quests adding in a magical function that allowed MQing. Imagine the complaints they would get as people screwed up hand-ins, lost items (due to missed quests) and other assorted problems. It would only put more stress and work on the staff when their hands are already full as it is.

mgellan
05-26-2010, 01:53 PM
On a side note, if P99 did do this and sifted through quests adding in a magical function that allowed MQing. Imagine the complaints they would get as people screwed up hand-ins, lost items (due to missed quests) and other assorted problems. It would only put more stress and work on the staff when their hands are already full as it is.

Assuming we would mod the check_handin.pl plugin, I would say only record a handin of the correct items (since those are passed to it) and reject/return incorrect. To me this would be optimal and reduce the stress on staff since they don't have to deal with petitions about "eaten" items? Assuming the script returned the items in the first place, thats a different issue (bad scripting).

The current script is pretty simple:

# plugin::check_handin($item1 => #required_amount,...);
# autoreturns extra unused items on success
sub check_handin {
my $hashref = shift;
my %required = @_;
foreach my $req (keys %required) {
if ((!defined $hashref->{$req}) || ($hashref->{$req} != $required{$req})) {
return(0);
}
}
foreach my $req (keys %required) {
if ($required{$req} < $hashref->{$req}) {
$hashref->{$req} -= $required{$req};
} else {
delete $hashref->{$req};
}
}
return 1;
}

sub return_items {
my $hashref = shift;
foreach my $k (keys(%{$hashref})) {
next if($k == 0);
my $r;
for($r = 0; $r < $hashref->{$k}; $r++) {
quest::summonitem($k);
}
delete $hashref->{$k};
}
}

1;


I'm not a PERL programmer (why didn't they choose Python? Grrr) but perhaps I can take a stab at writing a version that supports MQ... thoughts? Are the devs on side to implement something like this?

Regards,
Mg

Packet
05-26-2010, 02:20 PM
Not every quest uses the handin plugin so they'd still have to sift through every quest and change something or another. Changing that plugin in particular would simplify things though. It's a good idea.

YendorLootmonkey
05-26-2010, 02:27 PM
Just re-write the subroutine to accept any four items, and then yield the quest reward. Boom... done! =)

"Sweet, just turned in 4 rat whiskers and got my epic weapon!!!"

(Which I hear is not too different than the rogue epic quest!!! haha just playin)

Branaddar
05-26-2010, 02:43 PM
There's pros and cons to having no MQ system in place.

The obvious cons:
- Hard to camp mobs that get killed by XP groups (ie: Raster of Guk)
- Can't be friendly helpful like and help people with their epics as much
- Raiding guilds will be required for epics

Pros:
- Nobody camping epic mobs to sell MQs
- You know that someone wielding their epic probably put in the time to do it all themselves, or have very helpful friends that camp things for them and let them come loot when it drops?
- Raiding guilds will be required for epics... I know I listed it as a con as well, but it depends on your viewpoint on the matter.

And yeah, it'd be a massive undertaking to add MQing into the code. The only potential workaround is making the items tradeable, which then creates a huge market for people to farm and sell epic drops. Since not all epic drops were MQable in the past (combines in containers, one-item turnins, etc.)

Every epic mob would be farmed to hell and back by people who didn't even want the items. Just the plat.

I think I'm okay with no MQs. It'll be harder to get our epics, sure, but that was some of the fun of the old ways. When you finally did get your epic, my god, did it ever feel satisfying.

Aeolwind
05-26-2010, 03:04 PM
There are 11900 quests in the server. Create a solution that doesn't require those to be rewritten...AKA within the source or within the %itemcount plugin and we'll def take a look at it hard....but I'm not rewriting 12000 quests. Die.

guineapig
05-26-2010, 03:58 PM
I'm not rewriting 12000 quests. Die.

<3 :)

mgellan
05-26-2010, 04:22 PM
There are 11900 quests in the server. Create a solution that doesn't require those to be rewritten...AKA within the source or within the %itemcount plugin and we'll def take a look at it hard....but I'm not rewriting 12000 quests. Die.

I think that was an operating assumption that the solution better require no changes to the quest files at all, or it's dead in the water :)

Regards,
Mg

Aeolwind
05-26-2010, 04:42 PM
I think that was an operating assumption that the solution better require no changes to the quest files at all, or it's dead in the water :)

Regards,
Mg

While I would normally agree with you. Assumptions when dealing with any internet community will make an ass out of you and mption in like no time flat. Better to make it clear and remove all doubt lol!

Senadin
05-26-2010, 07:23 PM
I think as a solution we should make all quest items droppable so they can be sold. LET IT BE DONE.

I think as a solution we should make all quest items droppable so they can be FARMED. LET IT BE DONE

Fixed....

kai4785
05-26-2010, 10:11 PM
I think MQ was a flaw in the way the game was originally designed. MQ goes down as "cheating" in my book. I thought that then, I think it now. I like the way the quest system works, programmatically as well as logically.

Urizen
05-26-2010, 11:28 PM
Logically, if a man asks you for something...and a man other than you that wants you to have that something, has the something that the man asking for that something wants. The two of you(yourself and the man that has the something that the man that wants something wants) should be able to combine forces and give the man that wants something what he wants...logically.


=P

YendorLootmonkey
05-27-2010, 06:30 AM
Logically, if a man asks you for something...and a man other than you that wants you to have that something, has the something that the man asking for that something wants. The two of you(yourself and the man that has the something that the man that wants something wants) should be able to combine forces and give the man that wants something what he wants...logically.


=P

Which logically conflicts with the "NO TRADE" tag on the item you end up trying to MQ, i.e. "NO TRADE THIS ITEM FOR $$$$ FOR MQ!!1" MQ was just an exploit to get around the "NO TRADE" tag that for some reason they never fixed, thus giving us such awesome things like "Hey, I already got my jboots, but no you can't have this camp. Instead, I'll MQ this ring with you for 5K plat."

Bruman
05-27-2010, 08:05 AM
Which logically conflicts with the "NO TRADE" tag on the item you end up trying to MQ, i.e. "NO TRADE THIS ITEM FOR $$$$ FOR MQ!!1" MQ was just an exploit to get around the "NO TRADE" tag that for some reason they never fixed, thus giving us such awesome things like "Hey, I already got my jboots, but no you can't have this camp. Instead, I'll MQ this ring with you for 5K plat."

Like everything, unfortunately there are good and bad uses of it.

Unfortunately it's tough to get a group together to help you camp a spawn for 20 hours :(

mgellan
06-14-2010, 04:45 PM
Like everything, unfortunately there are good and bad uses of it.

Unfortunately it's tough to get a group together to help you camp a spawn for 20 hours :(

True - one of the good reasons for having NPCs remember what you turned in is currently if the script doesn't poop the items back out explicitly just because you didn't turn in the right items / quantity (eg Canloe for CB Belts), the item is eaten. With MQing turned on your item is in limbo for as long as is Classic, so if you turned in a belt and got nothing, turning in a second belt would complete the script.

Now, what is Classic? One description I found on the old rpgexpert site is as follows:

Multi-questing is when one person hands in some items for the quest, and the next person hands in the rest of the items and gets the reward. Not all quests can be done this way!

A hypothetical multi-quest situation:

Let’s say your best friend Xazrn has a NO DROP dagger for a quest. You have a NO DROP napkin (or something, bare with me). For the quest to be completed, both have to be handed in at the same time, but neither of you have both items, and you can’t trade them with each other because they’re NO DROP. The solution is multi-quest! Since Sladithar is such a nice guy he wants you to have the quest reward. So first Sladithar hands his dagger to the Quest NPC but he DOESN’T click ‘trade’ yet. You hand your napkin to the Quest NPC and also DO NOT click ‘trade’. So both of you have a trade window up with the Quest NPC. Sladithar asks you if you’re ready. You say yes. He clicks ‘trade’. You wait about 2 to 4 seconds, and you click ‘trade’. And that’s it! You’re awarded the quest reward!


This seems to infer that there's a very short window, yet I seem to remember on either the Totemic or Crafted armor quests I messed up a turnin and had to run off and do something (different Dufrenite flavour?), and returned sweating bullets with the right item and got my reward... this seems to be confirmed by this (http://www.tomshardware.com/forum/12268-13-multiquesting-work) post. Thoughts?

Regards,
Mg

PS Been digging into relearning Perl before attempting the code for this, been a long time :)

Reiker
06-14-2010, 04:47 PM
There was no time window, an NPC stored what items he was given until the server came down. For example if there was a quest to receive 1 gold for turning in 3 fire beetle eyes and someone gave the NPC 4, the next person to give him 2 would receive the 1 gold.

Reiker
06-14-2010, 04:48 PM
Also, nice thread necro.

Pretty non-issue due to EQEmu coding etc etc.