Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool currentFacing = false;
- //true if within z range
- bool zdst(int range){
- if(abs(self.z-target.z)<=range){return true;}
- else{return false;}
- }
- //true if within x range
- bool xdst(int close, int far){
- if(abs(self.x-target.x)>=close && abs(self.x-target.x)<=far){return true;}
- else{return false;}
- }
- int zxratio() {
- return abs(self.z-target.z)*100/(abs(self.x-target.x)+1);
- }
- //
- bool face(){
- return (self.x-target.x) >0;
- }
- //true if hitable
- bool canhit(int fall){
- if(fall==2 && (target.state==16||target.state==8)){return true;}
- else if(fall>=1 && target.state==12){return false;}
- else if(target.blink!=0 || target.state==14 || target.state==6){return false;}
- else{return true;}
- }
- bool loosehit(){
- if(target.state==16||target.state==8 || target.state==12){return true;}
- else if(target.blink!=0 || target.state==14 || target.state==6){return false;}
- else{return true;}
- }
- //true if within frame range
- bool frame(int first, int last){
- if(self.frame>=first && self.frame<=last){return true;}
- else{return false;}
- }
- //perform D<>A towards target
- void DfA(){
- if(face()) {
- DlA();
- currentFacing = false;
- }
- else {
- currentFacing = true;
- DrA();
- }
- }
- //perform D<>J towards target
- void DfJ(){
- if(face()) {
- DlJ();
- }
- else {
- DrJ();
- }
- }
- //void unwanted inputs
- void inputs(){
- if(self.DuA>=2||self.DrA>=2||self.DlA>=2||self.DdA>=2||self.DuJ>=2||self.DrJ>=2||self.DlJ>=2||self.DdJ>=2){up();down();}
- }
- //is attacking?
- bool attack(){
- int x=target.state;
- int i=0;
- do{x/=10;i++;}while(x>0);
- x=1;for(i; i > 1; --i){x*=10;}
- if(target.state/x==3){return true;}else{return false;}
- }
- //turn against
- void turn(){
- if(face()){if(self.facing==true){right();}else{left();}}
- }
- void loadClosestE() {
- // Load nearest enemy
- int k = 0;
- int tx = 9999;
- for (int i = 0; i < 400; ++i){
- if (loadTarget(i) != -1 && target.type == 0 && target.team != self.team && abs(self.x-target.x)<tx){
- tx = abs(self.x-target.x);
- k = i;
- }
- }
- loadTarget(k);
- }
- bool loadClosestH() {
- bool hexist = false;
- // Load nearest heavy weapon
- int k = 0;
- int tx = 9999;
- for (int i = 0; i < 400; ++i){
- if (loadTarget(i) != -1 && target.type == 2 && abs(self.x-target.x)<tx && zxratio()<0.15){
- tx = abs(self.x-target.x);
- k = i;
- hexist = true;
- }
- }
- loadTarget(k);
- return hexist;
- }
- bool loadClosestP() {
- bool pexist = false;
- // Load nearest hostile projectile
- int k = 0;
- int tx = 9999;
- for (int i = 0; i < 400; ++i){
- if (loadTarget(i) != -1 && target.type > 0 && target.type != 5
- && (target.state == 1001 ||target.state == 1002 ||target.state == 3005 ||target.state == 3006 ||target.state == 3000 ||target.state == 15)
- && target.team != self.team && abs(self.x-target.x)<tx && zxratio()<0.15){
- tx = abs(self.x-target.x);
- k = i;
- pexist = true;
- }
- }
- loadTarget(k);
- return pexist;
- }
- bool distance_attack_danger()
- {
- if (xdst(0,400) && zxratio()<15)
- return true;
- else
- return false;
- }
- bool distance_attack_alert()
- {
- if (xdst(200,450) && zxratio()<15)
- return true;
- else
- return false;
- }
- bool diagonal_attack_danger()
- {
- if (xdst(0,80) && zxratio()>15)
- return true;
- else
- return false;
- }
- bool zero_range_danger()
- {
- if (xdst(0,90) && zxratio()<15)
- return true;
- else
- return false;
- }
- int projectx()
- {
- return target.x + 2* target.x_velocity;
- }
- int projectz()
- {
- return target.z + 2* target.z_velocity;
- }
- //true if within z range
- bool zprojdst(int range){
- if(abs(self.z-projectz())<=range){return true;}
- else{return false;}
- }
- //true if within x range
- bool xprojdst(int close, int far){
- if(abs(self.x-projectx())>=close && abs(self.x-projectx())<=far){return true;}
- else{return false;}
- }
- int ego() {
- // Debug prints and hblock detection
- clr();
- loadClosestE();
- print("self x=" + self.x + "\n");
- print("self z=" + self.z + "\n");
- print("enemy z proj des=" + abs(self.x-projectx()) + "\n");
- print("enemy z proj des=" + abs(self.z-projectz()) + "\n");
- print("enemy x distance=" + abs(self.x-target.x) + "\n");
- print("enemy z distance=" + abs(self.z-target.z) + "\n");
- print("enemy z proj des=" + abs(self.x-projectx()) + "\n");
- print("enemy z proj des=" + abs(self.z-projectz()) + "\n");
- print("enemy zx ratio=" + zxratio() + "\n");
- print("enemy can hit=" + canhit(1) + "\n");
- print("enemy state=" + target.state + "\n");
- print("self.framee=" + self.frame + "\n");
- if (loadClosestP())
- if (distance_attack_danger())
- print("distance_attack_danger\n");
- loadClosestE();
- if (distance_attack_alert())
- print("distance_attack_alert\n");
- if (diagonal_attack_danger())
- print("diagonal_attack_danger\n");
- if (zero_range_danger())
- print("zero_range_danger\n");
- bool hblock = false;
- // Detects if heavy object is on the way
- if (loadClosestH()) {
- bool hface = face();
- int hdis = abs(self.x-target.x);
- loadClosestE();
- if (face() == hface && abs(self.x-target.x)>hdis) {
- hblock = true;
- }
- }
- //combos
- //DfA+A
- else if (distance_attack_alert() && rand(15)>12) {
- if(bg_zwidth2-self.z > self.z-bg_zwidth1 && rand(5)>2) {
- up();
- return 0;
- }
- else {
- down();
- return 0;
- }
- }
- else if(frame(243,244)
- && rand(10)>2
- && !hblock
- && !zero_range_danger() ) {
- A();
- return 0;
- }
- //DfA+A+A
- else if(frame(250,250)
- && rand(10)>2
- && !hblock ) {
- A();
- return 0;
- }
- // D^J
- else if (xdst(0,120)
- && abs(zxratio())>40
- && abs(zxratio())<80
- && !zero_range_danger()
- && !distance_attack_danger()
- && rand(10)>3
- && self.mp>=200) {
- DuJ();
- }
- // D^J
- else if (xdst(0,120)
- && abs(zxratio())<100
- && target.state == 16
- && !distance_attack_danger()
- && self.mp>=200) {
- DuJ();
- }
- // start DvA
- else if(xdst(40,110)
- &&self.mp>=25
- && (rand(10)>3 || target.state==16 || target.state==11 || target.state==12)
- && (abs(zxratio())<15)) {
- DdA();
- }
- else if(xdst(40,110)
- // start DvA
- &&self.mp>=25
- && (rand(10)>3 || target.state==16 || target.state==11 || target.state==12)
- && (abs(zxratio())<15)) {
- DdA();
- }
- // start D>J
- else if(loosehit()
- &&xdst(60,180)
- &&self.mp>=200
- && (abs(zxratio())<15)
- && !distance_attack_danger()) {
- DfJ();
- }
- //start D>A (triangular fork area)
- else if(loosehit() && !zero_range_danger()
- &&xdst(120,500)
- &&self.mp>=150
- && (abs(zxratio())<1 || (abs(zxratio())<10 &&abs(zxratio())<13))
- && !hblock
- && !zero_range_danger()) {
- DfA();
- }
- else if(loosehit()
- &&xdst(80,120)
- &&self.mp>=150
- && (abs(zxratio())<5)
- && !hblock) {
- DfA();
- }
- else{inputs();}
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement