Oblivion:Ten Ancestors: Difference between revisions

From PRCLive 100% Speedrun Wiki
Jump to navigation Jump to search
(Created page with "Rumpus's work on Ten Ancestors quest: Rumpus — 2022-07-23 2:45 PM Did some looking into the Ten Ancestors quest. It seems pretty airtight without being able to glitch global values. Here are my formatted notes in case anyone wants to do more research without having to start from scratch. # Ayleid Research Experiments are conducted using Oblivion 1.2.0416 on Steam with OBSE 1.2 installed for the `GetBaseObject` command. ## Background Information * Each class of obje...")
 
m (wiki formatting)
Line 2: Line 2:
Rumpus — 2022-07-23 2:45 PM
Rumpus — 2022-07-23 2:45 PM
Did some looking into the Ten Ancestors quest. It seems pretty airtight without being able to glitch global values. Here are my formatted notes in case anyone wants to do more research without having to start from scratch.
Did some looking into the Ten Ancestors quest. It seems pretty airtight without being able to glitch global values. Here are my formatted notes in case anyone wants to do more research without having to start from scratch.
= Ayleid Research =


# Ayleid Research
Experiments are conducted using Oblivion 1.2.0416 on Steam with OBSE 1.2 installed for the <code>GetBaseObject</code> command.


Experiments are conducted using Oblivion 1.2.0416 on Steam with OBSE 1.2
installed for the `GetBaseObject` command.


## Background Information
== Background Information ==


* Each class of objects has a BaseID, whom all instances share.
* Each class of objects has a BaseID, whom all instances share.
* Each object in the world has a RefID, unique to that instance.
* Each object in the world has a RefID, unique to that instance.
* Objects generated at runtime have dynamically allocated RefIDs, prefixed with
* Objects generated at runtime have dynamically allocated RefIDs, prefixed with ‘ff’.
'ff'.
* Apparently BaseIDs can be dynamic too?
* Apparently BaseIDs can be dynamic too?
* Objects with different BaseIDs do not stack in the inventory.
* Objects with different BaseIDs do not stack in the inventory.


## Script Analysis


* The quest can be started by selling a `MS21AyleidStatue` to a merchant, or by
== Script Analysis ==
delivering one to Umbacano.
 
* Umbacano accepts any instance of `MS21AyleidStatue`.
* The quest can be started by selling a <code>MS21AyleidStatue</code> to a merchant, or by delivering one to Umbacano.
* When Umbacano gets his grubby mitts on a statue, he transmutes it into a
* Umbacano accepts any instance of <code>MS21AyleidStatue</code>.
`MS12AyleidStatueUmbacano`.
* When Umbacano gets his grubby mitts on a statue, he transmutes it into a <code>MS12AyleidStatueUmbacano</code>.
* Any `MS21AyleidStatue` sold to a merchant ends up in Umbacano's display case.
* Any <code>MS21AyleidStatue</code> sold to a merchant ends up in Umbacano’s display case.
* Quest stages are advanced by the dialogue topic MS21StatueGive
* Quest stages are advanced by the dialogue topic MS21StatueGive
* The global value `UmbacanoCount` is incremented by MS21StatueGive and
* The global value <code>UmbacanoCount</code> is incremented by MS21StatueGive and MS21statuescript.
MS21statuescript.
* Giving statues 3-6 set the stage to <code>UmbacanoCount + 50</code>. '''''Possible vulnerability.'''''
* Giving statues 3-6 set the stage to `UmbacanoCount + 50`. ***Possible
vulnerability.***
* Fame is added at Quest Stage 60.
* Fame is added at Quest Stage 60.
* If the last statue is sold instead of given, the quest is advanced to stage
* If the last statue is sold instead of given, the quest is advanced to stage 100 and no fame is earned.
100 and no fame is earned.
 
 
== Skull of Corruption Duping ==
 
Attempting to skull-dupe a <code>MS21AyleidStatue</code> produced one statue with a BaseID of <code>0002ab48</code> and a RefID of <code>ff000828</code> (the original legit statue), as well as another statue with a dynamic BaseID (ff000823) and a dynamic RefID (ff000827). Umbacano accepted the original statue, but not the duplicated one. Selling the duplicate does not trigger Jollring to deliver the letter and the duplicate does not end up in Umbacano’s display case.
 
Repeating the process with the legit statue produced a duplicate with a dynamic BaseID of <code>ff000830</code> and a dynamic RefID of <code>ff000834</code>. Interestingly, picking up and dropping the duplicates does not reallocate their dynamic BaseIDs. Could this potentially crash the game if repeated long enough to exhaust the FormID address space?
 
Skull-duping a skull-duplicate with BaseID <code>ff00084c</code> and dynamic RefID produced a statue with BaseID <code>ff00084c</code> and a new dynamic RefID.
 
Attempting to skull-dupe a <code>MS12AyleidStatueUmbacano</code> produced two statues, both with a BaseID of <code>000844c4</code> and the statue’s original RefID. They did not stack in the inventory; when dropping them, dropping the second erased the first from existance. Obviously Umbacano did not accept either one, and there is no legit way to obtain a <code>MS12AyleidStatueUmbacano</code> before turning in at least one statue so it could not possibly trigger Jollring to deliver the letter. Fencing the duplicates do not cause them to appear in Umbacano’s display case.
 
'''''TLDR''''' * Skull-duping a legit statue produces a new statue with a dynamic BaseID. * Dynamic BaseID statues are of no use for the quest. * Skull-duping a statue Umbacano already has creates a duplicate with an identical RefID. * Two statues with the same RefIDs cannot exist in the world at the same time, dropping one while the other is on the ground overwrites its existence. * Skull-duping a skull-duplicate produces a new statue with the same dynamic BaseID as the original.
 
 
== Scroll Duping ==
 
Attempting to scroll-dupe a <code>MS21AyleidStatue</code> produced a single statue with a BaseID of <code>0002ab48</code> and a dynamic RefID, the same as just dropping it. The same occured when trying to dupe a stack.


## Skull of Corruption Duping
Attempting to scroll-dupe a <code>MS12AyleidStatueUmbacano</code> produced a single statue with a BaseID of <code>000844c4</code> and the statue’s original RefID, the same as just dropping it. The same occured when trying to dupe a stack.


Attempting to skull-dupe a `MS21AyleidStatue` produced one statue with a BaseID
Scroll-duping a duplicate of a <code>MS21AyleidStatue</code> produced by skull-duping with dynamic BaseID <code>ff00084c</code> and dynamic RefID of <code>ff000855</code> produced two statues, each with the original BaseID and a new dynamic RefID (<code>ff000856</code> and <code>ff000857</code>). Neither was accepted by Umbacano.
of `0002ab48` and a RefID of `ff000828` (the original legit statue), as well as
another statue with a dynamic BaseID (ff000823) and a dynamic RefID (ff000827).
Umbacano accepted the original statue, but not the duplicated one. Selling the
duplicate does not trigger Jollring to deliver the letter and the duplicate does
not end up in Umbacano's display case.


Repeating the process with the legit statue produced a duplicate with a dynamic
'''''TLDR''''' * You cannot scroll-dupe a legit statue. * You cannot scroll-dupe a statue Umbacano already has. * You can scroll-dupe a duplicate created by skull-duping. * Scroll-duplicates of skull-duplicates stack, but are of no use for the quest.
BaseID of `ff000830` and a dynamic RefID of `ff000834`. Interestingly, picking
up and dropping the duplicates does not reallocate their dynamic BaseIDs. Could
this potentially crash the game if repeated long enough to exhaust the FormID
address space?


