Page 1 of 1

Pet Level System

Posted: Sat Sep 18, 2021 7:05 am
by dragon slayer
Version 0.5 Released 8/13/22
1. Fixed bug where you could get more abilities points if you was already maxlevel.
2. Added Switch to enable and disable Gender
3. Added New Abilities Colossal Blow. 'HULK SMASH'

Version 0.4 Released 8/12/22
1. Fixed Error with Puser
2. Added Defense Mod at Level 30.
3. Adjusted the level exp needed to get to next level.
4. Adjusted how much exp you get per hit.

Version 0.3 Released 8/12/22
1. Fixed so any pets that didn't have Pet Level system before would have it when system is added to shard.

Version 0.2 Released 9/18/21
Added Str,Dex,Int,LoDam,HiDam Buttons to level up on npc
Changed how Much XP you gain for a fight.
Changed how much ability points you gain on a level.
Changed Max Level to be little higher.
Added Female and Male Gender. Note will be for later project.

Version 0.1 Released
Thanks to Xuri for helping me solve my ongumppress
Drop this Js in you custom folder and assign it a number.

You're wondering how to get the gump to come up.
well what I did was add it to my animallore.js

just add this line to your animalore.js around line 60.
Make sure you change the script number on it to our number you assigned the js too.
TriggerEvent(3402, "petGump",pUser, ourObj);
Now all you have to do is add that SCRIPT # to the npcs you want to be able to level up and it will be all set.
///////////////////////////////////////////
// Pet Level System Version 0.5          //
// Written by Dragon Slayer              //
///////////////////////////////////////////
const GenderEnabled = false;

function onCreateDFN(objMade, objType)
{
    var randmax = RandomNumber(10, 50)
    var iDice = RandomNumber(1, 2)
    var pUser = objMade;
    var totalstats = pUser.strength + pUser.dexterity + pUser.intelligence + pUser.maxhp + pUser.maxstamina + pUser.maxmana + pUser.lodamage + pUser.hidamage;
    var nxtlvl = totalstats * 20;
    if (objType == 1)
    {
        pUser.SetTag("Exp");
        pUser.SetTag("Level");
        pUser.SetTag("MaxLevel", randmax);
        pUser.SetTag("NxtLevel", nxtlvl);
        pUser.SetTag("AbilityPoints");
        if (GenderEnabled)
        {
            if (iDice == 1)
            {
                pUser.SetTag("Gender", "Male");
                pUser.title = "(Male)";
            }
            else
            {
                pUser.SetTag("Gender", "Female");
                pUser.title = "(Female)";
            }
        }
        pUser.SetTag("init", true);
    }
}

function Init(pUser)
{
    if (!pUser.GetTag("init"))
    {
        var randmax = RandomNumber(10, 50)
        var iDice = RandomNumber(1, 2)
        var totalstats = pUser.strength + pUser.dexterity + pUser.intelligence + pUser.maxhp + pUser.maxstamina + pUser.maxmana + pUser.lodamage + pUser.hidamage;
        var nxtlvl = totalstats * 20;
        pUser.SetTag("Exp");
        pUser.SetTag("Level");
        pUser.SetTag("MaxLevel", randmax);
        pUser.SetTag("NxtLevel", nxtlvl);
        pUser.SetTag("AbilityPoints");
        if (GenderEnabled)
        {
            if (iDice == 1)
            {
                pUser.SetTag("Gender", "Male");
                pUser.title = "(Male)";
            }
            else
            {
                pUser.SetTag("Gender", "Female");
                pUser.title = "(Female)";
            }
        }
        pUser.SetTag("init", true);
    }
}

function onAttack(pAttacker, pDefender)
{
    if (pAttacker.tamed)
    {
        Init(pAttacker);
        var expgainmin = Math.min(pDefender.maxhp * 5);
        var expgainmax = Math.max(pDefender.maxhp * 10);
        var xpgain = RandomNumber(expgainmin, expgainmax);
        var oldNumExp = parseInt(pAttacker.GetTag("Exp"));
        var oldNumlvl = parseInt(pAttacker.GetTag("Level"));
        var oldNumnxtlvl = parseInt(pAttacker.GetTag("NxtLevel"));
        var oldNumABPoints = parseInt(pAttacker.GetTag("AbilityPoints"));

        if (pAttacker.GetTag("Level") <= pAttacker.GetTag("MaxLevel"))
        {
            var newNumExp = (oldNumExp + xpgain);
            pAttacker.SetTag("Exp", newNumExp);
            pAttacker.TextMessage(pAttacker.name + " has gained " + xpgain + " experience points.");
        }

        if (pAttacker.GetTag("Exp") >= oldNumnxtlvl && pAttacker.GetTag("Level") <= pAttacker.GetTag("MaxLevel"))
        {
            var newNumlvl = (oldNumlvl + 1);
            pAttacker.SetTag("Level", newNumlvl);
            pAttacker.SetTag("Exp", 0);
            pAttacker.StaticEffect(0x373A, 10, 15);
            pAttacker.SoundEffect(503, true);
            pAttacker.TextMessage(pAttacker.name + " level has increased to " + newNumlvl + ".");
            var gainmin = Math.min(pAttacker.GetTag("Level") * 5);
            var gainmax = Math.max(pAttacker.GetTag("Level") * 10);
            var gain = RandomNumber(gainmin, gainmax);
            var newNumABPoints = (oldNumABPoints + gain);
            pAttacker.SetTag("AbilityPoints", newNumABPoints);
        }
    }
}

