What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal
RebornBuddy Forums

Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

[Release] RebornBuddy64 Version 1.0.681 - DirectX11 / x64 bit compatible

BLM Enochian is always false.

Resource Table with Enochian On
struct: ResourceTable: { timer: 27395, timer2: 9025, offset_8: 3, offset_9: 107, offset_A: 65, offset_B: 35, offset_C: 1, offset_D: 0, offset_E: 1, offset_F: 1 }

Enochian is returning true when in Ley Lines

Were checking offset_e, can you confirm that its not 1 when you have it under some conditions?

Version 293

Code:
GetTo:
Fort Jobb teleport now works more reliably 
Add the elevator in the tempest

Kupo:
Update basic gladiator/paladin rotation
 
@mastahg

I'm not entirely sure what's going wrong, but I am not able to get the full properties list off of targetable and attackable objects after the patch today.

I am running:
Code:
ClearLog();

var s = Core.Me.CurrentTarget;
{
 Log(s.EnglishName);
 foreach (var prop in s.GetType().GetProperties())
 {
  Log("\t" + prop.Name + ": " + prop.GetValue(s));
 }
}

And getting:
Striking Dummy
OmenProjectionPtr: 0
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> ReadWriteMemoryException: Error while reading memory! Only part of a ReadProcessMemory or WriteProcessMemory request was completed, at addr: 1B8, Size: 8
at GreyMagic.ExternalProcessMemory.ReadByteBuffer(IntPtr addr, Void* buffer, Int32 count)
at GreyMagic.MemoryBase.Read[T](IntPtr addr)
at ff14bot.Objects.BattleCharacter.get_OmenMatrix()
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
at Driver.Run() in c:\Users\Omni\Game Data\FFXIV\RB64\Plugins\RebornConsole\Temp\dp2oytlb.0.cs:line 44
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args)
at HighVoltz.CodeDriver.CompileAndRun(String input) in C:\Users\Omni\Game Data\FFXIV\RB64\Plugins\RebornConsole\RebornConsole.cs:line 520

I have tried casting the objects to GameObjects (which they are by default), BattleCharacters, and Characters, with no luck. Targeting non-attackable things, like a SummoningBell, give the following (as a GameObject):
Summoning Bell
NpcId: 2000401
ObjectId: 6795271
IdLocation: 1
LuaString: EventObject:000002136CC8F900
IsValid: True
IsFateGone: False
CanAttack: False
Status: Unknown
FateId: 0
CombatReach: 2
IsBehind: False
IsFlanking: False
IsMe: False
Heading: 6.283137
SummonerGameObject:
SummonerObjectId: 3758096384
X: -722.4995
Y: 9.994568
Z: -836.4843
Location: <-722.4995, 9.994568, -836.4843>
IsVisible: True
EnglishName: Summoning Bell
IsTargetable: True
Name: Summoning Bell
CurrentHealth: 0
MaxHealth: 0
CurrentHealthPercent: 0
IsWithinInteractRange: False
Type: EventObject
VTable: 140696218634136
Pointer: 2279057746480

I believe the issue resides in `ff14bot.Objects.BattleCharacter.get_OmenMatrix()`, but that's just a guess from the stacktrace.
 
@mastahg

I'm not entirely sure what's going wrong, but I am not able to get the full properties list off of targetable and attackable objects after the patch today.

I am running:
Code:
ClearLog();

var s = Core.Me.CurrentTarget;
{
 Log(s.EnglishName);
 foreach (var prop in s.GetType().GetProperties())
 {
  Log("\t" + prop.Name + ": " + prop.GetValue(s));
 }
}

