Log in

View Full Version : zone instancing


blackdragonsdg
04-10-2011, 04:29 PM
I want to create a zone instance using completely unique spawns that were not part of the non-instanced version of that zone. Now using the version field for the npc to control what version of the zone it spawns in doesn't seem like it would work in this case because the spawn chance for the unique spawns would have to be set to 0 otherwise they would show up in the normal version of the zone. Now if spawns in zone instances work like normal zones then the zone instance would be void of life. Assuming the version field can't be used is it possible to retrieve a zone instance id and then spawn npcs within that instance using quest::spawn2()? How much of a strain does zone instancing cause on a computer because I would be attempting to spawn between 170-308 npcs depending on the zone.

The reason I want to do this is that I have completely custom versions of Crystallos, Bloodmoon Keep and Loping Plains that I am currently using in place of the normal zone versions. The problem is I want to use the normal versions of the zone for exp and such then have the custom versions instanced for group/raid content.

I have not started this script yet because I am not sure if it is possible to do....so any thoughts or suggestions would be greatly appreciated.

Jaekob
04-11-2011, 06:20 AM
If I am understanding you correctly you can and want to use the version field in the db to make a separate instance.

Set up your spawns as you desire for the instance and make sure the NPC has the correct version set in both the npc_types and spawn2 tables. Only thing you should need to use perl for is to create the instance. You can do this for multiple instances within the same zone if you want, ikkinz has seven different versions.

blackdragonsdg
04-11-2011, 03:11 PM
Doh some how did i managed to over look the version field in spawn2. That should make a big difference. Thanks for the help.

blackdragonsdg
04-12-2011, 12:41 AM
Well I thought I had this working but still no npc's showing up inside the instance. So now I am not sure if the instance is working at all. The npc was working just fine prior to changing the version number in npc_types and spawn2 tables.

What am I doing wrong?

Test Script
sub EVENT_SAY {
my $group = $client->GetGroup();
if ($text =~/Hail/i)
{
quest::say("Just say the word [group].");
}
if (($text =~/group/i) && $ulevel >= 80 && $hasitem{219532} && $group) {
quest::CreateInstance("crystallos", 1, 21600);
quest::AssignGroupToInstance("crystallos");
quest::MovePCInstance(446, "crystallos", -65, -200, -75);
}
elsif (($text =~/group/i) && $ulevel <= 79 && $hasitem{219532} && $group) {
quest::say("Sorry but you are not strong enough for this quest come back when you have gained more experience.");
}
elsif (($text =~/group/i) && $ulevel >= 80 && !$hasitem{219532} && $group) {
quest::say("Sorry but you do not have the key needed to enter the zone for this quest. Seek out the Relic Gatekeeper, she might be able to help you.");
}
elsif (($text =~/group/i) && $ulevel >= 80 && $hasitem{219532} && !$group) {
quest::say("Sorry but you are not in a group. Find a group then try again.");
}
}


NPC that is suppose to go into the instance
INSERT INTO `spawnentry` (`spawngroupID`, `npcID`, `chance`) VALUES (700110, 700011, 100);
INSERT INTO `spawngroup` (`id`, `name`, `spawn_limit`, `dist`, `max_x`, `min_x`, `max_y`, `min_y`, `delay`) VALUES (700110, '700110', 1, 0, 0, 0, 0, 0, 0);
INSERT INTO `spawn2` (`id`, `spawngroupID`, `zone`, `version`, `x`, `y`, `z`, `heading`, `respawntime`, `variance`, `pathgrid`, `_condition`, `cond_value`, `enabled`) VALUES (700011, 700110, 'crystallos', 1, -996.799988, -351.299988, -426.399994, 8.900000, 1200, 0, 0, 0, 1, 1);
INSERT INTO `npc_types` (`id`, `name`, `lastname`, `level`, `race`, `class`, `bodytype`, `hp`, `gender`, `texture`, `helmtexture`, `size`, `hp_regen_rate`, `mana_regen_rate`, `loottable_id`, `merchant_id`, `npc_spells_id`, `npc_faction_id`, `adventure_template_id`, `trap_template`, `mindmg`, `maxdmg`, `npcspecialattks`, `aggroradius`, `face`, `luclin_hairstyle`, `luclin_haircolor`, `luclin_eyecolor`, `luclin_eyecolor2`, `luclin_beardcolor`, `luclin_beard`, `drakkin_heritage`, `drakkin_tattoo`, `drakkin_details`, `armortint_id`, `armortint_red`, `armortint_green`, `armortint_blue`, `d_meele_texture1`, `d_meele_texture2`, `prim_melee_type`, `sec_melee_type`, `runspeed`, `MR`, `CR`, `DR`, `FR`, `PR`, `Corrup`, `see_invis`, `see_invis_undead`, `qglobal`, `AC`, `npc_aggro`, `spawn_limit`, `attack_speed`, `findable`, `STR`, `STA`, `DEX`, `AGI`, `_INT`, `WIS`, `CHA`, `see_hide`, `see_improved_hide`, `trackable`, `isbot`, `exclude`, `ATK`, `Accuracy`, `slow_mitigation`, `version`, `maxlevel`, `scalerate`, `private_corpse`, `unique_spawn_by_name`) VALUES (700011, 'Hyrdos, Guardian of Crystallos', NULL, 90, 530, 9, 26, 5500000, 2, 1, 6, 250, 500, 0, 750001, 0, 547, 79, 0, 0, 12000, 12000, 'SERrFTQMCNIDf', 250, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 2.5, 350, 350, 350, 350, 350, 0, 1, 1, 1, 6000, 0, 1, -75, 0, 750, 750, 750, 750, 750, 750, 750, 1, 0, 1, 0, 3, 20000, 0, 0, 1, 0, 100, 0, 0);

