EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Database/World Building (https://www.eqemulator.org/forums/forumdisplay.php?f=596)
-   -   Veteran AA? (https://www.eqemulator.org/forums/showthread.php?t=28093)

Dreamblox 05-03-2009 02:46 AM

Veteran AA?
 
Any info on the Vet AA's such as the Chaotic Jester? I thought they made the game so much fun then when you have them hehe.

Derision 05-03-2009 08:28 AM

I was just thinking about this myself recently.

I spent some time today working on the Chaotic Jester. Mostly it was just SQL for the AA, pet and NPCType tables, and a perl quest for his random actions. There is a tiny bit of code support required to set his name and make him follow the person who spawned him (since he is classed as a swarm pet).

I'll post it all when I'm done.

Derision 05-03-2009 10:59 AM

You need Rev457 for this to work correctly:

SQL
Code:

INSERT INTO `altadv_vars` (`skill_id`, `name`, `cost`, `max_level`, `hotkey_sid`, `hotkey_sid2`, `title_sid`, `desc_sid`, `type`, `spellid`, `prereq_skill`, `prereq_minpoints`, `spell_type`, `spell_refresh`, `classes`, `berserker`, `class_type`, `cost_inc`) VALUES
(1373, 'Chaotic Jester', 0, 1, 1373, 1373, 1373, 1373, 4, 6882, 0, 0, 25, 72000, 65534, 1, 1, 0);

INSERT INTO `aa_actions` (`aaid`, `rank`, `reuse_time`, `spell_id`, `target`, `nonspell_action`, `nonspell_mana`, `nonspell_duration`, `redux_aa`, `redux_rate`) VALUES
(1373, 0, 72000, 6882, 0, 0, 0, 0, 0, 0);

INSERT INTO `npc_types` (`id`, `name`, `lastname`, `level`, `race`, `class`, `bodytype`, `hp`, `gender`, `texture`, `helmtexture`, `size`, `hp_regen_rate`, `mana_regen_rate`, `loottable_id`, `merchant_id`, `npc_spells_id`, `npc_faction_id`, `mindmg`, `maxdmg`, `npcspecialattks`, `aggroradius`, `face`, `luclin_hairstyle`, `luclin_haircolor`, `luclin_eyecolor`, `luclin_eyecolor2`, `luclin_beardcolor`, `luclin_beard`, `d_meele_texture1`, `d_meele_texture2`, `runspeed`, `MR`, `CR`, `DR`, `FR`, `PR`, `see_invis`, `see_invis_undead`, `qglobal`, `AC`, `npc_aggro`, `spawn_limit`, `attack_speed`, `findable`, `STR`, `STA`, `DEX`, `AGI`, `_INT`, `WIS`, `CHA`, `see_hide`, `see_improved_hide`, `trackable`, `isbot`, `exclude`, `ATK`, `Accuracy`) VALUES
(671, 'a_jester_of_bristlebane', NULL, 1, 153, 9, 1, 100, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 'H', 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75, 75, 80, 75, 75, 0, 0, 1, 0, 1, 0, 0);

INSERT INTO `pets` (`type`, `npcID`, `temp`) VALUES
('PetVeteranRewardJester', 671, 1);

Note that I used the next free NPCType and Pet IDs from my copy of the PEQ DB, which I haven't updated in a while, so you may have to amend those.

With that SQL the AA appears under the PoP Adv. tab in Titanium and Special in SoF. It is a zero cost AA that anyone should be able to train, 22 hours re-use timer.

quests/templates/a_jester_of_bristlebane.pl
Code:

# quests/templates/a_jester_of_bristlebane.pl
#
# Quest file for Chaotic Jester Veteran AA
#
# The GetRandomClient code posted by Kayen on EQEmu forums.
#
sub GetRandomClient {

        my $ListCheck = 0;
        my $LastClient = 0;

        for ($ListCheck = 0; $ListCheck < 2000; $ListCheck++) {

                $ClientSearch = $entity_list->GetClientByID($ListCheck);

                if ($ClientSearch) {
                        my $DistanceCheck = $ClientSearch->CalculateDistance($x, $y, $z);
                        if ($DistanceCheck <= 100) {
                                my $ChooseClient = quest::ChooseRandom(1,2);
                                if ($ChooseClient == 2) {
                                        return $ClientSearch->GetID();
                                }
                                else {
                                        $LastClient = $ClientSearch;
                                }
                        }
                }

        }
        return $npc->GetFollowID();
}

sub EVENT_SPAWN {
        quest::settimer(RandomAction, 30);
        quest::settimer(Depop, 900);
}

sub EVENT_TIMER {

        if($timer eq "Depop") {
                quest::depop();
        }

        my $action = quest::ChooseRandom(1,2,3,4,5,6,7,8,9,10,11,12,13,14);

        if($action == 1) {
                $ClientID = GetRandomClient();
                if($ClientID > 0) {
                        $c = $entity_list->GetClientByID($ClientID);
                        if($c) {
                                quest::say("How about a little wine to quench your thirst?");
                                $c->SummonItem(quest::ChooseRandom(64046, 64047), 10);
                        }
                }
        }
        elsif($action == 2) {
                quest::say("I used to work nights as an entertainer for Fennin Ro. . .then he fired me.");
        }
        elsif($action == 3) {
                quest::say("My puns seem to get worse the older I get.  I guess I'm groaning up.");
        }
        elsif($action == 4) {
                $ClientID = GetRandomClient();
                if($ClientID > 0) {
                        quest::say("You need to be more down to earth.");
                        $npc->CastSpell(345, $ClientID);
                }
        }
        elsif($action == 5) {
                quest::say("You have the life expectancy of a blind elf in Kelethin.");
        }
        elsif($action == 6) {
                quest::say("What do you call an angry Berserker?  Anything they want you to!");
        }
        elsif($action == 7) {
                quest::say("What did one ranger say to the other ranger at the local pub?  Bind here often?");
        }
        elsif($action == 8) {
                $ClientID = GetRandomClient();
                if($ClientID > 0) {
                        quest::say("How's the weather up there?");
                        $npc->CastSpell(2522, $ClientID);
                }
        }
        elsif($action == 9) {
                $c = GetRandomClient();
                if($c > 0) {
                        quest::say("You look exhausted.");
                        $npc->CastSpell(6897, $c, 10, 0);
                }
        }
        elsif($action == 10) {
                $ClientID = GetRandomClient();
                if($ClientID > 0) {
                        $c = $entity_list->GetClientByID($ClientID);
                        if($c) {
                                quest::say("Try a bite of my tasty bread.  I make it myself.");
                                $c->SummonItem(quest::ChooseRandom(64044, 64045), 10);
                        }
                }
        }
        elsif($action == 11) {
                quest::say("This place really needs to lighten up.");
                $npc->CastSpell(30, 0, 10, 0);
        }
        elsif($action == 12) {
                quest::say("I've always heard that change must come from within but this is ridiculous.");
                $ClientID = GetRandomClient();
                if($ClientID > 0) {
                        $c = $entity_list->GetClientByID($ClientID);
                        if($c) {
                                $c->BuffFadeByEffect(58);
                                $IllusionSpell = quest::ChooseRandom(586, 590, 591, 587, 1731, 3063, 595, 583, 594, 589, 582, 243, 593);
                                $c->CastSpell($IllusionSpell, $ClientID, 10, 0);
                        }
                }
        }
        elsif($action == 13) {
                quest::say("I think monks use that 'weight thing' as an excuse to make me carry their bags.");
        }
        elsif($action == 14) {
                quest::say("Next time you visit the Plane of Mischief, say hello to the merry mushroom men for me.  Fun guys, all of them.");
        }
        else {
        }

}


warhawk 05-03-2009 11:54 AM

Thats awesome, thanks Derision.

I found a list of the others for those that arn't familiar with these AA's
Veteran Rewards are as follows:

Year 1

Lesson of the Devoted: The player is surrounded by a beautiful blue/white glow as they gain double experience for half an hour every 24 hours.

Year 2

Infusion of the Faithful: Usable once every 24 hours, the player enjoys maximum resistances and statistics and a faster run speed for 15 minutes while he glows brightly with power.

Year 3
Chaotic Jester: Summons a Bristlebane puppet that persists for 15 minutes. Usable once every 24 hours, Bristlebane will randomly cast various spells that provide benefits or minor penalties.

Year 4

Expedient Recovery: Usable once per week, all the player’s corpses are summoned to their feet and given 100% experience resurrection.

Year 5

Steadfast Servant: Summons a creature that casts healing spells upon the player and others nearby. Lasts for half an hour and is usable once every 24 hours.

Year 6

Staunch Recovery: Usable once every 3 days, the player is fully healed with health, mana, and endurance fully restored.

Year 7

Intensity of the Resolute: Increases the power of the player’s abilities and heals substantially for 5 minutes once every 24 hours while the player is surrounded by a glow of energy.

Warhawk

Dreamblox 05-04-2009 06:44 PM

Huge thanks Derision for the code hopefully others will find this topic if they ever wondered about the Vet. AA's.

trevius 05-05-2009 07:15 PM

Just an FYI that the client search script is very CPU intensive and can start causing issues quick if over-utilized. I put this script on SH today and we are seeing a large jump in CPU utilization. We haven't confirmed if it is due to this new AA for sure or not, but I figured it was worth mentioning here just in case. If we find out for sure, I will let you guys know.

It would be great to have the client search added as a feature to the source and hopefully cut down a ton of overhead when using it. If we had a client list, we could be doing 20 FORs instead of 2000 :P

EDIT: FYI, it turns out that the High CPU Utilization and crashes were due to another issue in the source that has been fixed. Really, this script shouldn't be way too rough on a server as long as you didn't have like 30 of them up at the same time (essentially running the FOR 1 time per second average). And that is pretty unlikely to happen, at least not often. It would still be nice to have the client search code in the source though :D

Derision 06-13-2009 02:28 PM

For those not using the PEQ database, here is the SQL to add:

Lesson of the devoted (requires Rev657).
Infusion of the faithful (Rev657 recommended).
Expedient recovery (requires Rev659).

Code:

INSERT INTO `altadv_vars` (`skill_id`, `name`, `cost`, `max_level`, `hotkey_sid`, `hotkey_sid2`, `title_sid`, `desc_sid`, `type`, `spellid`, `prereq_skill`, `prereq_minpoints`, `spell_type`, `spell_refresh`, `classes`, `berserker`, `class_type`, `cost_inc`) VALUES (1371, 'Lesson of the Devoted', 0, 1, 1371, 1371, 1371, 1371, 8, 6880, 0, 0, 23, 72000, 65534, 1, 1, 0);
INSERT INTO `altadv_vars` (`skill_id`, `name`, `cost`, `max_level`, `hotkey_sid`, `hotkey_sid2`, `title_sid`, `desc_sid`, `type`, `spellid`, `prereq_skill`, `prereq_minpoints`, `spell_type`, `spell_refresh`, `classes`, `berserker`, `class_type`, `cost_inc`) VALUES (1372, 'Infusion of the Faithful', 0, 1, 1372, 1372, 1372, 1372, 8, 6881, 0, 0, 24, 72000, 65534, 1, 1, 0);
INSERT INTO `altadv_vars` (`skill_id`, `name`, `cost`, `max_level`, `hotkey_sid`, `hotkey_sid2`, `title_sid`, `desc_sid`, `type`, `spellid`, `prereq_skill`, `prereq_minpoints`, `spell_type`, `spell_refresh`, `classes`, `berserker`, `class_type`, `cost_inc`) VALUES (1374, 'Expedient Recovery', 0, 1, 1374, 1374, 1374, 1374, 8, 6883, 0, 0, 26, 590400, 65534, 1, 1, 0);

INSERT INTO `aa_actions` (`aaid`, `rank`, `reuse_time`, `spell_id`, `target`, `nonspell_action`, `nonspell_mana`, `nonspell_duration`, `redux_aa`, `redux_rate`, `redux_aa2`, `redux_rate2`) VALUES (1371, 0, 72000, 6880, 0, 0, 0, 0, 0, 0, 0, 0);
INSERT INTO `aa_actions` (`aaid`, `rank`, `reuse_time`, `spell_id`, `target`, `nonspell_action`, `nonspell_mana`, `nonspell_duration`, `redux_aa`, `redux_rate`, `redux_aa2`, `redux_rate2`) VALUES (1372, 0, 72000, 6881, 0, 0, 0, 0, 0, 0, 0, 0);
INSERT INTO `aa_actions` (`aaid`, `rank`, `reuse_time`, `spell_id`, `target`, `nonspell_action`, `nonspell_mana`, `nonspell_duration`, `redux_aa`, `redux_rate`, `redux_aa2`, `redux_rate2`) VALUES (1374, 0, 590400, 6883, 0, 0, 0, 0, 0, 0, 0, 0);



All times are GMT -4. The time now is 02:10 PM.

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