Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Bots

Development::Bots Forum for bots.

Closed Thread
 
Thread Tools Display Modes
  #1  
Old 04-15-2007, 05:22 AM
Magoth78
Discordant
 
Join Date: Jun 2003
Posts: 345
Default EQoffline, bots and more..

Hello,

Due to a recent (and crazy) idea, I'm actually wondering if a single player version of the game -with bots assisting you- would be doable or not.
The point is to give us the availability to play this game with bots and to give another dimension by makeing it very strategic.

There are the plans:

- You start the game, just like the normal game, but you are leader of a guild.

- The guild is composed by 23 bots (24 with you) that are played by the computer. You can start a group with the bots that you want and the bots would gain 4x more exp than you, so you can group with all your bots and you will maintain an adverage guild level.
How I see that: Let's say you enter in a zone. You know you have 23 bots that you created (name, race and class). In the zone that you've just entered, you need a group. You summon your 5 bots by their name, they automatically join your group.

- Each bot has an inventory just like a player but the bags. Each loot can be given to a bot that's auto-equip the given item. The stats of the bots change when the looted item is equipped.

- Each bot has an certain AI depending of its class. Tanks taunt, cleric heal, enchanters mez the adds etc...

- Group: While grouped with bots, you can see their HP/Mana/Experience bars. Yours grouped bots follow you and do a certain job when certain events occur (attack, attacked by, adds, death, buffs, mana/hp break, etc...)

- Raid: as you can have 4 groups, each group is leaded by a bot that you can lead by macros. /msg LeadBot1 "guard the place"/"attack target"/"follow"/"assist"/etc...

Ofcourse, for the moment it's just an idea but I like it. It might be a personnal project that will take much time but I don't really care.. I really would like to play alone, legit and tactically, take my time and rediscover the game as I did in 1999..

Now, my main problem is that I'm trying to figure where to begin...

sorry by advance for the english faults
__________________
User's projects:
-- Original EMPIRE I/II and Factions! servers
-- Web GM Portal
-- EQoffline/bots
  #2  
Old 04-16-2007, 03:55 PM
GeorgeS
Forum Guide
 
Join Date: Sep 2003
Location: California
Posts: 1,475
Default

Interesting idea. It's possible to script a .pl script that upon /hail/ a few guards spawn and will follow you around until you tell them not to. They will be amiable but may attack others who are evil. I never tried this but I can write a script to do this. You may have to find NPC's id's who are factioned with you and availble in most zones... Just an idea

GeorgeS

__________________
Your source for EQ database tools
Toolshop is open for business


http://www.georgestools.chrsschb.com//
  #3  
Old 04-17-2007, 04:21 AM
Magoth78
Discordant
 
Join Date: Jun 2003
Posts: 345
Default

Hello Georges, thanks for the answer.

Making bots to spawn wouldn't be the hardest job. As you said, you can use a perl script to make them spawn and follow you.

Now, as a part of a full project, I think it would be better to code a full interface for the bots using the #commands, perl scripts or maybe UI. Yes, because you will need to equip/unequip them, make group/raids depending of situations and assign tasks.

