Virtual_Swayy Posted September 21, 2020 Posted September 21, 2020 (edited) --------------------------------------------------------------------------------------------------------------------------------- *** WORK IN PROGRESS *** WHAT THIS IS NOW <-------------------------- in comparison to:- -----------------------------> WHAT IIT COULD BECOME ------------------------------------------------------------------------------------------------------------------------------ < WHAT THIS IS NOW > 1) INFORMATION: (TY@thelee) - Lots: From Simple Facts to Deep Theory 2) ORGANIZATION: (Not so much {yet}) - Area For Improvement - It's one long discussion - A Linked Table of Contents will solve 3) TECHNOLOGY RESOURCES: (new & few) *** WORKING *** - Mods n' Things (for Download): - {Target} in [Ranged] range: custom conditional. (TY@Noqn) - CUSTOM AI SCRIPTS (for Download): - Single-class Lifegiver Druid 4) LEARNING AIDS: (new & few)} - Visual Aids: I started making a few, like: - Self-Only Spells & Target Type - Conditionals & Sequences: Two Distinct Procedural Strategies5) MISC. - Even a Short Story! (which illustrates the self-only scripting dilema) * Glitch In the Matrix: A Tale of TWO IMMYS ---------------------------------------------------- TOP OF ORIGINAL POST ------------------------------------------------- Hi all, I'm loving this game so far (lvl 18 on my first playthrough on veteran/full party), and I'm loving the AI scripting also. To me it's like a game within the game. I've been having great success with it in a variety of contexts, but there are a few more advanced things I'm not having luck with. Can anyone let me know, how do you approach the following issues? If there is no direct setting for these things, do any of you clever scripters have work-arounds? Although some of these can be solved with mods I'm sure, some are procedural so would also be an issue with any mod as well (2 & 3 in particular). In general, I'm still getting achievements, so I'm scared to use mods. However, I'd also be interested to know how to set an AI mod up so it won't disable achievements (if possible), and if so, what you guys recommend in that regard. Thanks in advance, Virtual_Swayy P.S. I'd like to be able to ask additional scripting questions without making a new post. If you are into AI scripting, please feel free to follow this post even if you don't have a comment on these particular issues (I'm sure I'll have more questions to add as I advance my knowledge; it's guaranteed LOL). [EDIT: Scroll down a few comments and there are ADDITIONAL QUESTIONS POSTED FARTHER DOWN IN THE THREAD} ---------------------------- AI QUESTIONS: 1) Distance: Can i prioritize farthest, but in (ranged weapon) range? - (ex. arquebus shot to the farthest target that can be shot without moving) 2) In a block with multiple target types how does it interpret {target} conditional - (ex. target health {not} < 50% in a block with [1) smoke/invis > 2) shoot arquebus]) - Step one should be Smoke/SELF if > SELF {not} < 50,% but how does it (if at all) interpret the next command? * Will step two be shoot ENEMY if > ENEMY {not} below 50%? Or... * Will step two be shoot ENEMY if > SELF {not} below 50%? - e.g. Does each step in the block "RE-interpret" the conditional (or does step 1 set conditions for the entire block?) 3) Red hand's 2 shot before reload: (For the purposes of the AI "attack" command)Is it one attack or two? - (ex. If I do 1) atk > 2) atk, with red hand in a single block, will it: * (1)Shoot/(2)Shoot > End of Block > RELOAD or... * (1)Shoot/Shoot > RELOAD > (2) Shoot/Shoot > End of Block [EDIT: after reading/testing the comments below, I've realized 2) & 3) above are based on my incorrect assumption that blocks execute sequentially. That being said... two things: A) @thelee's analysis below reveals that question 2) is still relevant and can lead to some unexpected behavior, even when a block only chooses one action to execute in a multiple target type block (rather than executing actions sequentially) and B) The issue with Red Hand in question 3) is still relevant, although "end of block" in my example doesn't make sense, because each action would (should) be in its own block.] 4) Can I force a target change with no other changes? Meaning the same trigger conditions excluding current target? - (ex. to spread a fortitude debuff to one target per swing) * e.g. I was thinking something like (Sworn Enemy > prioritize {not) sworn enemy) [but I can't {negate} priorities can I?] 5) Movement/positioning in general seems a bit clumsy (at least at my current level of knowledge). Any ideas here would be appreciated. - (ex. moving into <2m range for an arquebus backstab/assassination without using a melee attack) Also, curious about how to deal with ascended casting, but I already posted that question here: Edited September 26, 2020 by Virtual_Swayy Clarifying ambiguity in my questions... 1
thelee Posted September 21, 2020 Posted September 21, 2020 (edited) 1 hour ago, Virtual_Swayy said: 1) Distance: Can i prioritize farthest, but in (ranged weapon) range? - (ex. arquebus shot to the farthest target that can be shot without moving) hm, i don't think this is possible. the only movement restriction that appears by default is the "can break engagement or not" checkbox. 1 hour ago, Virtual_Swayy said: 2) In a block with multiple target types how does it interpret {target} conditional - (ex. target health {not} < 50% in a block with [1) smoke/invis > 2) shoot arquebus]) - Step one should be Smoke/SELF if > SELF {not} < 50,% but how does it (if at all) interpret the next command? * Will step two be shoot ENEMY if > ENEMY {not} below 50%? Or... * Will step two be shoot ENEMY if > SELF {not} below 50%? - e.g. Does each step in the block "RE-interpret" the conditional (or does step 1 set conditions for the entire bock?) oof, that is a very good question. i think the conditional is sort of a poor-abstraction as to what's going on behind the scenes, because sometimes it just doesn't make sense. I think what happens is much closer to your last statement. E.G. if the block is "target health < 50" and you have as action 1. "restore target: self" and action 2 "divine mark, target: enemy, prioritize by: lowest deflection" with cooldown 10s. the fact that the two share the same conditional is meaningless - I think the UI grouping is a) purely a logical grouping for the user; b) to make it easier to gate common effects by a common cooldown and action priority. in practice, I suspect what ends up happening in the back end is that you create an action with UUID-1 "look at [target:self]; if [target:self].health < 50%, cast restore, activate cooldown TIMER-1" and then a second action UUID-2 "only if TIMER-1 not activated; look at [target:any enemy]; if [target:any enemy].health < 50%, add to [a list of targets]; choose target form [a list of targets] with [lowest deflection]. cast divine mark. activate cooldown TIMER-1." i think in cases where you add a non-targeted ability to a block that has a target (e.g. if in that same target health < 50 or whatever, you also added a "weapon switch" action), it effectively turns into a "always true" conditional, that just happens to share a logical group and cooldown timer with others that have actually have a relevant conditional. i think this could easily be tested more, but that's my best educated guess. edit: i crossed this all out, because upon reflection it contradicts something else i've been able to do with conditionals. i have to think about this more. 1 hour ago, Virtual_Swayy said: 3) Red hand's 2 shot before reload: (For the purposes of the AI "attack" command)Is it one attack or two? it's one attack. red hand's 2 shot before reload is rare enough that i suspect you might hit bugs if you try to script anything special about its behavior. 1 hour ago, Virtual_Swayy said: 4) Can I force a target change with no other changes? Meaning the same trigger conditions excluding current target? no, unfortunately, this is really only possible with inspirations/afflictions where you can negate a conditional about their existence. sometimes you can do "best target/threat" and that randomize a bit, or you can add a target priority that will have lots of ties and hope for a semi-random selection, but in situations like this I just effectively use an AI script to take care of hte first target for me, and then I have to micromanage successive targets (like with a long cooldown or a particularly restrictive conditional). 1 hour ago, Virtual_Swayy said: 5) Movement/positioning in general seems a bit clumsy (at least at my current level of knowledge). Any ideas here would be appreciated. get a mod? Edited September 21, 2020 by thelee 1 1
thelee Posted September 21, 2020 Posted September 21, 2020 (edited) 2 hours ago, Virtual_Swayy said: 2) In a block with multiple target types how does it interpret {target} conditional - (ex. target health {not} < 50% in a block with [1) smoke/invis > 2) shoot arquebus]) - Step one should be Smoke/SELF if > SELF {not} < 50,% but how does it (if at all) interpret the next command? * Will step two be shoot ENEMY if > ENEMY {not} below 50%? Or... * Will step two be shoot ENEMY if > SELF {not} below 50%? - e.g. Does each step in the block "RE-interpret" the conditional (or does step 1 set conditions for the entire block?) ok, i've been busy at work so i can't really test this in-game, but after some reflection, here's my best explanation that is consistent with what i've done in the past. i think what happens is that the game is checking all the conditionals in order of priority (so if a conditional is "target" it is looking at all possible targets, ally or enemy). if a block matches a conditional, it evaluates each ability in order, and passes it a list of targets that met the conditional, filtered by target type, and ordered by priority. The only exception is "target type: self" which always passes the target check targeting yourself. so here's an example, semi-nonsensical block (using my own conditional to be illustrative): conditional: target health < 50% cooldown: 10s abilities: cast:Restore, target type: ally or self, prioritize by: lowest health cast:Holy Radiance, target type:self, prioritize by: lowest health cast:Divine Mark, target type: enemy, prioritize by: highest health so if in a fight, let's say some silly enemy casts delayed fireball, and it explodes and puts enemies A into near death and B into bloodied and party members Xoti into near death, Eder into bloodied, but You are still healthy. The game checks the conditional and gets a list of targets, e.g. [A, B, Xoti, Eder]. Because it has a non-zero number of targets, it moves to the abilities list. It checks against ability #1 and sees whether anything is possible. Restore gets as valid targets ordered in priority [Xoti, Eder]. so it'd cast restore on xoti. Let's say you don't have a restore available. It moves to ability #2 and sees whether anything is possible. Now you get Holy Radiance cast on self, which always has a valid target, so you'd get Holy Radiance cast (even though you're healthy). Let's say you already have Holy Radiance used. Then you get the final slot, which is Divine Mark cast on [B, A] in order, which would mean Divine Mark cast on B. So I believe you're right in the sense that the meaning of "target (not) <50%" changes from ability to ability, but really what's happening is that the game tosses a list of *all* possible targets to the ability, and the ability target type and ordering is responsible for filtering it down to a non-empty list (and if it's empty, the ability is skipped, unless it's target:self targeting). Ordinarily we're not mixing ally/self target types and enemy target types in the ability lists so this ambiguity doesn't frequently crop up. So for your example, I think what that means is that you would use Smoke/Invisible as soon as any target exists with {not} <50% health, regardless of what your own health is. If you don't have smoke/invis avilable, then you would shoot you arquebus at one of the targets with {not} less than 50% health, prioritized by your priority selection. This is my best guess, consistent with how I've used scripting in the past. Notably IIRC the default priest-cautious scripts hae two separate healing blocks, one that conditions on target health, and another on self health, simply because of how generous the self-targeting spell cast rules are, so either the default scripts (or the copy-edits I made, I forget which) want to make sure you're not just casting e.g. consecrated ground when you're out of range of anyone who's actually hurt. edit: this would explain why my wizard script of "target: is spellcaster -> cast arcane reflection" is basically equivalent to "always true -> cast arcane reflection". from the perspective of the game my party always has a spellcaster (the wizard) and there's nothing in the ability list to further filter to enemies only, only a self-cast that is always valid. Edited September 21, 2020 by thelee 2
Virtual_Swayy Posted September 21, 2020 Author Posted September 21, 2020 (edited) Wow @thelee thanks for taking the time to write that super thorough reply. It's nice to see this is a community where experienced players give meaningful help to nublets like me. Much appreciated! 2 hours ago, thelee said: oof, that is a very good question. i think the conditional is sort of a poor-abstraction as to what's going on While you were replying I tested this and realized I was suffering from a much larger misunderstanding... that blocks (don't) execute sequentially, they operate as a "choose one" so that the block processes until ONE action triggers, then the block ends (which is hella weird and seems semi-useless). In a procedure like that it (probably) wouldn't ever have to "RE-interpret" the conditional, because it only applies it to the one action that fires. This one thing I misunderstood is probably the cause of 90% of the failure in my current scripts. Looks like I need to go back and code it as "one acton per block" to have any reliable sequencing whatsoever. [EDIT: Crossed out the above sentence because after testing @thelee's theory on my {IF target < 50% health, THEN Smoke} example. His prediction appears to be correct (meaning that a "self" target type doesn't always apply "self" to a {target:} conditional), which calls into question my simplistic explanation above. See also (above), his wizard script example of {IF target = spellcaster, THEN Arcane reflection} for the opposite example (self target applying self conditional, even when it doesn't make sense to). 2 hours ago, thelee said: it's one attack. red hand's 2 shot before reload is rare enough that i suspect you might hit bugs if you try to script anything special about its behavior. Well, all i really want to do is get my mindstalker cipher to invis-atk two times (immediately) for a double assassinate (one with each back-to-back red hand shot) to get ascended before his casting blocks execute. What would you think about just 4 blocks in a row at the top of combat on long cooldown? 1) SECOND WIND if < 50% no CD (to ensure self heal no matter what) ----------- 1st get_ascend block(s) (once per fight)----- 2) Smoke CD 120 3) Attack CD 120 4) Smoke CD 120 5) Attack CD 120 ---------- always available after 1st get_ascended executes--------- 5) PAIN BLOCK if target{ally} IF < 50% AND no robust - no CD (to ensure allied heal when ascended) ----------1st ascended spam (once per fight)----- 6+) DISINTEGRATE SPAM if > 90 focus CD 120 (i use one per block; separating targets by health (not under 90, 75-90, 50-75, etc...) [any other thoughts on ensuring one disintegrate per target?) ----------- 2nd get_ascend block(s) (once per fight)----- cont.) ... attack blocks to build ascended again; all CD 120 .... - I'm unsure how to make this second focus build block work, but always true CD 120 should do it right?) [EDIT: after testing this seems to work] ----------2nd ascended spam (once per fight)----- cont.) .... ascended spam blocks again ----------------- end) Auto attack since 2 ascendeds is probably the whole fight You're saying step two would just do one shot right? so it should work? Also, I read that you can only interrupt reloading manually, so if I modified it to take both shots at once (invis assassinate > regular shot, so 1)smoke 2) shoot 3)shoot 4) smoke, etc...]will I always reload after 3) but before 4) regardless of the scripting? 2 hours ago, thelee said: get a mod? Which one would you recommend? And should I wait until I get all achievements or will it not disable them? Thanks again in advance for your time, Virtual_Swayy Edited September 21, 2020 by Virtual_Swayy
thelee Posted September 21, 2020 Posted September 21, 2020 3 minutes ago, Virtual_Swayy said: 2) Smoke CD 120 3) Attack CD 120 4) Smoke CD 120 5) Attack CD 120 i don't have much experience with scripting the attack command, i think the biggest risk here is that there's no way to do a delay, so assuming that this is a "always true" conditional, what could happen is that you do smoke, then you trigger an attack, but before your character has a chance to do an attack, another smoke is triggered, and then you do an attack. i honestly don't know. this is something that i think you basically have to test yourself to see if it works. if it works, great. if it doesn't, maybe you could gate #4 and #5 on having a target with <100% health (which would happen after 2 and 3, assuming this all happens at the start of a fight). 6 minutes ago, Virtual_Swayy said: 6+) DISINTEGRATE SPAM if > 90 focus CD 120 (i use one per block; separating targets by health (not under 90, 75-90, 50-75, etc...) [any other thoughts on ensuring one disintegrate per target?) probably i would choose different priorities for the target, e.g. nearest target, lowest health, lowest fortitude, hoping that they apply to different enemies. you could also try "best threat" or whatever that is, that might be semi-smart targeting. 1 1
thelee Posted September 21, 2020 Posted September 21, 2020 8 minutes ago, Virtual_Swayy said: Which one would you recommend? And should I wait until I get all achievements or will it not disable them? oh yeah, this one: i'm not very familiar with mods and generally don't use them. i'm like the worst person to ask. i do know that there has been some "full AI scripting" mod or two out there that greatly expands what one is capable of. In some of my more frustrated moments, this is the mod I most contemplate actually installing. (In the past I've used a few bug fixing mods.) I actually don't know about achievement-disabling. Normally I care about this a lot, even if i have all achievements, because it suggests to me I'm doing something I shouldn't :). But I clearly didn't have much of a problem of using a few bug fixing mods in the past. So maybe not. Again, I'm like the worst person to ask on this front 2
Virtual_Swayy Posted September 21, 2020 Author Posted September 21, 2020 (edited) On 9/21/2020 at 2:48 PM, thelee said: that you do smoke, then you trigger an attack, but before your character has a chance to do an attack, another smoke That's def what it would do I think but the idea behind the CD 120 on almost everything is that it limits it to one trigger per battle, so essentially after it triggers that smoke once, it's "dead" for the rest of the fight. I tried it once just now and it SEEMS to work. I'll test more though. The fight didn't last long enough to get to the second focus build/ascend blocks. [EDIT: The thought above nowhere near as simple as this indicates. The precise meaning (to the AI) of the deceptively complicated statement "before you have a chance to attack" is explored in FAR greater detail below. For more info see below, 1) thelee's post with the Forbidden Fist scripting example and 2) the part of my reply that talks about the AI "Commit Decision" versus the AI "Execution Time"] - @Noqn you would probably dig that discussion. On 9/21/2020 at 2:48 PM, thelee said: probably i would choose different priorities for the target, e.g. nearest target, lowest health, lowest fortitude, hoping that they apply to different enemies. you could also try "best threat" or whatever that is, OK nice! I can actually stack this idea with mine, since your tip is priority based and my way is conditional. I could make this into a 4 (health range conditions) X # (of priorities) matrix of possible targets. That noqcould really dial in the "one disintegrate per target" ascended spam quite well. Def a good tip, thanks! On 9/21/2020 at 2:33 PM, thelee said: This is my best guess, consistent with how I've used scripting in the past. I definitely think you are right. a lot of my question 2) was based on my misunderstanding of how the blocks (don't) execute sequentially (that I described in the post above, which I wrote while you were writing yours LOL) On 9/21/2020 at 2:50 PM, thelee said: i'm not very familiar with mods and generally don't use them. NP. I'd rather not use them myself, at least not until all my Berath's Blessings are complete. I'm guessing a lot of your expertise is BECAUSE you don't mod, so you've had to be creative with work-arounds and test a lot of things. Plus... you've already been more helpful than I could've asked for! That being said... I might want to use them later, so.... ANYONE ELSE HAVE AI SCRIPTING MOD EXPERTISE/RECOMMENDATIONS TO SHARE? Again, THANKS @thelee !!!! Your super thoughtful and detailed replies are of great assistance to me. I'm definitely digging scripting as its own mini-game, so I'm sure I'm 'bout to get all up in it LOL. Mind if I tag you in any future scripting questions I have? Edited September 23, 2020 by Virtual_Swayy 1
Virtual_Swayy Posted September 21, 2020 Author Posted September 21, 2020 Oh... and forgot to say.... 46 minutes ago, thelee said: for your example, I think what that means is that you would use Smoke/Invisible as soon as any target exists with {not} <50% health Absolutely. Tested this and your guess is 100% correct (even though that is super weird behavior for a self target conditional). Due to your advice this conditional is now scrapped and replaced with an Always True CD 120 ("once per fight") smoke, which seems to be working. Excellent analysis!
Noqn Posted September 21, 2020 Posted September 21, 2020 *takes notes* Awesome thread, many thanks @thelee! 4 hours ago, Virtual_Swayy said: 1) Distance: Can i prioritize farthest, but in (ranged weapon) range? - (ex. arquebus shot to the farthest target that can be shot without moving) Strangely there's a conditional that does exactly this, but for some reason isn't exposed to to behavior editor... If you're ok with mods, I did a quick implementation of it: ai_is_in_range.7z Mods do not disable Achievements btw, so you are safe. I recommend checking out the More Custom AI Conditions mod. Though it does not implement the abovementioned conditional, it has some incredible Quality of Life stuff such as a "Is Focus is at Maximum" conditional for Ciphers which might be helpful for the Ascendant? 1 1
Virtual_Swayy Posted September 22, 2020 Author Posted September 22, 2020 (edited) Here are a couple of additional issues I've had trouble with... @thelee, @Noqn, or anyone that has time to answer. Thanks! ---------- ADDITIONAL QUESTIONS ----------- 6 ) Is there anyway to make a point blank AoE (radius from caster) heal, that only allows target type self, trigger off low health of an ally - (ex. Target < 25% health / cast Nature's Balm / Self (only one allowed) / Greatest # Allies) * I want to cast it when anyone is low, not just the druid casting it. Is it possible? 7 ) How can I reliably switch weapons that give [+ {spell type} power levels] before casting spells of that type - (ex. Druid equip [Spine of Thicket Green] bf Rejuvenation casts and [Lord Darren's Voulge] before storm casts * since each block only executes one action, the weapon swap can't be "grouped" with the spell right? * Any way to work around this? Simply matching up the conditionals in adjacent blocks seems error-prone. 8 ) Chants(action): Not really sure how this works or what it does? - I have 4 Chant actions in the behavior editor (1 through 4). - All of them have no phrases and are named "Missing String -1" - Not sure what to make of this? Edited September 22, 2020 by Virtual_Swayy Typos!
thelee Posted September 22, 2020 Posted September 22, 2020 (edited) 14 hours ago, Virtual_Swayy said: 6 ) Is there anyway to make a point blank AoE (radius from caster) heal, that only allows target type self, trigger off low health of an ally by default, this is not really possible. as someone who has played lots of priests, this is my curse (holy radiance and consecrated grounds are the biggest AI scripting misses here). 14 hours ago, Virtual_Swayy said: 7 ) How can I reliably switch weapons that give [+ {spell type} power levels] before casting spells of that type - (ex. Druid equip [Spine of Thicket Green] bf Rejuvenation casts and [Lord Darren's Voulge] before storm casts * since each block only executes one action, the weapon swap can't be "grouped" with the spell right? * Any way to work around this? Simply matching up the conditionals in adjacent blocks seems error-prone. the only thing I can think of is to preface all rejuvenation and "spine of thicket green" effects with the same conditional (e.g. self: health < 50%) and preface all storm and "lord darren's voulge" effects with a different, exclusive conditional (e.g. self: health > 50%). then you could have your weapon switch be the top conditional block and have a cooldown of 1s so your character always switches to it if needed before doing anything else. (the trick here is that the conditionals have to be truly exclusive, even when considering target types of the abilities. for that reason i think "self" conditionals are the easiest since there's no ambiguity about the target) unfortunately, this is not ideal, but what you're suggesting is probably too sophisticated for vanilla AI scripting. 14 hours ago, Virtual_Swayy said: 8 ) Chants(action): Not really sure how this works or what it does? neither do i. chanters are the one class I don't AI script at all, just autoattack. Edited September 22, 2020 by thelee 1
Virtual_Swayy Posted September 22, 2020 Author Posted September 22, 2020 (edited) Thanks again @thelee! Even when your answer is "you can't do that", it is still very helpful because it lets me move on to the next thing instead of wasting time testing a bunch of failed work-arounds. Appreciate it, as always. ... now if I can just get this damn crew to mutiny! They have been cannibalistically eaten, murdered, sickened, starved, denied payment, rebuffed, humiliated, and still they keep working injured after months of mistreatment. Fools! What self-respecting pirate crew would stand for that? LOL! Edited September 22, 2020 by Virtual_Swayy
Virtual_Swayy Posted September 22, 2020 Author Posted September 22, 2020 (edited) Hey @thelee, quick update on testing so far and one more question for you (or anyone - on script execution procedure) to help me finish out debugging. ----------- NEW QUESTION------------ 9) Does recovery time act as a hidden cooldown as the script check for executability of a block? - Simplest Example: A 3 block script. First two are long cooldown "One-n-done" actions with recosvery time -- [ EDIT: See Posts Below. Reformulated a Generalized Version of tis question which s more useful ] -- ------------- UPDATE ------------------ - {4 non-cipher party members}: I applied all these tips to rewrite their scripts, and sh*t is jsut getting WREKT! I don't need to micro at all, took off all auto-pause except combat start so I can make sure the tank intercepts the best target. Heals and buffs working great, AOE targeting from casters working great. It's so face-melty that when I actually want to switch back to auto-pausing to debug the cipher more, I have to nerf (turn off) a bunch of the DPS blocks for the fight to even last long enough for his scripts to run LOL I'm turning DPS off by adding a condition they can't ever meet (Self: summoned weapon, etc., which is handy bc I can leave the impossible condition and just check/uncheck the NOT to enable/disable my "debug mode"). They still win because the defensive blocks are executing perfectly, just slower when I want to debug the cipher. - {The cipher/ascendant}: The script above mostly works (roughly 2/3 of the time-ish), but there are definite hiccups i want to resolve, which is what generated my question 9) above. The good news is that even when it fails (meaning he doesn't have full focus when he hits the ascended spam blocks) it is still pretty combat effective because the target selection seems right on track (at or near 100%) and the action order is mostly executing in the proper order (occasionally skips blocks). So usually, even when it "fails", he is doing effective things, just at a reduced PL because he isn't ascended. - [NEW TECHNIQUE]: I found one new tactic (that you probably already know lol, but) you might find interesting. It's for dealing with the 2nd, 3rd, repetitions of the main loop (BUILD_FOCUS > ASCEND_SPAM; "looped" meaning they must trigger IN SEQUENCE to work, not simply when conditions are met). Of course, due to this sequencing, the behavior sets were getting crazy long, because even getting through one cycle of that loop is over 20 blocks at one action per. That's already way, way too much scrolling to do & and FAR too much jumping around clicking up-arrows anytime you add a new block. NO way was I going to have a 40-50 block behavior set to just to repeat the loop two or three times (each action has to be "one-n-done" [cooldown longer than battle lasts] to fire correctly]. Repeating anything is one new block per each repetition of each action (No Bueno!), so I decided to regress a level and do it by cloning & using list-ordered multiple behavior sets. The cloned list ordered sets seems to be working quite well. SO far, it seems that... The subsequent cloned sets execute as intended as long as: A) There is never an {always true} action above the final set in the list without a "one-n-done" length cooldown (i.e. auto-attack in the bottom block), and... B) Every block/action in the loop MUST have a "one-n-done" length cooldown (not every action; ONLY the ones you're looping/sequencing, more below on that), and... C) The clones have different names. I add (2nd), (3rd) behind the names. (I think... I expected it to be hard to verify; loop actions are the same, but I just thought of an easy test I'll do later) This approach provides some huge advantages (in terms of simplifying/shortening each loop set, especially after the first). 1) Splitting sets inherently reduces set size, so that's a ton less clicking/scrolling right off the bat, but the later cloned loop set in the list get even more elegant because you also... 2) Can remove all the DEAD "combat initiation" blocks, (actions done once at start); "dead" because they are long CD "one-n-done"s also, but not looped because not repeated (e.g., I tactical meld the tank, etc.), and... 3) Can remove all the LIVE blocks that repeat based on trigger conditions, meaning bocks NOT reliant on the sequencing within your loop (e.g., heals, rebuffs, etc. like "If self <50% health,Second Wind"); "live" because list order will always check the top list first, so these will remain active since they aren't "killed" by a one-n-done length cooldown. Essentially, it work just like one MONSTER length set would, but it means - way less clicking/scrolling - way better ability to "see" your two different logic trees (repetition based on sequencing, and repetition based on conditions) Thanks again for all your help! Edited September 25, 2020 by Virtual_Swayy
thelee Posted September 22, 2020 Posted September 22, 2020 (edited) 1 hour ago, Virtual_Swayy said: 9) Does recovery time act as a hidden cooldown as the script check for executability of a block? - Simplest Example: A 3 block script. First two are long cooldown "One-n-done" actions with recovery time ....Had to go eat will finish this question when I get back.... so there's some sort of delay, and I think there are several causes. I haven't tested it extensively. At the very least, I think if you do an action manually there's a brief delay before the game realizes it should pick up on the AI script again. As for other possible mechanism: I have noticed something funky with my forbidden fist AI scripting. I initially put a 5s cooldown, a "safe" duration for forbidden fist. This was too much! As you might have noticed, it seemed like there was some additional delay. So I was missing opportunities to land an additional forbidden fist, well after the existing debuff wore off. I essentially fixed it by setting a 1s or so cooldown. That works just fine. (I forget the reason why I didn't just have it at 0.) At the time, I chalked it up the following reason: the AI decides on the next action as it completes the current action, not when it's about to do the next action. Example: monk dual wielding. Uses forbidden fist, triggers 5s cooldown. Auto attacks a couple times. On the n-th auto-attack, the forbidden fist script cooldown will expire in .1s. However, the AI script is evaluated right now right as the auto-attack completes, so it queues up another autoattack. So even though the forbidden fist action is ready for the next attack by the time recovery is finished, the AI has already decided to commit to another autoattack, and won't change its mind until it completes this queued up action (or you interrupt it by doing something else). So it's not recovery time per se, but just when the AI commits to an action (so it's not a cooldown, since interrupting it [edit - even literally an actual interrupt on the character] and resuming AI would queue up the correct action regardless of remaining recovery). Though please don't take this as a source of truth - this was a working explanation had at the time, and I didn't test it anymore because setting the cooldown to 1-2s was "good enough" for my purposes. It would make sense with what you're experiencing/your hypothesis, though. Edited September 22, 2020 by thelee 1
Virtual_Swayy Posted September 22, 2020 Author Posted September 22, 2020 (edited) ARGHHH! @thelee I got deleted! Before you wrote that reply, I got back from dinner and edited in a very well-thought out explanation of why my question 9) was nonsense (and over-specific in assuming the cause of my sequencing issue), and so I also generalized my question to a more useful form. Your reply above makes me realize my over-specific question served its purpose, despite its incorrect assumptions, because you actually answered it generally (broadly) and thus answered my deleted generalized reformulation without ever even seeing it. Bravo! ------------------------ THE GENERALIZED QUESTION ---------------------------- My sequencing issue is an effect, and recovery time was an (incorrectly) assumed cause. In retrospect, it makes more sense to just directly ask what could cause the effect. So, let me do that now My sequencing issue is that intermittently, one block/action in the sequence will be skipped. The question is why. So... 9) WHAT MIGHT CAUSE A SINGLE-ACTION BLOCK THAT IS A) ALWAYS TRUE, B) OFF COOLDOWN, AND C) NEXT IN SEQUENCE, TO FAIL A "READY TO EXECUTE" CHECK? Again, bravo for actually answering this above before I asked it. You gave a potential explanation with examples, which I want to explore, but will do it in a post below (since I don't know how to quote into an edit). One reason you DON'T give is recovery time (my specific question 9), which I agree with. I also ruled that out as a possibility after asking that question (by logic, not empirical testing). Here is the short version... -------------- THE SPECIFIC QUESTION (RECOVERY) MADE NO SENSE ----------- Because... If recovery time is truly global, meaning no action exists that can be executed during the recovery time of another, then recovery can't be the cause. Assuming global recovery, then no crazy recovery interactions can be created (like if an instant activation ability could be used during recovery - they can't right?). That means that as soon as recovery ends, (following the lettering in the question above) ALL of the blocks that are A) always true and B) off cooldown will become executable at the same time ("right now", as you express the same concept above). Does this seems sound enough logic to rule out recovery as a cause and move on to other possibilities? If so, wouldn't activation time follow the same logic (meaning we can move on, and disregard spell timers, in total, as causing sequence skipping issues? Going once.... going twice.... speak now or forever hold your peace -------------------------------------------------------------------------------------------------------- ... Will reply to your theorized causes below. Edited September 23, 2020 by Virtual_Swayy
Virtual_Swayy Posted September 23, 2020 Author Posted September 23, 2020 (edited) @thelee, I edited the post above to add back in the deleted reasoning, if you want to skim that I tried to be brief. Also, one really random possible cause I hope we can rule out easily: What kind of machine are you running on? I'm on an integrated video card laptop which does have some intermittent video lag/locking. I'm hoping your on a good rig (quantum computer, heh), so we can just rule that out? I think we can regardless, because system issues would be 100% random, and it's not. It is only partially random (see #2 below). --------------------- ADDITIONAL DIAGNOSTIC INFO ------------------- 1) ALL SKIPPED BLOCKS ARE "ONE-N-DONE": 120 CD. They fire once per fight, then are "dead". This is expected, since "killing" a block with a longer-than-battle cooldown is the fundamental tool used in sequencing, not to mention the conditionals are supposed to skip, if conditions aren't met. So, on to more relevant info lol. 2) SKIPS ARE WEAPON ATTACK SPECIFIC: The skipped blocks do share one thing in common, they are always weapon attacks or weapon attack abilities. I've literally never skipped on a self targeted spell, and I'm spamming smoke constantly, so I'd notice. I script buffs/heals that are ally-targeted, but they are all conditional logic, not sequenced, so they aren't relevant. Some enemy targeted spells do skip (usually one of the disintegrate spam blocks), but that is presumably cause by the target possibility matrix we discussed earlier (conditional x priority matrix; although only the conditional dimension matters here). The expected behavior would be to skip, even working as intended (ex. Wiz/Dru AoE takes 10% health off all, bf 1st ascend spam block, disintegrate if {not} < 90%). I feel safe in saying this issue is 100% weapon related. 3) SKIPS ARE GUN SPECIFIC: Slim-Shady the Mindstalker always uses a gun, The Red Hand specifically. I'll test with a regular arquebus to rule out the double-shot perk to be certain, but I don't think it's that. I certainly hope not, because the immediate double assassinate is a beautiful thing, and often works perfectly. We have ruled out recovery, but not reload. This might be important because reload seems to be a distinct mechanic. However, your monk example might argue otherwise (or both issues, though similar, may have independent causes). ----------- THOUGHT ON YOUR POTENTIAL CAUSE THEORY ------------ 3 hours ago, thelee said: I think there are several causes Mos Def. I'd like to think (I hope lol) we are only searching for one cause with my ascendant script, but quite possibly it's an interaction effect. Also, as mentioned above, it's very possible that instances of the skip(or "delay" as you say) effect, in marginally different context (fist versus gun), may have completely unique causes. 3 hours ago, thelee said: please don't take this as a source of truth - this was a working explanation My man! We are like script scientists here doin' serious business experimental research. The scientific method is a process. It's all about the "working explanation"... that's the good stuff! 3 hours ago, thelee said: there's some sort of delay I'll buy that, but consistent with the multiple causes line of reasoning, I'd also be willing to speculate on other causes that aren't delay based. Not that I have any brilliant theories ready to go on that lol, just keeping an open mind. 3 hours ago, thelee said: On the n-th auto-attack, the forbidden fist script cooldown will expire in .1s. However, the AI script is evaluated right now.... the forbidden fist action is ready for the next attack by the time recovery is finished, the AI has already decided to commit This seems unfortunate and annoying, but also... expected (because .1 seconds from now is not right now). Oh ok wait, I think I see what you mean... Is this a fair way to re-state the point you are illustrating? The decision point is at the end of activation time, but the execution point is at the end of recovery time? Am I following you? If so, that's brilliant! That lil' tid-bit will be worth its weight in gold for future scripting. However (check me if I'm wrong), I think I can rule this out as my cause in the ascended sequence scenario, because the root cause in the example is "will expire in .1s", but in my sequenced loops, the blocks cooldowns NEVER expire. They are all one-n-done cooldowns. 3 hours ago, thelee said: something funky with my forbidden fist AI scripting. I initially put a 5s cooldown, a "safe" duration for forbidden fist. This was too much! As you might have noticed, it seemed like there was some additional delay. I've definitely seen this in another context than block skipping, so yea I've "noticed" as you say, but I certainly didn't give it the weight it deserves in light of your "commit decision" explanation, because the one-n-done method has allowed me to (perhaps unwisely) ignore the direct effects of that type of cooldown timing f*ckery. OK so here is how I DID notice it. In the smoke > shoot subsequences, even when the shot fires. It sometimes fires AFTER smoke expires. That shouldn't be mathematically possible! Even with a full reload! But it's close... close enough to be this. My invis lasts 8.1 seconds, and full ramp up time for the shot (invis recovery + gun reload + attack time) is 7.9. A .2 second delay is all it would take to produce the effect. That's not the skipping issue, but it's definitely another issue I was looking to diagnose down the road, and it's not cooldown based ,so one-n-done scripting sequences can't protect me from it. Again, Brilliant! Thanks!, I never actually thought of delay... I was like "maybe i got an action speed debuff that didn't show up in the log", or... "maybe I got stunned" (lol, even though I'm untargetable, duh). I'm definitely on the lookout for delay now though (and how to fix it, if possible). ------------------------------------------------------------------------- Please, please, please feel free to share any other thoughts you have on this, or scripting in general (which I'm totally having fun with right now). Even though we didn't diagnose the ascendant sequence (yet!), you dropped a huge knowledge bomb on me with the "activation time = commit decision" thing (assuming I interpreted that correctly), plus you opened my eyes to mathematically impossible delay being a factor in a separate issue. I'll keep theorizing and testing those theories, and I'll for sure consult you once I progress a little more, so you can drop more knowledge bombs! For now, I'm off to load up the game and find cool new ways to automate the beat-down! Thanks again! Edited September 23, 2020 by Virtual_Swayy
thelee Posted September 23, 2020 Posted September 23, 2020 12 hours ago, Virtual_Swayy said: The decision point is at the end of activation time, but the execution point is at the end of recovery time? Am I following you? If so, that's brilliant! That lil' tid-bit will be worth its weight in gold for future scripting. However (check me if I'm wrong), I think I can rule this out as my cause in the ascended sequence scenario, because the root cause in the example is "will expire in .1s", but in my sequenced loops, the blocks cooldowns NEVER expire. They are all one-n-done cooldowns. yes, your summary is my suspicion. though it doesn't explain your observation. ¯\_(ツ)_/¯ 1
Virtual_Swayy Posted September 23, 2020 Author Posted September 23, 2020 (edited) @thelee I got to play some today and so I messed with this some more. I super dialed-in my lifegiver scripts and I figured out where the scripts are stored. I assume players can pass them back and forth? If so, load this up and see what you think. It's pretty redonkulous. If you have a decent level lifegiver... give 'er a test drive! Or anyone else... Feel Free... ------- LIFEGIVER CUSTOM AI BEHAVIOR SETS ------- (Single-class w/ AL 9 casts... but, AL 6+ should run this ok) ----------- LOAD BOTH BEHAVIOR SETS TOGETHER, LIST ORDER... 1) DRU#1support as BEHAVIOR SET ONE: DRU#1support (Initiate_Pre-Heal_Heal_Res) (Druid) (3be15daa-8c9a-4501-af6c-d987b237b814).customai 2) DRU#2dps as BEHAVIOR SET TWO: DRU#2dps (Blizzard_FoeRawAE_Foe Storms_VoulgeAtk) (Druid) (c0f6b4fa-3b7c-4224-a4a0-ff855897d141).customai OPTIMAL DRUID SET UP WOULD BE: - All healing spells - 2 FoeAE Raw Dots (maggots and insects) - 3 Storms (Returning, Relentless, BLizzard) - WepSlot1: Thicket Green. - WepSlot2: Voulge That's basically it. There are some blocks in there labeled as DISABLED, I just tossed an [ always true {not} ] on them because they aren't kid-tested mother-approved yet lol. One disclaimer: I mostly tested this as all one big behavior set, mostly in the same order. Splitting them is recent and only ran a few fights with 'em so apologies in advance if it's crap now LOL! [EDIT: OOPS! Forgot to change something back after testing run. You can fix it easily in set DRU1. Got to block 10 (labeled as Heal4:PreHeal1) and change the condition from 25 to 90. That's it. Not much of a pre-heal if your already near death [EDIT 2: OK 9/23/20pm... After a bit more testing some of the fancy additions i made when I did the set split splitting def need moe tweakage and I should have disabled the looped weapon swaps. I mean it's still run. She'll go out there and cast decent heals and area damage spells, but it's not the perfectly refined ass-kicking I'm looking for (she skips stuff and messes up PL boosting weapon swaps, etc...). By 9/25/20 I'll fix it back up to standards and repost it (tomorrow or the next day) for anyone interested. In the meantime.... Here is the older, less fancy. more tested, single-set version of basically the same behaviors: Ranged_Support (Druid) (2d18242f-ed7b-4f48-9e8c-c779c142d3f5).customai Same Druid Set-Up as above. Edited September 23, 2020 by Virtual_Swayy
Virtual_Swayy Posted September 24, 2020 Author Posted September 24, 2020 (edited) I made a spreadsheet to log my test results, As part of that I made a visual representation of the behaviors I was testing FOR. Turns out, in scripts that are forcing complex procedural execution, the order of the script looks nothing at all like the order of the behaviors, which is why I needed something like this. FOR ANYONE LEARNING SCRIPTING, this might help you think more about what procedural tools are at your disposal. THIS IS AN ILLUSTRATION OF HOW TWO OF THE MAIN PROCEDURAL STRATEGIES INTERACT: - CONDITIONALS AND - SEQUENCES P.S. I have no clue why (7) Relentless storm is blue, its sequenced not conditional... Freakin' spreadsheets! They have a mind of their own sometimes hehe. Edited September 24, 2020 by Virtual_Swayy
Virtual_Swayy Posted September 25, 2020 Author Posted September 25, 2020 (edited) On 9/21/2020 at 6:10 PM, Noqn said: I recommend checking out the More Custom AI Conditions mod. Though it does not implement the above mentioned conditional, it has some incredible Quality of Life stuff Yo, @Noqn I finally checked this out last night and yea I agree it's real nice QoL, but sadly it dos nothing other than provide new conditionals. I'm not knockin' that, in fact mad props to the guy who made it, but... As you can see if you scroll up a few posts, I am WAY farther down the scripting rabbit hole than I was when I began this thread., I think I am getting to where I can begin to identify, and maybe help provide solutions that address some of the problems that are baked much more deeply into the scripting cake than missing conditionals. There is just one problem.... I don't know jack sh*t about modding! I'll be lucky to install the damn things much less make them lol. Now, I seem to remember, that rather than answering my question about an "In (ranged) range" conditional, you went and MADE me one in like 2 minutes flat. That makes me think you are a mod-ninja, or if your not comfortable with that, you clearly at least know something about it. This is what I propose: Let me give you one example, right here and now of the type of thing I want to do, and you can tell me if its something you could/would help with on the modding end. I wrote a story that illustrates the issue, and the solution. So even if I don't convince you, it's a free Deadfire story If you're not into the story idea, then the next post down has a visual illustration of this issue affecting one of my scripts. [@thelee we should always discuss scripting issues like this, story form is fun!] Here we go... [EDIT: GOT TIRED, DIDN'T QUITE FINISH THE ENDING YET. (What is there makes sense though, and explains the problem.] ---------------------------- EXAMPLE SCENARIO [in story form] ---------------------------- GLITCH IN THE MATRIX: A TALE OF TWO IMMYS PART I: I WISH I WAS A HALF DEAD VESSEL Two AI characters, JIMMY the priest & TIMMY the cipher, are hanging out minding their own business, when a bunch of vessels bum-rush them and start wailing on TIMMY. Sadly, the Watcher turned off TIMMY's AI and then went AFK, so TIMMY is just taking the beat-down like a champ, waiting to die. JIMMY calls out to him, "Hang on TIMMY, I'll save you! Holy Radiance will heal you, and put the smack down on those vessels!" JIMMY's ready to party! He knows as soon as TIMMY gets bloodied, his Holy Radiance conditional {target < 50% health} will fire, heal TIMMY, and wreck these fools. GG! Then JIMMY starts to get a sinking feeling in his gut as he wonders, "wait a sec, my other Holy Radiance block has conditional {target is race (Vessel)}, it should've fired right away, right? WTF?" Then, right as he watches TIMMY take a flail to the nuts and crumple to the ground, JIMMY comprehends the literally FATAL flaw in his AI... JiMMY realizes, in a fit of sheer panic, that {target}... is... HIMSELF! The ONLY target type was SELF! Jimmy begins to think it through. {Target < 50%} who would need to be bloodied? Me! {Target is race vessel} who would need to be a vessel? Me! JIMMY thought, if only I was a half dead Vessel,I'd be burning these fools down. But, he isn't a half-dead vessel, so how can he save TIMMY? Becoming a vessel, is out, so he quickly {not}s the racial condition, and begins to yell "Here! I'm Here! Attack me, you bastards!, me!". He keeps yelling as he swipes at them with the weak-ass sickle he stole from that Xoti chick. The vessels don't even care. The weak-ass sickle can't penetrate heir arm. In desperation JIMMY thinks, maybe he can bloody himself! Jimmy begins frantically bashing himself in the head with Xoti's weak-ass lantern to get bloodied, as Timmy, already bloodied, but now on the ground, takes blow after blow and is nearing death. It looks like this is... - THE END (or is it?) PART II: JUST GIVE ME THE FREAKIN' LANTERN, MAN A Watcher, @Noqn, has been soloing PoTD on his new rogue. He's been cruising around in stealth all day, gettin' rich looting everything in sight. Just as Noqn finishes looting a random barrel, and pulling out his 19th Adra Ban for the day (how is that even possible?), he turns corner and sees... WTF??? A mob of tightly grouped vessels, out in broad daylight, stabbing and slashing down at something, and in front of them, just a few feet away from Noqn, a Priest is hitting himself in the face with a lantern, sobbing, adn yelling "Nooooo!!! You bastards!! Take Me!". Noqn laughs to himself as he thinks, wow, what a tool! Although... He's has been taking this new rogue benevolent. Plus, he knows that is Xoti's lantern. Mmm... Xoti. He thinks, maybe I can score with her if he returns it. to her. Hmm.. Xoti ....he thinks a second more, and then says to himself, "ah, what the hell, let's do this" as he drops stealth reveals himself to the Priest. JIMMY is desperate. TIMMY, who is curled up in a fetal position covering his head with his arms for protection, can't take many more of the blows still raining down on him. JIMMY can't watch this. He turns away, and as he does, a figure materializes out of nowhere, right in front of him, and says with a smirk, "Sup, JIMBO?". In a wide-eyed hystria, too crazed wonder how this stranger knows his name, JIMMY screams, "HURRY, HELP HIM!" The stranger looks around casually, then back to JIMMY and says, "TIMMY will be fine. It's cool. Can I have that lantern?" Infuriated, JIMMY yells, "Help him! NOW!", but the stranger just saunters up, puts a hand on JIMMY's shoulder, and calmly says: "JIMBO, Calm. Down. I'm a modder. I mod. I make mods so" JIMMY cuts the modder off, "Please, Help Him! quickly!", but the modder continues, unphased, "JIMBO. I am a mod-ninja so"... "Then save TIMMY, do something!". But the Mod-Ninja simply says "JIMBO, YOU do something, I suggest first, first, you hand me that lantern, then, go cast Holy Radiance on TIMMY". "But I Can't. I Can't!", ,JIMMY says, over the voice of the Mod-Ninja, who continues explaining, "It seems you are not familiar with the modded Rogue subclass, called Mod-Ninja. I am currently pl..." JIMMY interrupts in protest,"I literally cannot cast it. The AI is flawed., and it's fatal". The Mod-ninja plowed ahead, "I am currently playing a Mod-Ninja. We don't specialize in damage like other rogues,". JIMMY realized now that the Mod-Ninja was completely ignoring him, and that the air in front of him was starting to,,, vibrate? "We don't get sneak attack, or backstab, but we do get some powerful abilities.", he said as he begin to gesture in front of himself causing the air to shimmer. "Our abilities help us to man... ". JIMMY, grimly resigned to his fate (and TIMMY'S)., interjects, "The flaw, My AI. It is FATALLY flawed., as TIMMY will confirm shortly". Jimmy doubted the Mod-Ninja even heard him as he plowed ahead., "abilities help us to manipulate the "battlefield" (so to speak)", Jimmy was sure that air wasn't just shimmering now, it was thickening, and darkening, coalescing into a then square about the size of a window, right in front of the Mod-Ninja, and those gestures were extremely precise, and he was doing them "on" the "air-window". The mod ninja continued "... specialize in controlling the environment in which combat takes place, and changing it in our favor, and sometimes for our pleasure. Like when there are lanterns... that people give to us... LANTERNS, JIMMY?". The Mod-Ninja was so intent on the "air-window" in front of him, and his gestures, and whatever that green stuff was running like rain down the window that Jimmy thought he was finished speaking, just as he started to add, "the spell I'm casting now is our inherent subclass ability, "Glitch-in-the-Matrix". JIMMY could see it clearly now, the "air-window". That wasn't rain falling, those were numbers! WTF? That is binary code. Those gestures... the Mod-Ninja was controlling the code!!! WTF? HE'S CONTROLLING THE CODE!?!?! JIMMY was so mind-blown, that it startled him a second later when he heard: " You ready big guy?" "It's time JIMMY. "Time for what, JIMMY asked, noticing the numbers were gone, and the "air-window" was dissipating "II fixed the Holy Radiance AI, It's ready, to cast, but your Watcher is AFK so fix your AI script to cast it and then GO SAVE TIMMY !!! Good Luck!!! said the Mod-Ninja as he disappeared from view.... Noqn, now invisible and heading to farm ,loots again, looked down at the helmet he'd had the whole time and chuckled. HOW? JIMMY thought. HOW DID THE MOD-NINJA FIX THIS SPELL? I didn't , thought this would just be automatic. I don't have time for this! He thought, " There has got to be a new conditional... That is how the modders do it right? All the scripting fixes I've used so far did that, they made a new conditional. Like Cipher at max focus one. So Awesome! ---------------------------------------------------------------------- GOT TIRED & HAD TO SLEEP - WILL FINISH ENDING SOON ------------------------------------------------------------------------------------------------------------------------- Edited September 25, 2020 by Virtual_Swayy long - finishing it 1
Virtual_Swayy Posted September 25, 2020 Author Posted September 25, 2020 (edited) ------------- EXAMPLE: SELF-LOCKED TARGET-TYPE WREAKS HAVOC ON SCRIPT ------------- DIFFERENT INSTANCE OF THE PROBLEM IN THE STORY ABOVE THE ROOT CAUSE IS THE SAME FOR BOTH, THE SAME GLOBAL FIX WOULD RESOLVE BOTH --------------------------------------------------------------------------------------------------------------------------------- I'VE ILLUSTRATED THIS ONE VISUALLY, RATHER THAN WITH ANOTHER STORY. Edited September 25, 2020 by Virtual_Swayy 2
Noqn Posted October 2, 2020 Posted October 2, 2020 Sorry for the late reply! It's just as you say, self-targeted abilities are messed up and it goes deeper than just conditional scripting. Regarding Holy Radiance, I can't make a conditional that checks for nearby Vessels, but there's a hacky way to check if there are any nearby Bloodied Party Members within X meters of the caster. The issue is that you have to make a specific script for each combination Health percentage and Distance you're looking for. I included 5m (the base radius of Holy Radiance) and 7m, but just tell me if you'd like some other values. Download here: ai_has_bloodied_allies.zip More importantly.... PLEASE write more Deadfire stories
Virtual_Swayy Posted October 11, 2020 Author Posted October 11, 2020 (edited) ----------------------------- RECAP OF PART 1 -------------------------- --------------------------- 1.1 The Deadfire Debacle -------------------------- Spoiler Batman sent one of his BadA$$BatAdBot$ to these forums. It necroed a 2-year old thread by posting a gambling Ad. It was buggy and signed up for the account under it own name. We could all see who had done it! DaMo$BadA$$BatAdBot! The first Domino had fallen.... The cascade was on! We knew/confirmed it was Batman from info obtained by investigating the DaMo$BadA$$BatAdBots Activities. The Deadfire community was already getting pissed, but shortly thereafter, it blew up into a full-on Bruce Wayne/Batman Backlash. At the time know, one could known important these events would soon become. As a result, many names gained popularity in different circles. The Deadfire Community's initial Exposure of Batman's A.I. BatBot$ is referred to as: The DeadFire Debacle <--- I use this one BadA$$BatAdBotGate SmokingGunGate $adA$$BadBatBot ---------------------------- 1.2 The Wayne Conspiracy ---------------------------- Spoiler When the last Domino fell.. it would shake the world. We connected ALL the remaining dots when my boyz (eSnow and JuAss) showed me a document dump received by Wikileaks a few years back. Of course my boy JuAss (Julian Assange) gets those straight to his inbox, which on that fateful day, contained... wait for it... ALL of Wayne's financials for 2016! BOTH SETS! [(the public financials) AND (the real records of all Waynes criminal enterprises)]. Unfortunately, JuAss owes Putin, bigly. Let's not mince words, only a select few at Langley and the Pentagon know whether Putin kept JuAss out of a box in the ground, or a slightly larger box at a black site, either way what JuAss got from Putin, was his life. With something this big, zero chance he was going risk not looping in Putin, immediately. JuAss could hardly contain himself as he showed the treasure trove to Putin. JuAss is lucky Putin is already familiar with financial statements of web scammers and money launderers, because well before two minutes had passed, JuAss turned to Putin and asked, "Eh? How about THAT?" Putin ****ed his head slightly to the side as he briefly shrugged his soldiers, "Da". JuAss needed no translation to know that in English that would sound like, "meh. It's Ok". "What? We own him now! What's the plan?" Putin made the same little shrug as before, without even bothering to say anything. "Well, I mean now that we know he's richer than God, one option that st..." "Net". JuAss turned to the translator, puzzled. "He says he has more". JuAss thaught about it for a second and said, "Oh right, of course. No one can be richer than God. Well, it still seems like Blackmail isn't a bad option", "Net"! "but anytime you want I can publish this". "Net"! "online and ruin Wayne overnite". Oh man, he looks pissed. "Net! nikogda"! Yep, pissed though JuAss. Is he Wayne's buddy or somethi... oh no, no, no! JuAss thought as he saw Putin raising his right hand, index finger pointing up to right in front of his face and furiously say, "Zabastovska! Odin!" Oh no, no. No, no, no! "Ok. Ok." JuAss said as he backed slowly away, with his hands up "Ok. I'm cool" and face towards the ground. He looked desperately to the translator, who bent over and whispered, "We don't bust web scammers in Russia, nor money launderers, they are businessmen, not criminals. We don't even consider foreign scammers competitors, to us, they're more like colleagues. Wow, JuAss thought, how did I not see that one coming? "Oh right I'm so sorry. Gotcha, take some time and get an idea just how large and embedded in, well, everywhere, the Wayne Syndicate is. You'll be amazed he could hide it all." With that, Putin abruptly turned, with the folder under his right arm, and strode out of the room. The Wayne Dox were not seen again, until they were returned by eSnow three years later. ---2020--- The man of the hour, eSnow, walks in, straight across the room to the table. He slapps down a fully stuffed large manila envelope, turns, and says, "We got the Wayne DoX Back!" ------------------------------------------------------------------------------------- ----------------------------- 1.3 The Wayne Syndicate ---------------------------- The Wayne Wikileaks Document Dump Revealed: Wayne was hiding things: Wayne Conspiracy. Events around concealing, covering-up AND EXPOSING What Wayne was hiding: The Wayne Syndicate. A Massive Criminal Organization 1.3 Contains Five big reveals about the Wayne Syndicate -------------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ------------------------------- PART 2 ----------------------------- ------------- 2.1 Is it Paranoia if They actually Are All Out to Get You? ------------- Putin took the Wayne Dox, because had some plan to Fck with Hillary Clinton by disinformation associating her with Wayne over time. Once everyone thought Hillary Wayne and Bruce Clinton were besties, only then would he demolish Wayne, and hope hillary got locked up too. Putin knows eSnow also.. He knows eSnow is the most Pro-Troller of Trumpanzees in all of world-history on his Q account. Putin sent Giuliani over to eSnow's place to ask him to do the hillary/Wayne breadcrumbs. Giuliani is always on call for his Sugga-daddy-vladdy, so he came and was like, "Snowden, Vladdy sent me to ask you for a really really big favor. He wants you to get back on your Q account, and hit up some more pizzagate type ****. But this time no random Pizza joints. Whatever bad **** you're going to have Hillary, SoroS, & the gang get up into, we need it to all be happening in one place; Wayne Manor. ...My boy eSnow, now he's got nothin' against Hillary, especially now that she's been just some housewife for years. Damned if eSnow wasn't gonna get those Wayne docs back for us, though. Hillary had to take one for the team, she's a big girl... "Hell", eSnow thought to himself. "These guys can't do **** anyway. They been cookin' up hair-brained schemes to sink Hillary for years, there she is: happily retired." Hell, I myself pizza-gated her for no other reason than to up the level of crazy just to see how high he could go. Yea, she'll be fine. He kind of missed rolling the Q crazies, but how would he have predicted that He would Troll them so hard, they would go balls deep ito Q and take Q ball deep inside them, that they would start to produce Q fan-fiction for it, and promptly begin internally trolling themselves. "Good Times. Good Times" he thought to himself, "Now back to business". He turn back to Giuliani and said, "Ok, go on..." ..."Oh right, Well V.P. wants you to... **** V.P.!? that sounds like I demoted President Putin.... So yea, P.P. wants you to... OMG P.P!?! Thank God I'm not there with him! That would be two strikes in like 10 seconds... I've only been to strike two once. Scary as hell man! you know he actually takes the vial of nerve agent out of his pocket and starts playin' with it? I mean S-C-A-R-Y." It's as or more scary than those times when you have "I bet. I think I'd be terrified as hell. I mean the President that wanted to kill me had me sweatin' pretty hard. Literally, cold sweat, hot sweat, day sweat, night sweat. My knowing that OdinBama can stay in Asgard, doesn't even have to get off the ****ter, and any time it strikes his fancy, can call down thunder from the heavens and end me? Yea I remember some real serious paranoia. Worse, than I'm sure you've heard people ask 'is it paranoia if they actually are out to get you"? Well I'm pretty sure I'm the world's foremost expert on that and yea, it's still paranoia. Paranoia is a physical bodily experience. Hormones, Adrenaline, Insomnia, etc. It's also a cognitive experience. Distrustfulness. Misattribution of random events as intentional and/or threatening. AND... Paranoia is also an emotional experience. Fear is paramount, but also the near constant state of excitement and frequent feeling of surprise take a heavy toll. It's a mood, Anxiety. Paranoia is NOT delusions. That's not even a debate. PPD is a personality disorder that doesn't get anywhere close to requiring delusions, simply "unwarranted", "unjustified", or "without sufficient basis". I'll be honest, this one pisses me off. I'm pissed when a retired guy who thinks everyone at his Church talks **** about him and his wife eggs them on when he isn't around, who has been feuding with his backyard neighbor for years over a Grudge over the fence line 10 years ago... That guy... gets a clinical diagnosis and is Paranoid under DSM-5, for a mild personality disorder, that for most of human history, was just called being an insecure ****. Me? I fled my country, move internationally, wore disguises, used fake names, and never use phones or networked devices, only ever carried cash. That sound paranoid at all? Oh that's Bourne-Style cool, eh? I got tons more. How about this: , whenever another person got close enough to spook me, I broke out into a sprint to gain distance and then physically hid at least once a day. I hid in restroom stalls, unlocked cars, basement entrances, dumpsters in Alleyways, dumpsters In parking garages, dumpsters on big building loading bays, dumpsters at apartment buildings.. I once got spooked by a guy walking behind me and on the fourth turn I booked it around two sides of a building, across into a city park and NAVY Sealed it into a fountain where nothing but lips and nose broke water for 3 hours. Paranoid enough for you yet? OMG no, well I was actively in fight/flight for over a year. That enough fleeing for ya? ..." Snowden, let me break in for a second. How bout you stop asking me that every five seconds ok? I'm never going to say it's enough until we get to the end. It's story time here in Qs lair, and you haven't even the started the good stuff. Hmm... What Kind of good stuff do you mean man? Sorry RuGiu, No Hookers Let me just clear up a few more quick things: 1) "Everyone is out to get me". Clearly, this i always delusion. I never thought that. I did, however, BEHAVE, as if everyone was, because once you hold a RATIONAL BELIEF that "Anyone could be out to get you", then it is IRRATIONAL NOT TO BEHAVE as if "Everyone is". 2) People are threatened 3) 4) Defnition PARANOIA IS A STATE OF MIND. full stop. A state of mind that wrecks the body and the mind. In my case, it was particularly devastating because the extended duration lack of any medical care, and the severity of my state of mind. I think it's fair to say I would been of the charts in delusions and self aggrandizement, every major intelligence agency in looking to bag me, the most sophisticated spec ops and intelligence communities in the world, with Drone oBama leading the charge? Grandiose delusions indeed, except when they aren't. It wrecked my mind and body so hard it led to many illnesses of mind and body that persisted long after my threat level did. It's Everything... It's All the time... You're body starts strong ... ... at first you can take it. But then you get tired ... ... and can't turn it off. Fear keeps you wired just try to fake it. jAlways alert Oh. You're him? Nope you're not paranoid Yo sound like a quack you ignorant hack to strangle somebody The cues overwhelm every part of your body In every environment or any confinement from every direction, perception injection Give me some protection, or God damn deflection from stimuli signals, floodin' in through my senses activatin' the systems supplyin' defenses threat cues surround me, not one am I missing' It's constant suspicion, when in this condition It's Fight or it's Flight, no way to decide right They're all out to get me, so nowhere to go Perceptual senses, the highway they speed down, digging in, triggering' this paranoid meltdown. biological alert. Evolved to protect you, the permanence wrecks you, Emergency only, but now they control me. The dangers penetrate, the systems activate. I They ARE out to get me, I'm still paranoid Just spinning it gently around in his hand like a squeezing a stress ball. He just chatting you up, like nothing happened. You actually start to forget, and ease back towards normal, and then something reminds you. This guy is still fondling the weapon he pulled out to show me he can kill me I have never been more scared in my entire life!" Well, maybe not. I'll tell you right now,I know what scares me the most. I don't even let myself get in that situation anymore. I mean, yea, Vlad? The nerve gas? Yea, it's damn scary occasionally, but usually couple times at Fox, when I go eSnow was just about to speak up to try to get Rudy back on track, but Edited October 11, 2020 by Virtual_Swayy
mjo2138 Posted May 30, 2022 Posted May 30, 2022 Is there a way to AI script wizards so that they cast dangerous spells (such as fireball, chillfog) only onto enemy mobs, without hitting allies?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now