And getting:
Striking Dummy
OmenProjectionPtr: 0
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> ReadWriteMemoryException: Error while reading memory! Only part of a ReadProcessMemory or WriteProcessMemory request was completed, at addr: 1B8, Size: 8
at GreyMagic.ExternalProcessMemory.ReadByteBuffer(IntPtr addr, Void* buffer, Int32 count)
at GreyMagic.MemoryBase.Read[T](IntPtr addr)
at ff14bot.Objects.BattleCharacter.get_OmenMatrix()
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
at Driver.Run() in c:\Users\Omni\Game Data\FFXIV\RB64\Plugins\RebornConsole\Temp\dp2oytlb.0.cs:line 44
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args)
at HighVoltz.CodeDriver.CompileAndRun(String input) in C:\Users\Omni\Game Data\FFXIV\RB64\Plugins\RebornConsole\RebornConsole.cs:line 520

I have tried casting the objects to GameObjects (which they are by default), BattleCharacters, and Characters, with no luck. Targeting non-attackable things, like a SummoningBell, give the following (as a GameObject):
Summoning Bell
NpcId: 2000401
ObjectId: 6795271
IdLocation: 1
LuaString: EventObject:000002136CC8F900
IsValid: True
IsFateGone: False
CanAttack: False
Status: Unknown
FateId: 0
CombatReach: 2
IsBehind: False
IsFlanking: False
IsMe: False
Heading: 6.283137
SummonerGameObject:
SummonerObjectId: 3758096384
X: -722.4995
Y: 9.994568
Z: -836.4843
Location: <-722.4995, 9.994568, -836.4843>
IsVisible: True
EnglishName: Summoning Bell
IsTargetable: True
Name: Summoning Bell
CurrentHealth: 0
MaxHealth: 0
CurrentHealthPercent: 0
IsWithinInteractRange: False
Type: EventObject
VTable: 140696218634136
Pointer: 2279057746480

I believe the issue resides in `ff14bot.Objects.BattleCharacter.get_OmenMatrix()`, but that's just a guess from the stacktrace.

Not sure if thats something that was really ever supported. But I've added a fix, it checks if inside that function is null. Also you can use the DynamicString() extension method to get a nice table for objects and you can pass the name of fields to not print, and names of fields with default values are excluded. Both that function and your method are slow due to reflection so only use in debugging.
 
Not sure if thats something that was really ever supported. But I've added a fix, it checks if inside that function is null. Also you can use the DynamicString() extension method to get a nice table for objects and you can pass the name of fields to not print, and names of fields with default values are excluded. Both that function and your method are slow due to reflection so only use in debugging.
Right on, thank you. It appears to be pulling in all the properties again.
 
Thank you for the update! Busy with this as well if you can believe it! :) Thanks.
 
ShopExchangeCurrency.CanAfford is always returning 0

Code:
foreach (var i in SpecialShopManager.Items) {
   Log(i);
   Log(ShopExchangeCurrency.CanAfford(i));
}
Log(ConditionParser.ItemCount(25199));