What I think would be the hard part (if not impossible, I don't know at this time) is to make them auto-join the group (so you can see their HP/Man bars) and acting as close as players do. That means they would have a group/Raid AI : melee1 will be the MT, melee2 will tank if any add, healers1 will heal melee1, healers2 will heal melee2, casters will assist melee1, etc...

I agree with you, that sounds like a dream

Later,
Mag
__________________
User's projects:
-- Original EMPIRE I/II and Factions! servers
-- Web GM Portal
-- EQoffline/bots
  #4  
Old 04-22-2007, 08:38 AM
Magoth78
Discordant
 
Join Date: Jun 2003
Posts: 345
Default

Maybe a dream will become real.

I've started to work on the project, there are the principal features:

1/ You can group with your bots.

Once you've spawned your bots, you can group with 5 of them. Their name and HPs are appearing in your normal group bar. If they are damaged or healed, you will see their HPs moving.

*** actually 5 is the limitation because I want to make everything working well in group then I'll start to work on raids.


2/ Attack limitations (melee + spells)

You can't attack your bots. Bots can't attack themselves. Bots can't attack their Master (you by default or any other player who grouped their bots).


3/ Moove

Once you've grouped your bots, they will follow you just like all the others mobs do when they're aggroing you. That's a great thing because they will never be stuck and if they re rooted/snared or anything else and you are far from them, they will always find their way to you.


4/ Master death, Bots death

If you die (or zone/disco/LD) you loose your actual bots and your group is disbanded. But don't worry, you can just spawn them and invite them in your group again.
If a bot dies, he disappears then leaves the group. Also, you can spawn it again and group it.


Now, I'm going to focus on the stats of the bots and their inventory. As I said on a previous post, I would like to give to a choosen bot an item that I've looted. This way, this bot will become stronger.
For that, I've 2 majors ways:
a) A perl quest per bot : once I gave an item to a bot, it gains the benefits of this items. Its stats are updgraded (if the item is better that he had) or downgraded (if I want to unequip this bot).
b) A web feature : A lot of things can be done with php.

When done, I will start to work on their AI. I really want to have the rogue Bots to go behind the mob, Mezzers bots doing some CC, etc... but I think there re a lot of job to do in order to make it working perfectly..


Later,
Mag
__________________
User's projects:
-- Original EMPIRE I/II and Factions! servers
-- Web GM Portal
-- EQoffline/bots
  #5  
Old 04-22-2007, 09:43 AM
Angelox
AX Classic Developer
 
Join Date: May 2006
Location: filler
Posts: 2,049
Default

Here's a helper Bot I started, but have since run out to finish; It actually follows you around and heals, buffs you at your request. I had it working in Gulf of Gunthark, Infact you can test it on the Rathe server;
First, you talk to Cadale Brohat at the vendors in Gunthak;
Code:
#zone: gunthak NPC: Cadale_Brohat (224209)
#Angelox