lerxst2112
04-12-2011, 01:05 AM
CreateInstance returns an instance ID.

That is what you should pass to AssignGroupToInstance and MovePCInstance instead of "crystallos".

Akkadius
04-12-2011, 01:28 AM
Well I thought I had this working but still no npc's showing up inside the instance. So now I am not sure if the instance is working at all. The npc was working just fine prior to changing the version number in npc_types and spawn2 tables.

What am I doing wrong?

Test Script
sub EVENT_SAY {
my $group = $client->GetGroup();
if ($text =~/Hail/i)
{
quest::say("Just say the word [group].");
}
if (($text =~/group/i) && $ulevel >= 80 && $hasitem{219532} && $group) {
quest::CreateInstance("crystallos", 1, 21600);
quest::AssignGroupToInstance("crystallos");
quest::MovePCInstance(446, "crystallos", -65, -200, -75);
}
elsif (($text =~/group/i) && $ulevel <= 79 && $hasitem{219532} && $group) {
quest::say("Sorry but you are not strong enough for this quest come back when you have gained more experience.");
}
elsif (($text =~/group/i) && $ulevel >= 80 && !$hasitem{219532} && $group) {
quest::say("Sorry but you do not have the key needed to enter the zone for this quest. Seek out the Relic Gatekeeper, she might be able to help you.");
}
elsif (($text =~/group/i) && $ulevel >= 80 && $hasitem{219532} && !$group) {
quest::say("Sorry but you are not in a group. Find a group then try again.");
}
}


NPC that is suppose to go into the instance
INSERT INTO `spawnentry` (`spawngroupID`, `npcID`, `chance`) VALUES (700110, 700011, 100);
INSERT INTO `spawngroup` (`id`, `name`, `spawn_limit`, `dist`, `max_x`, `min_x`, `max_y`, `min_y`, `delay`) VALUES (700110, '700110', 1, 0, 0, 0, 0, 0, 0);
INSERT INTO `spawn2` (`id`, `spawngroupID`, `zone`, `version`, `x`, `y`, `z`, `heading`, `respawntime`, `variance`, `pathgrid`, `_condition`, `cond_value`, `enabled`) VALUES (700011, 700110, 'crystallos', 1, -996.799988, -351.299988, -426.399994, 8.900000, 1200, 0, 0, 0, 1, 1);
INSERT INTO `npc_types` (`id`, `name`, `lastname`, `level`, `race`, `class`, `bodytype`, `hp`, `gender`, `texture`, `helmtexture`, `size`, `hp_regen_rate`, `mana_regen_rate`, `loottable_id`, `merchant_id`, `npc_spells_id`, `npc_faction_id`, `adventure_template_id`, `trap_template`, `mindmg`, `maxdmg`, `npcspecialattks`, `aggroradius`, `face`, `luclin_hairstyle`, `luclin_haircolor`, `luclin_eyecolor`, `luclin_eyecolor2`, `luclin_beardcolor`, `luclin_beard`, `drakkin_heritage`, `drakkin_tattoo`, `drakkin_details`, `armortint_id`, `armortint_red`, `armortint_green`, `armortint_blue`, `d_meele_texture1`, `d_meele_texture2`, `prim_melee_type`, `sec_melee_type`, `runspeed`, `MR`, `CR`, `DR`, `FR`, `PR`, `Corrup`, `see_invis`, `see_invis_undead`, `qglobal`, `AC`, `npc_aggro`, `spawn_limit`, `attack_speed`, `findable`, `STR`, `STA`, `DEX`, `AGI`, `_INT`, `WIS`, `CHA`, `see_hide`, `see_improved_hide`, `trackable`, `isbot`, `exclude`, `ATK`, `Accuracy`, `slow_mitigation`, `version`, `maxlevel`, `scalerate`, `private_corpse`, `unique_spawn_by_name`) VALUES (700011, 'Hyrdos, Guardian of Crystallos', NULL, 90, 530, 9, 26, 5500000, 2, 1, 6, 250, 500, 0, 750001, 0, 547, 79, 0, 0, 12000, 12000, 'SERrFTQMCNIDf', 250, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 2.5, 350, 350, 350, 350, 350, 0, 1, 1, 1, 6000, 0, 1, -75, 0, 750, 750, 750, 750, 750, 750, 750, 1, 0, 1, 0, 3, 20000, 0, 0, 1, 0, 100, 0, 0);


Refer to:

http://eqemulator.org/forums/showthread.php?t=32609


if (($text =~/group/i) && $ulevel >= 80 && $hasitem{219532} && $group) {
plugin::SendToInstance("group", "crystallos", 1, -65, -200, -75, "grp", 21600);
}

This requires checkout of the Plugins Repo SVN:

http://eqemulator.org/forums/showthread.php?t=32608

blackdragonsdg
04-12-2011, 02:28 AM
CreateInstance returns an instance ID.

That is what you should pass to AssignGroupToInstance and MovePCInstance instead of "crystallos".

Umm yeah, while I know what you mean with that statement my attempts to implement that lead to a zone loop back issue, same result I had before and complete failure.

blackdragonsdg
04-12-2011, 03:41 AM
Akkadius, that plugin worked flawlessly. Thank you for sharing that.

lerxst2112
04-12-2011, 03:46 AM
Well, you should take a look at what Akkadius posted. The plugins are very helpful and make things a lot easier to read.

If you take a look at the plugin code you'll see it uses the returned instance ID correctly.

Good luck.