ACE Generators

From A'Chard
Revision as of 03:13, 18 March 2024 by Ftuoil Xelrash (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search



ACE Generators


vendors can have generators regenlocationtype has flags for both shop and treasure however they aren't supported at the same time, according to the current code in theory it would be trivial to modify the code to support them both at the same time like a 1 or 2-line change actually i'm mistaken, it is supported so yeah it looks like you could have a vendor that generates lootgen treasure, same as any other generator or monster corpse etc. you might need to change this flag to true ("vendor_shop_uses_generator", new Property<bool>(false, "enables or disables vendors using generator system in addition to createlist to create artificial scarcity")),


28282 Linkable Monster Gen - 10 Sec

15274 Linkable Monster Gen - 1 Min

24129 Linkable Monster Gen - 2 Min

07923 Linkable Monster Gen - 3 Min

07932 Linkable Monster Gen - 4 Min

07924 Linkable Monster Gen - 5 Min

04219 Linkable Monster Gen - 7 Min

07925 Linkable Monster Gen - 10 Min

03955 Linkable Monster Gen - 15 Min

07926 Linkable Monster Gen - 20 Min


15759 Linkable Item Gen - 10 Sec

05085 Linkable Item Gen - 25 Sec

04142 Linkable Item Gen - 2 Min


RipleyToday at 12:03 PM

rate can be increase by enabling the override_encounter_spawn_rates option and then changing encounter_delay and encounter_regen_interval

can try encounter_delay at 300 and encounter_regen_interval at 60 for basically a spawn every 5 mins for the overworld generators


RegenInterval is the generator "heartbeat"

it's how often the generator checks if things need to respawn

so that generator would check if things are ready to respawn every 60 seconds

delay is what you would probably consider the "real" regen interval

so things will take 800 seconds to respawn, but the regen interval provides a small amount of rng/sync to it

with that generator, things will take a minimum of 800 seconds to respawn, and a maximum of 860 seconds

depending on when the thing died in relation to the generator heartbeat

that method also syncs things up, so if i kill 1 2 3 4 5 monsters, with 10s in between each kill, when they respawn, they arent going to come in 1 at a time, every 10s on the dot

that would be too predictable, and would make the respawn cycles easier to kill

i would be able to kill the respawns without any other adds also attacking me



RipleyToday at 12:37 PM

set to 0

regen that is

whenever you don't want regen, its always 0

delay is for how long a profile can hold the slot it spawned after its been killed

DridToday at 12:41 PM

noted on that. Ill clean up those other gens

RipleyToday at 12:41 PM

so you've got 4/4 and you have 5 profiles. each profile is 1/1 with a delay of 300. it will spawn 4 of those profiles and if one of them is killed, the 5th profile won't be immediately selected because the slot is still being held through the delay. once the delay is over, ONE of the two unspawned will be selected

======

GeneratorDestructionType = Generator's destruction

GeneratorEndDestructionType = Generator's disabled


GeneratorEndDestructionType is fired when Generator is Disabled

disabling coming via event offs, day/night switches, time end reached

GeneratorDestructionType fires when Generator is Destroyed (WorldObject.Destroy)

  • Delay in generator "profile" the bottom section is for regen.

WHERE TYPE Undef = 0x00,

       OnTop               = 0x01,
       Scatter             = 0x02,
       Specific            = 0x04,
       Contain             = 0x08,
       Wield               = 0x10,
       Shop                = 0x20,
       Treasure            = 0x40,
       Checkpoint          = Contain | Wield | Shop, // 56
       OnTopTreasure       = OnTop | Treasure, // 65
       ScatterTreasure     = Scatter | Treasure, // 66
       SpecificTreasure    = Specific | Treasure, // 68
       ContainTreasure     = Contain | Treasure, // 72
       WieldTreasure       = Wield | Treasure, // 80
       ShopTreasure        = Shop | Treasure // 96

WHEN TYPE

   [Flags]
   public enum RegenerationType : uint
   {
       Undef       = 0x0,
       Destruction = 0x1,
       PickUp      = 0x2,
       Death       = 0x4
   }
   public enum GeneratorDestruct
   {
       Undef,
       Nothing,
       Destroy,
       Kill

Linkable Generators for Dungeons

lets look at a very basic layout

https://github.com/ACEmulator/ACE-World-16PY-Patches/blob/master/Database/Patches/2011-05-LostCityOfNeftet/6%20LandBlockExtendedData/A1A3.sql

in the above link, the first four are static objects

they never respawn and were pcapped in the static guid range

the generator of course wasn't pcapped, but those objects following it were, and they were in the dynamic guid range which tells us

that for whatever reason they linked them to a generator.. for the cavern npc and forge npc, they could have been static as well but for the 3 target drudges,

you want them to respawn when killed

so in concept, the use of linkable gens is so you don't have to make new generator objects to spawn one or more objects

if you're not building a generator that is going to be used in lots of places, it makes sense to just setup one or more linkables,

depending on conditions you want to impose (like 2 min, 5 min, etc), in a landblock, map out where each object is intended

to respawn at and then link it back to the generator

the guids for any objects linked is essentially thrown away and never seen by players

the generator uses the link to determine what, where and how many to spawn, using the generator's placeholder object to define the where, how many and under what conditions

https://github.com/ACEmulator/ACE-World-16PY/blob/master/Database/3-Core/9%20WeenieDefaults/SQL/Generic/None/05086%20Linkable%20Monster%20Gen%20-%2030%20sec..sql


guids are always in a specific format, 0x7[LBID]###

lbid is that first four of loc, after that its incremental from 000

Ripley12/09/2019

so if you're in an area that has pcapped existing statics, you start +1 from the highest static

if you're in a completely barren area its 000

so like landblock ABCD is empty, the first guid is 0x7ABCD000

I just usually search the landblock_instance table for a specific landblock ID, and use +1 the highest GUID for that landblock

and don't use a GUID from the dynamic range, or the object will get culled

It's more or less range specific to the landblock

Ripley12/09/2019

yes, anything in instances is 0x70000000 to 0x7FFFFFFF

it is scoped per landblock as Ziang says, so for ABCD, 0x7ABCD000 to 0x7ABCDFFF

if you get to FFF of a landblock, you've got bigger issues


a thing is entered in to the "spawn map, a concept, not a real thing" and then linked to a linkable generator.. when the server starts up, it collects up those links and uses it to dynamically build a working generator that is not unlike a "completed" generator


last four numbers in loc, W X Y Z.. if X and/or Y are not 0, your char will do very odd things.. most likely applies to most creatures as well</nowiki>