EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Quests::Plugins & Mods (https://www.eqemulator.org/forums/forumdisplay.php?f=678)
-   -   plugin::ScaleTrash (https://www.eqemulator.org/forums/showthread.php?t=37781)

Township EQ 01-26-2014 05:22 AM

plugin::ScaleTrash
 
This is a very simple plugin used to set a mobs level within a range. Using this combined with Akka's scaling system can save so much time when making a zone. You can get his scaling system here.

This is an example from a default.pl I've been working on. This will set every mob in the zone that has "snake" in its name to 40-50 with a variance of 3. Akka's scaling system then takes over and scales that mob to its level. I hope this saves some of you a bit of time!

Example:

Code:

sub EVENT_SPAWN {
        $nn = $npc->GetCleanName();
        $nid = $npc->GetNPCTypeID();
        if($nn=~/snake/i) {                                                                                                                               
                plugin::ScaleTrash(40, 50, 3);
        }
}

Plugin:

Code:

#::: Usage: plugin::ScaleTrash(min_level, max_level, variance);
sub ScaleTrash {
    $npc = plugin::val('$npc');
    $npc->SetLevel(plugin::RandomRange($_[0] + plugin::RandomRange(0 - $_[2], $_[2]), $_[1] + plugin::RandomRange(0 - $_[2], $_[2])));
}


Kingly_Krab 01-26-2014 09:59 AM

Question?: Couldn't you use the 'level' and 'maxlevel' column in the database to set level rather than doing it every time a mob spawns?

joligario 01-26-2014 10:29 AM

Not when, for example, you are dynamically creating zone spawns based off raid/group/player level in an instance.

Kingly_Krab 01-26-2014 10:49 AM

I guess, but that's not what's happening here, this is just what I said in Perl form.

Township EQ 01-26-2014 11:15 AM

Quote:

Originally Posted by Kingly_Krab (Post 227895)
Question?: Couldn't you use the 'level' and 'maxlevel' column in the database to set level rather than doing it every time a mob spawns?

Dunno.. never done it that way. Doesn't seem very practical either. With this you can edit it basically on the fly.. changing 2 variables at most instead of one db entry for every mob in the zone. As for what joligario said if you wanted to you could also get a group's average level (or a solo player).. store it in a qglobal.. define it and use it for min and the defined variable +whatever for the max with if checks based on npc names/ids to scale an entire zone.

Kingly_Krab 01-26-2014 11:22 AM

I guess if you're wanting your content to scale based around the player you can do it that way, but the way you're currently doing it can be done in the database then manipulated by Akkadius' scaling script; therefore, this is unnecessary without a scaling factor determining the level of the mobs. For example, if I were to go in Crushbone, I have a level of 1 on a mob, a max level of 5 on the same mob, he'll go between 1 and 5 and scale based upon the database scale rate, and if I have Akkadius' script, he'll scale with that. Now I could make it to where it checks the version of the zone and pulls the average level of a group in order to scale the zone to their specifications, but I don't see the necessity of scaling it based upon the level of the people in a group. With that you would only need one zone for content if they scaled based upon average group level, scaled through Akkadius' script, then had loot added to them according to level.

Township EQ 01-26-2014 11:27 AM

Quote:

Originally Posted by Kingly_Krab (Post 227899)
I guess if you're wanting your content to scale based around the player you can do it that way, but the way you're currently doing it can be done in the database then manipulated by Akkadius' scaling script; therefore, this is unnecessary without a scaling factor determining the level of the mobs. For example, if I were to go in Crushbone, I have a level of 1 on a mob, a max level of 5 on the same mob, he'll go between 1 and 5 and scale based upon the database scale rate, and if I have Akkadius' script, he'll scale with that. Now I could make it to where it checks the version of the zone and pulls the average level of a group in order to scale the zone to their specifications, but I don't see the necessity of scaling it based upon the level of the people in a group, with that you would only need one zone for content if they scaled based upon level, scaled through Akkadius' script, then had loot added to them according to level.

Then you're welcome to make your content that way man.. I can set an if check for the name "orc" and put in 1 and 5 to this and if I test it out and 1-5 isn't what I want i literally change the 5 to a different number. If you do it your way you're changing every entry of each different npc type that's an orc.. Which way is more practical?

The whole group thing was an example I used of what you can easily do with this. You using it or not is up to you lol.

Kingly_Krab 01-26-2014 11:32 AM

Actually, I'm not doing all Orcs, I do it by zone.

Code:

UPDATE npc_types n INNER JOIN spawnentry s ON n.id = s.npcID INNER JOIN spawn2 s2
ON s.spawngroupID = s2.spawngroupID SET n.CHANGEME = VALUE WHERE s2.zone = 'ZONENAME';

Code:

SELECT DISTINCT n.* FROM npc_types n INNER JOIN spawnentry s
ON n.id = s.npcID INNER JOIN spawn2 s2 ON s.spawngroupID = s2.spawngroupID WHERE s2.zone = 'ZONENAME'
ORDER BY `hp` DESC LIMIT 1000;


Township EQ 01-26-2014 11:46 AM

Quote:

Originally Posted by Kingly_Krab (Post 227901)
Actually, I'm not doing all Orcs, I do it by zone.

Code:

UPDATE npc_types n INNER JOIN spawnentry s ON n.id = s.npcID INNER JOIN spawn2 s2
ON s.spawngroupID = s2.spawngroupID SET n.CHANGEME = VALUE WHERE s2.zone = 'ZONENAME';

Code:

SELECT DISTINCT n.* FROM npc_types n INNER JOIN spawnentry s
ON n.id = s.npcID INNER JOIN spawn2 s2 ON s.spawngroupID = s2.spawngroupID WHERE s2.zone = 'ZONENAME'
ORDER BY `hp` DESC LIMIT 1000;


K well.. I'm not gonna have a dick-swinging contest with you. Do things your way. I shared this because I figured it would save some people a bit of time.

joligario 01-26-2014 11:55 AM

Quote:

Originally Posted by Kingly_Krab (Post 227897)
I guess, but that's not what's happening here, this is just what I said in Perl form.

Yeah, I didn't mean his specific implementation.

Kingly_Krab 01-26-2014 11:57 AM

Quote:

Originally Posted by joligario (Post 227903)
Yeah, I didn't mean his specific implementation.

Okay, haha.

Akkadius 01-27-2014 02:19 AM

Township does work with me directly, if his plugin didn't make sense from a practicality/use standpoint I would have been straight open and honest about it before it found its way here.

The DB field in npc_types only affects the inital spawn, this is only to scale on the fly via script to set the key for my scaling system.

It is a simple addition, to use or not to use is up to the end user.

Aardil 01-17-2018 05:02 PM

I am looking for a way to scale only certain NPC's. I dont want to scale the whole zone.

Is it possible?
if so how?

Aardil

Splose 01-17-2018 06:31 PM

Quote:

Originally Posted by Aardil (Post 257028)
I am looking for a way to scale only certain NPC's. I dont want to scale the whole zone. Note that stats will stay the same unless using Akka's scaling system or adding a bit more code.

Is it possible?
if so how?

Aardil

yeah.. you can use default.pl to control any npc in the zone provided they don't already have their own script.

Here is a very simple example of doing that.

quests/zonesn/default.pl

Code:

sub EVENT_SPAWN {
        $nn = $npc->GetCleanName();       
       
        if($nn=~/skeleton/i) {
                $npc->SetLevel(60);                #:: Set all npcs in the zone with 'skeleton' in their name to level 60
        }
       
        if($nn eq "Fippy Darkpaw") {
                $npc->SetLevel(75);                #:: Set any npc with the name 'Fippy Darkpaw' to level 75
        }
}


Splose 01-17-2018 06:55 PM

Quote:

Originally Posted by Aardil (Post 257028)
I am looking for a way to scale only certain NPC's. I dont want to scale the whole zone.

Is it possible?
if so how?

Aardil

yeah.. you can use default.pl to control any npc in the zone provided they don't already have their own script. Note that stats will stay the same unless using Akka's scaling system or adding a bit more code.

Here is a very simple example of doing that.

Code:

sub EVENT_SPAWN {
        $nn = $npc->GetCleanName();       
       
        if($nn=~/skeleton/i) {
                $npc->SetLevel(60);                #:: Set all npcs in the zone with 'skeleton' in their name to level 60
        }
       
        if($nn eq "Fippy Darkpaw") {
                $npc->SetLevel(75);                #:: Set any npc with the name 'Fippy Darkpaw' to level 75
        }
}



All times are GMT -4. The time now is 06:15 PM.

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