function petGump(pUser, ourObj)
{
    if (!ourObj.tamed)
    {
        return;
    }
    Init(ourObj);
    pUser.SetTag("petSerial", ourObj.serial);
    var petGump = new Gump;
    petGump.AddPage(0);
    petGump.AddBackground(12, 9, 394, 526, 2620);
    petGump.AddTiledGump(17, 15, 384, 113, 9274);
    petGump.AddTiledGump(17, 136, 302, 27, 9274);
    petGump.AddTiledGump(17, 171, 302, 356, 9274);
    petGump.AddTiledGump(326, 136, 76, 27, 9274);
    petGump.AddTiledGump(326, 171, 76, 354, 9274);
    petGump.AddCheckerTrans(16, 15, 384, 511);
    petGump.AddText(33, 20, 1160, ourObj.name);
    petGump.AddText(300, 20, 1149, "Gender: " + ourObj.GetTag("Gender"));
    petGump.AddText(35, 40, 1149, "Exp: " + ourObj.GetTag("Exp"));
    petGump.AddText(35, 55, 1149, "Current Level: " + ourObj.GetTag("Level"));
    petGump.AddText(35, 70, 1149, "Maxium Level: " + ourObj.GetTag("MaxLevel"));
    petGump.AddText(35, 85, 1149, "Exp Till Next Level: " + ourObj.GetTag("NxtLevel"));
    petGump.AddText(35, 100, 1149, "Ability Points: " + ourObj.GetTag("AbilityPoints"));

    petGump.AddPicture(336, 40, 5549);

    petGump.AddButton(300, 100, 2117, 2118, 1, 0, 11);
    petGump.AddButton(320, 100, 2117, 2118, 1, 0, 12);

    petGump.AddText(22, 140, 1149, "Property Name");
    petGump.AddText(330, 140, 1149, "Amount");

    petGump.AddPage(1);
    petGump.AddText(60, 175, 1149, "Hit Points");
    petGump.AddText(60, 200, 1149, "Stamina");
    petGump.AddText(60, 225, 1149, "Mana");
    petGump.AddText(330, 175, 1149, ourObj.maxhp + "/" + "1100");
    petGump.AddText(330, 200, 1149, ourObj.maxstamina + "/" + "150");
    petGump.AddText(330, 225, 1149, ourObj.maxmana + "/" + "1500");
    petGump.AddButton(24, 175, 4005, 4006, 1, 0, 1);
    petGump.AddButton(24, 200, 4005, 4006, 1, 0, 2);
    petGump.AddButton(24, 225, 4005, 4006, 1, 0, 3);
    if (ourObj.GetTag("Level") >= 20)
    {
        petGump.AddText(60, 250, 1149, "Min Damage");
        petGump.AddText(60, 275, 1149, "Max Damage");

        petGump.AddText(330, 250, 1149, ourObj.lodamage + "/" + "25");
        petGump.AddText(330, 275, 1149, ourObj.hidamage + "/" + "50");

        petGump.AddButton(24, 250, 4005, 4006, 1, 0, 4);
        petGump.AddButton(24, 275, 4005, 4006, 1, 0, 5);
    }
    else
    {
        petGump.AddText(60, 250, 38, "-Locked-");
        petGump.AddText(60, 275, 38, "-Locked-");

        petGump.AddText(330, 250, 38, "???");
        petGump.AddText(330, 275, 38, "???");
    }
    if (ourObj.GetTag("Level") >= 30)
    {
        petGump.AddText(60, 350, 1149, "Physical");
        //petGump.AddText(60, 275, 1149, "Max Damage");
        petGump.AddText(330, 350, 1149, ourObj.Resist( 1 ).toString() + "/" + "25");
        //petGump.AddText(330, 275, 1149, ourObj.hidamage + "/" + "50");

        petGump.AddButton(24, 350, 4005, 4006, 1, 0, 9);
        //petGump.AddButton(24, 275, 4005, 4006, 1, 0, 10);
    }
    else
    {
        petGump.AddText(60, 350, 38, "-Locked-");
        //petGump.AddText(60, 375, 38, "-Locked-");

        petGump.AddText(330, 350, 38, "???");
        //petGump.AddText(330, 375, 38, "???");
    }
    if (ourObj.GetTag("Level") >= 40)
    {
        petGump.AddText(60, 450, 1149, "Strength");
        petGump.AddText(60, 475, 1149, "Dexterity");
        petGump.AddText(60, 500, 1149, "Intelligence");

        petGump.AddText(330, 450, 1149, ourObj.strength + "/" + "100");
        petGump.AddText(330, 475, 1149, ourObj.dexterity + "/" + "100");
        petGump.AddText(330, 500, 1149, ourObj.intelligence + "/" + "100");

        petGump.AddButton(24, 450, 4005, 4006, 1, 0, 6);
        petGump.AddButton(24, 475, 4005, 4006, 1, 0, 7);
        petGump.AddButton(24, 500, 4005, 4006, 1, 0, 8);
    }
    else
    {
        petGump.AddText(60, 450, 38, "-Locked-");
        petGump.AddText(60, 475, 38, "-Locked-");
        petGump.AddText(60, 500, 38, "-Locked-");

        petGump.AddText(330, 450, 38, "???");
        petGump.AddText(330, 475, 38, "???");
        petGump.AddText(330, 500, 38, "???");
    }
    petGump.Send(pUser);
    petGump.Free();
}

