EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Bots (https://www.eqemulator.org/forums/forumdisplay.php?f=676)
-   -   Account based Bots creation/sharing (https://www.eqemulator.org/forums/showthread.php?t=42583)

GM Ash 08-27-2019 01:31 AM

Account based Bots creation/sharing
 
Forgive me for asking this but [search] was not helpful for my question.

If Bots could possibly be "shared" across/between characters on same accounts? The greatest issue would be limiting Bot power so that a player character attempting level-restricted content (such as Lady Vox or Lord Nagafen, or even LDoN missions) would not wind up bringing a group of level 70 or higher bots to a level 52 fight, or level 80+ bots to a level 65 or 70 LDoN Adventure or Raid.

There could be significant benefits for players and server ops alike; from slightly less db storage to reduced time spent gearing up/down bots and managing their groups and very existences.

Bots: account bound instead of (or in addition to) character bound?


Thanks for consideration

Uleat 08-27-2019 01:37 AM

Bots do not have xp nor a 'level' of their own. (The database entry is not used...)

They always spawn as their owner's level.

Another thing to consider is the level requirement of gear .. that wouldn't be a prudent option in our current setup.


This topic has been brought up before and has merit.

I do have some ideas for this concept .. but, I'd like to hear what others think.

Keep the ball rolling ~

Huppy 08-28-2019 08:46 PM

Quote:

Originally Posted by GM Ash (Post 263317)
limiting Bot power so that a player character attempting level-restricted content

That can all be handled by scripts and the DB on a zone by zone/mob by mob basis. As Uleat stated, the bots will always be at the same level as the owner, so the player and the bots would not be any different than a group of real players.

Quote:

Originally Posted by Uleat (Post 263318)
I do have some ideas for this concept .. but, I'd like to hear what others think.

Keep the ball rolling ~

I don't know how many would agree with me on this, but I think the biggest turn off in using bots, is having to constantly gear them all up. It's pretty much the same as going LFG on a live server and once you find a group, you learn they are all naked and have to help them all find some gear. ;)
I know it's unrealistic to dream of bots spawning in a comparable way to mercs, but anything that could ease the birden of gearing them up would help. As it stands, the easiest method for a server dev is setting up a bot gear merchant. That could be done just to get them started, or seperate merchants for various levels. (that could also be setup to sell based on player's level). But as far as hunting for gear, a player and 5 bots (group scenario), is exactly the same as 6 real players. (You kill mobs more than once to get loot for everyone.) It would all depend on the individual preferences of customization for the server.

Transferring bots between accounts ? Does it stop there ? Or do we head for mercs tomorrow ? I tried to put a bot in the shared bank. It didn't work, so I put gear in there, instead. ;)

Uleat 08-28-2019 10:08 PM

I don't believe that our current merc implementation allows for equipment upgrading. That came in a later expansion.

I had an idea of basing bots off of the account..but, then each bot would have a separate inventory (etc...) per character.

That would alleviate the issue of op gear on lower level bots..but, it would not address the issue of having to re-gear them each time.


We do not scale bots like we do other npcs.

This is due to their 'player-like' behavior.

They have stats that are modified like a client.

Their 'bonuses' come from level cap increases, worn gear, spell effects, spell/ability attainment, etc...

Normal npcs do this as well..but, clients do not receive a scaling bonus to their base stats.

prestanneth 09-23-2019 04:51 AM

a few weeks late but just for info, its entirely possible with just the issues already mentioned ( gear level mostly). This depends on server and how its' being used.
I.E on my kids playground i have the ^botshare command implemented for the exact reasons above, re-gearing & recreating a "set" is irritating.
This wouldn't stand up in an public server due to several incomplete issues but is fine for me.

this snippet checks zone ( is missing a world check! ), to see if bots already spawned / in use, and if not swaps it to current char who called command.
Code:

^botshare botname

        std::string bot_name = sep->arg[1];
+        std::list<Bot*> bot_list;  // own bots
+                for (std::list<Bot*>::iterator botListItr = bot_list.begin(); botListItr != bot_list.end(); ++botListItr) {
+                        Bot* tempBot = *botListItr;
+                        if (tempBot->Spawned())
+                        {
+                                c->Message(m_action, "bot '%s' is spawned", tempBot->GetCleanName());
+                        }
+                }
+
+        Bot* botCheckNotOnline = entity_list.GetBotByBotName(bot_name);//bots in zone?
+        if (!botCheckNotOnline) {
+                if (!botdb.BotShare(c->CharacterID(), bot_name)) {
+                        c->Message(m_fail, "%s for '%s'", BotDatabase::fail::BotShare(), bot_name.c_str());
+                        return;
+                }
+                else {
+                        c->Message(m_action, "You are now the owner of bot '%s'", bot_name.c_str());
+                }

where the botdb.BotShare call is doing the swapping via sql qry.
Code:

+        query = StringFormat("update bot_data bd inner join character_data cd on bd.owner_id = cd.id inner join character_data cx on cx.id = '%u' SET owner_id = '%u' where bd.`name` = '%s' and cx.account_id = cd.account_id", owner_id, owner_id, bot_name.c_str());
+
+        auto results = QueryDatabase(query);

added a nodrop check to the fv check area. ( stops them sharing no drop items if you want to be harsh )

Code:

        if(( itm->NoDrop == 0) && (RuleI(World, FVNoDropFlag) != 1 || RuleI(World, FVNoDropFlag) != 2) || c->Admin() < RuleI(Character, MinStatusForNoDropExemptions))
+        {
+                c->Message(m_unknown,  "Item is marked as NO DROP and will not be removed");
+                return;
+        }

side note , i added the "byaccount" flag to ^botlist a few weeks back, mostly cause i use it for the above so i can remember their names for sharing.

KentaiVZ

GM Ash 10-02-2019 04:22 AM

Thanks for answers and suggestions and info. Might be easy to set bots to ignore the armor and weapon tags like required level; actual NPCs (and pets) seem to have no trouble equipping level restricted items, even lore items (and as i recall the accept NO DROP items can be set in the server rules ini).

Yes that means some very well geared level 70 or 80+ bots would make grouping and leveling at low levels trivial without any limits, but i know someone already has a modified script allowing one active bot per 10 levels...

Cheers


All times are GMT -4. The time now is 07:11 PM.

Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.