Little Fighter Empire - Forums
[solved] loadtarget problem - Printable Version

+- Little Fighter Empire - Forums (https://lf-empire.de/forum)
+-- Forum: Little Fighter 2 Zone (https://lf-empire.de/forum/forumdisplay.php?fid=7)
+--- Forum: AI Scripting (https://lf-empire.de/forum/forumdisplay.php?fid=56)
+--- Thread: [solved] loadtarget problem (/showthread.php?tid=9906)



[solved] loadtarget problem - bashscrazy - 05-22-2015

MY GOALS:
Character 1 and Character 2 are on the same team and when they are both on same z axis and close to each other they both execute a move.

MY METHOD:
I am using loadtarget so I can make the ally a target for interaction.

MY PROBLEM:
When they aren't using the attack they aim their other attacks at each other. Particularly D>A and D>J they attempt to use those moves on each other because they are now marked as a target.

Is there a solution to this or an alternative method to execute a "team attack" without them trying to kill each other?

Here's my sh**** code if you want to look at it, idk if that will matter or help (Click to View)

edit: idk why I'm trying to hide it, it's so obvious what I'm trying to do.
Basically I want to make Goku and Vegeta AI's fuse into Vegito during certain conditions, I haven't exactly implemented them in the code above fully because I wanted to see if it works, but as I stated, they try to attack each other sometimes.

edit2: also make it so when you use the move, they will chase towards you and use it. Is that possible? I tried and failed miserably.


RE: loadtarget problem - Som1Lse - 05-22-2015

Could you give a complete example?
You posted only a snippet of code, and I do not see any problems with it, so my guess is that your problem lies elsewhere.

Also, [code=ai] is a thing, and so are indentations:
    AI-Code:
for (int i = 0; i < 400; ++i)
{
    if (loadTarget(i) == 0 )
    {
        if (target.id==74 && target.team == self.team)
        {
            //2 COMs
            if (i > 8 && target.id==74 && (abs(self.z-target.z) < 5) && abs(self.x-target.x) > 75 && abs(self.x-target.x) < 400 && difficulty==-1)
            {
                DdA();
            }
            //Human + COM
            if (target.id == 74 && target.frame > 356 && target.frame < 369 &&  (abs(self.z-target.z) < 5) && abs(self.x-target.x) > 100 && abs(self.x-target.x) < 475) {
                DdA(); 
            }
        } 
    }
}



RE: loadtarget problem - bashscrazy - 05-22-2015

Oh true, I set it as C code but idk why it's not there anymore.

Code:
//Vegeta (Buu)


int ego(){

if (target.team == self.team)
{
print ("The character is on my team");
}


/*
int k = target.num;
for (int i = 0; i < 400; ++i)
{
if (loadTarget(i) == 0 && target.id==74 && target.team==self.team)
{
k = i;
}
}
*/


for (int i = 0; i < 400; ++i)
{
if (loadTarget(i) == 0 && target.id==74 && target.team == self.team )
{
//2 COMs
if (i > 8 && target.id==74 && (abs(self.z-target.z) < 5) && abs(self.x-target.x) > 75 && abs(self.x-target.x) < 400 && difficulty==-1)
{
DdA();
}
//Human + COM
if (target.id == 74 && target.frame > 356 && target.frame < 369 &&  (abs(self.z-target.z) < 5) && abs(self.x-target.x) > 100 && abs(self.x-target.x) < 475) {
//DdA();
}
}
}


if (self.frame > 356 && self.frame < 378) {
A(1,0);
}

//if target not on same plane during ki blasts change direction
if (self.frame > 239 && self.frame < 251 && abs(self.z-target.z) > 8)
{
if ( rand(3) == 1)
up(1,0);
else if (rand(3) == 2)
down(1,0);
else
left(1,0);
}


//easy
if (difficulty == 2) {
//Super Saiyan
if ((abs(self.x-target.x) > 250) && self.hp < 100) {
DJA();
J(1,0);
}

//Double Galick Cannon
if ((abs(self.z-target.z) < 5) && ((self.x-target.x) < 100) && ((self.x-target.x) > 50) && self.mp > 450) {
 DdJ();
}  

//Ki Blasts
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) > 150 && self.mp > 125){
 int randomval = rand(10);
 if (self.x-target.x > 0 && randomval > 8){
DlA(); //D<A
A(1,0);
 }  
else if (self.x-target.x < 0 && randomval > 8){
 DrA(); //D>A
 A(1,0);
 }
 else if (self.x-target.x > 0 && randomval < 1){
DlA(); //D<A
D(1,0);
 }  
 
 else if (self.x-target.x > 0 && randomval < 1){
DrA(); //D>A
D(1,0);
 }  
}
}
//normal
else if (difficulty == 1) {

//Super Saiyan
if ((abs(self.x-target.x) > 250) && self.hp < 275) {
DJA();
J(1,0);
}
//Charge Ki
else if ((abs(self.x-target.x) > 500) && self.mp < 400 ) {
DJA();
A(1,0);
}

//Double Galick Cannon Caught
if (self.frame==121 && self.mp > 400) {
  DdJ();
}
//Double Galick Cannon
if ((abs(self.z-target.z) < 5) && ((self.x-target.x) < 100) && ((self.x-target.x) > 50) && self.mp > 375) {
 DdJ();
}
 
//Tele Counter Attack
if ( ((self.x-target.x) < 60) && ((self.x-target.x) > 20) && self.frame==111) {
 A(1,0);
}
//Kick Counter Attack
if (((self.x-target.x) < 40) && ((self.x-target.x) > 0) && self.frame==111) {
 J(1,0);
}

//Ki Blasts
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) > 150 && self.mp > 125){
 int randomval = rand(5);
 if (self.x-target.x > 0 && randomval > 3){
DlA(); //D<A
A(1,0);
 }  
else if (self.x-target.x < 0 && randomval > 3){
 DrA(); //D>A
 A(1,0);
 }
 else if (self.x-target.x > 0 && randomval < 1){
DlA(); //D<A
D(1,0);
 }  
 
 else if (self.x-target.x > 0 && randomval < 1){
DrA(); //D>A
D(1,0);
 }  
}
}
//difficult
else if (difficulty == 0) {



//Super Saiyan
if ((abs(self.x-target.x) > 250) && self.mp > 225 && self.hp < 350) {
DJA();
J(1,0);
}

//Charge Ki
else if ((abs(self.x-target.x) > 500) && self.mp < 500 ) {
DJA();
A(1,0);
}

//Double Galick Cannon Caught
if (self.frame==121 && self.mp > 300) {
  DdJ();
}
//Double Galick Cannon
if ((abs(self.z-target.z) < 5) && ((self.x-target.x) < 100) && ((self.x-target.x) > 50) && self.mp > 250) {
 DdJ();
}
 
//Tele Counter Attack
if ( ((self.x-target.x) < 60) && ((self.x-target.x) > 20) && self.frame==111) {
 A(1,0);
}
//Kick Counter Attack
if (((self.x-target.x) < 40) && ((self.x-target.x) > 0) && self.frame==111) {
 J(1,0);
}

if (target.state==50) {
if (self.x-target.x > 0) {
right(1,0);
D(1,0);
}
else if (self.x-target.x < 0) {
left(1,0);
D(1,0);
}
}

//Ki Blasts
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) > 150 && self.mp > 125){
 int randomval = rand(5);
 if (self.x-target.x > 0 && randomval > 3){
DlA(); //D<A
A(1,0);
 }  
else if (self.x-target.x < 0 && randomval > 3){
 DrA(); //D>A
 A(1,0);
 }
 else if (self.x-target.x > 0 && randomval < 1){
DlA(); //D<A
D(1,0);
 }  
 
 else if (self.x-target.x > 0 && randomval < 1){
DrA(); //D>A
D(1,0);
 }  
}
}
//crazy
else if (difficulty == -1) {

//MAJIN
if ((abs(self.x-target.x) > 250) && self.mp > 400 && self.hp < 250) {
DJA();
D(1,0);
}
//Super Saiyan
else if ((abs(self.x-target.x) > 250) && self.mp > 225 && self.hp < 450) {
DJA();
J(1,0);
}
//Charge Ki
else if ((abs(self.x-target.x) > 500) && self.mp < 500 ) {
DJA();
A(1,0);
}

//Double Galick Cannon Caught
if (self.frame==121 && self.mp > 250) {
  DdJ();
}
//Double Galick Cannon
if ((abs(self.z-target.z) < 5) && ((self.x-target.x) < 100) && ((self.x-target.x) > 50) && self.mp > 200) {
 DdJ();
}
 
//Tele Counter Attack
if ( ((self.x-target.x) < 60) && ((self.x-target.x) > 20) && self.frame==111) {
 A(1,0);
}
//Kick Counter Attack
if (((self.x-target.x) < 40) && ((self.x-target.x) > 0) && self.frame==111) {
 J(1,0);
}



//Ki Blasts
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) > 150 && self.mp > 125){
 int randomval = rand(5);
 if (self.x-target.x > 0 && randomval > 2){
DlA(); //D<A
A(1,0);
 }  
else if (self.x-target.x < 0 && randomval > 2){
 DrA(); //D>A
 A(1,0);
 }
 else if (self.x-target.x > 0 && randomval < 1){
DlA(); //D<A
D(1,0);
 }  
 
 else if (self.x-target.x > 0 && randomval < 1){
DrA(); //D>A
D(1,0);
 }  
}
}






return 0;
}

edit: THANKS YINYIN!


RE: loadtarget problem - YinYin - 05-22-2015

Pretty simple:
remember the original target.

int target = target.num;

//do team move stuff

loadtarget(target);

//do other stuff


RE: loadtarget problem - Som1Lse - 05-22-2015

(05-22-2015, 12:55 PM)YinYin Wrote:  Pretty simple:
remember the original target.

int target = target.num;

//do team move stuff

loadtarget(target);

//do other stuff
Probably should not call the variable target, as you would be overwriting the global variable target, which will cause things to go weird.
Other than that, then yes, this is the solution.