View Single Post
  #5  
Old 12-10-2010, 01:51 AM
l0stmancd
Fire Beetle
 
Join Date: Apr 2005
Posts: 23
Default

This is still an issue in one case: Zone crash.

When a zone crashes when tradeskill objects are in a container, it is not able to push the items back onto a cursor. I tested out going LD, being forcibly zoned, walking away, etc - these all are fine. It may be the zone crashing is the only way that this still shows as an issue.

The problem is that I do not believe there is a good way to solve this. You cannot handle this via a small script change since you would be operating on a zone / character that are offline (due to crash).

From what I can see there would be one legit fix which is a nasty one, and one possible workaround.

Legit Fix -
1) Create a strong guarantee that any time the tradeskill world container contents are modified, this data is saved right then to the database. This is the case for most functions that modify the tradeskill container but not all. Example - the fix for this that fixed most of these issues pushes items back onto the cursor without saving the change to the tradeskill container contents (from what I could see). This seems like an easy change from what I could see.
2) Move to storing world container items on a Per Character, Per Zone, Per Container basis as opposed to just Per Zone / Per Container. Important for items below. The only concern I had with this is that it would break world containers that need to have items in them as part of a quest. -May- have some impact on dropped bags also. Would need to test this to be honest. This is not a real easy change and - more importantly - needs good testing to make sure that there is no impact (or acceptable impact) for dropped bags / quests involving containers that spawn with items in them.
2) Now that you have a strong guarantee for the database containing -exactly- what was in a container at any given time for any given character, you can make a few assumptions. Combine this with the previous fix (there is no way to leave items in a container except through a zone crash) and I believe you are there. If a character opens a world container at that point, the database can be queried to see if the container for that zone for that character has any items in it. If it does, it was obviously a remnant from a crash and can be pushed back onto the characters cursor. This part seems like a very easy fix.

The issue with the above is that this is a lot of work to catch what is not an absolutely huge problem. Also seems like it is relatively high risk... The real problem is with the augmentation sealers (bird baths). There is not an on-the-character tradeskill container that can replace the bird baths as these are not recipes. This means that in order to augment armor, you would need to take the risk of losing your nodrop armor if the zone crashes. Honestly, zone crashes are not super uncommon and I know lost items from crashes hits one server I play on probably at least once every 2 days. I have -not- investigated to see if it would be possible (easily) to allow a hand-held bird bath item to be created. This would negate the real need for the fix mentioned above.

The other workaround I had considered would be to allow the creation of quests that could handle augmentation for the user - this way the augmentation would be handled as an -almost- atomic transaction (still small chance of lost items during the transition period). This would require exposing new methods (and creating some infrastructure to support such) in the app. Honestly, this hack seems easier and safer to implement than the "fix" I listed above.

Folks - does anyone see another fix for this? Been reviewing the source for ~6 hours or so tracing down the actual cause for this issue and looking to see what could be done to fix this. I would love for someone to tell me that I am wrong - means I have (hopefully) misunderstood the time it would take to solve this issue.

--

Aside: *UPDATE- this wont work* : A very -very- horrible hack could be made where for all armor / items you wish to aug, you could create recipes in a special container for each aug. Assume you have ~10 items you wish to create recipes for and 10 augs. If the items have just one slot, then this is just 100 new recipes. If they have more than one slot, the number of recipes experiences a sharp growth. Could automate the insertion of recipes for this - need to consider the problem. *UPDATE - You do not have the option to specify more than the itemid for recipe success items... *
Reply With Quote