1. add 'co-owner' houses to find window. 2. Allow 'grabbing' from any house. 3. Add some way to significantly increase storage of non-placeable items in houses/yards.
Determining the difficulty of a mission by scanning a characters inventory/bank/housing/guild housing is a lot different than simply checking a characters lockouts. Not to mention how do you determine how to scale it based on what characters have raid items and what items they have.
While it's hard-set in data, I have an idea you might find interesting... (I've already proof of concept'd this in another environment): EQ Item IDs are a uint32 - meaning, they can go from 0-4294967295, with 0 and 4294967295 being reserved for bogus item response codes. EQ item IDs are up to about 1million, max. I don't think you guys are using all 6 augment slots on an item, are you? You could potentially reserve an augment slot on these items by adding 1 million to the base item ID for each slot you want to add to an item. You could then separate item IDs, keep all base items intact, and clone the entire item DB for each augment slot you'd want to add. And hell, you have the code for the client, I don't have that luxury - you could probably add in a 7th augmentation slot for this purpose. Either way.... this brings me to my next point: The AA window is a great way to add skills to the game that a character natively should have based on conditionals. Wouldn't it be easier to just add an augment slot with a passive effect... ie; a worn effect that grants an AA? An item with a script file (think like the PoP charms!) that loads a specific worn effect? AAs are actually flexible enough to where you could grant or un-grant them on the fly. It doesn't have to be a clicky per se. And - on unequipping the weapon - you could dispell the effect from friendlies and hostile actors, if applicable, and remove the AA. This ensures that it's tied to an existing system; AAs fit on hotbars so it would be a natural fit for a 'pseudo clicky'. Plus, it's transparent to designers, as they would literally have to do nothing to add in an item using this system other than reward an item with ID + 1million. Attached to this post is pseudocode for this type of idea. It, in theory, could generate augments with statistics based on the ID of the item above 10 million. Code: ItemData Database::GetItem(uint32 id) { ItemData blank; memset(&blank, 0, sizeof(ItemData)); if (id == 0 || id==(uint32)-1) { return blank; } if (!items_cache || id > MAX_ITEMS && id < 10000000) { return blank; } if (items_cache->exists(id)) { return (items_cache->at(id)); } else if (id >= 10000000) { ItemData itemPtr; itemPtr = GetItem(BLANK_AUGMENT_ITEM); int itemId = id; if (itemPtr.ID == 0) return blank; ItemData item = itemPtr; itemId -= 10000000; int value = itemId / 10; int log = floor(log10(value)); std::string itemName = "+"; itemName += std::to_string(value); memset(item.Name, 0, 64); //determine type of item switch (itemId % 10) { case 0: itemName += " Hitpoints"; item.HP += value; item.Icon = log > 5 ? 1994 : 1940; break; case 1: itemName += " Mana"; item.Mana += value; item.Icon = log > 5 ? 1998 : 1964; break; case 2: itemName += " Endurance"; item.Icon = log > 5 ? 2214 : 2208; item.Endur += value; break; case 3: if (value > 100) { Str += 100; item.HeroicStr += value - 100; } else { Str += value; } item.Icon = log > 5 ? 1995 : 1946; itemName += " Strength"; break; case 4: if (value > 100) { Sta += 100; item.HeroicSta += value - 100; } else { Sta += value; } item.Icon = log > 5 ? 2002 : 1988; itemName += " Stamina"; break; case 5: if (value > 100) { Agi += 100; item.HeroicAgi += value - 100; } else { Agi += value; } item.Icon = log > 5 ? 1996 : 1952; itemName += " Agility"; break; case 6: if (value > 100) { Dex += 100; item.HeroicDex += value - 100; } else { Dex += value; } item.Icon = log > 5 ? 1997 : 1958; itemName += " Dexterity"; break; case 7: if (value > 100) { Int += 100; item.HeroicInt += value - 100; } else { Int += value; } item.Icon = log > 5 ? 1999 : 1970; itemName += " Intelligence"; break; case 8: if (value > 100) { Wis += 100; item.HeroicWis += value - 100; } else { Wis += value; } item.Icon = log > 5 ? 2000 : 1976; itemName += " Wisdom"; break; case 9: if (value > 100) { Cha += 100; item.HeroicCha += value - 100; } else { Cha += value; } item.Icon = log > 5 ? 2001 : 1982; itemName += " Charisma"; break; default: break; } if(log <= 5) { item.Icon += log; } strncpy(item.Name, itemName.c_str(), 64); item.ID = id; return item; } return blank; }
And the fact that first character can put stuff in an second character's house and it will not show up as belonging to the first character - easy by pass there. I want new hair for half elf rangers - so tired of the chopped look.
We are also stuck with 32 bit memory allocation. (The engineering to change is a colossal project...) Each item uses memory. While this idea is interesting, it's a memory bloat.
what about a saved social page sets...like saved spell sets. dunno how complicated that would be. good luck.
My two cents: * Create a Casino. You buy a casino chip from a vendor for 2m. Take the item to a casino vendor and turn it in. Its a random return if you get a silver token or better luck next time. Take the silver token to another casino vendor (if you get one) and turn it in. Its a random return if you get a gold token or better luck next time. Do this one more time for a platinum vendor in the high stakes room and receive a platinum token. Take the platinum token and turn it into the Cage Boss to receive a random ultra rare 1 of 20 casino prize. Make the prize count and make it worth something but make it hard to get. Maybe the odds change at the time of day in the casino or maybe you need a charm from a quest to increase your odds. Maybe a Siren illusion to help your odds. Something. Get creative, make the prizes really good.
They already have an in game casino that was introduced in LDON and is in Shadow Haven. It has some pretty nice rewards as well. http://everquest.allakhazam.com/db/quest.html?quest=2675
Maybe call it Stormfeather's Casino lol. Have the odds rolling based on time of day, have it so you can go on a winning stream with a "twincast" roll. Announce it zone wide. Make it ultra rare sure but make the prizes really worth it-like next expansion raid item weapon good.
I remember it well and spent alot of time there and got all the rewards. i wasnt a fan of all the crummy stuff on it but maybe you can have the lower level casino guys dish that out. In the high rollers room just the elite lewts!
are real "flying" mounts something in the realm of possibility? Not levitation and off we go.. but the mount flys.. ie ffxiv
making raid currency unlock ~ trade-able when its 2-3 expansions back would be nice for those that want to hand it off to their alts.. heirloom would work here as well
Could also just make the change local to the function that sends the item going out on the wire. What I mean by that is get the base item, add a 'get base item' function, modify said item before you actually use it in places that modify or get augments - specifically, the right click menu for dealing with augments, replace all instances of where you get an item by ID with the modified function, and never allocate memory but instead keep the temporary 'item struct' local to the function. This would ensure that the struct is managed like any other temporary variable, and would only allocate memory once. You wouldn't have to call free or anything because the item wouldn't exist in memory past the function call, at the expense of having to move memory around which might cost a little bit of CPU but probably nothing compared to the memory cost you're describing. That would ensure that there's no memory allocated beyond the item going out on the wire and the base item, and that you're basically 'tricking' the client into storing an item, and storing nothing other than the base item in memory on the server. I'm unsure of the server architecture, so apologies as I'm talking from a strict "the client expects this" perspective - but the item data going out to a client can be modified by the server. It's just a matter of parsing it on the server.