PDA

View Full Version : Items and levels for a small server.


cubber
06-22-2009, 09:36 AM
This is a quest that I tagged on Galarono_McHalorsos in the bazaar on my server. I chose him because he had no quests assigned to him and he is in a central location. The quest gives him the ability to summon players certian items to make their lives a bit easier on a small server with a population of about 5 players.

This script will give the player the choice to obtain the following:

- 3 guide packs if the player says [bags].

- gm pants (bard speed), celestial sword (gate), gm boots (lev), earing of the Z (nice regen and stats), gm gloves (100% Rez) if the player says [special items]

- Your basic set of mage summoned pet gear if the player says [pet gear]

- An Adventurer's Stone if the player says [Adventurer's Stone]

- 10 vials of Armour Dye if a player says [Armour Dye]

- A joke about the epic if the player says [Epic]

- And finally a choice of levels to level the player up to with the max being 50.

#############
#Written By : Cubber
#Quest Name: Small Server Help
#Quest Zone: Bazaar
#Quest NPC: Galarono_McHalorsos
#################
sub EVENT_SAY
{
if($text=~/Hail/i)
{
quest::say("Hello there $name, Looking for some new toys are ya? I just may have a some special equipment stashed away here somewhere, are you [interested] ?");
}
if ($text=~/interested/i)

{
quest::say("Tell me $race what are ya looking for? [Bags], [Special Items], [Pet Gear], an [Adventurer's Stone], some [Dye] for your armour, or your [Epic]? I can also help you catch up to your friends by granting you some [Levels].");
}

if ($text=~/bags/i)
{
quest::say("Here are some bags to help carry all your loot!");
quest::summonitem("17800");
quest::summonitem("17800");
quest::summonitem("17800");
}

if ($text=~/Special Items/i)
{
quest::say("Here are a few special items to help you along in your travels!");
quest::summonitem("31951");
quest::summonitem("31883");
quest::summonitem("31881");
quest::summonitem("31885");
quest::summonitem("31954");
}

if ($text=~/Pet Gear/i)
{
quest::say("Here are some goodies for your pet!");
quest::summonitem("46987");
quest::summonitem("28595");
quest::summonitem("28595");
quest::summonitem("28596");
quest::summonitem("28596");
quest::summonitem("28598");
}

if ($text=~/Adventurer's Stone/i)
{
quest::say("Good luck on your adventures!");
quest::summonitem("41000");
}

if ($text=~/Dye/i)
{
quest::say("Don't go to crazy with this stuff now!");
quest::summonitem("32557");
quest::summonitem("32557");
quest::summonitem("32557");
quest::summonitem("32557");
quest::summonitem("32557");
quest::summonitem("32557");
quest::summonitem("32557");
quest::summonitem("32557");
quest::summonitem("32557");
quest::summonitem("32557");
}

if ($text=~/Epic/i)
{
quest::say("HaHa! I got ya $class ... You need to earn that one for yourself!");
}

if ($text=~/Levels/i)
{
quest::say("What level would you like me to grant you? [10], [20], [30], [40], or [50]?");
}

if ($text=~/10/i)
{
quest::say("There you are! Don't forget to go train, and get your new spells or skills.");
quest::level(10);
}

if ($text=~/20/i)
{
quest::say("There you are! Don't forget to go train, and get your new spells or skills.");
quest::level(20);
}

if ($text=~/30/i)
{
quest::say("There you are! Don't forget to go train, and get your new spells or skills.");
quest::level(30);
}

if ($text=~/40/i)
{
quest::say("There you are! Don't forget to go train, and get your new spells or skills.");
quest::level(40);
}

if ($text=~/50/i)
{
quest::say("There you are! Don't forget to go train, and get your new spells or skills.");
quest::level(50);
}

}

cubber
07-20-2009, 11:31 AM
I changed this a bit to require a donation to the NPC for the items or levels.

A few other changes that were made:

- Removed the adventure stone since it is obtainable now via the regular quests.

- Added the ability to purchase AA points from the NPC

- Added the ability to purchase 1 level at a time from the NPC

- Removed the old leveling options.

Without a large playerbase I have a bunch of players with a lot of plat and nothing to spend it on. So I figured I would make this guy a plat sink.


#############
#Written By : Cubber
#Quest Name: Items and Levels for a Small Server.
#Quest Zone: Bazaar
#Quest NPC: Galarono_McHalorsos
#################
sub EVENT_SAY
{
if($text=~/Hail/i)
{
quest::say("Hello there $name! I have in my possesion some very fine items, as well as a few useful abilities that I am offering to adventurers for a small donation. Are you [interested] in what I have to offer?");
}

elsif ($text=~/interested/i)

{
quest::say("Tell me $race what are ya looking for? [Bags], [Pet Gear], some [Dye] for your armour, or some very [Special Items]? I can also help you catch up to your friends by granting you some [Levels] or [AA Points].");
}

elsif ($text=~/dye/i)
{
quest::say("I will trade you a stack of armour dye for 25 platinum pieces.");
}

elsif ($text=~/bags/i)
{
quest::say("I will trade you a nice bag for 50 platinum pieces.");
}

elsif ($text=~/Pet Gear/i)
{
quest::say("I will trade you some nice gear for your pet for 100 platinum pieces.");
}

elsif ($text=~/Special Items/i)
{
quest::say("I will trade you a few very special items for 10000 platinum pieces.");
}


elsif ($text=~/AA Points/i)
{
quest::say("I will grant you 5 regular AA Points for 2500 platinum pieces.");
}


elsif ($text=~/Levels/i)
{
quest::say("I will grant you 1 level for 5000 platinum pieces.");
}



}

sub EVENT_ITEM

{

if($platinum ==25)
{
quest::summonitem("32557","20");
}

elsif($platinum ==50)
{
quest::summonitem("17145");
}

elsif($platinum ==100)
{
quest::summonitem("46987");
quest::summonitem("28595");
quest::summonitem("28595");
quest::summonitem("28596");
quest::summonitem("28596");
quest::summonitem("28598");
}

elsif($platinum ==10000)
{
quest::summonitem("31951");
quest::summonitem("31883");
quest::summonitem("31881");
quest::summonitem("31885");
quest::summonitem("31954");
}

elsif($platinum ==2500)
{
quest::ding();
quest::emote("grants you 5 AA Points!");
$client->AddAAPoints(5);
}

elsif($platinum ==5000)
{
quest::emote("grants you 1 level!");
quest::level(quest::getlevel(0) +1);
}

}

vales
07-20-2009, 01:31 PM
Wow, that's awesome! :D Thanks for the contribution.

Edit: Think you can do one for spells? Ever since Sony changed it to get spells at every level, it's getting harder to hunt them down since most of them we can't get due the zones being unavailable (Nedaria's Landing) or the NPCs not being there like in Freeport. And don't even get me started on rune spells, lol.

I think if there was also a way to scale down the HP and MP for mobs for low population servers would be awesome as well. There's no way everyone can experience content if there's a required amount of players needed for something. Bots are awesome, but there are limits still.

cubber
07-20-2009, 01:34 PM
I will see if I can add in a spells line when I have the time.

cubber
07-20-2009, 01:53 PM
Think you can do one for spells?

Here you go. Updated to scribe spells at the current level of the player for 500 plat.

#############
#Written By : Cubber
#Quest Name: Items and Levels for a Small Server.
#Quest Zone: Bazaar
#Quest NPC: Galarono_McHalorsos
#################
sub EVENT_SAY
{
if($text=~/Hail/i)
{
quest::say("Hello there $name! I have in my possesion some very fine items, as well as a few useful abilities that I am offering to adventurers for a small donation. Are you [interested] in what I have to offer?");
}

elsif ($text=~/interested/i)

{
quest::say("Tell me $race what are ya looking for? [Bags], [Pet Gear], [Spells], some [Dye] for your armour, or some very [Special Items]? I can also help you catch up to your friends by granting you some [Levels] or [AA Points].");
}

elsif ($text=~/dye/i)
{
quest::say("I will trade you a stack of armour dye for 25 platinum pieces.");
}

elsif ($text=~/bags/i)
{
quest::say("I will trade you a nice bag for 50 platinum pieces.");
}

elsif ($text=~/Pet Gear/i)
{
quest::say("I will trade you some nice gear for your pet for 100 platinum pieces.");
}

elsif ($text=~/Special Items/i)
{
quest::say("I will trade you a few very special items for 10000 platinum pieces.");
}


elsif ($text=~/AA Points/i)
{
quest::say("I will grant you 5 regular AA Points for 2500 platinum pieces.");
}


elsif ($text=~/Levels/i)
{
quest::say("I will grant you 1 level for 5000 platinum pieces.");
}

elsif ($text=~/Spells/i)
{
quest::say("I will grant you all of the spells up to your current level for 500 platinum pieces.");
}


}

sub EVENT_ITEM

{

if($platinum ==25)
{
quest::summonitem("32557","20");
}

elsif($platinum ==50)
{
quest::summonitem("17145");
}

elsif($platinum ==100)
{
quest::summonitem("46987");
quest::summonitem("28595");
quest::summonitem("28595");
quest::summonitem("28596");
quest::summonitem("28596");
quest::summonitem("28598");
}

elsif($platinum ==10000)
{
quest::summonitem("31951");
quest::summonitem("31883");
quest::summonitem("31881");
quest::summonitem("31885");
quest::summonitem("31954");
}

elsif($platinum ==2500)
{
quest::ding();
quest::emote("grants you 5 AA Points!");
$client->AddAAPoints(5);
}

elsif($platinum ==5000)
{
quest::emote("grants you 1 level!");
quest::level(quest::getlevel(0) +1);
}

elsif($platinum ==500)
{
quest::scribespells(quest::getlevel(0));
quest::emote("points at your spellbook");
}
}

vales
07-20-2009, 01:54 PM
Cool. :) Yeah, it totally caught me off guard when I got the message about heading to the home town or wayfarer's camp to get my stone appeared. I was completely overwhelmed with glee. Heh.

I was looking for something similar about lowering the HP/MP ratio on the server, and remembered someone wrote a solo server SQL batch for WoW. Here's a small sample - maybe someone can take this and run with it. These values are completely different with EQ's but it's something for reference, really. I tested this back in the day, and it was completely awesome. Got to see content I never would have imagined this way as well. :D

-- Restore original values
TRUNCATE TABLE creature_template;
INSERT INTO creature_template SELECT * FROM creature_template_backup;

-- Add tag column
ALTER TABLE creature_template ADD COLUMN solo INTEGER(1) DEFAULT 0;

-- 40 man instances
UPDATE creature_template SET `solo`=1, `minhealth`=`minhealth`/40, `maxhealth`=`maxhealth`/40, `minmana`=`minmana`/40, `maxmana`=`maxmana`/40, `mindmg`=`mindmg`/40, `maxdmg`=`maxdmg`/40, `minrangedmg`=`minrangedmg`/40, `maxrangedmg`=`maxrangedmg`/40, `attackpower`=`attackpower`/40, `rangedattackpower`=`rangedattackpower`/40 WHERE entry IN (SELECT id FROM creature WHERE map IN (249,409,469,531,533)) and rank > 0 and npcflag = 0;

-- Adjustment with maxhealth range
-- Based on 40 man (> 200,001)
UPDATE creature_template SET `solo`=1, `minhealth`=`minhealth`/40, `maxhealth`=`maxhealth`/40, `minmana`=`minmana`/40, `maxmana`=`maxmana`/40, `mindmg`=`mindmg`/40, `maxdmg`=`maxdmg`/40, `attackpower`=`attackpower`/40, `rangedattackpower`=`rangedattackpower`/40
WHERE entry IN (SELECT id FROM creature WHERE map IN (0,1,530) AND solo=0 AND maxhealth > 200001) and rank > 0 and npcflag = 0;

-- Based on 25 man (140,001 - 200,000)
UPDATE creature_template SET `solo`=1, `minhealth`=`minhealth`/25, `maxhealth`=`maxhealth`/25, `minmana`=`minmana`/25, `maxmana`=`maxmana`/25, `mindmg`=`mindmg`/25, `maxdmg`=`maxdmg`/25, `attackpower`=`attackpower`/25, `rangedattackpower`=`rangedattackpower`/25
WHERE entry IN (SELECT id FROM creature WHERE map IN (0,1,530) AND solo=0 AND maxhealth BETWEEN 140001 AND 200000) and rank > 0 and npcflag = 0;

-- Based on 20 man (100,001 - 140,000)
UPDATE creature_template SET `solo`=1, `minhealth`=`minhealth`/20, `maxhealth`=`maxhealth`/20, `minmana`=`minmana`/20, `maxmana`=`maxmana`/20, `mindmg`=`mindmg`/20, `maxdmg`=`maxdmg`/20, `attackpower`=`attackpower`/20, `rangedattackpower`=`rangedattackpower`/20
WHERE entry IN (SELECT id FROM creature WHERE map IN (0,1,530) AND solo=0 AND maxhealth BETWEEN 100001 AND 140000) and rank > 0 and npcflag = 0;

-- Based on 10 man (40,001 - 100,000)
UPDATE creature_template SET `solo`=1, `minhealth`=`minhealth`/10, `maxhealth`=`maxhealth`/10, `minmana`=`minmana`/10, `maxmana`=`maxmana`/10, `mindmg`=`mindmg`/10, `maxdmg`=`maxdmg`/10, `attackpower`=`attackpower`/10, `rangedattackpower`=`rangedattackpower`/10
WHERE entry IN (SELECT id FROM creature WHERE map IN (0,1,530) AND solo=0 AND maxhealth BETWEEN 40001 AND 100000) and rank > 0 and npcflag = 0;

-- Based on 5 man (14,000 - 40,000)
UPDATE creature_template SET `solo`=1, `minhealth`=`minhealth`/5, `maxhealth`=`maxhealth`/5, `minmana`=`minmana`/5, `maxmana`=`maxmana`/5, `mindmg`=`mindmg`/5, `maxdmg`=`maxdmg`/5, `attackpower`=`attackpower`/5, `rangedattackpower`=`rangedattackpower`/5
WHERE entry IN (SELECT id FROM creature WHERE map IN (0,1,530) AND solo=0 AND maxhealth BETWEEN 14000 AND 40000) and rank > 0 and npcflag = 0;


-- Other elite adjustement
DROP TABLE IF EXISTS `avghealth`;
CREATE TABLE `avghealth` (
`minlevel` int(3) unsigned default '0',
`minhealth` int(5) unsigned default '0',
`maxhealth` int(5) unsigned default '0',
`minmana` int(5) unsigned default '0',
`maxmana` int(5) unsigned default '0',
`mindmg` float default '0',
`maxdmg` float default '0',
`minrangedmg` float NOT NULL default '0',
`maxrangedmg` float NOT NULL default '0',
`attackpower` int(10) unsigned NOT NULL default '0',
`rangedattackpower` smallint(5) unsigned NOT NULL default '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


update creature_template as a join avghealth as b on a.minlevel = b.minlevel set a.`minhealth`=b.`minhealth`, a.`maxhealth`=b.`maxhealth`, a.`minmana`=b.`minmana`, a.`maxmana`=b.`maxmana`, a.`mindmg`=b.`mindmg`, a.`maxdmg`=b.`maxdmg`, a.`minrangedmg`=b.`minrangedmg`, a.`maxrangedmg`=b.`maxrangedmg`, a.`attackpower`=b.`attackpower`, a.`rangedattackpower`=b.`rangedattackpower` where a.minhealth > b.minhealth and solo <> 1 and rank > 0 and npcflag = 0;

This made it so the 40 man instances and stuff were perfectly accessable for a small group.

Elite mobs hit harder and have way more HP, so there was also a sql entry to tone them down a bit.

I'm not SQL savvy, but it would be nice to further customize EQ along these lines where maxhp > 10 million could be fixed to reresent something less daunting for a small group.

vales
07-20-2009, 01:56 PM
Here you go. Updated to scribe spells at the current level of the player for 500 plat.


Wow, that's awesome. Thanks a bunch! :D

I'll test tit in a bit after I go kill myself outside in this 100+ degree weather. =/

cubber
07-20-2009, 03:34 PM
Your welcome. It seems to work well on my server. I put the script through its paces. Just so you know if you want to use Galarono McHalorsos as the NPC he is in the bazaar in the central area with all the NPCs standing around in a circle. He is near one of the exit tunnels. Big barbarian guy.

Name the script Galarono_McHalorsos.pl and put it in the bazaar directory. Dont forget to chmod +x it!

As for the SQL stuff I am not sure. May want to consult someone that really knows the db well on that one.

cubber
07-20-2009, 03:40 PM
If you like that one you will love this one.

I wrote this one so I could give some players access to the #summonitem command without actually giving them any elevated privileges on the server. Most of these quests I am writing are there to reduce my gm workload on the server.

I call this one #summonitem proxy

I put it on the big skeleton guy in Cshome named Krakskull. You can put it on any NPC you want. Basically it just allows a player to tell the NPC an item ID number that they get when they look up the item with #itemsearch. Then they just say the number to him and he summons the item to thier cursor.

#############
#Written By : cubber
#Quest Name: #summonitem proxy
#Quest Zone: Cshome
#Quest NPC: Krakskull
#################
sub EVENT_SAY
{
if($text=~/Hail/i)
{
quest::say("Hello there $name, need some [items summoned]?");
}
elsif ($text=~/items summoned/i)

{
quest::say("$race, I have been gifted with the ability to summon any item or spell in this world for you. However, I am not a mind reader, and in order for me to summon anything for you I need to know it's ID number. Please use the command: #itemsearch insert_itemname_here , and just tell me the number next to the item you desire.");
}

elsif ($text=~/\d{0,9}/)
{
quest::emote("Krakskull begins to chant...");
quest::summonitem("$text");
quest::emote("The item you seek apears before your eyes!");
}


}

more info on this script here (http://www.eqemulator.net/forums/showthread.php?t=28877&highlight=summonitem+proxy)

cubber
07-20-2009, 04:35 PM
New version of the Items and Levels for small servers quest.

This one adds the ability to reset your AA points for a fee of 2000 plat. Since the new AA reset quest function boots the player from the world in order to reset the points I made note of it in the quest text. That way players don't file bug reports about the quest crashing them.

#############
#Written By : Cubber
#Quest Name: Items and levels for a Small Server.
#Quest Zone: Bazaar
#Quest NPC: Galarono_McHalorsos
#################
sub EVENT_SAY
{
if($text=~/Hail/i)
{
quest::say("Hello there $name! I have in my possesion some very fine items, as well as a few useful abilities that I am offering to adventurers for a small donation. Are you [interested] in what I have to offer?");
}

elsif ($text=~/interested/i)

{
quest::say("Tell me $race what are ya looking for? [Bags], [Pet Gear], [Spells], some [Dye] for your armour, or some very [Special Items]? I can also help you catch up to your friends by granting you some [Levels] or [AA Points]. If you need me to I can [refund] your AA's as well.");
}

elsif ($text=~/dye/i)
{
quest::say("I will trade you a stack of armour dye for 25 platinum pieces.");
}

elsif ($text=~/bags/i)
{
quest::say("I will trade you a nice bag for 50 platinum pieces.");
}

elsif ($text=~/Pet Gear/i)
{
quest::say("I will trade you some nice gear for your pet for 100 platinum pieces.");
}

elsif ($text=~/Special Items/i)
{
quest::say("I will trade you a few very special items for 10000 platinum pieces.");
}


elsif ($text=~/AA Points/i)
{
quest::say("I will grant you 5 regular AA Points for 2500 platinum pieces.");
}


elsif ($text=~/Levels/i)
{
quest::say("I will grant you 1 level for 5000 platinum pieces.");
}

elsif ($text=~/Spells/i)
{
quest::say("I will grant you all of the spells up to your current level for 500 platinum pieces.");
}

elsif ($text=~/Refund/i)
{
quest::say("I can reset, and refund your regular AA Points for a fee of 2000 platinum pieces.");
quest::me("Please note: this will automatically log you out of the world in order to perform the reset.");
}

}

sub EVENT_ITEM

{

if($platinum ==25)
{
quest::summonitem("32557","20");
}

elsif($platinum ==50)
{
quest::summonitem("17145");
}

elsif($platinum ==100)
{
quest::summonitem("46987");
quest::summonitem("28595");
quest::summonitem("28595");
quest::summonitem("28596");
quest::summonitem("28596");
quest::summonitem("28598");
}

elsif($platinum ==10000)
{
quest::summonitem("31951");
quest::summonitem("31883");
quest::summonitem("31881");
quest::summonitem("31885");
quest::summonitem("31954");
}

elsif($platinum ==2500)
{
quest::ding();
quest::emote("grants you 5 AA Points!");
$client->AddAAPoints(5);
}

elsif($platinum ==5000)
{
quest::emote("grants you 1 level!");
quest::level(quest::getlevel(0) +1);
}

elsif($platinum ==500)
{
quest::scribespells(quest::getlevel(0));
quest::emote("points at your spellbook");
}

elsif($platinum ==2000)
{
quest::emote("strips you of your abilities and refreshes your spirit");
$client->RefundAA();
}
}

vales
07-20-2009, 06:23 PM
Oh wow. You're a machine. Thanks for the updates and new script. :)

cubber
07-20-2009, 07:46 PM
Thanks. Please provide feedback if you use them. I am still learning. and know there may be better and cleaner ways to do what I am trying to accomplish with these scripts.