Jump to content

Luke

Modders
  • Posts

    879
  • Joined

Everything posted by Luke

  1. Even when editing existing resources? I mean, in this case I basically intend to edit just a couple of things regarding the existing descriptions.... And I'd like to avoid generating a new string for such a small change... But I'll probably reconsider this idea since many people are suggesting to create new strings...
  2. But I cannot use that command inside a COPY_EXISTING_REGEXP or a patch..... In other words: how should I edit the aforementioned macro in order to use STRING_SET_EVALUATE in place of SAY_EVALUATED?
  3. I'd like to know something about how you use these two triggers. Do you actually trust them? I mean, they're great if the CRE in question has only one weapon, but what if it has 2 weapons with different enchantment levels (offset 0x60)? For instance, let's consider DW2RP2GE.bcs (in particular a script block like the one in the spoiler tag below) and a CRE with ranged and melee weapons (e.g., ORC02.cre, BG2EE – its melee weapon 'SW1H07' is not magical, its ammunitions 'AROW02' are magical +1). If the currently equipped weapon is BOW03.itm with its corresponding ammo (AROW02) and 'NearestEnemyOf(Myself)' happens to be immune to normal weapons (op=120, param#2 = 2), then 'WeaponEffectiveVs(NearestEnemyOf(Myself),MAINHAND)' and 'WeaponCanDamage(NearestEnemyOf(Myself),MAINHAND)' will return true (because 'AROW02' is magical +1) => BUT its melee attacks will be ineffective (because SW1H07 is a normal weapon). To sum up: the problem is that these two triggers always refer to the currently equipped weapon and this weapon may have a different enchantment level from the one you're gonna equip – Am I missing something? If not, how do you prevent this situation from happening without using custom spell states?
  4. I was talking about replacing this line SAY_EVALUATED index ~%new_desc%~ with something else so as not to generate a new string (e.g., via using STRING_SET_EVALUATE). But as @DavidW said, that command is an action command, not a patch one: that's why it's not working (and probably there's no alternative.....)
  5. No. If a certain mod overwrites an existing string via STRING_SET (or STRING_SET_EVALUATE) and then you uninstall that mod, the original content of that string is restored.
  6. This. I was wondering if there's a way to achieve that without generating 1000 new strings pretty much identical to the old ones but a minor detail (e.g., a 1d5 changed into a 2d6 or something like that....) To sum up, I'd like to overwrite the existing descriptions and avoid generating new strings (I don't think it makes sense in this case.......)
  7. Is it possible to write the following in a compact way? BEGIN LOOP(scsloopvar||NearestEnemyOf(Myself);SecondNearestEnemyOf(Myself);ThirdNearestEnemyOf(Myself);FourthNearestEnemyOf(Myself);FifthNearestEnemyOf(Myself);SixthNearestEnemyOf(Myself)) I tried with BEGIN LOOP(scsloopvar||EnemiesInOrder) but it's not working...... Thanks in advance
  8. What if I didn't want to generate a new string for the new description via SAY_EVALUATED? I tried replacing that line with STRING_SET_EVALUATE index ~%new_desc%~ but it's not working.... Is there a way to update the existing description without creating a new string?
  9. Next: as you know, you can put multiple triggers when using 'ConditionalTargetBlock()'. My question is: can you OR() two or more triggers? I mean, you can currently write 'A AND B' via "&". Is there an equivalent symbol for 'A OR B'? Related: I noticed that you cannot write That'd be handy.......
  10. So, I have a question about setting variables from outside the SSL script itself, in the command line. If I write the variable "Test" doesn't get set. As a matter of fact, if TEST.ssl contains something like that block does get compiled (the SSL compiler should ignore it since "Test" is supposed to be set to True....) What am I missing?
  11. Upon further reflection, I do think it's better to tweak existing resources => in so doing, I don't need to worry about scrolls and the like..... I could also optionally DELETE your resources/IWDification's from /override (just not to have unused resources around.....)
  12. @DavidW Next question: what does the following clause mean in a TRIGGER definition? LineIf<!CheckStatGT(scstarget,0,WIZARD_SPELL_DEFLECTION)><%scsargument1_SPELLTURN%>
  13. OK, it should be clear now, thanks. To tell the truth, I think it may be useful for what I need to do (in conjunction with DELETE_SCRIPT_BLOCK .....)
  14. I see, thanks for clarifying. Thing is that I need it because of what I told you before, i.e., the automation of something like this Anyway, thank you for the workaround, it works. I opted for the following one:
  15. OK, I fear I spotted a bug: if you compile the following SSL block the resulting BAF/BCS block won't have the See(LastSeenBy(Myself)) trigger ...... The same holds if you define a custom target for that in your .slb file, i.e.:
  16. I see. Well, I don't know Perl but I may look at someday..... In the meantime, I found out a workaround: I'll stick with "Combine()" and then will delete the additional attack blocks using your function DELETE_SCRIPT_BLOCK: it's not very elegant but it should work.....
  17. What do you mean exactly? Why is it precious? Unfortunately, 'Action(Literal)' is still pointless for me ... When exactly should I use it?
  18. That's vanilla game. Open NearInfinity and look for those SPLs. You'll notice an opcode #177 (resource = ~DESTSELF~) targeting GENDER: ILLUSIONARY. The .eff file "DESTSELF" performs the auto-kill via opcode #168 (Remove creature).
  19. I'd use the existing gender (offset 0x0275) ILLUSIONARY => In so doing, they'll be instantly killed by Remove/Dispel Magic, Detect Illusion (Thieves, Dark Moon monks, Shamans) and True Seeing; at the same time they'll be immune to Death Fog (which is fine since they should not be considered as "conjured matter" as @bob_veng said). The only problem I foresee is that they'll no longer be subjected to the summoning limit => having said that, this will probably be irrelevant since their attacks are not reliable and they can be instantly killed by various common spells.....
  20. More questions. Could you provide additional details about Action(Literal)? Let's consider your example: The aforementioned SSL blocks generate the same BAF file, namely: What am I missing?
  21. @DavidW I see. To sum up: I could use Combine() => this will put the See() triggers in the right position but will also generate multiple attack blocks (useless, but not wrong). I could define multiple ACTIONs and manually put the False() triggers in the IF TRIGGER part => this won't generate multiple attack blocks but it's not very flexible (since I need to define lots of ACTIONs instead of using TriggerBlock()....). Alternatively: how much is difficult to define a "Combine()" command that does not generate a "LastSeenBy(Myself)" block? That will solve my issue
  22. Guess this is the problem: why does TargetBlock() always come before all the other triggers defined in the IF TRIGGER part? If that was not the case, then your code would work...
  23. What ? Could you rewrite it please? I'm curious about your implementation of "illusionary monster"....
  24. @DavidW No, your SSL code generates the following BAF file, which is not what I was looking for... I need those See() triggers to be second last, immediately before False() – just like Combine() would do. Is there a way to achieve that? Moreover, it's still not clear for me what 'Action(Literal)' is supposed to do.....
  25. What were you suggesting exactly? Guess it's either that or op#326 (Apply SPL) + a spell state.....
×
×
  • Create New...