Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Self.mp not working
#1
I got a question about AI scripting (only one at this moment, but I am still having problems all the time, so there just might be more problems coming up that I don't know how to fix :P).

1. Self.mp.

My character can recharge MP by pressing DJA+A+A+A... I made the input DJA+DJA+A+A+A... for the AI as the normal input didn't work well.
I got a question regarding the self.mp tag in the script. I have it there, but it doesn't seem to work. The AI is supposed to stop pressing A when his MP is >400. However, it doesn't. He DOES stop charging when the opponent is in his space (< 225 on x-axis, < 60 on z-axis). Who knows what the problem might be?

    DC-Code:
if (abs(100*(self.z-target.z)/((self.x-target.x)*((self.facing?1:0)*2-1))) <= 15 && abs(self.x-target.x) > 300 && abs(self.x-target.x) < 600){
    if (self.mp >= 300 && self.x-target.x > 0){DlJ();}         //D<J
  else if (self.mp >= 300 && self.x-target.x < 0){DrJ();}   //D>J
  else if (self.mp <= 200 && (self.x-target.x > 225 && self.z-target.z > 60)) {DJA();}         //DJA


..and later in the script

    DC-Code:
if (self.frame == 198) {DJA();} //DJA+A+A.. (this leads to the first charge, the rest of the charging is done by pressing Attack:)
 
if ((self.mp <= 400) && self.frame == 21 || self.frame == 20 || self.frame == 22 && (self.x-target.x > 225 && self.z-target.z > 60)) {A();} //DJA+A+A..
if ((self.mp <= 400) && self.frame == 21 || self.frame == 20 || self.frame == 22 && (target.state == 12 || target.state == 14)) {A();} // DJA+A+A..


Or can a limit of 500 MP be set in data? (I don't think so, right?)
Original character edits
Goku2021
LF2 Timelapse (open source mod)

Reply
Thanks given by:
#2
    DC-Code:
if ((self.mp <= 400) && (self.frame == 21 || self.frame == 20 || self.frame == 22) && (self.x-target.x > 225 && self.z-target.z > 60)) {A();}
You need to brace those or else it will keep pressing A even if it's just in frame 20 and no other conditions are met.
Reply
Thanks given by:
#3
(06-30-2013, 11:58 AM)YinYin Wrote:  
    DC-Code:
if ((self.mp <= 400) && (self.frame == 21 || self.frame == 20 || self.frame == 22) && (self.x-target.x > 225 && self.z-target.z > 60)) {A();}
You need to brace those or else it will keep pressing A even if it's just in frame 20 and no other conditions are met.

I tried that also. But it still doesn't work. It looks like this now:
    DC-Code:
else if ((self.mp <= 200) && (self.x-target.x > 225 && self.z-target.z > 60)) {DJA();}         //DJA


And

    DC-Code:
if ((self.mp <= 400) && (self.frame == 21 || self.frame == 20 || self.frame == 22) && (self.x-target.x > 225 && self.z-target.z > 60)) {A();} //DJA+A+A..
if ((self.mp <= 400) && (self.frame == 21 || self.frame == 20 || self.frame == 22) && (target.state == 12 || target.state == 14)) {A();} // DJA+A+A..


Still keeps charging for unlimited time. And he also starts a new charge when MP is full.

Another detail: I noticed that when the self.z-target.z tag is working, but the self.x-target.x one is not. Now he charges no matter what the distance on the x-axis is. But when it is bigger than +- 225 on the x-axis, he charges slower (only does DJA+DJA). :s


This is the whole code in case you think it's something bigger..
    DC-Code:
int ego(){
//close range:
if (target.y == 0 && abs(target.z-self.z) < 9 && (self.x-target.x)*((self.facing?1:0)*2-1) < 0 && (self.x-target.x)*((self.facing?1:0)*2-1) < 100 && target.state == 16 && self.mp >= 200){
 if (abs(self.x-target.x) > 0 && (self.state == 2 || self.state == 0)){
  if (self.x-target.x > 0){left();}         //turn back
  else {right();}
 }
 else if (self.x-target.x < 0){left();}  //adjust x for D^A
 else {right();}
 return 1;
}//basic move conditions:
else if (target.y == 0 && abs(target.z-self.z) < 9 && (self.x-target.x)*((self.facing?1:0)*2-1) > 0 && (self.x-target.x)*((self.facing?1:0)*2-1) < 120){
        if (self.state == 7 && self.bdefend > 20 && self.mp >= 30 && self.mp < 220 && (self.x-target.x)*((self.facing?1:0)*2-1) < 2 && ((self.z-target.z) == 0) && self.x-target.x < 15) {DuA();}
         if (self.state == 7 && self.bdefend > 20 && self.mp >= 220 && (self.x-target.x)*((self.facing?1:0)*2-1) < 2 && ((self.z-target.z) == 0)) {DuJ();}        
        if ((target.state == 0 || target.state == 1 || target.state == 7 || target.state == 9 || target.state == 16 || target.state == 8) && (self.x-target.x)*(2*(self.facing?1:0)-1) < 120 && (self.x-target.x)*(2*(self.facing?1:0)-1) >= 70 && (self.z-target.z) <= 2 && self.mp >= 120) {DdA();}
 
 else if (target.state == 16 && self.mp >= 250){                              //adjust x for D^A
  if (self.x-target.x < 0){left();}
  else {right();}
  return 1;
 }
 else if ((target.state == 8 || target.state == 16) && (self.x-target.x < 15)) {DuA();}    //DuA against DoP and broken defense
 else if (target.state == 3 && self.mp >= 50){D();}          //defend
 if (self.state == 7 && self.bdefend >= 20){DuA();}         //defend + DuA
}
//long/mid range:
else if (self.x-target.x != 0){
 if ((self.x-target.x)*(2*(self.facing?1:0)-1) > 120 && ((self.x-target.x)*(2*(self.facing?1:0)-1) < 300) && self.y-target.y == 0) {
   if (self.x-target.x > 180 && self.x-target.x < 300 && self.mp >= 150 && self.z-target.z < 5) {DdJ();} //high jump
  else if ((self.x-target.x)*(2*(self.facing?1:0)-1) > 300 && (self.x-target.x)*(2*(self.facing?1:0)-1) >= 150 && self.mp < 200 && self.mp > 80 && (self.z-target.z) == 0) {DrA();}   //D>A
  else if (self.x-target.x > 0){left();}         //turn back
  else {right();}
 }
 if (abs(100*(self.z-target.z)/((self.x-target.x)*((self.facing?1:0)*2-1))) <= 15 && abs(self.x-target.x) > 300 && abs(self.x-target.x) < 600){
    if (self.mp >= 300 && self.x-target.x > 0){DlJ();}         //D<J
  else if (self.mp >= 300 && self.x-target.x < 0){DrJ();}   //D>J
  else if ((self.mp <= 200) && (self.x-target.x > 225 && self.z-target.z > 60)) {DJA();}         //DJA
  else if (self.x-target.x > 0){right();}         //go towards opponent
  else {left();}
 
 }
}
//instant attacks
if (self.state == 5){A();}                                               //dash attack
if (self.frame == 121 && self.mp > 200) {DuA();}                                            //DuA catching
if (self.frame == 198) {DJA();} //DJA+A+A..
if ((self.mp <= 400) && (self.frame == 21 || self.frame == 20 || self.frame == 22) && (self.x-target.x > 225 && self.z-target.z > 60)) {A();} //DJA+A+A..
if ((self.mp <= 400) && (self.frame == 21 || self.frame == 20 || self.frame == 22) && (target.state == 12 || target.state == 14)) {A();} // DJA+A+A..
if ((self.frame == 290 && self.mp >= 200 && abs(target.z-self.z) < 9 && (self.x-target.x)*((self.facing?1:0)*2-1) > 0 && (self.x-target.x)*((self.facing?1:0)*2-1) < 50)){DuA();} // DvA+D^A
if ((self.frame == 292) && target.state == 11 || (target.state == 16)) {A();} //sonic rush + punch down
if ((self.frame == 74 || self.frame == 75 && self.mp >= 120 && (target.state == 12 || self.y-target.y > 20) && target.z-target.z < 3)) {A();} // D^A + kame up
if (self.frame == 149 && self.mp >= 125 && (self.x-target.x)*((self.facing?1:0)*2-1) > 60 && (self.x-target.x)*((self.facing?1:0)*2-1) < 300 && (abs(self.z-target.z) < 6)) {A();} //jump kame
if (self.frame == 244 && (self.mp >= 85) && ((self.z-target.z) > 2) || self.x-target.x < 0) {DuJ();} //IT Kamehameha
if (self.frame == 244 && (self.mp >= 85) && target.state == 14) {DuJ();} //IT Kamehameha
if (self.frame == 337 || self.frame == 129 || self.frame == 338 || self.frame == 124 && (abs(100*(self.z-target.z)/(self.x-target.x)) <= 15)) {D();} //D>A stop
if (self.frame == 337 || self.frame == 129 || self.frame == 338 || self.frame == 124 && (target.state == 14) || target.state == 12) {D();} //D>A stop
return 0;
}



PS YinYin, I really appreciate that you're always there to help people out.
Original character edits
Goku2021
LF2 Timelapse (open source mod)

Reply
Thanks given by:
#4
There certainly are more mistakes related to || - also you got a target.z-target.z somewhere in there.

However fixing any of those may not do the job as the basic AI could still be pressing attack.
To prevent that just put this on top of everything else:
    DC-Code:
if ((self.mp >= 400) && (self.frame == 21 || self.frame == 20 || self.frame == 22)) return 1;

This will skip basic AI as long as it tries to perform a special move (and also the rest of your AI below this line).
Reply
Thanks given by: Memento
#5
(06-30-2013, 01:31 PM)YinYin Wrote:  There certainly are more mistakes related to || - also you got a target.z-target.z somewhere in there.

However fixing any of those may not do the job as the basic AI could still be pressing attack.
To prevent that just put this on top of everything else:
    DC-Code:
if ((self.mp >= 400) && (self.frame == 21 || self.frame == 20 || self.frame == 22)) return 1;

This will skip basic AI as long as it tries to perform a special move (and also the rest of your AI below this line).

I added this line but the AI still presses attack and DJA when the MP is full..

I don't think fixing the other small mistakes will do the job.. I mean, they aren't related to the charging inputs, right?
Also, I would like to fix the mistakes, but I am not sure if I see them.. What mistakes are you talking about, brackets?
Original character edits
Goku2021
LF2 Timelapse (open source mod)

Reply
Thanks given by:
#6
(06-30-2013, 02:37 PM)Neocrypt Wrote:  What mistakes are you talking about, brackets?
Mostly yes, but I cannot be sure because I don't know what you actually want to do for each point.
I suggest you to simply paste identifying print commands all over your script to see where the unwanted input is actually coming from.
Once you know you can again put a print right in front of the conditional if that should not trigger and let it print out the whole or parts of that condition.
That way you'll find the mistake.
Reply
Thanks given by:




Users browsing this thread: 1 Guest(s)