Skull-duping a skull-duplicate with BaseID `ff00084c` and dynamic RefID produced
a statue with BaseID `ff00084c` and a new dynamic RefID.


Attempting to skull-dupe a `MS12AyleidStatueUmbacano` produced two statues, both
== CS Data ==
with a BaseID of `000844c4` and the statue's original RefID. They did not stack
in the inventory; when dropping them, dropping the second erased the first from
existance. Obviously Umbacano did not accept either one, and there is no legit
way to obtain a `MS12AyleidStatueUmbacano` before turning in at least one statue
so it could not possibly trigger Jollring to deliver the letter. Fencing the
duplicates do not cause them to appear in Umbacano's display case.


***TLDR***
* Skull-duping a legit statue produces a new statue with a dynamic BaseID.
* Dynamic BaseID statues are of no use for the quest.
* Skull-duping a statue Umbacano already has creates a duplicate with an
identical RefID.
* Two statues with the same RefIDs cannot exist in the world at the same time,
dropping one while the other is on the ground overwrites its existence.
* Skull-duping a skull-duplicate produces a new statue with the same dynamic
BaseID as the original.


## Scroll Duping
=== Quest [MS21] The Collector ===


Attempting to scroll-dupe a `MS21AyleidStatue` produced a single statue with a
{| class="wikitable"
BaseID of `0002ab48` and a dynamic RefID, the same as just dropping it.
|-
The same occured when trying to dupe a stack.
! Stage
! Abv. Log Entry
! Result Script
|-
| 5
| EMPTY
| <code>jollringref.evp</code>
|-
| 10
| I’ve received a note from a man called Umbacano; he’s interested in the Ayleid statue I found and sold. I should find him in the Imperial City and see what he wants.
| <code>player.additem ms21umbacanonote 1</code>
|-
| 15
| I’ve spoken to a collector of Ayleid artifacts named Umbacano. He has offered to pay me handsomely for any Ayleid Ancestor statues that I bring him.
| NONE
|-
| 20
| Umbacano has offered to pay well for any more statues I find. I should look for more of them in Ayleid ruins, and bring them to him. If I can find all ten of the statues, he will pay me a large bonus.
| <code>if umbacanoCount == 10</code> <code>addtopic ms21AnotherTask</code> <code>setstage ms21 100</code> <code>endif</code>
|-
| 40
| Umbacano’s research has uncovered evidence that some of the Ayleid statues he is looking for may be hidden in these ruins: Moranda, Mackamentain, Wenyandawik, Ninendava, Fanacas.
| <code>ShowMap MackamentainMapMarker</code> <code>ShowMap WenyandawikMapMarker</code> <code>ShowMap NinendavaMapMarker</code> <code>ShowMap FanacasMapMarker</code>
|-
| 52
| I have brought Umbacano a second Ayleid statue.
| <code>player.additem gold001 500</code> <code>umbacanoref.moddisposition player 5</code>
|-
| 53
| I have brought Umbacano a third Ayleid statue.
| <code>player.additem gold001 500</code> <code>umbacanoref.moddisposition player 10</code>
|-
| 54
| I have brought Umbacano a fourth Ayleid statue.
| <code>player.additem gold001 500</code> <code>umbacanoref.moddisposition player 5</code>
|-
| 55
| I have brought Umbacano a fifth Ayleid statue.
| <code>player.additem gold001 500</code> <code>umbacanoref.moddisposition player 5</code>
|-
| 56
| I have brought Umbacano a sixth Ayleid statue.
| <code>player.additem gold001 500</code> <code>umbacanoref.moddisposition player 5</code>
|-
| 57
| I have brought Umbacano a seventh Ayleid statue.
| <code>player.additem gold001 500</code> <code>umbacanoref.moddisposition player 5</code>
|-
| 58
| I have brought Umbacano a eighth Ayleid statue. Only two more to go.
| <code>player.additem gold001 500</code> <code>umbacanoref.moddisposition player 5</code>
|-
| 59
| I have brought Umbacano a ninth Ayleid statue. If I bring him one more he will pay be a bonus of 5,000 gold.
| <code>player.additem gold001 500</code> <code>umbacanoref.moddisposition player 10</code>
|-
| 60*
| I have brought Umbacano all ten of the Ayleid statues. He was very pleased and rewarded me well.
| <code>player.additem gold001 5500</code> <code>umbacanoref.moddisposition player 25</code> <code>modpcfame 1</code> <code>setstage ms21 100</code>
|-
| 100*
| EMPTY
| NONE
|}


Attempting to scroll-dupe a `MS12AyleidStatueUmbacano` produced a single statue
with a BaseID of `000844c4` and the statue's original RefID, the same as just
dropping it. The same occured when trying to dupe a stack.


Scroll-duping a duplicate of a `MS21AyleidStatue` produced by skull-duping with
=== MS21StatueShow ===
dynamic BaseID `ff00084c` and dynamic RefID of `ff000855` produced two statues,
each with the original BaseID and a new dynamic RefID (`ff000856` and
`ff000857`). Neither was accepted by Umbacano.


***TLDR***
{| class="wikitable"
* You cannot scroll-dupe a legit statue.
|-
* You cannot scroll-dupe a statue Umbacano already has.
! Abrv. Response
* You can scroll-dupe a duplicate created by skull-duping.
! Add Topics
* Scroll-duplicates of skull-duplicates stack, but are of no use for the quest.
! Result Script
! Conditions
|-
| Ah! One of the Ten Ancestors! Hold it up […]
| MS21AyleidStatueTopic UmbacanoTopic
| <code>setstage ms21, 15</code>
| <code>(GetItemCount MS21AyleidStatue &gt; 0.00) AND (GetGlobalValue UmbacanoCount == 0.00) AND (GetStage MS21 == 0.00) AND (GetIsID Umbacano == 1.00)</code>
|}


## CS Data


### Quest [MS21] The Collector
=== MS21StatueGive ===