sub EVENT_SAY { 
if ($text=~/Hail/i){
  quest::emote("smiles widely at you. 'Welcome. You are brave to venture to Broken Skull Rock. Don't mind the others. Everyone is a bit touchy around here. If you are interested in dyes, feel free to peruse what I have to offer. Playing with them has given me hours of entertainment! Just be careful on this rock, and watch your back. Oh, before I forget, I'm looking for someone to help me with some [tasks] that I need to get done. All my time with the dyes has kept me from some of the more important things I need to take care of.'");
  quest::emote("Gets closer and whispers,'Or perhaps you might be interested in hiring some [help]?");
 }
elsif($text=~/help/i){
  quest::emote("chuckles, 'I have some mercenary friends interested in making some plat, they've asked me to handle their [pay]");
}
elsif(($text=~/pay/i)&&($class eq 'Warrior')){
  quest::emote("Whispers, 'Not so loud! I'm moonlighting here -  50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Paladin')){
  quest::emote("Whispers, 'Not so loud! I'm moonlighting here -  50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Shadowknight')){
  quest::emote("Whispers, 'Not so loud! I'm moonlighting here -  50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Ranger')){
  quest::emote("Whispers, 'Not so loud! I'm moonlighting here -  50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Monk')){
  quest::emote("Whispers, 'Not so loud! I'm moonlighting here -  50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Bard')){
  quest::emote("Whispers, 'Not so loud! I'm moonlighting here -  50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Rogue')){
  quest::emote("Whispers, 'Not so loud! I'm moonlighting here -  50 plat will get you help tell you leave this world'");
}
elsif(($text=~/pay/i)&&($class eq 'Berserker')){
  quest::emote("Whispers, 'Not so loud! I'm moonlighting here -  50 plat will get you help tell you leave this world'");
}
elsif($text=~/pay/i){
  quest::says("Sorry, this offer is only for melee-types");
 }
}

sub EVENT_ITEM{
  if ($platinum<=49){
    quest::say("Thank you for your donation $name, it wasn't enough though ...");
}
  elsif (($platinum>=50)&&($sandee==0)){
    quest::emote("summons a mercenary to your side");
    quest::spawn2(224236,1,0,-242.0,1521.1,4.1,108.4);
    quest::say("Here she is, be careful not to wander too far away from her, else she comes back to me");
    quest::delglobal("sandy");
    quest::setglobal("sandy",2,3,"F");
    $sandy=undef;
    $sandee=1;
    quest::delglobal("$name");
    quest::setglobal("$name",3,3,"F");
}
   elsif ($sandy==2){
    quest::say("Sorry, all mercenarys are in use.");
}
   elsif (${$name}==3){
    quest::say("You can only have one at a time.");
}
  elsif (($platinum>=50)&&($sandy==3)){
    quest::emote("summons a mercenary to your side");
    quest::spawn2(224236,1,0,-242.0,1521.1,4.1,108.4);
    quest::say("Here she is, be careful not to wander too far away from her, else she comes back to me");
    quest::delglobal("sandy");
    quest::setglobal("sandy",2,3,"F");
    $sandy=undef;
    quest::delglobal("$name");
    quest::setglobal("$name",3,3,"F");
}else{
    quest::say("Oops! I missed a possibilty!");
 }
}
Then , if you payed the right amount and are the proper class, Brohat will pop you some help - Merc Sandy ( A cool looking female dark elf);
Code:
# Angelox's EQ Bots
#Gunthak healer

sub EVENT_SAY { 
 if($class eq 'Cleric'){quest::say("Sorry, I can't help a cleric");
 }
 elsif($class eq 'Shaman'){
 quest::say("Sorry, I can't help a Shaman");
 }
 elsif($class eq 'Necromancer'){
 quest::say("Sorry, I can't help a Necro");
 }
 elsif($class eq 'Wizard'){
 quest::say("Sorry, I can't help a Wizard");
 }
 elsif($class eq 'Magician'){
 quest::say("Sorry, I can't help a Magician");
 }
 elsif($class eq 'Enchanter'){
 quest::say("Sorry, I can't help a Enchanter");
 }
 elsif($class eq 'Beastlord'){
 quest::say("Sorry, I can't help a Beastlord");
 }
 elsif($text=~/follow/i){
quest::clear_proximity();
quest::say("Following");
quest::follow($userid);
 }
 elsif($text=~/quit/i){
 quest::say("Ok, good-bye!");
 quest::delglobal("sandy");
 quest::setglobal("sandy","3","3","F");
 $sandy=undef;
 quest::delglobal("$name");
 quest::setglobal("$name","2","3","F");
 quest::clear_proximity();
 quest::depop();
}
elsif($text=~/hail/i){
quest::say("I'm ready $name, do you need to know the [commands]?");
}
elsif($text=~/commands/i){
quest::say("If you target and say [follow], then I will follow you,");
quest::say("If you target and say [stop], then I will stop, but don't go to far away, else you'll loose me,");
quest::say("If you target and say [quit], I will go away,");
quest::say("I can [heal] you with celestial healing, and I have [temperance] for buffs,");
quest::say("You have to trarget me for my attention.");
quest::say("Don't forget to tell me to [quit] when you're done.");
}
elsif($text=~/heal/i){
 quest::say("Casting celestial healing ...");
 quest::settimer("cheal1",5);
}
elsif($text=~/temp/i){
quest::say("Casting temperance ...");
quest::settimer("temp1",15);
}
elsif($text=~/stop/i){
 quest::clear_proximity();
 quest::depop();
 my $a = 224236;
 my $x = $npc->GetX();
 my $y = $npc->GetY();
 my $z = $npc->GetZ(); 
quest::spawn2($a,1,0,$x,$y,$z,$h);
quest::say("Ok, don't stray too far!");
 }
}

sub EVENT_SPAWN{
	$x = $npc->GetX();
	$y = $npc->GetY();
	quest::set_proximity($x - 120, $x + 120, $y - 120, $y + 120);
}

sub EVENT_EXIT{
	quest::depop();
	quest::delglobal("sandy");
	quest::setglobal("sandy","3","3","F");
	$sandy=undef;
	quest::delglobal("$name");
	quest::setglobal("$name","2","3","F");
}

sub EVENT_TIMER
{
    if ($timer eq "cheal1"){
        quest::stoptimer("cheal1");
        $npc->CastSpell(1444,$userid);
    }
    elsif ($timer eq "temp1"){
        quest::stoptimer("temp1");
        $npc->CastSpell(3692,$userid);
 }
}

sub EVENT_DEATH{
	quest::delglobal("sandy");
	quest::setglobal("sandy","3","3","F");
	$sandy=undef;
	quest::delglobal("$name");
	quest::setglobal("$name","2","3","F");
 }
Like I said, this little puppy works - I just need to finish it or maybe you can - right now I'm having a hell of a time recuperating some lost data from my server death, also am working, and my little bit of spare time goes to database work (Cavedude: Hatesfury is on its way!) .
I also had plans for this npc to cross into other zones with its owner via quest_globals
  #6  
Old 04-22-2007, 04:03 PM
Magoth78
Discordant
 
Join Date: Jun 2003
Posts: 345
Default

Hello angelox,

thanks for the idea.

Perl is surely the easiest way to command your bot. But the limitation of it is that you have to target one bot in order to make it doing an action. I'd prefer to have a bot that know what he can do depending of its class and in most situations..

Let's say you're grouped with 5 bots:
1 war, 1 rogue, 1 enchanter, 1 cleric, 1 shaman and you, 1 ranger

You're pulling.
- Once you or one of your bot has the aggro the war will taunt the mob (wich will become the main target of the group).
- The rogue(bot) will go behind it and start the dps.
- The enchanter(bot) will wait to see if any other mob aggro you or one of your bot. If so, he will mez it and keep it mezzed till the first mob dies. While the add is mezzed, he will cast some DD on the main target.
- The cleric(bot) will check the HPs of the group.
- The shaman(bot) will debuff the mob (debuff+dots), will check the buffs of the groups in fight.
- and you... you do what you want to

In the actual state, Perl doesn't permit me to automatize all theses tasks. But I could use it to start a particular AI on a given bot. For example, if I have 2 healers in group, I could set the main and the second healer or 1 bot will be healing and the second one will make dps...

Good day,
Mag
__________________
User's projects:
-- Original EMPIRE I/II and Factions! servers
-- Web GM Portal
-- EQoffline/bots
  #7  
Old 07-13-2007, 03:17 PM
madborg
Banned
 
Join Date: Jan 2002
Posts: 322
Default

i like the idea of bots a lot. in fact i have been trying in various places for some of the bot like things. a few years ago in a mud-dev list i advocated the use of external bots and that wasnt well recieved. i was going to add that part into my mud server but it wasnt worth my time then.
the best i did was use multiple logins with scripting clients.

a bot port would be nice because there is no need for graphics just the ability to send and read messages. of course i would add in additional hooks - something that a normal player wouldnt have access to but would make the life of the bot easier. maybe a bot port wouldnt be necessary for a first pass since we were able to do a lot with just a scripting client but there are limitations to that.

i found a NWN emulator (very crude) and the guy set up a separate server for mob control. one nice thing about an external mob is that the logic can be very complex without it affecting the game server. well maybe some effect since the server and the mob controller have to talk to each other.

i dont know of any project where they have pushed the whole concept of external controllers and bots.
  #8  
Old 07-13-2007, 04:33 PM
dark_fusion's Avatar
dark_fusion
Fire Beetle
 
Join Date: Jun 2007
Posts: 18
Default

This is absolutely awesome Mag! Great job!

I really look forward to the next release, cant wait to play around with those raid commands, thats gonna be sweeeet.

Keep up the good work!
  #9  
Old 07-13-2007, 04:52 PM
Magoth78
Discordant
 
Join Date: Jun 2003
Posts: 345
Default

Thank you. I'm actually debugging the raid stuffs...
It might take more time than I thought.

Sorry about that,
Mag
__________________
User's projects:
-- Original EMPIRE I/II and Factions! servers
-- Web GM Portal
-- EQoffline/bots
  #10  
Old 07-13-2007, 07:04 PM
Magoth78
Discordant
 
Join Date: Jun 2003
Posts: 345
Default

Temporary windows binaries : http://eqoffline.free.fr/Build.rar
Temporary sources files: http://eqoffline.free.fr/EQEmu-eqoffline.rar

A lot of things got fixed. The raid is almost finished, I'm just finishing the debugs...


G'nite,
Mag
__________________
User's projects:
-- Original EMPIRE I/II and Factions! servers
-- Web GM Portal
-- EQoffline/bots
  #11  
Old 07-14-2007, 12:07 AM
Haerikk
Fire Beetle
 
Join Date: Jul 2007
Posts: 3
Default

Thank you SO much Magoth!

They seem to be working just fabulously. I am noticing that a pre-update level 6 cleric bot that I had doesn't seem to want to cast buffs on the group, but that may just be a function of level.

I will post if I can confirm after testing^^^playing for a few hours here

Again, thank you for all your hard work. It is appreciated!

-Haerikk
  #12  
Old 07-21-2007, 08:18 AM
Blakine
Sarnak
 
Join Date: Jul 2007
Posts: 30
Default

I cant seem to get to your site, but would love to download this. Is it available on another site?
  #13  
Old 07-21-2007, 03:05 PM
GeorgeS
Forum Guide
 
Join Date: Sep 2003
Location: California
Posts: 1,475
Default

Just in case you missed my thread about a new tool to create BOT/RAID NPC's - (it's added to my NPC Editor)
http://www.eqemulator.net/forums/sho...d=1#post135360

I'm hard at work finishing up the tool, but in essence it does make BOT creation pretty easy. The tool to equip the BOTS is being added next.

GeorgeS
__________________
Your source for EQ database tools
Toolshop is open for business


http://www.georgestools.chrsschb.com//
  #14  
Old 07-21-2007, 08:24 PM
Magoth78
Discordant
 
Join Date: Jun 2003
Posts: 345
Default

Quote:
Originally Posted by GeorgeS View Post
Just in case you missed my thread about a new tool to create BOT/RAID NPC's - (it's added to my NPC Editor)
http://www.eqemulator.net/forums/sho...d=1#post135360

I'm hard at work finishing up the tool, but in essence it does make BOT creation pretty easy. The tool to equip the BOTS is being added next.

GeorgeS
That's nice Georges. It will help people to deal with their raid bot members.
__________________
User's projects:
-- Original EMPIRE I/II and Factions! servers
-- Web GM Portal
-- EQoffline/bots
  #15  
Old 07-22-2007, 06:55 AM
GeorgeS
Forum Guide
 
Join Date: Sep 2003
Location: California
Posts: 1,475
Default

Pet classes not casting?

I tried creating a Mage (spells id=4) and Necro (spells id=3)and both just stand there not casting pets. They are lvl 51, and not one spell's cast by them. The cleric works excellent though

Not sure what's up. My npc's are ok in the db and I sourced the sql for spell_entries from Magoth's site
Mage uses spell entries
Anyone having difficulties as well?

GeorgeS
__________________
Your source for EQ database tools
Toolshop is open for business


http://www.georgestools.chrsschb.com//
Closed Thread


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 11:24 AM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3