AI Scriptiing
I have no idea about the voice files as I have not done any editing of sounds or voice files, however there is a WAVC converter to convert those files to wav files (not sure if that helps or if you knew that). It Is found at [url="http://WWW.TEAMBG.COM"]WWW.TEAMBG.COM[/url] (click on that to go there). You might also want to join their New Forums 'Infinity Engine Bends To Our Will' because they have a section devoted to sound editing.
You can use ShadowKeeper 2.0 to edit any cre file (including your avatar) and change the appearance. Heres the link: [url="http://www.mud-master.com/shadowkeeper/index.html"]http://www.mud-master.com/shadowkeeper/index.html[/url] (note that is to change the in game appearance not the portrait.)
If you want portraits here are some : [url="http://angelfire.com/rant/DIEDIEDIE"]http://angelfire.com/rant/DIEDIEDIE[/url]
[ 05-22-2001: Message edited by: KensaiRyu ]
You can use ShadowKeeper 2.0 to edit any cre file (including your avatar) and change the appearance. Heres the link: [url="http://www.mud-master.com/shadowkeeper/index.html"]http://www.mud-master.com/shadowkeeper/index.html[/url] (note that is to change the in game appearance not the portrait.)
If you want portraits here are some : [url="http://angelfire.com/rant/DIEDIEDIE"]http://angelfire.com/rant/DIEDIEDIE[/url]
[ 05-22-2001: Message edited by: KensaiRyu ]
Wizards Of Eregion Expansion Team Presents:
[url="http://www24.brinkster.com/manveru"]Dagor Laureland[/url]
[url="http://groups.yahoo.com/group/IEEAIS"]Infinity Engine Enemy AI Scriptors Council[/url]
[url="http://www24.brinkster.com/manveru"]Dagor Laureland[/url]
[url="http://groups.yahoo.com/group/IEEAIS"]Infinity Engine Enemy AI Scriptors Council[/url]
hmmm - well, I haven't been able to find the WAVC converter on the site. I've spent quite a bit of time looking, and have even used their site search tool. Any hints on where it is?
I've tried joining the forum - but am still awaiting a password. Thank you so much for directing me to the site though - a virtual plethora of information!!!
Thanks again!
I've tried joining the forum - but am still awaiting a password. Thank you so much for directing me to the site though - a virtual plethora of information!!!
Thanks again!
Hmm I dont see it either they must have taken it down due to errors. Lemme see if I can find out what happened to it, or if i can get another one.
Craig I am going to send you a utility called Script Writer that is used to create scripts.
If you have any questions about it you know how to reach me.
Craig I am going to send you a utility called Script Writer that is used to create scripts.
If you have any questions about it you know how to reach me.
Wizards Of Eregion Expansion Team Presents:
[url="http://www24.brinkster.com/manveru"]Dagor Laureland[/url]
[url="http://groups.yahoo.com/group/IEEAIS"]Infinity Engine Enemy AI Scriptors Council[/url]
[url="http://www24.brinkster.com/manveru"]Dagor Laureland[/url]
[url="http://groups.yahoo.com/group/IEEAIS"]Infinity Engine Enemy AI Scriptors Council[/url]
OK FOUND IT. Heres a link: [url="http://waterdeep.homeip.net/potenciusnet/POcustoms2.html"]http://waterdeep.homeip.net/potenciusnet/POcustoms2.html[/url]
Wizards Of Eregion Expansion Team Presents:
[url="http://www24.brinkster.com/manveru"]Dagor Laureland[/url]
[url="http://groups.yahoo.com/group/IEEAIS"]Infinity Engine Enemy AI Scriptors Council[/url]
[url="http://www24.brinkster.com/manveru"]Dagor Laureland[/url]
[url="http://groups.yahoo.com/group/IEEAIS"]Infinity Engine Enemy AI Scriptors Council[/url]
KensaiRyu!! YOU deserve the FIVE STAR rating that you have!! Thank you once again for doing the footwork for me! So much to learn, so big of a net to learn it in.
I did retrieve the information from your link. I've bookmarked about a zillion web pages during my search for it, so my time was not wasted - I hope yours wasn't!
Thanks again! *****
I did retrieve the information from your link. I've bookmarked about a zillion web pages during my search for it, so my time was not wasted - I hope yours wasn't!
Thanks again! *****
- velvetfreak
- Posts: 184
- Joined: Mon May 07, 2001 10:00 pm
- Location: Melbourne, Australia
- Contact:
KR you may have noticed I've started posting on bgscripts. I've been spending a lot of time going through the archives, finding out about AttackOneRound vs. AttackReevaluate, the little quirks of ActionListEmpty(), Continue() etc.
If anything my ambitions have scaled back a little. It seems everyone has an opinion on how some routines behave but never a general consensus. I'm just trying to learn as much as I can about the various conditions and actions to put together some fairly simple AI. Like Having my PCs switch to melee straight away instead of trying to get off another shot and getting pounded. (I took out the ActionListEmpty() for the melle attack - fixed)
Hey guys did you know that in addition to the -4 AC penalty you get a -8 to hit penalty with a missile weapon at melee range?!
I spent 2 hours last night trying to debug a script with ideas I'd implemented from Mike P, Gerard B, and LT. As soon as all visible enemies were dead Jaheira would target Nalia (every time) and start wailing. It seemed to be a problem with only one script but I couldn't see the difference between the attack evaluation in that one, and the others I had. When I changed Jaheira's script, Viconia (who had the first script) would target the protagonist. I have a (weak) theory that it's alignment-based, but all my checks against party members were not working either which is also a worry.
After two hours of frustration (and losing valuable playing time) I discarded the changes and went back to the last night's scripts, with a couple of minor tweaks. These I wrote a couple of nights ago, they only handle combat, but I've been very happy with their efficiency - they've taken a standard battle (low to medium level threat) from half-a-dozen pauses to issue directions, to none. It's so nice to just sit back and watch the party wail! <sigh>
Here's the "sniper" code:
IF
ActionListEmpty()
See(NearestEnemyOf(Myself))
OR(2)
!Range(LastSeenBy(Myself),7)
InParty(LastSeenBy(Myself))
Range(LastSeenBy(Myself),10)
THEN
RESPONSE #100
RunAwayFrom(LastSeenBy(Myself),15)
END
IF
ActionListEmpty()
See(NearestEnemyOf(Myself))
!InParty(LastSeenBy(Myself))
!Range(LastSeenBy(Myself),10)
THEN
RESPONSE #100
EquipRanged()
AttackOneRound(LastSeenBy(Myself))
END
IF
// ActionListEmpty()
See(NearestEnemyOf([PC]))
!InParty(LastSeenBy(Myself))
Range(LastSeenBy(Myself),7)
THEN
RESPONSE #100
EquipMostDamagingMelee()
AttackOneRound(LastSeenBy(Myself))
END
IF
CombatCounter(0)
ActionListEmpty()
THEN
RESPONSE #100
EquipRanged()
END
That is literally the whole script for the range-attackers. For the tanks take out the RunAwayFrom block and change the !Range value to 7. The last block makes the party equip a ranged weapon for the next encounter - a bit crude but it does the job (and saves me from a 1/2-minute ritual I used to do at the end of every battle). I'm not even sure if I need it anymore - I never trusted the default scripts to select the appropriate range but this code may (and probably does) work better.
Long post
If anything my ambitions have scaled back a little. It seems everyone has an opinion on how some routines behave but never a general consensus. I'm just trying to learn as much as I can about the various conditions and actions to put together some fairly simple AI. Like Having my PCs switch to melee straight away instead of trying to get off another shot and getting pounded. (I took out the ActionListEmpty() for the melle attack - fixed)
Hey guys did you know that in addition to the -4 AC penalty you get a -8 to hit penalty with a missile weapon at melee range?!
I spent 2 hours last night trying to debug a script with ideas I'd implemented from Mike P, Gerard B, and LT. As soon as all visible enemies were dead Jaheira would target Nalia (every time) and start wailing. It seemed to be a problem with only one script but I couldn't see the difference between the attack evaluation in that one, and the others I had. When I changed Jaheira's script, Viconia (who had the first script) would target the protagonist. I have a (weak) theory that it's alignment-based, but all my checks against party members were not working either which is also a worry.
After two hours of frustration (and losing valuable playing time) I discarded the changes and went back to the last night's scripts, with a couple of minor tweaks. These I wrote a couple of nights ago, they only handle combat, but I've been very happy with their efficiency - they've taken a standard battle (low to medium level threat) from half-a-dozen pauses to issue directions, to none. It's so nice to just sit back and watch the party wail! <sigh>
Here's the "sniper" code:
IF
ActionListEmpty()
See(NearestEnemyOf(Myself))
OR(2)
!Range(LastSeenBy(Myself),7)
InParty(LastSeenBy(Myself))
Range(LastSeenBy(Myself),10)
THEN
RESPONSE #100
RunAwayFrom(LastSeenBy(Myself),15)
END
IF
ActionListEmpty()
See(NearestEnemyOf(Myself))
!InParty(LastSeenBy(Myself))
!Range(LastSeenBy(Myself),10)
THEN
RESPONSE #100
EquipRanged()
AttackOneRound(LastSeenBy(Myself))
END
IF
// ActionListEmpty()
See(NearestEnemyOf([PC]))
!InParty(LastSeenBy(Myself))
Range(LastSeenBy(Myself),7)
THEN
RESPONSE #100
EquipMostDamagingMelee()
AttackOneRound(LastSeenBy(Myself))
END
IF
CombatCounter(0)
ActionListEmpty()
THEN
RESPONSE #100
EquipRanged()
END
That is literally the whole script for the range-attackers. For the tanks take out the RunAwayFrom block and change the !Range value to 7. The last block makes the party equip a ranged weapon for the next encounter - a bit crude but it does the job (and saves me from a 1/2-minute ritual I used to do at the end of every battle). I'm not even sure if I need it anymore - I never trusted the default scripts to select the appropriate range but this code may (and probably does) work better.
Long post
Check my profile for the Glaicas patch
- velvetfreak
- Posts: 184
- Joined: Mon May 07, 2001 10:00 pm
- Location: Melbourne, Australia
- Contact:
Just a couple of things I forgot to mention.
Note the ActionListEmpty command in the melee block is remarked out. For anyone reading who doesn't know what that signifies, it means that the AI will disregard any current actions to perform the new request immediately. Any block without an ALE is basically a high-priority block. This could interrupt spellcasting but as a general behavior it's better than the alternative (I think). It would be nice to find a condition to test to see if the character is spellcasting at the time.
The other thing I wanted to mention is that I have 2 basic scripts: Tank for the Fighters and Clerics, and Sniper for the Thieves and Mages. Works a treat. And for the FindTraps code earlier in the thread, it won't work with the last block (IF CombatCounter(0) then EquipRanged). I took out the whole block and modified the FindTraps block thus:
IF
ActionListEmpty()
!ModalState(DETECTTRAPS)
!See([ENEMY])
!StateCheck(Myself,STATE_INVISIBLE)
!StateCheck(Myself,STATE_IMPROVEDINVISIBILITY)
THEN
RESPONSE #100
EquipRanged()
FindTraps()
END
It's doing basically the same thing, with See([ENEMY]) subbed for the CombatCounter(0).
Sorry about the long post, again, I think this should illustrate how much FUN I've been having since I implemented these scripts
Edit: KR - I forgot to mention - I already found the dialogs reference but thanks all the same
[ 05-22-2001: Message edited by: velvetfreak ]
Note the ActionListEmpty command in the melee block is remarked out. For anyone reading who doesn't know what that signifies, it means that the AI will disregard any current actions to perform the new request immediately. Any block without an ALE is basically a high-priority block. This could interrupt spellcasting but as a general behavior it's better than the alternative (I think). It would be nice to find a condition to test to see if the character is spellcasting at the time.
The other thing I wanted to mention is that I have 2 basic scripts: Tank for the Fighters and Clerics, and Sniper for the Thieves and Mages. Works a treat. And for the FindTraps code earlier in the thread, it won't work with the last block (IF CombatCounter(0) then EquipRanged). I took out the whole block and modified the FindTraps block thus:
IF
ActionListEmpty()
!ModalState(DETECTTRAPS)
!See([ENEMY])
!StateCheck(Myself,STATE_INVISIBLE)
!StateCheck(Myself,STATE_IMPROVEDINVISIBILITY)
THEN
RESPONSE #100
EquipRanged()
FindTraps()
END
It's doing basically the same thing, with See([ENEMY]) subbed for the CombatCounter(0).
Sorry about the long post, again, I think this should illustrate how much FUN I've been having since I implemented these scripts
Edit: KR - I forgot to mention - I already found the dialogs reference but thanks all the same
[ 05-22-2001: Message edited by: velvetfreak ]
Check my profile for the Glaicas patch
- velvetfreak
- Posts: 184
- Joined: Mon May 07, 2001 10:00 pm
- Location: Melbourne, Australia
- Contact:
Kaerdhal - you may want to look up the Infinity Engine project if you have not already done so, and start playing around with Infinity Explorer. The IE Project has a page which has a breakdown of all the resource files' formats. I expect it wouldn't take long to work out which resource file held the paperdolls, but to edit them - <whew> good luck (daunting challenge).
vf
vf
Check my profile for the Glaicas patch
Velvetfreak I believe your players attacking one another was caused by this:
AttackOneRound(LastSeenBy(Myself))
When all enemies are no longer on the screen (right as combat ends) the last seen by switches to the nearest object (in this case the other party members). Try using LastAttackerOf or EVILCUTOFF instead.
I believe it is safer to just avoid that targeting type (lastseenby). Of course thats my opinion, just personal preferance. And yes I noticed your posts there.
I try to keep in the background myself usually sarkyn or mike will answer most of the harder posts. I will be posting there shortly as I am having some unknown probs with my Dragon AI threat assessment script (219kbs).
[ 05-22-2001: Message edited by: KensaiRyu ]
AttackOneRound(LastSeenBy(Myself))
When all enemies are no longer on the screen (right as combat ends) the last seen by switches to the nearest object (in this case the other party members). Try using LastAttackerOf or EVILCUTOFF instead.
I believe it is safer to just avoid that targeting type (lastseenby). Of course thats my opinion, just personal preferance. And yes I noticed your posts there.
I try to keep in the background myself usually sarkyn or mike will answer most of the harder posts. I will be posting there shortly as I am having some unknown probs with my Dragon AI threat assessment script (219kbs).
[ 05-22-2001: Message edited by: KensaiRyu ]
Wizards Of Eregion Expansion Team Presents:
[url="http://www24.brinkster.com/manveru"]Dagor Laureland[/url]
[url="http://groups.yahoo.com/group/IEEAIS"]Infinity Engine Enemy AI Scriptors Council[/url]
[url="http://www24.brinkster.com/manveru"]Dagor Laureland[/url]
[url="http://groups.yahoo.com/group/IEEAIS"]Infinity Engine Enemy AI Scriptors Council[/url]
- velvetfreak
- Posts: 184
- Joined: Mon May 07, 2001 10:00 pm
- Location: Melbourne, Australia
- Contact:
Actually KR I did a comparison and there were only two differences between the bad script and the good one: The bad script had () in place of all instances of (Myself) (assuming the empty brackets defaults to Myself is now something I'm suspicious of), and "AttackReevaluate"s instead of "AttackOneRound"s. I had no instances of homicide with the explicit (Myself) references, I'm going to try and test specifically for this tonight to see if that was the problem.
As for the LastSeenBy business, it wasn't a problem in the good script. And what makes me think that it's not a problem at all, is that I think at one point I tried declaring all objects as NearestEnemyOf and was still getting homicidal behavior. (eg. THEN - AttackReevaluate(NearestEnemyOf(),30))
I don't blame you for lurking on that board, it hasn't been the happiest by going on the history, and some of the exchanges seemed a bit aggressive. I don't see a lot of teamwork on that board, it's more like "this is my idea" "well this is mine" and arguing about how something works, with no final agreement. I know this kind of criticism is a dangerous sport and please don't think I'm making these comments lightly. But what I was hoping to come across was either some definitive answers, or at least people testing the same code and trying to come to the same conclusions. With Thomas's new board (thanks for posting the link BTW) I think there's an opportunity to encourage something like that, and I think that's what he wants too.
Anyway I'm a bit flustered from thinking about all that stuff , I've forgotten if there was anything else I wanted to add.
As for the LastSeenBy business, it wasn't a problem in the good script. And what makes me think that it's not a problem at all, is that I think at one point I tried declaring all objects as NearestEnemyOf and was still getting homicidal behavior. (eg. THEN - AttackReevaluate(NearestEnemyOf(),30))
I don't blame you for lurking on that board, it hasn't been the happiest by going on the history, and some of the exchanges seemed a bit aggressive. I don't see a lot of teamwork on that board, it's more like "this is my idea" "well this is mine" and arguing about how something works, with no final agreement. I know this kind of criticism is a dangerous sport and please don't think I'm making these comments lightly. But what I was hoping to come across was either some definitive answers, or at least people testing the same code and trying to come to the same conclusions. With Thomas's new board (thanks for posting the link BTW) I think there's an opportunity to encourage something like that, and I think that's what he wants too.
Anyway I'm a bit flustered from thinking about all that stuff , I've forgotten if there was anything else I wanted to add.
Check my profile for the Glaicas patch
The reason I mention the LastSeenBy is because it was found in the past to be a major factor in friendly fire, according to Sarkyn and some of the others on Bg scripts. I myself never tested if it was or not as i concentrate more on AI improvements for bad guys than party scripting. However I highly respect Sarkyns opinion and if he says its dagerous to use then I will listen, at least till I see otherwise.
BW scripts is hopefully going to be more team oriented (I think the main reason scripting has not gotten alot more advanced is because of the lack of team work) and friendly, thats why Thomas started it. If I can ever get the upload prob sorted out I will move my files there.
Also the object tags.
The object tags StrongestOf, MostDamagedOf,etc only apply to the party not the monsters. I wish they did apply to the monsters it would have made AI scripting alot better.
Dont get frustrated over the small arguing going on there is still alot to be learned at Bg scripts, its just some members have inflated senses of their own worth (IMO) and think their ideas are the only way (or best).
[ 05-23-2001: Message edited by: KensaiRyu ]
BW scripts is hopefully going to be more team oriented (I think the main reason scripting has not gotten alot more advanced is because of the lack of team work) and friendly, thats why Thomas started it. If I can ever get the upload prob sorted out I will move my files there.
Also the object tags.
The object tags StrongestOf, MostDamagedOf,etc only apply to the party not the monsters. I wish they did apply to the monsters it would have made AI scripting alot better.
Dont get frustrated over the small arguing going on there is still alot to be learned at Bg scripts, its just some members have inflated senses of their own worth (IMO) and think their ideas are the only way (or best).
[ 05-23-2001: Message edited by: KensaiRyu ]
Wizards Of Eregion Expansion Team Presents:
[url="http://www24.brinkster.com/manveru"]Dagor Laureland[/url]
[url="http://groups.yahoo.com/group/IEEAIS"]Infinity Engine Enemy AI Scriptors Council[/url]
[url="http://www24.brinkster.com/manveru"]Dagor Laureland[/url]
[url="http://groups.yahoo.com/group/IEEAIS"]Infinity Engine Enemy AI Scriptors Council[/url]
- velvetfreak
- Posts: 184
- Joined: Mon May 07, 2001 10:00 pm
- Location: Melbourne, Australia
- Contact:
KR - I suspect I have confused you with my vague descriptions (and probably mixing up the terms)
Example: (include a block for EquipRanged with a !Range(LSB(),7)
IF
ActionListEmpty()
See(NearestEnemyOf())
!InParty(LastSeenBy())
Range(LastSeenBy(),7)
THEN
RESPONSE #100
EquipMostDamagingMelee()
AttackReevaluate(NearestEnemyOf(),30)
END
Results in homicide.
IF
ActionListEmpty()
See(NearestEnemyOf(Myself))
!InParty(LastSeenBy(Myself))
Range(LastSeenBy(Myself),7)
THEN
RESPONSE #100
EquipMostDamagingMelee()
AttackOneRound(LastSeenBy(Myself))
END
Doesn't.
All I'm saying about LastSeenBy is that in my testing of this instance I eliminated it as a sole cause of the problem - and that if it's a contributor then so is NearestEnemyOf. Sure it could be one half of a two-part problem. But what I did isolate it to is the use of () in place of (Myself), and/or AttackOneRound in place of AttackReevaluate. I have my hunch but I'll know for sure in an hour and I'll post the result.
I know about the Object tag business per. Sarkyn's post Re: HPLT w. 2 objects on bgscripts. I wasn't referring to that, sorry again if I confused you with my bad terminology.
I think the bottom line will probably be resorting to posting savegames to demonstrate a given behavior, and I'm prepared to do that. The only way this kind of stuff is going to reach consensus is if everyone can reproduce the same results on their own PC. I appreciate everyone can get a bit hot under the collar because scripting takes a whole lot more effort than, say, learning cheat codes.
Example: (include a block for EquipRanged with a !Range(LSB(),7)
IF
ActionListEmpty()
See(NearestEnemyOf())
!InParty(LastSeenBy())
Range(LastSeenBy(),7)
THEN
RESPONSE #100
EquipMostDamagingMelee()
AttackReevaluate(NearestEnemyOf(),30)
END
Results in homicide.
IF
ActionListEmpty()
See(NearestEnemyOf(Myself))
!InParty(LastSeenBy(Myself))
Range(LastSeenBy(Myself),7)
THEN
RESPONSE #100
EquipMostDamagingMelee()
AttackOneRound(LastSeenBy(Myself))
END
Doesn't.
All I'm saying about LastSeenBy is that in my testing of this instance I eliminated it as a sole cause of the problem - and that if it's a contributor then so is NearestEnemyOf. Sure it could be one half of a two-part problem. But what I did isolate it to is the use of () in place of (Myself), and/or AttackOneRound in place of AttackReevaluate. I have my hunch but I'll know for sure in an hour and I'll post the result.
I know about the Object tag business per. Sarkyn's post Re: HPLT w. 2 objects on bgscripts. I wasn't referring to that, sorry again if I confused you with my bad terminology.
I think the bottom line will probably be resorting to posting savegames to demonstrate a given behavior, and I'm prepared to do that. The only way this kind of stuff is going to reach consensus is if everyone can reproduce the same results on their own PC. I appreciate everyone can get a bit hot under the collar because scripting takes a whole lot more effort than, say, learning cheat codes.
Check my profile for the Glaicas patch
- velvetfreak
- Posts: 184
- Joined: Mon May 07, 2001 10:00 pm
- Location: Melbourne, Australia
- Contact:
Well paint me purple and call me a turnip.
I can't even reproduce my own problem. Last night I swear it was totally consistent even down to who would attack who. Tonight the "Tanks" would just stand there idle, regardless of which variation of the script I used. It threw me so much I had to double-check my good script still worked.
I also remembered reading someone's post about the LastSeenBy problem being related to the Targeting being done in one block, and the Attacking done in another. Can't remember if it was Sarkyn or not. But the theory was that perhaps the script was restarting, and the LastSeenBy() target changed from one parsing run to the next. If I've got it right, the trick is that you need to include a Continue() action at the end of your targeting block so that the script doesn't restart - remembering that the entire script will run to the end if you use Continue(). At the scale I'm coding at, I can handle the Attack in the same block as the targeting so it shouldn't matter. It's not like I'm at the point yet where I'm dealing with threat-levels (unlike Sarkyn).
I can't even reproduce my own problem. Last night I swear it was totally consistent even down to who would attack who. Tonight the "Tanks" would just stand there idle, regardless of which variation of the script I used. It threw me so much I had to double-check my good script still worked.
I also remembered reading someone's post about the LastSeenBy problem being related to the Targeting being done in one block, and the Attacking done in another. Can't remember if it was Sarkyn or not. But the theory was that perhaps the script was restarting, and the LastSeenBy() target changed from one parsing run to the next. If I've got it right, the trick is that you need to include a Continue() action at the end of your targeting block so that the script doesn't restart - remembering that the entire script will run to the end if you use Continue(). At the scale I'm coding at, I can handle the Attack in the same block as the targeting so it shouldn't matter. It's not like I'm at the point yet where I'm dealing with threat-levels (unlike Sarkyn).
Check my profile for the Glaicas patch
_____________________________________________
At the scale I'm coding at, I can handle the Attack in the same block as the targeting so it shouldn't matter. It's not like I'm at the point yet where I'm dealing with threat-levels (unlike Sarkyn).
_____________________________________________
VelvetFreak you are correct I believe most of the problems with last seen by were caused by targeting in another segment, dont let me dissaude you at all, im just rather stuck in my ways I guess.
Craig
IF
HPPercentLT(Myself,50)//If my hit points
// are less than 50%
HasItem("Potn52",Myself)//And I have a Potion
// (of extra healing)
THEN
RESPONSE #100
UseItem("Potn52",Myself)//drink the potion
DisplayStringHead(Myself,46150)//quaffs a
// potion
END
IF // if my hitpoints are less than
HPPercentLT(Myself,15)// 15%
THEN
RESPONSE #100 // Run away
RunAwayFrom(LastAttackerOf(Myself),150)
END
At the scale I'm coding at, I can handle the Attack in the same block as the targeting so it shouldn't matter. It's not like I'm at the point yet where I'm dealing with threat-levels (unlike Sarkyn).
_____________________________________________
VelvetFreak you are correct I believe most of the problems with last seen by were caused by targeting in another segment, dont let me dissaude you at all, im just rather stuck in my ways I guess.
Craig
IF
HPPercentLT(Myself,50)//If my hit points
// are less than 50%
HasItem("Potn52",Myself)//And I have a Potion
// (of extra healing)
THEN
RESPONSE #100
UseItem("Potn52",Myself)//drink the potion
DisplayStringHead(Myself,46150)//quaffs a
// potion
END
IF // if my hitpoints are less than
HPPercentLT(Myself,15)// 15%
THEN
RESPONSE #100 // Run away
RunAwayFrom(LastAttackerOf(Myself),150)
END
Wizards Of Eregion Expansion Team Presents:
[url="http://www24.brinkster.com/manveru"]Dagor Laureland[/url]
[url="http://groups.yahoo.com/group/IEEAIS"]Infinity Engine Enemy AI Scriptors Council[/url]
[url="http://www24.brinkster.com/manveru"]Dagor Laureland[/url]
[url="http://groups.yahoo.com/group/IEEAIS"]Infinity Engine Enemy AI Scriptors Council[/url]