| Stage | Abv. Log Entry | Result Script |
{| class="wikitable"
| ----- | -------------- | ------------- |
|-
| 5    | EMPTY          |`jollringref.evp`|
! Abrv. Response
| 10  | I've received a note from a man called Umbacano; he's interested in the Ayleid statue I found and sold. I should find him in the Imperial City and see what he wants. | `player.additem ms21umbacanonote 1` |
! Add Topics
|  15  | I've spoken to a collector of Ayleid artifacts named Umbacano. He has offered to pay me handsomely for any Ayleid Ancestor statues that I bring him. | NONE |
! Result Script
| 20  | Umbacano has offered to pay well for any more statues I find. I should look for more of them in Ayleid ruins, and bring them to him. If I can find all ten of the statues, he will pay me a large bonus. | `if umbacanoCount == 10` `addtopic ms21AnotherTask` `setstage ms21 100` `endif` |
! Conditions
| 40  | Umbacano's research has uncovered evidence that some of the Ayleid statues he is looking for may be hidden in these ruins: Moranda, Mackamentain, Wenyandawik, Ninendava, Fanacas. | `ShowMap MackamentainMapMarker` `ShowMap WenyandawikMapMarker` `ShowMap NinendavaMapMarker` `ShowMap FanacasMapMarker` |
|-
| 52  | I have brought Umbacano a second Ayleid statue. | `player.additem gold001 500` `umbacanoref.moddisposition player 5` |
| You have exceeded my fondest hopes, my […]
| 53   | I have brought Umbacano a third Ayleid statue. | `player.additem gold001 500` `umbacanoref.moddisposition player 10` |
| MS21AnotherTask
| 54  | I have brought Umbacano a fourth Ayleid statue. | `player.additem gold001 500` `umbacanoref.moddisposition player 5` |
| <code>set umbacanoCount to umbacanoCount + 1</code> <code>player.removeitem ms21ayleidstatue, 1</code> <code>setstage ms21, 60</code>
| 55  | I have brought Umbacano a fifth Ayleid statue. | `player.additem gold001 500` `umbacanoref.moddisposition player 5` |
| <code>(GetItemCount MS21AyleidStatue &gt; 0.00) AND (GetGlobalValue UmbacanoCount == 9.00) AND (GetStage MS21 &gt;= 20.00) AND (GetStage MS21 &lt; 100.00) AND (GetIsID Umbacano == 1.00)</code>
|  56  | I have brought Umbacano a sixth Ayleid statue. | `player.additem gold001 500` `umbacanoref.moddisposition player 5` |
|-
| 57  | I have brought Umbacano a seventh Ayleid statue. | `player.additem gold001 500` `umbacanoref.moddisposition player 5` |
| You are doing very well in your treasure […]
| 58  | I have brought Umbacano a eighth Ayleid statue. Only two more to go. | `player.additem gold001 500` `umbacanoref.moddisposition player 5` |
| MS21AnotherTask
| 59  | I have brought Umbacano a ninth Ayleid statue. If I bring him one more he will pay be a bonus of 5,000 gold. | `player.additem gold001 500` `umbacanoref.moddisposition player 10` |
| <code>set umbacanoCount to umbacanoCount + 1</code> <code>player.removeitem ms21ayleidstatue, 1</code> <code>setstage ms21, 59</code>
| 60*  | I have brought Umbacano all ten of the Ayleid statues. He was very pleased and rewarded me well. | `player.additem gold001 5500` `umbacanoref.moddisposition player 25` `modpcfame 1` `setstage ms21 100` |
| <code>(GetItemCount MS21AyleidStatue &gt; 0.00) AND (GetGlobalValue UmbacanoCount == 8.00) AND (GetStage MS21 &gt;= 20.00) AND (GetStage MS21 &lt; 100.00) AND (GetIsID Umbacano == 1.00)</code>
| 100* | EMPTY          | NONE          |
|-
| I had never thought to see eight of the […]
| MS21AnotherTask
| <code>set umbacanoCount to umbacanoCount + 1</code> <code>player.removeitem ms21ayleidstatue, 1</code> <code>setstage ms21, 58</code>
| <code>(GetItemCount MS21AyleidStatue &gt; 0.00) AND (GetGlobalValue UmbacanoCount == 7.00) AND (GetStage MS21 &gt;= 20.00) AND (GetStage MS21 &lt; 100.00) AND (GetIsID Umbacano == 1.00)</code>
|-
| I am impressed. Only three more statues […]
| MS21AnotherTask
| <code>set umbacanoCount to umbacanoCount + 1</code> <code>player.removeitem ms21ayleidstatue, 1</code> <code>setstage ms21, 57</code>
| <code>(GetItemCount MS21AyleidStatue &gt; 0.00) AND (GetGlobalValue UmbacanoCount == 6.00) AND (GetStage MS21 &gt;= 20.00) AND (GetStage MS21 &lt; 100.00) AND (GetIsID Umbacano == 1.00)</code>
|-
| Beautiful. Exquisite. You have proven […]
| MS21AnotherTask
| <code>set umbacanoCount to umbacanoCount + 1</code> <code>player.removeitem ms21ayleidstatue, 1</code> <code>setstage ms21, 53</code>
| <code>(GetItemCount MS21AyleidStatue &gt; 0.00) AND (GetGlobalValue UmbacanoCount == 2.00) AND (GetStage MS21 &gt;= 20.00) AND (GetStage MS21 &lt; 100.00) AND (GetIsID Umbacano == 1.00)</code>
|-
| Ah, a second Ancestor. Excellent. I had […]
| NONE
| <code>set umbacanoCount to umbacanoCount + 1</code> <code>player.removeitem ms21ayleidstatue, 1</code> <code>setstage ms21, 52</code>
| <code>(GetItemCount MS21AyleidStatue &gt; 0.00) AND (GetGlobalValue UmbacanoCount == 1.00) AND (GetStage MS21 &gt;= 20.00) AND (GetStage MS21 &lt; 100.00) AND (GetIsID Umbacano == 1.00)</code>
|-
| Well done! Here is your payment as promised.
| NONE
| <code>set umbacanoCount to umbacanoCount + 1</code> <code>player.removeitem ms21ayleidstatue, 1</code> <code>set ms21.stageVar to umbacanoCount + 50</code> <code>setstage ms21, ms21.stageVar</code>
| <code>(GetItemCount MS21AyleidStatue &gt; 0.00) AND (GetGlobalValue UmbacanoCount &gt; 0.00) AND (GetStage MS21 &gt;= 20.00) AND (GetStage MS21 &lt; 100.00) AND (GetIsID Umbacano == 1.00)</code>
|-
| Wonderful! Remember, I will be happy to […]
| NONE
| <code>set umbacanoCount to umbacanoCount + 1</code> <code>player.removeitem ms21ayleidstatue, 1</code> <code>player.additem gold001 500</code> <code>setstage ms21 20</code>
| <code>(GetItemCount MS21AyleidStatue &gt; 0.00) AND (GetGlobalValue UmbacanoCount == 0.00) AND (GetStage MS21 == 15.00) AND (GetStage MS21 &lt; 100.00) AND (GetIsID Umbacano == 1.00)</code>
|}


### MS21StatueShow


| Abrv. Response | Add Topics | Result Script | Conditions |
=== NPCs ===
| -------------- | ---------- | ------------- | ---------- |
| Ah! One of the Ten Ancestors! Hold it up [...] | MS21AyleidStatueTopic UmbacanoTopic | `setstage ms21, 15` | `(GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 0.00) AND (GetStage MS21 == 0.00) AND (GetIsID Umbacano == 1.00)` |


### MS21StatueGive
{| class="wikitable"
|-
! Name
! BaseID
! RefID
! Attached Script
|-
| Umbacano
| <code>0002ab4e</code>
| <code>0002b445</code>
| UmbacanoScript
|-
| Jollring
| <code>0002ab4c</code>
| <code>0002b1a6</code>
| JollringScript
|}