output:
Code:
SpecialShopItem: { CurrencyCosts: [15, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Dzo Tenderloin, ], ItemIds: [27848, 0], Item0: Dzo Tenderloin, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [30, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [True, False], Items: [Dzo Tenderloin, ], ItemIds: [27848, 0], Item0: Dzo Tenderloin, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [15, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Robe Lettuce, ], ItemIds: [27845, 0], Item0: Robe Lettuce, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [30, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [True, False], Items: [Robe Lettuce, ], ItemIds: [27845, 0], Item0: Robe Lettuce, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [15, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Pixieberry, ], ItemIds: [27847, 0], Item0: Pixieberry, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [30, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [True, False], Items: [Pixieberry, ], ItemIds: [27847, 0], Item0: Pixieberry, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [15, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Kriollo Kukuru Bean, ], ItemIds: [27846, 0], Item0: Kriollo Kukuru Bean, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [30, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [True, False], Items: [Kriollo Kukuru Bean, ], ItemIds: [27846, 0], Item0: Kriollo Kukuru Bean, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [15, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [King Salmon, ], ItemIds: [27844, 0], Item0: King Salmon, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [30, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [True, False], Items: [King Salmon, ], ItemIds: [27844, 0], Item0: King Salmon, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [500, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Craftsman's Competence Materia VIII, ], ItemIds: [26735, 0], Item0: Craftsman's Competence Materia VIII, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [500, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Craftsman's Cunning Materia VIII, ], ItemIds: [26736, 0], Item0: Craftsman's Cunning Materia VIII, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [500, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Craftsman's Command Materia VIII, ], ItemIds: [26737, 0], Item0: Craftsman's Command Materia VIII, Item1: , SetSize: 1, TabIndex: 4 }
0
1769
 
Hey Mastahg, do you think there's a chance to get the ability to lower item quality and/or split stack in BagSlot?
 
Hey,
It seems like SpellData.BaseCooldown isnt working as intended at the moment.
SpellData.BaseCooldown is returning 0 at any time, which is interessting because SpellData.AdjustedCooldown is returning the correct values.
 
ShopExchangeCurrency.CanAfford is always returning 0

Code:
foreach (var i in SpecialShopManager.Items) {
   Log(i);
   Log(ShopExchangeCurrency.CanAfford(i));
}
Log(ConditionParser.ItemCount(25199));

output:
Code:
SpecialShopItem: { CurrencyCosts: [15, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Dzo Tenderloin, ], ItemIds: [27848, 0], Item0: Dzo Tenderloin, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [30, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [True, False], Items: [Dzo Tenderloin, ], ItemIds: [27848, 0], Item0: Dzo Tenderloin, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [15, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Robe Lettuce, ], ItemIds: [27845, 0], Item0: Robe Lettuce, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [30, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [True, False], Items: [Robe Lettuce, ], ItemIds: [27845, 0], Item0: Robe Lettuce, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [15, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Pixieberry, ], ItemIds: [27847, 0], Item0: Pixieberry, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [30, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [True, False], Items: [Pixieberry, ], ItemIds: [27847, 0], Item0: Pixieberry, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [15, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Kriollo Kukuru Bean, ], ItemIds: [27846, 0], Item0: Kriollo Kukuru Bean, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [30, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [True, False], Items: [Kriollo Kukuru Bean, ], ItemIds: [27846, 0], Item0: Kriollo Kukuru Bean, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [15, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [King Salmon, ], ItemIds: [27844, 0], Item0: King Salmon, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [30, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [True, False], Items: [King Salmon, ], ItemIds: [27844, 0], Item0: King Salmon, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [500, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Craftsman's Competence Materia VIII, ], ItemIds: [26735, 0], Item0: Craftsman's Competence Materia VIII, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [500, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Craftsman's Cunning Materia VIII, ], ItemIds: [26736, 0], Item0: Craftsman's Cunning Materia VIII, Item1: , SetSize: 1, TabIndex: 4 }
0
SpecialShopItem: { CurrencyCosts: [500, 0, 0], CurrencyTypes: [25199, 0, 0], CollectabilityRequired: [0, 0, 257], HqCurrencies: [False, False, False], HqRewards: [False, False], Items: [Craftsman's Command Materia VIII, ], ItemIds: [26737, 0], Item0: Craftsman's Command Materia VIII, Item1: , SetSize: 1, TabIndex: 4 }
0
1769

Looks like white scrips was missing from the specialcurrencymanager, please check with the latest version and let me know if the issue still exists

Hey Mastahg, do you think there's a chance to get the ability to lower item quality and/or split stack in BagSlot?

I'll take a look into it.

Hey,
It seems like SpellData.BaseCooldown isnt working as intended at the moment.
SpellData.BaseCooldown is returning 0 at any time, which is interessting because SpellData.AdjustedCooldown is returning the correct values.

I'll take a look but you probably should be using AdjustedCooldown if you care what it is for the player, and Cooldown to check what is left on the cooldown.



Version 297
Code:
PartyManager:
Partymanager will now return proper results while inside a trust.
Several methods, properties, and classes were refactored so its likely precompiled dll's that interacted with the partymanager will need to be recompiled for the update


SpecialCurrency.WhiteCraftersScrips added
SpecialCurrency.WhiteGatherersScrips added

BattleCharacter.Name will now read the name in the games memory for objects with npcid == 0, this will effect the npcs in trusts as well as chocobos, and possibly other areas as well.

Object.DynamicString() will now properly display intptr properties as hex
Object.DynamicString() will no longer display empty arrays
 
Hey Mashtag,
First of all thanks for adding Trust NPCs to the PartyManager!

But it seems like this is resulting in some "inconvenience" I would say.
We're currently filtering potential attackable NPCs while in a Party with "GameObjectManager.GetObjectsOfType<BattleCharacter>().Where(r => r.TaggerType == 2).ToList()".
The point is with Trust NPCs added to "PartyManager.IsInParty" NPCs attacked and "tagged" by our fellow Trust-Members in dungeons wont return 2 for "BattleCharacter.TaggerType,
they will either return 1 if we as a player hit them with some ability or return 0 if they weren't hit by the player yet.

Another thing I discovered while investigating this issue is, while we're in a Alliance-Raid, everything our Party tag is returning TaggerType 2 like it should be,
but everything that gets tagged by the two other partys will obviously result in 1 and Bosses will return TaggerType 0 everytime.

So in general it would be nice to determine if we're in a Trust-Party, a Alliance-Raid-Party or "Normal"-Party.
 
Last edited:
Hey Mashtag,
First of all thanks for adding Trust NPCs to the PartyManager!

But it seems like this is resulting in some "inconvenience" I would say.
We're currently filtering potential attackable NPCs while in a Party with "GameObjectManager.GetObjectsOfType<BattleCharacter>().Where(r => r.TaggerType == 2).ToList()".
The point is with Trust NPCs added to "PartyManager.IsInParty" NPCs attacked and "tagged" by our fellow Trust-Members in dungeons wont return 2 for "BattleCharacter.TaggerType,
they will either return 1 if we as a player hit them with some ability or return 0 if they weren't hit by the player yet.

Another thing I discovered while investigating this issue is, while we're in a Alliance-Raid, everything our Party tag is returning TaggerType 2 like it should be,
but everything that gets tagged by the two other partys will obviously result in 1 and Bosses will return TaggerType 0 everytime.

So in general it would be nice to determine if we're in a Trust-Party, a Alliance-Raid-Party or "Normal"-Party.

Hey again,

Seems like I've made a mistake yesterday while observing the TaggerType changes for Trust NPC Targets.
NPCs attacked/hit/tagged will change their TaggerType to 1 and not, like I stated in my previous post, 0.
I guess my hasty put together code for the RBConsole lead me, due to poor formatting, into some wrong conclusions.
At this point my guess is that you're reading TaggerType from an Offset, if that's not the case would it be possible to change TaggerType to actually return 2 when a Trust NPC or Alliance Raid Member has tagged something?
Sorry for bothering you.
 
Last edited:
While working on writing some Dragoon combat logic, I kept running into this issue with the combos, mainly that Chaos Thrust, Wheeling Trust and Fang and Claw aren't available in the ActionManager after use. Since the combo action order for Dragoon changed with the release of 5.0, that might have something to do with it?

Code:
LastSpell Name: True Thrust
Time left on Combo: 12.84901
---
LastSpell Name: Disembowel
Time left on Combo: 13.28636
---
LastSpell Name: EmptySpell <- Used Chaos Thrust here
Time left on Combo: 0
---
LastSpell Name: EmptySpell <- Used Wheeling Thrust here
Time left on Combo: 0
---
LastSpell Name: EmptySpell <- Used Fang and Claw here
Time left on Combo: 0
---
LastSpell Name: True Thrust
Time left on Combo: 12.91748
---
LastSpell Name: Vorpal Thrust
Time left on Combo: 12.78737
---
LastSpell Name: Full Thrust
Time left on Combo: 13.08021
---
LastSpell Name: EmptySpell <- Used Fang and Claw here
Time left on Combo: 0
---
LastSpell Name: EmptySpell <- Used Wheeling Thrust here
Time left on Combo: 0

Though not lv76 yet, at lv76 after performing a Wheeling Thrust => Fang and Claw combo or a Fang and Claw => Wheeling Thrust combo, the player receives the aura "Raiden Thrust Ready" which changes True Thrust into Raiden Thrust. Raiden Thrust acts as True Trust in that sense of combo actions so those should behave the same way in regards to combos.
 
Last edited:
While working on writing some Dragoon combat logic, I kept running into this issue with the combos, mainly that Chaos Thrust, Wheeling Trust and Fang and Claw aren't available in the ActionManager after use. Since the combo action order for Dragoon changed with the release of 5.0, that might have something to do with it?

Code:
LastSpell Name: True Thrust
Time left on Combo: 12.84901
---
LastSpell Name: Disembowel
Time left on Combo: 13.28636
---
LastSpell Name: EmptySpell <- Used Chaos Thrust here
Time left on Combo: 0
---
LastSpell Name: EmptySpell <- Used Wheeling Thrust here
Time left on Combo: 0
---
LastSpell Name: EmptySpell <- Used Fang and Claw here
Time left on Combo: 0
---
LastSpell Name: True Thrust
Time left on Combo: 12.91748
---
LastSpell Name: Vorpal Thrust
Time left on Combo: 12.78737
---
LastSpell Name: Full Thrust
Time left on Combo: 13.08021
---
LastSpell Name: EmptySpell <- Used Fang and Claw here
Time left on Combo: 0
---
LastSpell Name: EmptySpell <- Used Wheeling Thrust here
Time left on Combo: 0

Though not lv76 yet, at lv76 after performing a Wheeling Thrust => Fang and Claw combo or a Fang and Claw => Wheeling Thrust combo, the player receives the aura "Raiden Thrust Ready" which changes True Thrust into Raiden Thrust. Raiden Thrust acts as True Trust in that sense of combo actions so those should behave the same way in regards to combos.

These actions likely modify the action resource manager.

Please execute this
Code:
Log("struct: {0}",ActionResourceManager.CostTypesStruct);

and paste the output here.

Run it before and after casting each of the actions you had issues with and label them similarly so i can figure out what they are modifying.
 
These actions likely modify the action resource manager.

Please execute this
Code:
Log("struct: {0}",ActionResourceManager.CostTypesStruct);

and paste the output here.

Run it before and after casting each of the actions you had issues with and label them similarly so i can figure out what they are modifying.

I ran this four times, since I was now able to test the Combo action where True Thrust turns into Raiden Thrust if the positionals are met. I ran both combos in order, once with and once without positional triggers.
There's some discrepancies in the data when the SpellName is populated depending on the rotation.

True Thrust > Disembowel combo (no positionals) > True Thrust > Vorpal Thrust combo (no positionals)
Code:
// Idle, no action
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 0, timer2: 0, offset_8: 0, offset_9: 0, offset_A: 0, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Blood of the Dragon
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 18079, timer2: 1, offset_8: 159, offset_9: 70, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used True Thrust
lastspell name: True Thrust
combo time: 13.54395
struct: ResourceTable: { timer: 15154, timer2: 1, offset_8: 50, offset_9: 59, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Disembowel
lastspell name: Disembowel
combo time: 13.16446
struct: ResourceTable: { timer: 12444, timer2: 1, offset_8: 156, offset_9: 48, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Chaos Thrust
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 9794, timer2: 1, offset_8: 66, offset_9: 38, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Wheeling Thrust
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 17188, timer2: 1, offset_8: 36, offset_9: 67, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Fang and Claw (DID NOT DO POSITIONAL HERE, TRUE THRUST DID NOT UPGRADE TO RAIDEN THRUST)
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 23929, timer2: 1, offset_8: 121, offset_9: 93, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used True Thrust
lastspell name: True Thrust
combo time: 13.27134
struct: ResourceTable: { timer: 21184, timer2: 1, offset_8: 192, offset_9: 82, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Vorpal Thrust
lastspell name: Vorpal Thrust
combo time: 13.83857
struct: ResourceTable: { timer: 19062, timer2: 1, offset_8: 118, offset_9: 74, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Full Thrust
lastspell name: Full Thrust
combo time: 13.5773
struct: ResourceTable: { timer: 16199, timer2: 1, offset_8: 71, offset_9: 63, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Fang and Claw
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 22894, timer2: 1, offset_8: 110, offset_9: 89, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Wheeling Thrust (DID NOT DO POSITIONAL HERE, TRUE THRUST DID NOT UPGRADE TO RAIDEN THRUST)
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 28773, timer2: 1, offset_8: 101, offset_9: 112, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used True Thrust
lastspell name: True Thrust
combo time: 12.82479
struct: ResourceTable: { timer: 25266, timer2: 1, offset_8: 178, offset_9: 98, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

True Thrust > Disembowel combo (positionals) > True Thrust > Vorpal Thrust combo (positionals)
Code:
// Idle, no action
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 0, timer2: 0, offset_8: 0, offset_9: 0, offset_A: 0, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Blood of the Dragon
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 18318, timer2: 1, offset_8: 142, offset_9: 71, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used True Thrust
lastspell name: True Thrust
combo time: 13.44526
struct: ResourceTable: { timer: 16227, timer2: 1, offset_8: 99, offset_9: 63, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Disembowel
lastspell name: Disembowel
combo time: 13.47926
struct: ResourceTable: { timer: 12564, timer2: 1, offset_8: 20, offset_9: 49, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Chaos Thrust
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 9070, timer2: 1, offset_8: 110, offset_9: 35, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Wheeling Thrust
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 16433, timer2: 1, offset_8: 49, offset_9: 64, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Fang and Claw (DID POSITIONAL, TRUE THRUST UPGRADED TO RAIDEN THRUST)
lastspell name: Fang and Claw
combo time: 13.77715
struct: ResourceTable: { timer: 23364, timer2: 1, offset_8: 68, offset_9: 91, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Raiden Thrust
lastspell name: Raiden Thrust
combo time: 13.58409
struct: ResourceTable: { timer: 20467, timer2: 1, offset_8: 243, offset_9: 79, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Vorpal Thrust
lastspell name: Vorpal Thrust
combo time: 14.04773
struct: ResourceTable: { timer: 16939, timer2: 1, offset_8: 43, offset_9: 66, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Full Thrust
lastspell name: Full Thrust
combo time: 13.66067
struct: ResourceTable: { timer: 14039, timer2: 1, offset_8: 215, offset_9: 54, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Fang and Claw
lastspell name: Fang and Claw
combo time: 13.31007
struct: ResourceTable: { timer: 21160, timer2: 1, offset_8: 168, offset_9: 82, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Wheeling Thrust
lastspell name: Wheeling Thrust
combo time: 13.44318
struct: ResourceTable: { timer: 27296, timer2: 1, offset_8: 160, offset_9: 106, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Raiden Thrust(DID POSITIONAL, TRUE THRUST UPGRADED TO RAIDEN THRUST)
lastspell name: Raiden Thrust
combo time: 12.54093
struct: ResourceTable: { timer: 22805, timer2: 1, offset_8: 21, offset_9: 89, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

True Thrust > Vorpal Thrust combo (no positionals) > True Thrust > Disembowel combo (no positionals)
Code:
// Idle, no action
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 0, timer2: 0, offset_8: 0, offset_9: 0, offset_A: 0, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Blood of the Dragon
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 18452, timer2: 1, offset_8: 20, offset_9: 72, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used True Thrust
lastspell name: True Thrust
combo time: 13.18286
struct: ResourceTable: { timer: 15698, timer2: 1, offset_8: 82, offset_9: 61, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Vorpal Thrust
lastspell name: Vorpal Thrust
combo time: 13.48847
struct: ResourceTable: { timer: 13440, timer2: 1, offset_8: 128, offset_9: 52, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Full Thrust
lastspell name: Full Thrust
combo time: 13.45954
struct: ResourceTable: { timer: 11023, timer2: 1, offset_8: 15, offset_9: 43, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Fang and Claw
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 18727, timer2: 1, offset_8: 39, offset_9: 73, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Wheeling Thrust (DID NOT DO POSITIONAL HERE, TRUE THRUST DID NOT UPGRADE TO RAIDEN THRUST)
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 25456, timer2: 1, offset_8: 112, offset_9: 99, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used True Thrust
lastspell name: True Thrust
combo time: 13.48938
struct: ResourceTable: { timer: 23163, timer2: 1, offset_8: 123, offset_9: 90, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Disembowel
lastspell name: Disembowel
combo time: 13.56982
struct: ResourceTable: { timer: 20568, timer2: 1, offset_8: 88, offset_9: 80, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Chaos Thrust
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 17853, timer2: 1, offset_8: 189, offset_9: 69, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Wheeling Thrust
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 25061, timer2: 1, offset_8: 229, offset_9: 97, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Fang and Claw (DID NOT DO POSITIONAL HERE, TRUE THRUST DID NOT UPGRADE TO RAIDEN THRUST)
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 27760, timer2: 1, offset_8: 112, offset_9: 108, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used True Thrust
lastspell name: True Thrust
combo time: 12.54081
struct: ResourceTable: { timer: 24745, timer2: 1, offset_8: 169, offset_9: 96, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------
[CODE]

True Thrust > Vorpal Thrust combo (positionals) > True Thrust > Disembowel combo (positionals)
[CODE]
// Idle, no action 
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 0, timer2: 0, offset_8: 0, offset_9: 0, offset_A: 0, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Blood of the Dragon
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 17657, timer2: 1, offset_8: 249, offset_9: 68, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used True Thrust
lastspell name: True Thrust
combo time: 13.21965
struct: ResourceTable: { timer: 15077, timer2: 1, offset_8: 229, offset_9: 58, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Vorpal Thrust
lastspell name: Vorpal Thrust
combo time: 13.65621
struct: ResourceTable: { timer: 12890, timer2: 1, offset_8: 90, offset_9: 50, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Full Thrust
lastspell name: Full Thrust
combo time: 13.37919
struct: ResourceTable: { timer: 10278, timer2: 1, offset_8: 38, offset_9: 40, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Fang and Claw
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 17429, timer2: 1, offset_8: 21, offset_9: 68, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Wheeling Thrust (DID POSITIONAL, TRUE THRUST UPGRADED TO RAIDEN THRUST)
lastspell name: Wheeling Thrust
combo time: 13.52224
struct: ResourceTable: { timer: 22007, timer2: 1, offset_8: 247, offset_9: 85, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Raiden Thrust
lastspell name: Raiden Thrust
combo time: 13.39009
struct: ResourceTable: { timer: 18920, timer2: 1, offset_8: 232, offset_9: 73, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Disembowel
lastspell name: Disembowel
combo time: 13.69278
struct: ResourceTable: { timer: 15774, timer2: 1, offset_8: 158, offset_9: 61, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Chaos Thrust
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 12623, timer2: 1, offset_8: 79, offset_9: 49, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Wheeling Thrust
lastspell name: EmptySpell
combo time: 0
struct: ResourceTable: { timer: 19750, timer2: 1, offset_8: 38, offset_9: 77, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Fang and Claw (DID POSITIONAL, TRUE THRUST UPGRADED TO RAIDEN THRUST)
lastspell name: Fang and Claw
combo time: 13.4385
struct: ResourceTable: { timer: 26794, timer2: 1, offset_8: 170, offset_9: 104, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

// Used Raiden Thrust
lastspell name: Raiden Thrust
combo time: 12.64375
struct: ResourceTable: { timer: 23385, timer2: 1, offset_8: 89, offset_9: 91, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
-----------------------

As you can see, once Raiden Thrust is used, the LastSpell.Name property has no problem setting the data for Fang and Claw and Wheeling Thrust. But going from Disembowel to Chaos Thrust seems to be an issue regardless.

Does this data help?
 
@mastahg

A use case I am exploring for BaseCooldown vs AdjustedCooldown is to tell if a skill is oGCD or not. Reasons why we would want to know if they tick the GCD or not, is for weaving purposes. EX: I need to single weave an ability before the next GCD, or I need to weave two (double weave).

One of the methods @Illu thought of to check oGCD was to check SpellData.AdjustedCooldown != SpellData.BaseCoolDown, because only the GCD spells should be affected by Spell/Skill speed. oGCDs are set.

Another method may be,
Code:
            foreach (var spell in ActionManager.CurrentActions)
            {
                if(spell.Value.BaseCooldown.TotalMilliseconds != 2500)
                    _ogcdSpells.Add(spell.Value);
            }
2500ms being the base for all GCD spells by default.
 
@mastahg

A use case I am exploring for BaseCooldown vs AdjustedCooldown is to tell if a skill is oGCD or not. Reasons why we would want to know if they tick the GCD or not, is for weaving purposes. EX: I need to single weave an ability before the next GCD, or I need to weave two (double weave).

One of the methods @Illu thought of to check oGCD was to check SpellData.AdjustedCooldown != SpellData.BaseCoolDown, because only the GCD spells should be affected by Spell/Skill speed. oGCDs are set.

Another method may be,
Code:
            foreach (var spell in ActionManager.CurrentActions)
            {
                if(spell.Value.BaseCooldown.TotalMilliseconds != 2500)
                    _ogcdSpells.Add(spell.Value);
            }
2500ms being the base for all GCD spells by default.

Pretty sure you can just check the SpellType, SpellType.Ability should all be off the global.
 
Okay, so I tried doing just SpellType.Ability, and it leaves off SpellType.Spell, which makes sense. So I added those, but there were still oGCDs missing, so I I did !=SpellType.Weaponskill, which got almost all of them... But there are a few non-weaponskills that are GCD as well, such as Holy Spirit, Confiteor, and Clemency which are listed as SpellType.Spell.

There's got to be some boolean that can be checked for it it ticks the GCD, hasn't there? If BaseCooldown can't be fixed?
 
Hay,

It seems like they sperated ActionResourceManager.Arcanist.Aetherflow into Aetherflow for Scholar and Aetherflow for Summoner. So ActionResourceManager.Arcanist.Aetherflow is actually retuning the correct values for Summoner but not for Scholar anymore, the Scholar Offset seems to be Offset_A

ActionResourceManager.CostTypesStruct
Code:
struct: ResourceTable: { timer: 0, timer2: 3, offset_8: 0, offset_9: 0, offset_A: 3, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
struct: ResourceTable: { timer: 0, timer2: 2, offset_8: 0, offset_9: 0, offset_A: 2, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
struct: ResourceTable: { timer: 0, timer2: 1, offset_8: 0, offset_9: 0, offset_A: 1, offset_B: 0, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }

ActionResourceManager.Scholar.FaerieGauge is also not returning the correct values and seems to be Offset_B now
ActionResourceManager.CostTypesStruct
Code:
struct: ResourceTable: { timer: 0, timer2: 15360, offset_8: 0, offset_9: 0, offset_A: 0, offset_B: 60, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
struct: ResourceTable: { timer: 0, timer2: 20481, offset_8: 0, offset_9: 0, offset_A: 1, offset_B: 80, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
struct: ResourceTable: { timer: 0, timer2: 23040, offset_8: 0, offset_9: 0, offset_A: 0, offset_B: 90, offset_C: 0, offset_D: 0, offset_E: 0, offset_F: 0 }
 
Last edited:
Back
Top