function petGumpPage2(pUser, ourObj)
{
    pUser.SetTag("petSerial", ourObj.serial);
    var petGump = new Gump;
    petGump.AddPage(0);
    petGump.AddBackground(12, 9, 394, 526, 2620);
    petGump.AddTiledGump(17, 15, 384, 113, 9274);
    petGump.AddTiledGump(17, 136, 302, 27, 9274);
    petGump.AddTiledGump(17, 171, 302, 356, 9274);
    petGump.AddTiledGump(326, 136, 76, 27, 9274);
    petGump.AddTiledGump(326, 171, 76, 354, 9274);
    petGump.AddCheckerTrans(16, 15, 384, 511);
    petGump.AddText(33, 20, 1160, ourObj.name);
    petGump.AddText(300, 20, 1149, "Gender: " + ourObj.GetTag("Gender"));
    petGump.AddText(35, 40, 1149, "Exp: " + ourObj.GetTag("Exp"));
    petGump.AddText(35, 55, 1149, "Current Level: " + ourObj.GetTag("Level"));
    petGump.AddText(35, 70, 1149, "Maxium Level: " + ourObj.GetTag("MaxLevel"));
    petGump.AddText(35, 85, 1149, "Exp Till Next Level: " + ourObj.GetTag("NxtLevel"));
    petGump.AddText(35, 100, 1149, "Ability Points: " + ourObj.GetTag("AbilityPoints"));

    petGump.AddPicture(336, 40, 5549);

    petGump.AddButton(300, 100, 2117, 2118, 1, 0, 11);
    petGump.AddButton(320, 100, 2117, 2118, 1, 0, 12);

    petGump.AddText(22, 140, 1149, "Property Name");
    petGump.AddText(330, 140, 1149, "Amount");

    petGump.AddPage(1);
    if (ourObj.GetTag("Level") >= 50)
    {
        petGump.AddText(60, 175, 1149, "Colossal Blow");
        //petGump.AddText(60, 475, 1149, "Dexterity");
        //petGump.AddText(60, 500, 1149, "Intelligence");
        if (ourObj.scripttrigger == 3511)
        {
            petGump.AddText(330, 175, 1149, "Enabled");
        }
        else
        {
            petGump.AddText(330, 175, 1149, "Disabled");
        }
        //petGump.AddText(330, 475, 1149, ourObj.dexterity + "/" + "100");
        //petGump.AddText(330, 500, 1149, ourObj.intelligence + "/" + "100");

        petGump.AddButton(24, 175, 4005, 4006, 1, 0, 10);
        //petGump.AddButton(24, 475, 4005, 4006, 1, 0, 7);
        //petGump.AddButton(24, 500, 4005, 4006, 1, 0, 8);
    }
    else
    {
        petGump.AddText(60, 175, 38, "-Locked-");
        //petGump.AddText(60, 475, 38, "-Locked-");
        //petGump.AddText(60, 500, 38, "-Locked-");

        //petGump.AddText(330, 450, 38, "???");
        //petGump.AddText(330, 475, 38, "???");
        //petGump.AddText(330, 500, 38, "???");
    }
    petGump.Send(pUser);
    petGump.Free();
}