| Abrv. Response | Add Topics | Result Script | Conditions |
| -------------- | ---------- | ------------- | ---------- |
| You have exceeded my fondest hopes, my [...] | MS21AnotherTask | `set umbacanoCount to umbacanoCount + 1` `player.removeitem ms21ayleidstatue, 1` `setstage ms21, 60` | `(GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 9.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)` |
| You are doing very well in your treasure [...] | MS21AnotherTask | `set umbacanoCount to umbacanoCount + 1` `player.removeitem ms21ayleidstatue, 1` `setstage ms21, 59` | `(GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 8.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)` |
| I had never thought to see eight of the [...] | MS21AnotherTask | `set umbacanoCount to umbacanoCount + 1` `player.removeitem ms21ayleidstatue, 1` `setstage ms21, 58` | `(GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 7.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)` |
| I am impressed. Only three more statues [...] | MS21AnotherTask | `set umbacanoCount to umbacanoCount + 1` `player.removeitem ms21ayleidstatue, 1` `setstage ms21, 57` | `(GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 6.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)` |
| Beautiful. Exquisite. You have proven [...] | MS21AnotherTask | `set umbacanoCount to umbacanoCount + 1` `player.removeitem ms21ayleidstatue, 1` `setstage ms21, 53` | `(GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 2.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)` |
| Ah, a second Ancestor. Excellent. I had [...] | NONE | `set umbacanoCount to umbacanoCount + 1` `player.removeitem ms21ayleidstatue, 1` `setstage ms21, 52` | `(GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 1.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)` |
| Well done! Here is your payment as promised. | NONE | `set umbacanoCount to umbacanoCount + 1` `player.removeitem ms21ayleidstatue, 1` `set ms21.stageVar to umbacanoCount + 50` `setstage ms21, ms21.stageVar` | `(GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount > 0.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)` |
| Wonderful! Remember, I will be happy to [...] | NONE | `set umbacanoCount to umbacanoCount + 1` `player.removeitem ms21ayleidstatue, 1` `player.additem gold001 500` `setstage ms21 20` | `(GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 0.00) AND (GetStage MS21 == 15.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)` |


### NPCs
=== Item Classes ===


| Name     | BaseID    | RefID      | Attached Script |
{| class="wikitable"
| -------- | ---------- | ---------- | --------------- |
|-
| Umbacano | `0002ab4e` | `0002b445` | UmbacanoScript  |
! Name
| Jollring | `0002ab4c` | `0002b1a6` | JollringScript  |
! Editor ID
! BaseID
! Weight
! Attached Script
|-
| Ayleid Statue
| MS21AyleidStatue
| <code>0002ab48</code>
| 3.0
| MS21statuescript
|-
| Ayleid Statue
| MS12AyleidStatueUmbacano
| <code>000844c4</code>
| 0.0
| MS21AyleidStatueUmbacanoScript
|-
| Staff of Worms
| MGStaffofWorms
| <code>0004a24e</code>
| 10.0
| NONE
|-
| Skull of Corruption
| DASkullCorruption
| <code>00027116</code>
| 10.0
| DASkullofCorruptionStaffScript
|-
| Beguiling Touch
| ScrollStandardCharmTouch1Novice
| <code>00084af1</code>
| 0.1
| NONE
|}


### Item Classes


| Name                | Editor ID                      | BaseID    | Weight | Attached Script                |
=== Item Instances ===
| ------------------- | ------------------------------- | ---------- | ------ | ------------------------------ |
| Ayleid Statue      | MS21AyleidStatue                | `0002ab48` |  3.0  | MS21statuescript              |
| Ayleid Statue      | MS12AyleidStatueUmbacano        | `000844c4` |  0.0  | MS21AyleidStatueUmbacanoScript |
| Staff of Worms      | MGStaffofWorms                  | `0004a24e` |  10.0  | NONE                          |
| Skull of Corruption | DASkullCorruption              | `00027116` |  10.0  | DASkullofCorruptionStaffScript |
| Beguiling Touch    | ScrollStandardCharmTouch1Novice | `00084af1` |  0.1  | NONE                          |


### Item Instances
{| class="wikitable"
|-
! Location Name
! Location Editor ID
! Base Editor ID
! Ref Editor ID
! RefID
|-
| Culotte
| Culotte
| MS21AyleidStatue
| NONE
| <code>0008440b</code>
|-
| Fanacas
| Fanacas
| MS21AyleidStatue
| NONE
| <code>00017378</code>
|-
| Necromancer’s Asylum
| Mackamentain03
| MS21AyleidStatue
| NONE
| <code>00033e59</code>
|-
| Moranda Abaspania
| Moranda03
| MS21AyleidStatue
| NONE
| <code>0005183b</code>
|-
| Ninendava
| Ninendava
| MS21AyleidStatue
| NONE
| <code>0008440a</code>
|-
| Vilverin Sel Sancremathi
| Vilverin04
| MS21AyleidStatue
| NONE
| <code>0008b5fd</code>
|-
| Welke Edesel
| Welke03
| MS21AyleidStatue
| NONE
| <code>00093463</code>
|-
| Wendelbek Sel Aran Mathmedi
| Wendelbek03
| MS21AyleidStatue
| NONE
| <code>0004c33e</code>
|-
| Wendir Nagasel
| Wendir02
| MS21AyleidStatue
| NONE
| <code>00093be1</code>
|-
| Wenyandawik Edesel
| Wenyandawik02
| MS21AyleidStatue
| NONE
| <code>0009611b</code>
|-
| Umbacano’s Private Quarters
| ICTalosPlazaUmbacanoManorUpstairs
| MS12AyleidStatueUmbacano
| MS21Statue1
| <code>0002b44b</code>
|-
| Umbacano’s Private Quarters
| ICTalosPlazaUmbacanoManorUpstairs
| MS12AyleidStatueUmbacano
| MS21Statue1A
| <code>0000855a</code>
|-
| Umbacano’s Private Quarters
| ICTalosPlazaUmbacanoManorUpstairs
| MS12AyleidStatueUmbacano
| MS21Statue2
| <code>0002b44c</code>
|-
| Umbacano’s Private Quarters
| ICTalosPlazaUmbacanoManorUpstairs
| MS12AyleidStatueUmbacano
| MS21Statue3
| <code>0002b44d</code>
|-
| Umbacano’s Private Quarters
| ICTalosPlazaUmbacanoManorUpstairs
| MS12AyleidStatueUmbacano
| MS21Statue4
| <code>0002b44e</code>
|-
| Umbacano’s Private Quarters
| ICTalosPlazaUmbacanoManorUpstairs
| MS12AyleidStatueUmbacano
| MS21Statue5
| <code>0002b44f</code>
|-
| Umbacano’s Private Quarters
| ICTalosPlazaUmbacanoManorUpstairs
| MS12AyleidStatueUmbacano
| MS21Statue6
| <code>0002b454</code>
|-
| Umbacano’s Private Quarters
| ICTalosPlazaUmbacanoManorUpstairs
| MS12AyleidStatueUmbacano
| MS21Statue7
| <code>0002b453</code>
|-
| Umbacano’s Private Quarters
| ICTalosPlazaUmbacanoManorUpstairs
| MS12AyleidStatueUmbacano
| MS21Statue8
| <code>0002b452</code>
|-
| Umbacano’s Private Quarters
| ICTalosPlazaUmbacanoManorUpstairs
| MS12AyleidStatueUmbacano
| MS21Statue9
| <code>0002b451</code>
|-
| Umbacano’s Private Quarters
| ICTalosPlazaUmbacanoManorUpstairs
| MS12AyleidStatueUmbacano
| MS21Statue10
| <code>0002b450</code>
|}


