ACE Generators: Difference between revisions

From A'Chard
Jump to navigation Jump to search
No edit summary
No edit summary
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<sub><nowiki>28282 Linkable Monster Gen - 10 Sec
[[Category:ACE]]
 
 
 
ACE Generators
 
 
<code>
 
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
15274 Linkable Monster Gen - 1 Min
24129 Linkable Monster Gen - 2 Min
24129 Linkable Monster Gen - 2 Min
07923 Linkable Monster Gen - 3 Min
07923 Linkable Monster Gen - 3 Min
07932 Linkable Monster Gen - 4 Min
07932 Linkable Monster Gen - 4 Min
07924 Linkable Monster Gen - 5 Min
07924 Linkable Monster Gen - 5 Min
04219 Linkable Monster Gen - 7 Min
04219 Linkable Monster Gen - 7 Min
07925 Linkable Monster Gen - 10 Min
07925 Linkable Monster Gen - 10 Min
03955 Linkable Monster Gen - 15 Min
03955 Linkable Monster Gen - 15 Min
07926 Linkable Monster Gen - 20 Min
07926 Linkable Monster Gen - 20 Min


Line 13: Line 43:


15759 Linkable Item Gen - 10 Sec
15759 Linkable Item Gen - 10 Sec
05085 Linkable Item Gen - 25 Sec
05085 Linkable Item Gen - 25 Sec
04142 Linkable Item Gen - 2 Min
04142 Linkable Item Gen - 2 Min




RipleyToday at 12:03 PM
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
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
can try encounter_delay at 300 and encounter_regen_interval at 60 for basically a spawn every 5 mins for the overworld generators


Line 31: Line 65:


so things will take 800 seconds to respawn, but the regen interval provides a small amount of rng/sync to it
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
with that generator, things will take a minimum of 800 seconds to respawn, and a maximum of 860 seconds


Line 45: Line 80:


RipleyToday at 12:37 PM
RipleyToday at 12:37 PM
set to 0
set to 0
regen that is
regen that is
whenever you don't want regen, its always 0
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
delay is for how long a profile can hold the slot it spawned after its been killed
DridToday at 12:41 PM
DridToday at 12:41 PM
noted on that. Ill clean up those other gens
noted on that. Ill clean up those other gens
RipleyToday at 12:41 PM
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
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


Line 57: Line 100:


GeneratorDestructionType = Generator's destruction
GeneratorDestructionType = Generator's destruction
GeneratorEndDestructionType = Generator's disabled
GeneratorEndDestructionType = Generator's disabled




GeneratorEndDestructionType is fired when Generator is Disabled
GeneratorEndDestructionType is fired when Generator is Disabled
disabling coming via event offs, day/night switches, time end reached     
disabling coming via event offs, day/night switches, time end reached     


Line 109: Line 154:


in the above link, the first four are static objects
in the above link, the first four are static objects
they never respawn and were pcapped in the static guid range
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  
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,  
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
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
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,  
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  
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
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 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
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
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]###
guids are always in a specific format, 0x7[LBID]###
lbid is that first four of loc, after that its incremental from 000
lbid is that first four of loc, after that its incremental from 000


Ripley12/09/2019
Ripley12/09/2019
so if you're in an area that has pcapped existing statics, you start +1 from the highest static
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
if you're in a completely barren area its 000
so like landblock ABCD is empty, the first guid is 0x7ABCD000
so like landblock ABCD is empty, the first guid is 0x7ABCD000


Line 138: Line 197:
   
   
Ripley12/09/2019
Ripley12/09/2019
yes, anything in instances is 0x70000000 to 0x7FFFFFFF
yes, anything in instances is 0x70000000 to 0x7FFFFFFF
it is scoped per landblock as Ziang says, so for ABCD, 0x7ABCD000  to 0x7ABCDFFF
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
if you get to FFF of a landblock, you've got bigger issues


Line 147: Line 209:


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>
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>
</sub>
</code>

Latest revision as of 03:13, 18 March 2024



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>