EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Quests::Plugins & Mods (https://www.eqemulator.org/forums/forumdisplay.php?f=678)
-   -   Auto NPC Scale Engine/System (Must Read for Server Devs) (https://www.eqemulator.org/forums/showthread.php?t=37660)

Aardil 02-21-2018 01:00 PM

Questions

According to what I Read, this used DBD
What I want to know is this:
I have an existing DB, not sure if its DBD or not.

If I create the tables in my old DB then it seems logical that I should not need to load DBD or alter the eqemu_config since it is all in the original DB.

plug_in From what I read all it does is alter the eqemu_config

Am I wrong?

Aardil

c0ncrete 02-21-2018 01:41 PM

DBI is a database independent interface for perl. DBD are the drivers it uses to connect (DBD::mysql, etc).

Marmosa 04-02-2018 02:25 PM

Does anyone have the required sql for the tables? The link seems to be broken.

deladriendil 04-27-2018 02:43 PM

This is really cool. opens up tons of opportunities
how does the scaling work exactly for Raid mobs? i'm basically looking for a way to scale raid content down to a single 6 man group as far as difficulty. also, are these instructions still representative in the current peq database or would tweaks need to be made?

Splose 04-27-2018 08:48 PM

I will post a fix for this sometime this weekend for you guys.

jpyou127 04-30-2018 06:47 AM

Most excellent Splose!

Splose 05-11-2018 11:16 AM

Quote:

Originally Posted by jpyou127 (Post 258443)
Most excellent Splose!

I completely forgot about this!

A quick disclaimer I have a HEAVILY modified zone_controller.pl and had to quickly go through and remove everything that's not "stock" as far as the auto scaling goes. A quick test has this working on my server. If any of you have any issues I will try and fix them to the best of my ability.

Make sure you have the rule Zone::UseZoneController enabled. Place the following code into a file named zone_controller.pl in your quests/global folder.

Code:

sub EVENT_SPAWN {
        #$Debug = " ";
       
        quest::gmsay("Zone Scaling Sequence Initiated.", 18);
        quest::gmsay("Zone: $zonesn", 18);
        quest::gmsay("Instance Version: $instanceversion", 18);
        quest::gmsay("Instance ID: $instanceversion", 18);

        LoadStaticNPCScaling($zonesn); #:::  Load NPC Static Scaling
        LoadStaticZoneScaling(); #:::  Load Zone Static Scaling


        quest::settimer("scaleall", 1); #:::  Run Scaling routine
        quest::settimer("scaleall", 3); #:::  Run Scaling routine
        $ScalingLoaded = "";
}

sub EVENT_SIGNAL {
        ScaleProcedure($signal);
}


sub EVENT_SPAWN_ZONE {
        my $Pet = $entity_list->GetNPCByID($spawned_entity_id)->GetPetSpellID();
        if(!$Pet) {ScaleProcedure($spawned_entity_id);}
        else {
                quest::settimer("scale",1);
        }
}


sub EVENT_TIMER{
        if($timer eq "scaleall"){ ScaleProcedure(); quest::stoptimer("scaleall");  quest::gmsay("Scaling Sequence SUCCESSFUL (TEST)", 14);  }
        if($timer eq "scale"){quest::stoptimer("scale"); ScaleProcedure($spawned_entity_id);}
}



sub ScaleMob {
        my $npc_ent = $entity_list->GetNPCByID($_[0]);
}

sub ScaleProcedure{
        #quest::shout("scaling " . $_[0] . "");
        #:::  Read from DB
        if(!$SD[1][0][0]){ LoadScaling(); } #:::  Scaling Vars Empty, reload them from DB
        $NPC = 0; $pop = "";
       
        if($_[0]){
                @ent = $entity_list->GetNPCByID($_[0]);
                $pop = " POP";
                #quest::gmsay("Scaling NPC ID " . $_[0], 15);
        }
        else{ @ent = $entity_list->GetNPCList(); $ScalingLoaded = 2; }
        foreach $NPC (@ent){       
                #:::  Hide Invis NPC Names
                if(($NPC->GetRace() == 127 || $NPC->GetRace() == 240) && $NPC->GetLevel() < 100 && $NPC->GetNPCTypeID() > 1000){ if($NPC->GetCleanName()=~/shadowed/i){} else{ $NPC->TempName(""); $NPC->ModifyNPCStat("special_attacks", "AZ"); } }
               
                if($NPC->GetEntityVariable("Scaled") != 1){
                        #Static NPC Scaling
                        $n_name = $NPC->GetCleanName(); $n_name =~ tr/ /_/;
                        if($N_SD{$n_name}[0]){  ScaleNPCStatic($NPC, $n_name);  }
                }
                #:::  SCALING
                #$NPC->Say("Scaling...");
                if($NPC->GetPetSpellID() == 0 && $NPC->GetRace() != 127 && $NPC->GetRace() != 240 && $NPC->GetClass() < 20 && $NPC->GetNPCTypeID() > 1000 && $NPC->GetEntityVariable("Scaled") != 1){

                       
                        $NTYPE = 0; $NN = "NPC";
                        if(substr($NPC->GetName(), 0, 1) eq "#" && substr($NPC->GetName(), 1, 2) ne "#"){ $NTYPE = 1; $NN = "Named"; }
                        if(substr($NPC->GetName(), 0, 2) eq "##" && substr($NPC->GetName(), 2, 3) ne "#"){ $NTYPE = 2; $NN = "Raid"; }
                       
                        $NPC->ModifyNPCStat("max_hp", $SD[$NPC->GetLevel()][$NTYPE][2] * $SZD{$zonesn}[$instanceversion][$NTYPE][2]);
                        $NPC->ModifyNPCStat("max_mana", $SD[$NPC->GetLevel()][$NTYPE][3]  * $SZD{$zonesn}[$instanceversion][$NTYPE][3]);
                        $NPC->ModifyNPCStat("min_hit", $SD[$NPC->GetLevel()][$NTYPE][4] *  $SZD{$zonesn}[$instanceversion][$NTYPE][4]);
                        $NPC->ModifyNPCStat("max_hit", $SD[$NPC->GetLevel()][$NTYPE][5] *  $SZD{$zonesn}[$instanceversion][$NTYPE][5]);
                        $NPC->ModifyNPCStat("attack_speed", $SD[$NPC->GetLevel()][$NTYPE][6] *  $SZD{$zonesn}[$instanceversion][$NTYPE][6]);
                        $NPC->ModifyNPCStat("ac", $SD[$NPC->GetLevel()][$NTYPE][7] *  $SZD{$zonesn}[$instanceversion][$NTYPE][7]);
                        $NPC->ModifyNPCStat("str", $SD[$NPC->GetLevel()][$NTYPE][8]);
                        $NPC->ModifyNPCStat("sta", $SD[$NPC->GetLevel()][$NTYPE][9]);
                        $NPC->ModifyNPCStat("dex", $SD[$NPC->GetLevel()][$NTYPE][10]);
                        $NPC->ModifyNPCStat("agi", $SD[$NPC->GetLevel()][$NTYPE][11]);
                        $NPC->ModifyNPCStat("int", $SD[$NPC->GetLevel()][$NTYPE][12]);
                        $NPC->ModifyNPCStat("wis", $SD[$NPC->GetLevel()][$NTYPE][13]);
                        $NPC->ModifyNPCStat("cha", $SD[$NPC->GetLevel()][$NTYPE][14]);
                        $NPC->ModifyNPCStat("mr", $SD[$NPC->GetLevel()][$NTYPE][15]);
                        $NPC->ModifyNPCStat("cr", $SD[$NPC->GetLevel()][$NTYPE][16]);
                        $NPC->ModifyNPCStat("dr", $SD[$NPC->GetLevel()][$NTYPE][17]);
                        $NPC->ModifyNPCStat("fr", $SD[$NPC->GetLevel()][$NTYPE][18]);
                        $NPC->ModifyNPCStat("pr", $SD[$NPC->GetLevel()][$NTYPE][19]);
                        $NPC->ModifyNPCStat("accuracy", 100);
                        if($SZD{$zonesn}[$instanceversion][$NTYPE][13]){
                                $NPC->ModifyNPCStat("accuracy", $SZD{$zonesn}[$instanceversion][$NTYPE][13]);
                        }
                       
                        if($Debug){
                                $NPC->SetEntityVariable("max_hp", $SD[$NPC->GetLevel()][$NTYPE][2] * $SZD{$zonesn}[$instanceversion][$NTYPE][2]);
                                $NPC->SetEntityVariable("max_mana", $SD[$NPC->GetLevel()][$NTYPE][3]  * $SZD{$zonesn}[$instanceversion][$NTYPE][3]);
                                $NPC->SetEntityVariable("min_hit", $SD[$NPC->GetLevel()][$NTYPE][4] *  $SZD{$zonesn}[$instanceversion][$NTYPE][4]);
                                $NPC->SetEntityVariable("max_hit", $SD[$NPC->GetLevel()][$NTYPE][5] *  $SZD{$zonesn}[$instanceversion][$NTYPE][5]);
                                $NPC->SetEntityVariable("attack_speed", $SD[$NPC->GetLevel()][$NTYPE][6] *  $SZD{$zonesn}[$instanceversion][$NTYPE][6]);
                                $NPC->SetEntityVariable("ac", $SD[$NPC->GetLevel()][$NTYPE][7] *  $SZD{$zonesn}[$instanceversion][$NTYPE][7]);
                                $NPC->SetEntityVariable("str", $SD[$NPC->GetLevel()][$NTYPE][8]);
                                $NPC->SetEntityVariable("sta", $SD[$NPC->GetLevel()][$NTYPE][9]);
                                $NPC->SetEntityVariable("dex", $SD[$NPC->GetLevel()][$NTYPE][10]);
                                $NPC->SetEntityVariable("agi", $SD[$NPC->GetLevel()][$NTYPE][11]);
                                $NPC->SetEntityVariable("int", $SD[$NPC->GetLevel()][$NTYPE][12]);
                                $NPC->SetEntityVariable("wis", $SD[$NPC->GetLevel()][$NTYPE][13]);
                                $NPC->SetEntityVariable("cha", $SD[$NPC->GetLevel()][$NTYPE][14]);
                                $NPC->SetEntityVariable("mr", $SD[$NPC->GetLevel()][$NTYPE][15]);
                                $NPC->SetEntityVariable("cr", $SD[$NPC->GetLevel()][$NTYPE][16]);
                                $NPC->SetEntityVariable("dr", $SD[$NPC->GetLevel()][$NTYPE][17]);
                                $NPC->SetEntityVariable("fr", $SD[$NPC->GetLevel()][$NTYPE][18]);
                                $NPC->SetEntityVariable("pr", $SD[$NPC->GetLevel()][$NTYPE][19]);
                                if($SZD{$zonesn}[$instanceversion][$NTYPE][13]){
                                        $NPC->SetEntityVariable("accuracy", $SZD{$zonesn}[$instanceversion][$NTYPE][13]);
                                }
                        }
                       
                        #:::  Is there a static zone entry?
                        if($SZD{$zonesn}[$instanceversion][$NTYPE][11] != 1){
                                $NPC->ModifyNPCStat("special_attacks", $SZD{$zonesn}[$instanceversion][$NTYPE][11]);
                        }else{
                                $NPC->ModifyNPCStat("special_attacks", $SD[$NPC->GetLevel()][$NTYPE][21]);
                        }
                        $NPC->ModifyNPCStat("hp_regen", $SD[$NPC->GetLevel()][$NTYPE][20]  *  $SZD{$zonesn}[$instanceversion][$NTYPE][10]);
                        $NPC->SetEntityVariable("hpregen", $SD[$NPC->GetLevel()][$NTYPE][20]  *  $SZD{$zonesn}[$instanceversion][$NTYPE][10]);
                        $NPC->ModifyNPCStat("spellscale", $SD[$NPC->GetLevel()][$NTYPE][22]  *  $SZD{$zonesn}[$instanceversion][$NTYPE][9]);
                        $NPC->ModifyNPCStat("healscale", $SD[$NPC->GetLevel()][$NTYPE][23]  *  $SZD{$zonesn}[$instanceversion][$NTYPE][8]);
                       
                        $LID = (200000 + ($NTYPE * 1000) + $NPC->GetLevel());
                        if($NPC->GetLoottableID() != $LID){
                                $NPC->ModifyNPCStat("loottable_id", (210000 + ($NTYPE * 1000) + $NPC->GetLevel())); $NPC->AddLootTable();
                                $NPC->ModifyNPCStat("loottable_id", (200000 + ($NTYPE * 1000) + $NPC->GetLevel())); $NPC->AddLootTable(); 
                        }
                        $NPC->SetHP($NPC->GetMaxHP());
                        $NPC->SetEntityVariable("Scaled", 1); if($Debug){ $NPC->SetEntityVariable("ScaledType", 1); }
                       
                        if($Debug){
                                quest::gmsay("Scaling $pop $NN [" . $NPC->GetCleanName() . "]
                                        HP:[". $SD[$NPC->GetLevel()][$NTYPE][2] * $SZD{$zonesn}[$instanceversion][$NTYPE][2] . "]
                                        hp_regen:[". ($SD[$NPC->GetLevel()][$NTYPE][20]  *  $SZD{$zonesn}[$instanceversion][$NTYPE][10]) . "]
                                        min_hit:[". ($SD[$NPC->GetLevel()][$NTYPE][4] *  $SZD{$zonesn}[$instanceversion][$NTYPE][4]) . "]
                                        max_hit:[".( $SD[$NPC->GetLevel()][$NTYPE][5] *  $SZD{$zonesn}[$instanceversion][$NTYPE][5]) . "]
                                        spec:[". $SD[$NPC->GetLevel()][$NTYPE][21] . "]
                                        NTYPE:[". $NTYPE . "]
                                        ", 15);
                        }
                       
                        if(!$SD[$NPC->GetLevel()][$NTYPE][0]){ quest::gmsay($NPC->GetCleanName() . ": ERROR! Missing Scaling Entry! For level " . $NPC->GetLevel() . " Type: $NTYPE", 13); }
                }
                # Level 255 NPC's are considered quest NPC's and shall not be attacked #
                if($NPC->GetLevel() == 255){ $NPC->ModifyNPCStat("special_attacks", "AHGZ"); $NPC->SetEntityVariable("max_hp", 100000); }
        }
        if($ScalingLoaded == 2){ $ScalingLoaded = 3; }
}

sub LoadScaling{
        $connect = plugin::LoadMysql();
        $query = "SELECT
                cust_npc_scaling.level,
                cust_npc_scaling.type,
                cust_npc_scaling.hp,
                cust_npc_scaling.mana,
                cust_npc_scaling.mindmg,
                cust_npc_scaling.maxdmg,
                cust_npc_scaling.attack_speed,
                cust_npc_scaling.AC,
                cust_npc_scaling.STR,
                cust_npc_scaling.STA,
                cust_npc_scaling.DEX,
                cust_npc_scaling.AGI,
                cust_npc_scaling._INT,
                cust_npc_scaling.WIS,
                cust_npc_scaling.CHA,
                cust_npc_scaling.MR,
                cust_npc_scaling.CR,
                cust_npc_scaling.DR,
                cust_npc_scaling.FR,
                cust_npc_scaling.PR,
                cust_npc_scaling.hp_regen,
                cust_npc_scaling.npcspecialattks,
                cust_npc_scaling.spellscale,
                cust_npc_scaling.healscale
                FROM
                cust_npc_scaling
                ORDER BY cust_npc_scaling.level, cust_npc_scaling.type";
        $query_handle = $connect->prepare($query);
        $query_handle->execute();
        $NTYPE = 0;
        while (@row = $query_handle->fetchrow_array()){ $SD[$row[0]][$row[1]] = [@row]; }
}

sub LoadStaticZoneScaling{
        #:::  Load Static Zone Scaling Data #::: 
        $connect = plugin::LoadMysql();
        #:::  Default empty values to 1
        for($i = 2; $i < 17; $i++){
                for($t = 0; $t < 3; $t++){
                        if(!$SZD{$zonesn}[$instanceversion][$t][$i] || $SZD{$zonesn}[$instanceversion][$t][$i] == 0){
                                $SZD{$zonesn}[$instanceversion][$t][$i] = 1;
                        }
                }
        }
       
        $query = "SELECT `zonesn`, `version`, `hp`, `mana`, `mindmg`, `maxdmg`, `attack_speed`, `ac`, `healscale`, `spellscale`, `hpregen`, `specialattacks`, `type`, `accuracy` FROM `cust_npc_zonescale_static` WHERE `zonesn` = '" . $zonesn . "'"; $query_handle = $connect->prepare($query); $query_handle->execute(); my @SZD;
        while (@row = $query_handle->fetchrow_array()){
                $SZD{$row[0]}[$row[1]][$row[12]] = [@row]; 
                if($SZD{$zonesn}[$instanceversion][0]){
                        $Mod = $SZD{$zonesn}[$instanceversion][2]; $npc->SetEntityVariable("ScaleMod", $Mod);
                        quest::gmsay("[Zonecontroller] (Static Data) [Type] : " . $row[12] . " Zone Data: HP=" . ($SZD{$zonesn}[$instanceversion][$row[12]][2] * 100) . "(%%) Mana=" . ($SZD{$zonesn}[$instanceversion][$row[12]][3] * 100) . "(%%) MINDMG=" . ($SZD{$zonesn}[$instanceversion][$row[12]][4] * 100) . "(%%) MAXDMG=" . ($SZD{$zonesn}[$instanceversion][$row[12]][5] * 100) . "(%%) ATK_SPD=" . ($SZD{$zonesn}[$instanceversion][$row[12]][6] * 100) . "(%%) AC=" . ($SZD{$zonesn}[$instanceversion][$row[12]][7] * 100) . "(%%) SPELLSCALE=" . ($SZD{$zonesn}[$instanceversion][$row[12]][8] * 100) . "(%%) HEALSCALE=" . ($SZD{$zonesn}[$instanceversion][$row[12]][9] * 100) . "(%%) HPREGEN=" . ($SZD{$zonesn}[$instanceversion][$row[12]][10] * 100) . "(%%)", 15);
                       
                }
        }
}

sub LoadStaticNPCScaling{
        $connect = plugin::LoadMysql();
        $query = "SELECT
                cust_npc_scale_static.`name`,
                cust_npc_scale_static.zonesn,
                cust_npc_scale_static.hp,
                cust_npc_scale_static.mana,
                cust_npc_scale_static.mindmg,
                cust_npc_scale_static.maxdmg,
                cust_npc_scale_static.attack_speed,
                cust_npc_scale_static.AC,
                cust_npc_scale_static.STR,
                cust_npc_scale_static.STA,
                cust_npc_scale_static.DEX,
                cust_npc_scale_static.AGI,
                cust_npc_scale_static._INT,
                cust_npc_scale_static.WIS,
                cust_npc_scale_static.CHA,
                cust_npc_scale_static.MR,
                cust_npc_scale_static.CR,
                cust_npc_scale_static.DR,
                cust_npc_scale_static.FR,
                cust_npc_scale_static.PR,
                cust_npc_scale_static.hp_regen,
                cust_npc_scale_static.spellscale,
                cust_npc_scale_static.healscale,
                cust_npc_scale_static.npcspecialattks,
                cust_npc_scale_static.usediabloloot,
                cust_npc_scale_static.localloottable
                FROM
                cust_npc_scale_static
                WHERE cust_npc_scale_static.zonesn = '" . $_[0] . "' OR cust_npc_scale_static.zonesn = 'global'";
        $query_handle = $connect->prepare($query);
        $query_handle->execute();
        $NTYPE = 0;
        while (@row = $query_handle->fetchrow_array()){ $N_SD{$row[0]} = [@row]; quest::gmsay("[Zonecontroller]: Loading static NPC data for NPC: '" . $row[0] ."'", 15); }
}


sub ScaleNPCStatic{
        my $SS = $_[0];
        quest::shout("Found data for NPC " . $SS->GetCleanName() . ' - ' . $_[1]);
        $NTYPE = 0; $NN = "NPC";
        if(substr($SS->GetName(), 0, 1) eq "#" && substr($SS->GetName(), 1, 2) ne "#"){ $NTYPE = 1; $NN = "Named"; }
        if(substr($SS->GetName(), 0, 2) eq "##" && substr($SS->GetName(), 2, 3) ne "#"){ $NTYPE = 2; $NN = "Raid"; }

        $SS->ModifyNPCStat("max_hp", $N_SD{$_[1]}[2]);
        $SS->ModifyNPCStat("max_mana", $N_SD{$_[1]}[3]);
        $SS->ModifyNPCStat("min_hit", $N_SD{$_[1]}[4]);
        $SS->ModifyNPCStat("max_hit", $N_SD{$_[1]}[5]);
        $SS->ModifyNPCStat("attack_speed", $N_SD{$_[1]}[6]);
        $SS->ModifyNPCStat("ac", $N_SD{$_[1]}[7]);
        $SS->ModifyNPCStat("str", $N_SD{$_[1]}[8]);
        $SS->ModifyNPCStat("sta", $N_SD{$_[1]}[9]);
        $SS->ModifyNPCStat("dex", $N_SD{$_[1]}[10]);
        $SS->ModifyNPCStat("agi", $N_SD{$_[1]}[11]);
        $SS->ModifyNPCStat("int", $N_SD{$_[1]}[12]);
        $SS->ModifyNPCStat("wis", $N_SD{$_[1]}[13]);
        $SS->ModifyNPCStat("cha", $N_SD{$_[1]}[14]);
        $SS->ModifyNPCStat("mr", $N_SD{$_[1]}[15]);
        $SS->ModifyNPCStat("cr", $N_SD{$_[1]}[16]);
        $SS->ModifyNPCStat("dr", $N_SD{$_[1]}[17]);
        $SS->ModifyNPCStat("fr", $N_SD{$_[1]}[18]);
        $SS->ModifyNPCStat("pr", $N_SD{$_[1]}[19]);
        $SS->ModifyNPCStat("hp_regen", $N_SD{$_[1]}[20]);
        $SS->ModifyNPCStat("spellscale", $N_SD{$_[1]}[21]);
        $SS->ModifyNPCStat("healscale", $N_SD{$_[1]}[22]);
        $SS->ModifyNPCStat("special_attacks", $N_SD{$_[1]}[23]);
       
        if($N_SD{$_[1]}[24] == 1){ #:::  Tells Static Entry to use Diablo Loot
                $LID = (200000 + ($NTYPE * 1000) + $SS->GetLevel());
                if($SS->GetLoottableID() != $LID){
                        $SS->ModifyNPCStat("loottable_id", (210000 + ($NTYPE * 1000) + $SS->GetLevel())); $SS->AddLootTable();
                        $SS->ModifyNPCStat("loottable_id", (200000 + ($NTYPE * 1000) + $SS->GetLevel())); $SS->AddLootTable(); 
                }
        }
       
        if($N_SD{$_[1]}[25] > 0){ #:::  Add an additional Loot table
                $SS->ModifyNPCStat("loottable_id", $N_SD{$_[1]}[25]); $SS->AddLootTable(); 
        }
       
        $SS->SetEntityVariable("Scaled", 1); if($Debug){ $SS->SetEntityVariable("ScaledType", 2); }
}


sub RandomRange {

        my $MinRandom = $_[0];
        my $MaxRandom = $_[1];

        my $RandomResult = int(rand(($MaxRandom + 1) - $MinRandom)) + $MinRandom;
        if ($RandomResult > $MaxRandom)
        {
                return $MaxRandom;
        }
        return $RandomResult;

}


deladriendil 05-11-2018 01:20 PM

splose is this all that we need? the original links to download the custom tables are gone. don't want to start messing with this if its a partial fix.

Splose 05-11-2018 01:38 PM

Quote:

Originally Posted by deladriendil (Post 258685)
splose is this all that we need? the original links to download the custom tables are gone. don't want to start messing with this if its a partial fix.

Didn't realize the links were dead. You may have to balance these a bit I'm not sure how different they are to the ones provided in the op.

Download here.

Akkadius 05-11-2018 02:05 PM

Also need to take into consideration that special attacks are no longer handled the same anymore

Splose 05-11-2018 02:12 PM

Quote:

Originally Posted by Akkadius (Post 258687)
Also need to take into consideration that special attacks are no longer handled the same anymore

Ahh that is right.

Just to clarify.. you are still able to use either system you just lose the increased functionality of the new one if you do it this way...correct?

Either way an easy fix but I'll have to get it done after work. Will update soon.

Akkadius 05-11-2018 02:55 PM

Thanks for taking this on bud - I'm sure many people will appreciate it

If you want to pretty it up and make sure it all works and is tested that would be great.

Swap out special attacks for the new hotness and make sure that works and things should be good

I will make sure that all of this gets into our new docs we've been working on for 2018

deladriendil 05-11-2018 03:19 PM

will the LoadMySQL() stuff work as advertised in the .json world as presented here?

http://www.eqemulator.org/forums/sho...039#post227039

Akkadius 05-11-2018 03:20 PM

Yes as long as you have the latest plugins from the PEQ repo

https://github.com/ProjectEQ/project...ugins/MySQL.pl

deladriendil 05-13-2018 02:42 PM

any chance I could get an example in JSON?

i put this at the end after the last }
file loads but I see the following in world

[Update] No script update necessary...
garbage after JSON object, at character offset 1977 (before "ub Loadmysql{\t\n\tu..."} at eqemu_server.pl line 1147


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

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