| Location Name              | Location Editor ID                | Base Editor ID          | Ref Editor ID | RefID      |
| --------------------------- | --------------------------------- | ------------------------ | ------------- | ---------- |
| Culotte                    | Culotte                          | MS21AyleidStatue        | NONE          | `0008440b` |
| Fanacas                    | Fanacas                          | MS21AyleidStatue        | NONE          | `00017378` |
| Necromancer's Asylum        | Mackamentain03                    | MS21AyleidStatue        | NONE          | `00033e59` |
| Moranda Abaspania          | Moranda03                        | MS21AyleidStatue        | NONE          | `0005183b` |
| Ninendava                  | Ninendava                        | MS21AyleidStatue        | NONE          | `0008440a` |
| Vilverin Sel Sancremathi    | Vilverin04                        | MS21AyleidStatue        | NONE          | `0008b5fd` |
| Welke Edesel                | Welke03                          | MS21AyleidStatue        | NONE          | `00093463` |
| Wendelbek Sel Aran Mathmedi | Wendelbek03                      | MS21AyleidStatue        | NONE          | `0004c33e` |
| Wendir Nagasel              | Wendir02                          | MS21AyleidStatue        | NONE          | `00093be1` |
| Wenyandawik Edesel          | Wenyandawik02                    | MS21AyleidStatue        | NONE          | `0009611b` |
| Umbacano's Private Quarters | ICTalosPlazaUmbacanoManorUpstairs | MS12AyleidStatueUmbacano | MS21Statue1  | `0002b44b` |
| Umbacano's Private Quarters | ICTalosPlazaUmbacanoManorUpstairs | MS12AyleidStatueUmbacano | MS21Statue1A  | `0000855a` |
| Umbacano's Private Quarters | ICTalosPlazaUmbacanoManorUpstairs | MS12AyleidStatueUmbacano | MS21Statue2  | `0002b44c` |
| Umbacano's Private Quarters | ICTalosPlazaUmbacanoManorUpstairs | MS12AyleidStatueUmbacano | MS21Statue3  | `0002b44d` |
| Umbacano's Private Quarters | ICTalosPlazaUmbacanoManorUpstairs | MS12AyleidStatueUmbacano | MS21Statue4  | `0002b44e` |
| Umbacano's Private Quarters | ICTalosPlazaUmbacanoManorUpstairs | MS12AyleidStatueUmbacano | MS21Statue5  | `0002b44f` |
| Umbacano's Private Quarters | ICTalosPlazaUmbacanoManorUpstairs | MS12AyleidStatueUmbacano | MS21Statue6  | `0002b454` |
| Umbacano's Private Quarters | ICTalosPlazaUmbacanoManorUpstairs | MS12AyleidStatueUmbacano | MS21Statue7  | `0002b453` |
| Umbacano's Private Quarters | ICTalosPlazaUmbacanoManorUpstairs | MS12AyleidStatueUmbacano | MS21Statue8  | `0002b452` |
| Umbacano's Private Quarters | ICTalosPlazaUmbacanoManorUpstairs | MS12AyleidStatueUmbacano | MS21Statue9  | `0002b451` |
| Umbacano's Private Quarters | ICTalosPlazaUmbacanoManorUpstairs | MS12AyleidStatueUmbacano | MS21Statue10  | `0002b450` |


### MS21Script
=== MS21Script ===


```
<pre>scn MS21Script
scn MS21Script


short foundCount ; how many statues has the player found?
short foundCount ; how many statues has the player found?
Line 195: Line 413:
if placeStatues == 1
if placeStatues == 1


if umbacanoLastCount < umbacanoCount
if umbacanoLastCount &lt; umbacanoCount
set umbacanoLastCount to umbacanoLastCount + 1
set umbacanoLastCount to umbacanoLastCount + 1


; enable the next statue in Umbacano's house
; enable the next statue in Umbacano's house
if umbacanoLastCount == 1
if umbacanoLastCount == 1
; message "DEBUG: enable statue 1"
; message &quot;DEBUG: enable statue 1&quot;
ms21statue1.enable
ms21statue1.enable
elseif umbacanoLastCount == 2
elseif umbacanoLastCount == 2
; message "DEBUG: enable statue 2"
; message &quot;DEBUG: enable statue 2&quot;
ms21statue2.enable
ms21statue2.enable
elseif umbacanoLastCount == 3
elseif umbacanoLastCount == 3
; message "DEBUG: enable statue 3"
; message &quot;DEBUG: enable statue 3&quot;
ms21statue3.enable
ms21statue3.enable
elseif umbacanoLastCount == 4
elseif umbacanoLastCount == 4
; message "DEBUG: enable statue 4"
; message &quot;DEBUG: enable statue 4&quot;
ms21statue4.enable
ms21statue4.enable
elseif umbacanoLastCount == 5
elseif umbacanoLastCount == 5
; message "DEBUG: enable statue 5"
; message &quot;DEBUG: enable statue 5&quot;
ms21statue5.enable
ms21statue5.enable
elseif umbacanoLastCount == 6
elseif umbacanoLastCount == 6
; message "DEBUG: enable statue 6"
; message &quot;DEBUG: enable statue 6&quot;
ms21statue6.enable
ms21statue6.enable
elseif umbacanoLastCount == 7
elseif umbacanoLastCount == 7
; message "DEBUG: enable statue 7"
; message &quot;DEBUG: enable statue 7&quot;
ms21statue7.enable
ms21statue7.enable
elseif umbacanoLastCount == 8
elseif umbacanoLastCount == 8
; message "DEBUG: enable statue 8"
; message &quot;DEBUG: enable statue 8&quot;
ms21statue8.enable
ms21statue8.enable
elseif umbacanoLastCount == 9
elseif umbacanoLastCount == 9
; message "DEBUG: enable statue 9"
; message &quot;DEBUG: enable statue 9&quot;
ms21statue9.enable
ms21statue9.enable
elseif umbacanoLastCount == 10
elseif umbacanoLastCount == 10
; message "DEBUG: enable statue 10"
; message &quot;DEBUG: enable statue 10&quot;
ms21statue10.enable
ms21statue10.enable
endif
endif
Line 238: Line 456:
endif
endif
endif
endif
end
end</pre>
```


### MS21statuescript
=== MS21statuescript ===


```
<pre>scn MS21statuescript
scn MS21statuescript


short found ; set to 1 when player first picks up the statue
short found ; set to 1 when player first picks up the statue
Line 277: Line 493:
set found to 1
set found to 1
set ms21.foundCount to ms21.foundCount + 1
set ms21.foundCount to ms21.foundCount + 1
if MS21Statue1.getdisabled == 0 && MS21.movestatue1 == 0 && MS21Statue1.stolen == 0 && getstage MS21 >= 20
if MS21Statue1.getdisabled == 0 &amp;&amp; MS21.movestatue1 == 0 &amp;&amp; MS21Statue1.stolen == 0 &amp;&amp; getstage MS21 &gt;= 20
MS21Statue1.disable
MS21Statue1.disable
set MS21.movestatue1 to 1
set MS21.movestatue1 to 1
Line 289: Line 505:
; immediately when player sells it, put it in Umbacano's house
; immediately when player sells it, put it in Umbacano's house
if playerHasMe == 0
if playerHasMe == 0
if toUmbacano == 0 && sellDay > 0
if toUmbacano == 0 &amp;&amp; sellDay &gt; 0
set ms21.sellCount to ms21.sellCount + 1
set ms21.sellCount to ms21.sellCount + 1
setstage MS21 5
setstage MS21 5
Line 299: Line 515:
endif
endif
endif
endif
end
end</pre>
```


### MS21AyleidStatueUmbacanoScript
=== MS21AyleidStatueUmbacanoScript ===