function onGumpPress(pSock, pButton, gumpData)
{
    var pUser = pSock.currentChar;
    var myPet = CalcCharFromSer(pUser.GetTag("petSerial"));
    switch (pButton)
    {
        case 0:
            break;
        case 1:
            if (ValidateObject(myPet))
            {
                if (myPet.maxhp >= 1100)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.maxhp;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.maxhp += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 2:
            if (ValidateObject(myPet))
            {
                if (myPet.maxstamina >= 150)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.maxstamina;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.maxstamina += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 3:
            if (ValidateObject(myPet))
            {
                if (myPet.maxmana >= 1500)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.maxmana;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.maxmana += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 4:
            if (ValidateObject(myPet))
            {
                if (myPet.lodamage >= 25)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0) {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.lodamage;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.lodamage += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 5:
            if (ValidateObject(myPet))
            {
                if (myPet.hidamage >= 50)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.hidamage;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.hidamage += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 6:
            if (ValidateObject(myPet))
            {
                if (myPet.strength >= 100)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.strength;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.strength += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 7:
            if (ValidateObject(myPet))
            {
                if (myPet.dexterity >= 100)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.dexterity;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.dexterity += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 8:
            if (ValidateObject(myPet))
            {
                if (myPet.intelligence >= 100)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.intelligence;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.intelligence += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 9:
            if (ValidateObject(myPet))
            {
                if (myPet.Resist(1) >= 25)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0) {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.Resist(1);
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.Resist( 1, myPet.Resist( 1 ) + 1 );
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 10:
            if (ValidateObject(myPet))
            {
                if (myPet.scripttrigger == 3511)
                {
                    pUser.TextMessage("You pet already has this.");
                    petGumpPage2(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = 1000;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.scripttrigger = 3511;
                    petGumpPage2(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGumpPage2(pUser, myPet);
                    break;
                }
            }
            break;
        case 11: petGump(pUser, myPet); break;
        case 12: petGumpPage2(pUser, myPet); break;
    }
}

Re: Pet Level System

Posted: Fri Aug 12, 2022 11:11 pm
by dragon slayer
Version 0.3 Released 8/12/22
1. Fixed so any pets that didn't have Pet Level system before would have it when system is added to shard.

Version 0.4 Released 8/12/22
1. Fixed Error with Puser
2. Added Defense Mod at Level 30.
3. Adjusted the level exp needed to get to next level.
4. Adjusted how much exp you get per hit.

Re: Pet Level System

Posted: Sat Aug 13, 2022 9:36 pm
by dragon slayer
Version 0.5 Released 8/13/22
1. Fixed bug where you could get more abilities points if you was already maxlevel.
2. Added Switch to enable and disable Gender
3. Added New Abilities Colossal Blow. 'HULK SMASH'

Re: Pet Level System

Posted: Sun Mar 05, 2023 3:57 am
by dragon slayer
Version 0.7 Released 3/5/23
You're wondering how to get the gump to come up.
well what I did was add it to my animallore.js

just add this line to your animalore.js around line 60.
Make sure you change the script number on it to our number you assigned the js too.
       
if( LevelSystemEnabled == true)
            {
                TriggerEvent(19050, "petGump",pUser, ourObj);
            }
At the top of the animal lore script add this.
// Enables level system.
const LevelSystemEnabled = false;
Now all you have to do is add that SCRIPT # to the npcs you want to be able to level up and it will be all set.
//////////////////////////////////////////////////////////
// Pet Level System and Evo System Version 0.7          //
// Written by Dragon Slayer                             //
//////////////////////////////////////////////////////////
// Enable Female or Male beside pet names
const GenderEnabled = false;

// Turn on Evo System or Disable Evo System.
const EvoEnabled = false;

// Turn on level System or Disable.
const LevelSystemEnabled = false;

// Enable pet mating to get eggs or have babies not every creature has a egg.
const MatingEnabled = false; // Not yet in

// If you want pets to Gain Exp points or Evo Points on every attack Enable to true
const OnAttackEnabled = false;

// If you want pets to Gain Exp points or Evo Points on every Death only Enable to true
const OnDeathBlowEnabled = false;

function onCreateDFN(objMade, objType)
{
    var randmax = RandomNumber(10, 50)
    var iDice = RandomNumber(1, 2)
    var pUser = objMade;
    var totalstats = pUser.strength + pUser.dexterity + pUser.intelligence + pUser.maxhp + pUser.maxstamina + pUser.maxmana + pUser.lodamage + pUser.hidamage;
    var nxtlvl = totalstats * 20;
    if (objType == 1)
    {
        if( EvoEnabled == true )
        {
            pUser.SetTag("EvoPoints");
            pUser.SetTag("Stage", 1);
            pUser.SetTag("MaxStage", 7);
        }

        if( LevelSystemEnabled == true)
        {
            pUser.SetTag("Exp");
            pUser.SetTag("Level");
            pUser.SetTag("MaxLevel", randmax);
            pUser.SetTag("NxtLevel", nxtlvl);
            pUser.SetTag("AbilityPoints");
        }

        if (GenderEnabled)
        {
            if (iDice == 1)
            {
                if (pUser.id == 208 || pUser.id == 216)
                {
                    pUser.SetTag("Gender", "Female");
                    pUser.title = "(Female)";
                }
                else
                {
                    pUser.SetTag("Gender", "Male");
                    pUser.title = "(Male)";
                }
               
            }
            else
            {
                pUser.SetTag("Gender", "Female");
                pUser.title = "(Female)";
            }
        }
        pUser.SetTag("init", true);
    }
}

function Init(pUser)
{
    if (!pUser.GetTag("init"))
    {
        var randmax = RandomNumber(10, 50)
        var iDice = RandomNumber(1, 2)
        var totalstats = pUser.strength + pUser.dexterity + pUser.intelligence + pUser.maxhp + pUser.maxstamina + pUser.maxmana + pUser.lodamage + pUser.hidamage;
        var nxtlvl = totalstats * 20;

        if( EvoEnabled == true )
        {
            pUser.SetTag("EvoPoints");
            pUser.SetTag("Stage", 1);
            pUser.SetTag("MaxStage", 7);
        }

        if( LevelSystemEnabled == true)
        {
            pUser.SetTag("Exp");
            pUser.SetTag("Level");
            pUser.SetTag("MaxLevel", randmax);
            pUser.SetTag("NxtLevel", nxtlvl);
            pUser.SetTag("AbilityPoints");
        }

        if (GenderEnabled)
        {
            if (iDice == 1)
            {
                pUser.SetTag("Gender", "Male");
                pUser.title = "(Male)";
            }
            else
            {
                pUser.SetTag("Gender", "Female");
                pUser.title = "(Female)";
            }
        }
        pUser.SetTag("init", true);
    }
}

function onAttack(pAttacker, pDefender)
{
    if (pAttacker.tamed && OnAttackEnabled == true)
    {
        Init(pAttacker);
        var expgainmin = Math.min(pDefender.maxhp * 5);
        var expgainmax = Math.max(pDefender.maxhp * 10);
        var xpgain = RandomNumber(expgainmin, expgainmax);
        var oldNumExp = parseInt(pAttacker.GetTag("Exp"));
        var oldNumlvl = parseInt(pAttacker.GetTag("Level"));
        var oldNumnxtlvl = parseInt(pAttacker.GetTag("NxtLevel"));
        var oldNumABPoints = parseInt(pAttacker.GetTag("AbilityPoints"));

        if( EvoEnabled == true )
        {
            EvoStages(pAttacker);
        }

        if( LevelSystemEnabled == true )
        {
            if( pAttacker.GetTag("Level") <= pAttacker.GetTag("MaxLevel"))
            {
                var newNumExp = (oldNumExp + xpgain);

                pAttacker.SetTag("Exp", newNumExp);
                pAttacker.TextMessage(pAttacker.name + " has gained " + xpgain + " experience points.");
            }

            if( pAttacker.GetTag("Exp") >= oldNumnxtlvl && pAttacker.GetTag("Level") <= pAttacker.GetTag("MaxLevel"))
            {
                var newNumlvl = (oldNumlvl + 1);

                pAttacker.SetTag("Level", newNumlvl);
                pAttacker.SetTag("Exp", 0);
                pAttacker.StaticEffect(0x373A, 10, 15);
                pAttacker.SoundEffect(503, true);
                pAttacker.TextMessage(pAttacker.name + " level has increased to " + newNumlvl + ".");

                var gainmin = Math.min(pAttacker.GetTag("Level") * 5);
                var gainmax = Math.max(pAttacker.GetTag("Level") * 10);
                var gain = RandomNumber(gainmin, gainmax);
                var newNumABPoints = (oldNumABPoints + gain);

                pAttacker.SetTag("AbilityPoints", newNumABPoints);
            }
        }
    }
}

function onDeathBlow( pDead, pKiller )
{
    if (pAttacker.tamed && OnDeathBlowEnabled)
    {
        Init(pAttacker);
        var expgainmin = Math.min(pDead.maxhp * 5);
        var expgainmax = Math.max(pDead.maxhp * 10);
        var xpgain = RandomNumber(expgainmin, expgainmax);
        var oldNumExp = parseInt(pAttacker.GetTag("Exp"));
        var oldNumlvl = parseInt(pAttacker.GetTag("Level"));
        var oldNumnxtlvl = parseInt(pAttacker.GetTag("NxtLevel"));
        var oldNumABPoints = parseInt(pAttacker.GetTag("AbilityPoints"));

        if( EvoEnabled == true )
        {
            EvoStages(pKiller);
        }

        if( pAttacker.GetTag("Exp") >= oldNumnxtlvl && pAttacker.GetTag("Level") <= pAttacker.GetTag("MaxLevel"))
        {
            var newNumlvl = (oldNumlvl + 1);

            pAttacker.SetTag("Level", newNumlvl);
            pAttacker.SetTag("Exp", 0);
            pAttacker.StaticEffect(0x373A, 10, 15);
            pAttacker.SoundEffect(503, true);
            pAttacker.TextMessage(pAttacker.name + " level has increased to " + newNumlvl + ".");

            var gainmin = Math.min(pAttacker.GetTag("Level") * 5);
            var gainmax = Math.max(pAttacker.GetTag("Level") * 10);
            var gain = RandomNumber(gainmin, gainmax);
            var newNumABPoints = (oldNumABPoints + gain);

            pAttacker.SetTag("AbilityPoints", newNumABPoints);
        }
    }
    return true;
}

/////////////////////////////////////////////////////////////////////////////////////
/// Adjust and add what skills and stats a npc gets when it evolves.
/////////////////////////////////////////////////////////////////////////////////////
function EvoStages(pAttacker)
{
    var oldNumEvoPoints = parseInt(pAttacker.GetTag("EvoPoints"));
    var oldNumStage = parseInt(pAttacker.GetTag("Stage"));
    var expgainmin = Math.min(pAttacker.maxhp * 3);
    var expgainmax = Math.max(pAttacker.maxhp * 5);
    var xpgain = RandomNumber(expgainmin, expgainmax);
    var newNumExp = (oldNumEvoPoints + xpgain);

    pAttacker.SetTag("EvoPoints", newNumExp);

    if(oldNumStage == 1)
    {
        if(oldNumEvoPoints >= 2500 )
        {
            pAttacker.TextMessage("*" + pAttacker.name + " Evolves*");
            var newNumStagelvl = (oldNumStage + 1);
            pAttacker.SetTag("Stage", newNumStagelvl);

            EvoIDs( pAttacker );

            pAttacker.maxhp += 100;
            pAttacker.lodamage += 2;
            pAttacker.hidamage += 3;
            pAttacker.strength += 20;
            pAttacker.dexterity += 10;
            pAttacker.intelligence += 5;
            pAttacker.controlSlots += 1;
            pAttacker.Resist( 1, pAttacker.Resist( 1 ) + 2 );
            pAttacker.skills.anatomy += 200;
            pAttacker.skills.magery += 200;
            pAttacker.skills.magicresist += 200;
            pAttacker.skills.wrestling += 200;
            pAttacker.skills.parrying += 200;
            pAttacker.skills.tactics += 200;
        }
    }

    if(oldNumStage == 2)
    {
        if(oldNumEvoPoints >= 5000)
        {
            pAttacker.TextMessage("*" + pAttacker.name + " Evolves*");
            var newNumStagelvl = (oldNumStage + 1);
            pAttacker.SetTag("Stage", newNumStagelvl);

            EvoIDs( pAttacker );

            pAttacker.maxhp += 200;
            pAttacker.lodamage += 3;
            pAttacker.hidamage += 4;
            pAttacker.strength += 30;
            pAttacker.dexterity += 20;
            pAttacker.intelligence += 10;
            pAttacker.Resist( 1, pAttacker.Resist( 1 ) + 2 );
            pAttacker.skills.anatomy += 200;
            pAttacker.skills.magery += 200;
            pAttacker.skills.magicresist += 200;
            pAttacker.skills.wrestling += 200;
            pAttacker.skills.parrying += 200;
            pAttacker.skills.tactics += 200;
        }
    }

    if(oldNumStage == 3)
    {
        if(oldNumEvoPoints >= 7500)
        {
            pAttacker.TextMessage("*" + pAttacker.name + " Evolves*");
            var newNumStagelvl = (oldNumStage + 1);
            pAttacker.SetTag("Stage", newNumStagelvl);

            EvoIDs( pAttacker );

            pAttacker.maxhp += 300;
            pAttacker.lodamage += 4;
            pAttacker.hidamage += 5;
            pAttacker.strength += 40;
            pAttacker.dexterity += 30;
            pAttacker.intelligence += 20;
            pAttacker.Resist( 1, pAttacker.Resist( 1 ) + 2 );
            pAttacker.skills.anatomy += 200;
            pAttacker.skills.magery += 200;
            pAttacker.skills.magicresist += 200;
            pAttacker.skills.wrestling += 200;
            pAttacker.skills.parrying += 200;
            pAttacker.skills.tactics += 200;
        }
    }

    if(oldNumStage == 4)
    {
        if(oldNumEvoPoints >= 10000)
        {
            pAttacker.TextMessage("*" + pAttacker.name + " Evolves*");
            var newNumStagelvl = (oldNumStage + 1);
            pAttacker.SetTag("Stage", newNumStagelvl);

            EvoIDs( pAttacker );

            pAttacker.maxhp += 400;
            pAttacker.lodamage += 5;
            pAttacker.hidamage += 6;
            pAttacker.strength += 50;
            pAttacker.dexterity += 40;
            pAttacker.intelligence += 30;
            pAttacker.controlSlots += 1;
            pAttacker.spattack = 4;
            pAttacker.spdelay = 7;
            pAttacker.Resist( 1, pAttacker.Resist( 1 ) + 2 );
            pAttacker.skills.anatomy += 200;
            pAttacker.skills.magery += 200;
            pAttacker.skills.magicresist += 200;
            pAttacker.skills.wrestling += 200;
            pAttacker.skills.parrying += 200;
            pAttacker.skills.tactics += 200;
        }
    }

    if(oldNumStage == 5)
    {
        if(oldNumEvoPoints >= 12500)
        {
            pAttacker.TextMessage("*" + pAttacker.name + " Evolves*");
            var newNumStagelvl = (oldNumStage + 1);
            pAttacker.SetTag("Stage", newNumStagelvl);

            EvoIDs( pAttacker );

            pAttacker.maxhp += 500;
            pAttacker.lodamage += 6;
            pAttacker.hidamage += 7;
            pAttacker.strength += 60;
            pAttacker.dexterity += 50;
            pAttacker.intelligence += 40;
            pAttacker.Resist( 1, pAttacker.Resist( 1 ) + 2 );
            pAttacker.skills.anatomy += 200;
            pAttacker.skills.magery += 200;
            pAttacker.skills.magicresist += 200;
            pAttacker.skills.wrestling += 200;
            pAttacker.skills.parrying += 200;
            pAttacker.skills.tactics += 200;
        }
    }

    if(oldNumStage == 6)
    {
        if(oldNumEvoPoints >= 15000)
        {
            pAttacker.TextMessage("*" + pAttacker.name + " Evolves*");
            var newNumStagelvl = (oldNumStage + 1);
            pAttacker.SetTag("Stage", newNumStagelvl);

            EvoIDs( pAttacker );

            pAttacker.maxhp += 600;
            pAttacker.lodamage += 7;
            pAttacker.hidamage += 8;
            pAttacker.scripttrigger = 3511;
            pAttacker.strength += 70;
            pAttacker.dexterity += 60;
            pAttacker.intelligence += 50;
            pAttacker.controlSlots += 1;
            pAttacker.Resist( 1, pAttacker.Resist( 1 ) + 2 );
            pAttacker.skills.anatomy += 200;
            pAttacker.skills.magery += 200;
            pAttacker.skills.magicresist += 200;
            pAttacker.skills.wrestling += 200;
            pAttacker.skills.parrying += 200;
            pAttacker.skills.tactics += 200;
        }
    }

    if(oldNumStage == 7)
    {
        if(oldNumEvoPoints >= 17500)
        {
            pAttacker.maxhp += 700;
            pAttacker.lodamage += 8;
            pAttacker.hidamage += 9;
            pAttacker.strength += 80;
            pAttacker.dexterity += 70;
            pAttacker.intelligence += 60;
            pAttacker.Resist( 1, pAttacker.Resist( 1 ) + 2 );
            pAttacker.skills.anatomy += 200;
            pAttacker.skills.magery += 200;
            pAttacker.skills.magicresist += 200;
            pAttacker.skills.wrestling += 200;
            pAttacker.skills.parrying += 200;
            pAttacker.skills.tactics += 200;
        }
    }
    return;
}

/////////////////////////////////////////////////////////////////////////////////////
/// Add in all your npcs you want to evovle with the current ids and new ids.
/// Example of one already in place.
/////////////////////////////////////////////////////////////////////////////////////
function EvoIDs( pAttacker )
{
    switch( pAttacker.sectionID )
    {
        case "evodragon":
            switch(pAttacker.id)
            {
                case 0x0034: pAttacker.id = 0x0059; break;// Stage 1
                case 0x0059: pAttacker.id = 0x00CE; break;// Stage 2
                case 0x00CE: pAttacker.id = 0x003C; break;// Stage 3
                case 0x003C: pAttacker.id = 0x003B; break;// Stage 4
                case 0x003B: pAttacker.id = 0x002E; break;// Stage 5
                case 0x002E: pAttacker.id = 0x00AC; break;// Stage 6
            }
            break;
    }
    return;
}

function petGump( pUser, ourObj )
{
    if (!ourObj.tamed)
    {
        return;
    }
    Init(ourObj);
    pUser.SetTag("petSerial", ourObj.serial);
    var petGump = new Gump;
    petGump.AddPage(0);
    petGump.AddBackground(12, 9, 394, 526, 2620);
    petGump.AddTiledGump(17, 15, 384, 113, 9274);
    petGump.AddTiledGump(17, 136, 302, 27, 9274);
    petGump.AddTiledGump(17, 171, 302, 356, 9274);
    petGump.AddTiledGump(326, 136, 76, 27, 9274);
    petGump.AddTiledGump(326, 171, 76, 354, 9274);
    petGump.AddCheckerTrans(16, 15, 384, 511);
    petGump.AddText(33, 20, 1160, ourObj.name);
    petGump.AddText(300, 20, 1149, "Gender: " + ourObj.GetTag("Gender"));
    petGump.AddText(35, 40, 1149, "Exp: " + ourObj.GetTag("Exp"));
    petGump.AddText(35, 55, 1149, "Current Level: " + ourObj.GetTag("Level"));
    petGump.AddText(35, 70, 1149, "Maxium Level: " + ourObj.GetTag("MaxLevel"));
    petGump.AddText(35, 85, 1149, "Exp Till Next Level: " + ourObj.GetTag("NxtLevel"));
    petGump.AddText(35, 100, 1149, "Ability Points: " + ourObj.GetTag("AbilityPoints"));

    petGump.AddPicture(336, 40, 5549);

    petGump.AddButton(300, 100, 2117, 2118, 1, 0, 11);
    petGump.AddButton(320, 100, 2117, 2118, 1, 0, 12);

    petGump.AddText(22, 140, 1149, "Property Name");
    petGump.AddText(330, 140, 1149, "Amount");

    petGump.AddPage(1);
    petGump.AddText(60, 175, 1149, "Hit Points");
    petGump.AddText(60, 200, 1149, "Stamina");
    petGump.AddText(60, 225, 1149, "Mana");
    petGump.AddText(330, 175, 1149, ourObj.maxhp + "/" + "1100");
    petGump.AddText(330, 200, 1149, ourObj.maxstamina + "/" + "150");
    petGump.AddText(330, 225, 1149, ourObj.maxmana + "/" + "1500");
    petGump.AddButton(24, 175, 4005, 4006, 1, 0, 1);
    petGump.AddButton(24, 200, 4005, 4006, 1, 0, 2);
    petGump.AddButton(24, 225, 4005, 4006, 1, 0, 3);
    if (ourObj.GetTag("Level") >= 20)
    {
        petGump.AddText(60, 250, 1149, "Min Damage");
        petGump.AddText(60, 275, 1149, "Max Damage");

        petGump.AddText(330, 250, 1149, ourObj.lodamage + "/" + "25");
        petGump.AddText(330, 275, 1149, ourObj.hidamage + "/" + "50");

        petGump.AddButton(24, 250, 4005, 4006, 1, 0, 4);
        petGump.AddButton(24, 275, 4005, 4006, 1, 0, 5);
    }
    else
    {
        petGump.AddText(60, 250, 38, "-Locked-");
        petGump.AddText(60, 275, 38, "-Locked-");

        petGump.AddText(330, 250, 38, "???");
        petGump.AddText(330, 275, 38, "???");
    }
    if (ourObj.GetTag("Level") >= 30)
    {
        petGump.AddText(60, 350, 1149, "Physical");
        //petGump.AddText(60, 275, 1149, "Max Damage");
        petGump.AddText(330, 350, 1149, ourObj.Resist( 1 ).toString() + "/" + "25");
        //petGump.AddText(330, 275, 1149, ourObj.hidamage + "/" + "50");

        petGump.AddButton(24, 350, 4005, 4006, 1, 0, 9);
        //petGump.AddButton(24, 275, 4005, 4006, 1, 0, 10);
    }
    else
    {
        petGump.AddText(60, 350, 38, "-Locked-");
        //petGump.AddText(60, 375, 38, "-Locked-");

        petGump.AddText(330, 350, 38, "???");
        //petGump.AddText(330, 375, 38, "???");
    }
    if (ourObj.GetTag("Level") >= 40)
    {
        petGump.AddText(60, 450, 1149, "Strength");
        petGump.AddText(60, 475, 1149, "Dexterity");
        petGump.AddText(60, 500, 1149, "Intelligence");

        petGump.AddText(330, 450, 1149, ourObj.strength + "/" + "100");
        petGump.AddText(330, 475, 1149, ourObj.dexterity + "/" + "100");
        petGump.AddText(330, 500, 1149, ourObj.intelligence + "/" + "100");

        petGump.AddButton(24, 450, 4005, 4006, 1, 0, 6);
        petGump.AddButton(24, 475, 4005, 4006, 1, 0, 7);
        petGump.AddButton(24, 500, 4005, 4006, 1, 0, 8);
    }
    else
    {
        petGump.AddText(60, 450, 38, "-Locked-");
        petGump.AddText(60, 475, 38, "-Locked-");
        petGump.AddText(60, 500, 38, "-Locked-");

        petGump.AddText(330, 450, 38, "???");
        petGump.AddText(330, 475, 38, "???");
        petGump.AddText(330, 500, 38, "???");
    }
    petGump.Send(pUser);
    petGump.Free();
}

function petGumpPage2(pUser, ourObj)
{
    pUser.SetTag("petSerial", ourObj.serial);
    var petGump = new Gump;
    petGump.AddPage(0);
    petGump.AddBackground(12, 9, 394, 526, 2620);
    petGump.AddTiledGump(17, 15, 384, 113, 9274);
    petGump.AddTiledGump(17, 136, 302, 27, 9274);
    petGump.AddTiledGump(17, 171, 302, 356, 9274);
    petGump.AddTiledGump(326, 136, 76, 27, 9274);
    petGump.AddTiledGump(326, 171, 76, 354, 9274);
    petGump.AddCheckerTrans(16, 15, 384, 511);
    petGump.AddText(33, 20, 1160, ourObj.name);
    petGump.AddText(300, 20, 1149, "Gender: " + ourObj.GetTag("Gender"));
    petGump.AddText(35, 40, 1149, "Exp: " + ourObj.GetTag("Exp"));
    petGump.AddText(35, 55, 1149, "Current Level: " + ourObj.GetTag("Level"));
    petGump.AddText(35, 70, 1149, "Maxium Level: " + ourObj.GetTag("MaxLevel"));
    petGump.AddText(35, 85, 1149, "Exp Till Next Level: " + ourObj.GetTag("NxtLevel"));
    petGump.AddText(35, 100, 1149, "Ability Points: " + ourObj.GetTag("AbilityPoints"));

    petGump.AddPicture(336, 40, 5549);

    petGump.AddButton(300, 100, 2117, 2118, 1, 0, 11);
    petGump.AddButton(320, 100, 2117, 2118, 1, 0, 12);

    petGump.AddText(22, 140, 1149, "Property Name");
    petGump.AddText(330, 140, 1149, "Amount");

    petGump.AddPage(1);
    if (ourObj.GetTag("Level") >= 50)
    {
        petGump.AddText(60, 175, 1149, "Colossal Blow");
        //petGump.AddText(60, 475, 1149, "Dexterity");
        //petGump.AddText(60, 500, 1149, "Intelligence");
        if (ourObj.scripttrigger == 3511)
        {
            petGump.AddText(330, 175, 1149, "Enabled");
        }
        else
        {
            petGump.AddText(330, 175, 1149, "Disabled");
        }
        //petGump.AddText(330, 475, 1149, ourObj.dexterity + "/" + "100");
        //petGump.AddText(330, 500, 1149, ourObj.intelligence + "/" + "100");

        petGump.AddButton(24, 175, 4005, 4006, 1, 0, 10);
        //petGump.AddButton(24, 475, 4005, 4006, 1, 0, 7);
        //petGump.AddButton(24, 500, 4005, 4006, 1, 0, 8);
    }
    else
    {
        petGump.AddText(60, 175, 38, "-Locked-");
        //petGump.AddText(60, 475, 38, "-Locked-");
        //petGump.AddText(60, 500, 38, "-Locked-");

        //petGump.AddText(330, 450, 38, "???");
        //petGump.AddText(330, 475, 38, "???");
        //petGump.AddText(330, 500, 38, "???");
    }
    petGump.Send(pUser);
    petGump.Free();
}

function onGumpPress(pSock, pButton, gumpData)
{
    var pUser = pSock.currentChar;
    var myPet = CalcCharFromSer(pUser.GetTag("petSerial"));
    switch (pButton)
    {
        case 0:
            break;
        case 1:
            if (ValidateObject(myPet))
            {
                if (myPet.maxhp >= 1100)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.maxhp;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.maxhp += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 2:
            if (ValidateObject(myPet))
            {
                if (myPet.maxstamina >= 150)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.maxstamina;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.maxstamina += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 3:
            if (ValidateObject(myPet))
            {
                if (myPet.maxmana >= 1500)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.maxmana;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.maxmana += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 4:
            if (ValidateObject(myPet))
            {
                if (myPet.lodamage >= 25)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0) {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.lodamage;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.lodamage += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 5:
            if (ValidateObject(myPet))
            {
                if (myPet.hidamage >= 50)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.hidamage;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.hidamage += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 6:
            if (ValidateObject(myPet))
            {
                if (myPet.strength >= 100)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.strength;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.strength += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 7:
            if (ValidateObject(myPet))
            {
                if (myPet.dexterity >= 100)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.dexterity;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.dexterity += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 8:
            if (ValidateObject(myPet))
            {
                if (myPet.intelligence >= 100)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.intelligence;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.intelligence += 1;
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 9:
            if (ValidateObject(myPet))
            {
                if (myPet.Resist(1) >= 25)
                {
                    pUser.TextMessage("This cannot gain any further.");
                    petGump(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0) {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = myPet.Resist(1);
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.Resist( 1, myPet.Resist( 1 ) + 1 );
                    petGump(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGump(pUser, myPet);
                    break;
                }
            }
            break;
        case 10:
            if (ValidateObject(myPet))
            {
                if (myPet.scripttrigger == 3511)
                {
                    pUser.TextMessage("You pet already has this.");
                    petGumpPage2(pUser, myPet);
                    break;
                }
                else if (myPet.GetTag("AbilityPoints") != 0)
                {
                    var oldNumABPoints = myPet.GetTag("AbilityPoints");
                    var newNumABPoints = (oldNumABPoints - 1);
                    var totalstats = 1000;
                    var nxtlvl = totalstats * 20;
                    var oldNumnxtlvl = myPet.GetTag("NxtLevel");
                    var newNumnxtlvl = (oldNumnxtlvl + nxtlvl);
                    if (myPet.GetTag("Level") <= myPet.GetTag("MaxLevel"))
                    {
                        myPet.SetTag("NxtLevel", newNumnxtlvl)
                        myPet.SetTag("AbilityPoints", newNumABPoints);
                    }
                    myPet.scripttrigger = 3511;
                    petGumpPage2(pUser, myPet);
                    break;
                }
                else
                {
                    pUser.TextMessage("Your pet lacks the ability points to do that.");
                    petGumpPage2(pUser, myPet);
                    break;
                }
            }
            break;
        case 11: petGump(pUser, myPet); break;
        case 12: petGumpPage2(pUser, myPet); break;
    }
}
Add this npc to your dfn files
[evodragon]
{
NAME=a dragon hatchling
ID=0x0034
DIRECTION=RND
BACKPACK
STR=56 90
DEX=50 60
INT=20 30
KARMA=-15000
FAME=15000
ANATOMY=5 10
MAGERY=5 10
MAGICRESISTANCE=5 10
PARRYING=5 10
TACTICS=5 10
WRESTLING=5 10
DAMAGE=5 6
DEF=10
NPCAI=2
NPCWANDER=4
FX2=20
TOPROV=1050
TOPEACE=1050 5
TOTAME=939
TAMEDHUNGER=600 30
FOOD=meat
CARVE=57
RACE=12
FLAG=NEUTRAL
CONTROLSLOTS=1
RUNS
SCRIPT=19050
}