```
<pre>scn MS21AyleidStatueUmbacanoScript
scn MS21AyleidStatueUmbacanoScript


short stolen
short stolen
Line 318: Line 532:
begin OnDrop player
begin OnDrop player
set stolen to 1
set stolen to 1
end
end</pre>
```


### UmbacanoScript
=== UmbacanoScript ===


```
<pre>scn UmbacanoScript
scn UmbacanoScript


; used in MS21, MS22, MS27
; used in MS21, MS22, MS27
Line 331: Line 543:
begin gamemode
begin gamemode


if getstage ms27 == 80 && getiscurrentpackage MS27UmbacanoToThrone == 1 && getsitting == 3
if getstage ms27 == 80 &amp;&amp; getiscurrentpackage MS27UmbacanoToThrone == 1 &amp;&amp; getsitting == 3
setstage ms27 85
setstage ms27 85
endif
endif
Line 371: Line 583:


begin OnPackageStart MS27UmbacanoToThrone
begin OnPackageStart MS27UmbacanoToThrone
if sayCount < 2
if sayCount &lt; 2
Say MS27Voice
Say MS27Voice
set sayCount to 2
set sayCount to 2
Line 379: Line 591:


begin OnDeath
begin OnDeath
if getstage ms27 >= 60 && getstage ms27 < 80
if getstage ms27 &gt;= 60 &amp;&amp; getstage ms27 &lt; 80
setstage ms27 89
setstage ms27 89
endif
endif
Line 387: Line 599:
endif
endif


if getstagedone ms27 55 == 1 && getstage MS27 == 85
if getstagedone ms27 55 == 1 &amp;&amp; getstage MS27 == 85
setstage ms27 95
setstage ms27 95
endif
endif
Line 398: Line 610:
; complete MS21
; complete MS21
setstage MS21 100
setstage MS21 100
end
end</pre>
```


### JollringScript
=== JollringScript ===


```
<pre>scn JollringScript
scn JollringScript


; QUESTS:
; QUESTS:
Line 415: Line 625:


begin gamemode
begin gamemode
if escorting == 1 && getiscurrentpackage ICJollringEscortPlayerToUmbacano == 0
if escorting == 1 &amp;&amp; getiscurrentpackage ICJollringEscortPlayerToUmbacano == 0
evp
evp
; "failsafe"
; &quot;failsafe&quot;
if getiscurrentpackage ICJollringEscortPlayerToUmbacano == 0
if getiscurrentpackage ICJollringEscortPlayerToUmbacano == 0
set escorting to 0
set escorting to 0
Line 438: Line 648:
begin onPackageStart ICJollringSleep
begin onPackageStart ICJollringSleep
set greeting to 1
set greeting to 1
end
end</pre>
```

Revision as of 21:29, 14 March 2025

Rumpus's work on Ten Ancestors quest: Rumpus — 2022-07-23 2:45 PM Did some looking into the Ten Ancestors quest. It seems pretty airtight without being able to glitch global values. Here are my formatted notes in case anyone wants to do more research without having to start from scratch.

Ayleid Research

Experiments are conducted using Oblivion 1.2.0416 on Steam with OBSE 1.2 installed for the GetBaseObject command.


Background Information

  • Each class of objects has a BaseID, whom all instances share.
  • Each object in the world has a RefID, unique to that instance.
  • Objects generated at runtime have dynamically allocated RefIDs, prefixed with ‘ff’.
  • Apparently BaseIDs can be dynamic too?
  • Objects with different BaseIDs do not stack in the inventory.


Script Analysis

  • The quest can be started by selling a MS21AyleidStatue to a merchant, or by delivering one to Umbacano.
  • Umbacano accepts any instance of MS21AyleidStatue.
  • When Umbacano gets his grubby mitts on a statue, he transmutes it into a MS12AyleidStatueUmbacano.
  • Any MS21AyleidStatue sold to a merchant ends up in Umbacano’s display case.
  • Quest stages are advanced by the dialogue topic MS21StatueGive
  • The global value UmbacanoCount is incremented by MS21StatueGive and MS21statuescript.
  • Giving statues 3-6 set the stage to UmbacanoCount + 50. Possible vulnerability.
  • Fame is added at Quest Stage 60.
  • If the last statue is sold instead of given, the quest is advanced to stage 100 and no fame is earned.


Skull of Corruption Duping

Attempting to skull-dupe a MS21AyleidStatue produced one statue with a BaseID of 0002ab48 and a RefID of ff000828 (the original legit statue), as well as another statue with a dynamic BaseID (ff000823) and a dynamic RefID (ff000827). Umbacano accepted the original statue, but not the duplicated one. Selling the duplicate does not trigger Jollring to deliver the letter and the duplicate does not end up in Umbacano’s display case.

Repeating the process with the legit statue produced a duplicate with a dynamic BaseID of ff000830 and a dynamic RefID of ff000834. Interestingly, picking up and dropping the duplicates does not reallocate their dynamic BaseIDs. Could this potentially crash the game if repeated long enough to exhaust the FormID address space?

Skull-duping a skull-duplicate with BaseID ff00084c and dynamic RefID produced a statue with BaseID ff00084c and a new dynamic RefID.

Attempting to skull-dupe a MS12AyleidStatueUmbacano produced two statues, both with a BaseID of 000844c4 and the statue’s original RefID. They did not stack in the inventory; when dropping them, dropping the second erased the first from existance. Obviously Umbacano did not accept either one, and there is no legit way to obtain a MS12AyleidStatueUmbacano before turning in at least one statue so it could not possibly trigger Jollring to deliver the letter. Fencing the duplicates do not cause them to appear in Umbacano’s display case.

TLDR * Skull-duping a legit statue produces a new statue with a dynamic BaseID. * Dynamic BaseID statues are of no use for the quest. * Skull-duping a statue Umbacano already has creates a duplicate with an identical RefID. * Two statues with the same RefIDs cannot exist in the world at the same time, dropping one while the other is on the ground overwrites its existence. * Skull-duping a skull-duplicate produces a new statue with the same dynamic BaseID as the original.


Scroll Duping

Attempting to scroll-dupe a MS21AyleidStatue produced a single statue with a BaseID of 0002ab48 and a dynamic RefID, the same as just dropping it. The same occured when trying to dupe a stack.

Attempting to scroll-dupe a MS12AyleidStatueUmbacano produced a single statue with a BaseID of 000844c4 and the statue’s original RefID, the same as just dropping it. The same occured when trying to dupe a stack.

Scroll-duping a duplicate of a MS21AyleidStatue produced by skull-duping with dynamic BaseID ff00084c and dynamic RefID of ff000855 produced two statues, each with the original BaseID and a new dynamic RefID (ff000856 and ff000857). Neither was accepted by Umbacano.

TLDR * You cannot scroll-dupe a legit statue. * You cannot scroll-dupe a statue Umbacano already has. * You can scroll-dupe a duplicate created by skull-duping. * Scroll-duplicates of skull-duplicates stack, but are of no use for the quest.


CS Data

Quest [MS21] The Collector

Stage Abv. Log Entry Result Script
5 EMPTY jollringref.evp
10 I’ve received a note from a man called Umbacano; he’s interested in the Ayleid statue I found and sold. I should find him in the Imperial City and see what he wants. player.additem ms21umbacanonote 1
15 I’ve spoken to a collector of Ayleid artifacts named Umbacano. He has offered to pay me handsomely for any Ayleid Ancestor statues that I bring him. NONE
20 Umbacano has offered to pay well for any more statues I find. I should look for more of them in Ayleid ruins, and bring them to him. If I can find all ten of the statues, he will pay me a large bonus. if umbacanoCount == 10 addtopic ms21AnotherTask setstage ms21 100 endif
40 Umbacano’s research has uncovered evidence that some of the Ayleid statues he is looking for may be hidden in these ruins: Moranda, Mackamentain, Wenyandawik, Ninendava, Fanacas. ShowMap MackamentainMapMarker ShowMap WenyandawikMapMarker ShowMap NinendavaMapMarker ShowMap FanacasMapMarker
52 I have brought Umbacano a second Ayleid statue. player.additem gold001 500 umbacanoref.moddisposition player 5
53 I have brought Umbacano a third Ayleid statue. player.additem gold001 500 umbacanoref.moddisposition player 10
54 I have brought Umbacano a fourth Ayleid statue. player.additem gold001 500 umbacanoref.moddisposition player 5
55 I have brought Umbacano a fifth Ayleid statue. player.additem gold001 500 umbacanoref.moddisposition player 5
56 I have brought Umbacano a sixth Ayleid statue. player.additem gold001 500 umbacanoref.moddisposition player 5
57 I have brought Umbacano a seventh Ayleid statue. player.additem gold001 500 umbacanoref.moddisposition player 5
58 I have brought Umbacano a eighth Ayleid statue. Only two more to go. player.additem gold001 500 umbacanoref.moddisposition player 5
59 I have brought Umbacano a ninth Ayleid statue. If I bring him one more he will pay be a bonus of 5,000 gold. player.additem gold001 500 umbacanoref.moddisposition player 10
60* I have brought Umbacano all ten of the Ayleid statues. He was very pleased and rewarded me well. player.additem gold001 5500 umbacanoref.moddisposition player 25 modpcfame 1 setstage ms21 100
100* EMPTY NONE


MS21StatueShow

Abrv. Response Add Topics Result Script Conditions
Ah! One of the Ten Ancestors! Hold it up […] MS21AyleidStatueTopic UmbacanoTopic setstage ms21, 15 (GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 0.00) AND (GetStage MS21 == 0.00) AND (GetIsID Umbacano == 1.00)


MS21StatueGive

Abrv. Response Add Topics Result Script Conditions
You have exceeded my fondest hopes, my […] MS21AnotherTask set umbacanoCount to umbacanoCount + 1 player.removeitem ms21ayleidstatue, 1 setstage ms21, 60 (GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 9.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)
You are doing very well in your treasure […] MS21AnotherTask set umbacanoCount to umbacanoCount + 1 player.removeitem ms21ayleidstatue, 1 setstage ms21, 59 (GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 8.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)
I had never thought to see eight of the […] MS21AnotherTask set umbacanoCount to umbacanoCount + 1 player.removeitem ms21ayleidstatue, 1 setstage ms21, 58 (GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 7.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)
I am impressed. Only three more statues […] MS21AnotherTask set umbacanoCount to umbacanoCount + 1 player.removeitem ms21ayleidstatue, 1 setstage ms21, 57 (GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 6.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)
Beautiful. Exquisite. You have proven […] MS21AnotherTask set umbacanoCount to umbacanoCount + 1 player.removeitem ms21ayleidstatue, 1 setstage ms21, 53 (GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 2.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)
Ah, a second Ancestor. Excellent. I had […] NONE set umbacanoCount to umbacanoCount + 1 player.removeitem ms21ayleidstatue, 1 setstage ms21, 52 (GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 1.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)
Well done! Here is your payment as promised. NONE set umbacanoCount to umbacanoCount + 1 player.removeitem ms21ayleidstatue, 1 set ms21.stageVar to umbacanoCount + 50 setstage ms21, ms21.stageVar (GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount > 0.00) AND (GetStage MS21 >= 20.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)
Wonderful! Remember, I will be happy to […] NONE set umbacanoCount to umbacanoCount + 1 player.removeitem ms21ayleidstatue, 1 player.additem gold001 500 setstage ms21 20 (GetItemCount MS21AyleidStatue > 0.00) AND (GetGlobalValue UmbacanoCount == 0.00) AND (GetStage MS21 == 15.00) AND (GetStage MS21 < 100.00) AND (GetIsID Umbacano == 1.00)


NPCs

Name BaseID RefID Attached Script
Umbacano 0002ab4e 0002b445 UmbacanoScript
Jollring 0002ab4c 0002b1a6 JollringScript


Item Classes

Name Editor ID BaseID Weight Attached Script
Ayleid Statue MS21AyleidStatue 0002ab48 3.0 MS21statuescript
Ayleid Statue MS12AyleidStatueUmbacano 000844c4 0.0 MS21AyleidStatueUmbacanoScript
Staff of Worms MGStaffofWorms 0004a24e 10.0 NONE
Skull of Corruption DASkullCorruption 00027116 10.0 DASkullofCorruptionStaffScript
Beguiling Touch ScrollStandardCharmTouch1Novice 00084af1 0.1 NONE


Item Instances

Location Name Location Editor ID Base Editor ID Ref Editor ID RefID
Culotte Culotte MS21AyleidStatue NONE 0008440b
Fanacas Fanacas MS21AyleidStatue NONE 00017378
Necromancer’s Asylum Mackamentain03 MS21AyleidStatue NONE 00033e59
Moranda Abaspania Moranda03 MS21AyleidStatue NONE 0005183b
Ninendava Ninendava MS21AyleidStatue NONE 0008440a
Vilverin Sel Sancremathi Vilverin04 MS21AyleidStatue NONE 0008b5fd
Welke Edesel Welke03 MS21AyleidStatue NONE 00093463
Wendelbek Sel Aran Mathmedi Wendelbek03 MS21AyleidStatue NONE 0004c33e
Wendir Nagasel Wendir02 MS21AyleidStatue NONE 00093be1
Wenyandawik Edesel Wenyandawik02 MS21AyleidStatue NONE 0009611b
Umbacano’s Private Quarters ICTalosPlazaUmbacanoManorUpstairs MS12AyleidStatueUmbacano MS21Statue1 0002b44b
Umbacano’s Private Quarters ICTalosPlazaUmbacanoManorUpstairs MS12AyleidStatueUmbacano MS21Statue1A 0000855a
Umbacano’s Private Quarters ICTalosPlazaUmbacanoManorUpstairs MS12AyleidStatueUmbacano MS21Statue2 0002b44c
Umbacano’s Private Quarters ICTalosPlazaUmbacanoManorUpstairs MS12AyleidStatueUmbacano MS21Statue3 0002b44d
Umbacano’s Private Quarters ICTalosPlazaUmbacanoManorUpstairs MS12AyleidStatueUmbacano MS21Statue4 0002b44e
Umbacano’s Private Quarters ICTalosPlazaUmbacanoManorUpstairs MS12AyleidStatueUmbacano MS21Statue5 0002b44f
Umbacano’s Private Quarters ICTalosPlazaUmbacanoManorUpstairs MS12AyleidStatueUmbacano MS21Statue6 0002b454
Umbacano’s Private Quarters ICTalosPlazaUmbacanoManorUpstairs MS12AyleidStatueUmbacano MS21Statue7 0002b453
Umbacano’s Private Quarters ICTalosPlazaUmbacanoManorUpstairs MS12AyleidStatueUmbacano MS21Statue8 0002b452
Umbacano’s Private Quarters ICTalosPlazaUmbacanoManorUpstairs MS12AyleidStatueUmbacano MS21Statue9 0002b451
Umbacano’s Private Quarters ICTalosPlazaUmbacanoManorUpstairs MS12AyleidStatueUmbacano MS21Statue10 0002b450


MS21Script

scn MS21Script

short foundCount				; how many statues has the player found?
short sellCount					; how many statues has player sold?
short questCount				; how many statues has the player brought to Umbacano?
;short umbacanoCount		; how many statues does Umbacano possess?
short umbacanoLastCount	; used to trigger enabling of the statues
short startDay
short stageVar					; used to set the stage based on umbacanoCount
short stolen						; set to 1 if the player steals any of the statues he sold to Umbacano
short placeStatues			; set to 1 when it is time to update display case
float fQuestDelayTime		; for quest script timing
short movestatue1			; set to 1 when statue1 is moved into its case

begin gamemode
	if placeStatues == 1

		if umbacanoLastCount < umbacanoCount
			set umbacanoLastCount to umbacanoLastCount + 1

			; enable the next statue in Umbacano's house
			if umbacanoLastCount == 1
;				message "DEBUG: enable statue 1"
				ms21statue1.enable
			elseif umbacanoLastCount == 2
;				message "DEBUG: enable statue 2"
				ms21statue2.enable
			elseif umbacanoLastCount == 3
;				message "DEBUG: enable statue 3"
				ms21statue3.enable
			elseif umbacanoLastCount == 4
;				message "DEBUG: enable statue 4"
				ms21statue4.enable
			elseif umbacanoLastCount == 5
;				message "DEBUG: enable statue 5"
				ms21statue5.enable
			elseif umbacanoLastCount == 6
;				message "DEBUG: enable statue 6"
				ms21statue6.enable
			elseif umbacanoLastCount == 7
;				message "DEBUG: enable statue 7"
				ms21statue7.enable
			elseif umbacanoLastCount == 8
;				message "DEBUG: enable statue 8"
				ms21statue8.enable
			elseif umbacanoLastCount == 9
;				message "DEBUG: enable statue 9"
				ms21statue9.enable
			elseif umbacanoLastCount == 10
;				message "DEBUG: enable statue 10"
				ms21statue10.enable
			endif
		endif

		if umbacanoLastCount == umbacanoCount
			; all statues enabled
			set placeStatues to 0
			set fQuestDelayTime to 10
		endif
	endif
end

MS21statuescript

scn MS21statuescript

short found					; set to 1 when player first picks up the statue
short playerHasMe			; set to 1 when player has this item in inventory
short sellDay				; day the statue is sold (to time when it goes to Umbacano)
short toUmbacano			; set to 1 after Umbacano owns this statue

begin OnSell player
	set playerHasMe to 0
	set sellDay to gameDaysPassed
	return

;	set ms21.sellCount to ms21.sellCount + 1
;	setstage MS21 5
	; move to Umbacano's house (so player can't buy it right back)
;	set umbacanoCount to umbacanoCount + 1
;	set ms21.placeStatues to 1
;	set toUmbacano to 1
;	removeMe
end

begin OnSell		; generic block, we only get here if player wasn't the one selling (i.e. player was buying it)
	set sellDay to 0		; reset sellday if player buys it back before exiting barter menu
end

begin onAdd player
	; first time player finds this statue, mark it in ms21 script
	if found == 0
		if getquestrunning ms21 == 0
			startquest ms21
		endif
		set found to 1
		set ms21.foundCount to ms21.foundCount + 1
		if MS21Statue1.getdisabled == 0 && MS21.movestatue1 == 0 && MS21Statue1.stolen == 0 && getstage MS21 >= 20
			MS21Statue1.disable
			set MS21.movestatue1 to 1
			MS21Statue1A.enable
		endif
	endif
	set playerHasMe to 1
end

begin gamemode
	; immediately when player sells it, put it in Umbacano's house
	if playerHasMe == 0
		if toUmbacano == 0 && sellDay > 0
			set ms21.sellCount to ms21.sellCount + 1
			setstage MS21 5
			; move to Umbacano's house (so player can't buy it right back)
			set umbacanoCount to umbacanoCount + 1
			set ms21.placeStatues to 1
			set toUmbacano to 1
			removeMe
		endif
	endif
end

MS21AyleidStatueUmbacanoScript

scn MS21AyleidStatueUmbacanoScript

short stolen

; script on the statues in Umbacano's house

begin OnAdd player
	set MS21.stolen to 1
	set stolen to 1
end

begin OnDrop player
	set stolen to 1
end

UmbacanoScript

scn UmbacanoScript

; used in MS21, MS22, MS27
short sayCount

begin gamemode

if getstage ms27 == 80 && getiscurrentpackage MS27UmbacanoToThrone == 1 && getsitting == 3
	setstage ms27 85
endif

end

begin OnPackageStart MS21UmbacanoPlaceStatue1
	set MS21.fQuestDelayTime to .1
end

begin OnPackageDone MS21UmbacanoPlaceStatue1
	set MS21.placeStatues to 1
end


begin OnPackageStart MS21UmbacanoPlaceStatues
	set MS21.fQuestDelayTime to .1
end

begin OnPackageDone MS21UmbacanoPlaceStatues
	set MS21.placeStatues to 1
end

begin OnPackageStart MS27WaitAtNenalata
	additem LL2NPCWeaponBossCombDaggerLvl100 1
end

begin OnPackageStart MS27UmbacanoActivateCarvingWall
	set MS27CarvingWall.timer to Say MS27Voice
	MS27CarvingWall.activate umbacanoRef 1
end

begin OnPackageStart MS27UmbacanoWaitAtCarvingWall
	if sayCount == 0
		SayTo player MS27Voice
		set sayCount to 1
	endif
end

begin OnPackageStart MS27UmbacanoToThrone
	if sayCount < 2
		Say MS27Voice
		set sayCount to 2
	endif
end


begin OnDeath
	if getstage ms27 >= 60 && getstage ms27 < 80
		setstage ms27 89
	endif
	if getstage ms27 == 80
		; trigger undead attack so player can escape
		setstage ms27 84
	endif

	if getstagedone ms27 55 == 1 && getstage MS27 == 85
		setstage ms27 95
	endif

	if getstagedone ms27 86 == 1
		; turn off exterior minions when he dies as King
		Nenalata03Start.disable
	endif

	; complete MS21
	setstage MS21 100
end

JollringScript

scn JollringScript

; QUESTS:
; MS21
; MS22
; MS27

short escorting		; if 1, jollring will run his escort package
short greeting		; if 1, jollring will run his ambush/greet package

begin gamemode
	if escorting == 1 && getiscurrentpackage ICJollringEscortPlayerToUmbacano == 0
		evp
		; "failsafe"
		if getiscurrentpackage ICJollringEscortPlayerToUmbacano == 0
			set escorting to 0
		endif
	endif
end

begin onPackageEnd ICJollringEscortPlayerToUmbacano
	if escorting == 1
		umbacanoref.sayto player ms21Special
		set escorting to 0
	endif
end

begin onPackageEnd ICJollringEscortPlayerOut
	set escorting to 0
end


begin onPackageStart ICJollringSleep
	set greeting to 1
end