#define gpp getplayerproperty
#define cpp changeplayerproperty
#define gep getentityproperty
#define cep changeentityproperty
#define ov openborvariant
#define cv changeopenborvariant
#define oc openborconstant
#define glv getlocalvar
#define slv setlocalvar
#define sev setentityvar
#define gev getentityvar
#define sgv setglobalvar
#define ggv getglobalvar
#define glvp getlevelproperty
#define clvp changelevelproperty
#define glp getlayerproperty
#define clp changelayerproperty
#define si setidle
#define pa performattack
int trunc(int num) {
int sign = 1;
if ( num < 0 ) {
sign = -1;
num *= -1;
}
num = num%(num+1);
num *= sign;
return num;
}
float abs(float num) {
if (num < 0) num *= -1;
return num;
}
int exp(int base, int exp) {
int i = 0;
int result;
int sign = 1;
if ( base < 0 ) sign = -1;
base = abs(base);
exp = abs(exp);
result = base;
if ( exp == 0 ) return 1;
for ( i = 0; i < exp-1; ++i ) {
result *= base;
}
result *= sign;
return result;
}
char getchar(char str, int index) {
if ( index >= strlength(str) ) index = strlength(str)-1;
else if ( index < 0 ) index = 0;
if ( strlength(str) > 0 ) {
str = strright(str, index);
if ( strlength(str) > 1 ) {
index = 1;
str = strleft(str, index);
}
}
return str;
}
char substr(char str, int start_index, int length) {
if ( start_index+length > strlength(str) ) return NULL();
if ( start_index < 0 || strlength(str) <= 0 ) return NULL();
str = strright(str, start_index);
str = strleft(str, length);
return str;
}
char search_str(char str, char sub, int case_flag) {
char substr;
if ( str == NULL() || sub == NULL() ) return -1;
if ( case_flag == NULL() ) case_flag = 0;
if ( case_flag ) substr = strinfirst(lowercase(str), lowercase(sub));
else substr = strinfirst(str, sub);
return substr;
}
char replace_str(char txt, char pat, char rep) {
char str_left = "", str_right = "";
int len = strlength(pat);
str_left = strinfirst(txt,pat);
if ( str_left == -1 ) return -1;
str_left = substr(txt,0,strlength(txt)-strlength(str_left));
str_right = strinfirst(txt,pat);
str_right = substr(str_right,len,strlength(str_right)-len);
return ( str_left+rep+str_right );
}
int searchstr_index(char txt, char pat, int reverse_flag) {
char tmp = "";
tmp = strinfirst(txt,pat);
if ( tmp == -1 ) return -1;
else return ( strlength(txt)-strlength(tmp) );
}
int parse_vars() {
void self = glv("self");
char name = gep(self,"name");
char model = gep(self,"model");
char str = name, tmp_str = "", param = "";
char value = "";
int i = 0, si = 0;
tmp_str = "";
while( tmp_str != -1 ) {
tmp_str = replace_str(str," ","");
if ( tmp_str != -1 ) str = tmp_str;
}
tmp_str = "";
while( tmp_str != -1 ) {
tmp_str = replace_str(str," ","");
if ( tmp_str != -1 ) str = tmp_str;
}
tmp_str = "";
tmp_str = replace_str(str,"[","");
if ( tmp_str == -1 ) return 0;
else str = tmp_str;
tmp_str = "";
tmp_str = replace_str(str,"]","");
if ( tmp_str == -1 ) return 0;
else str = tmp_str;
si = 0;
while( si != -1 ) {
si = searchstr_index(str,"=");
if ( si == -1 ) break; // no more params
// get substring
si = searchstr_index(str,";");
if ( si != -1 ) param = substr(str,0,si+1);
else param = str;
// update string - param
str = substr(str,strlength(param),strlength(str)-strlength(param));
// remove all ";"
tmp_str = "";
while( tmp_str != -1 ) {
tmp_str = replace_str(param,";","");
if ( tmp_str != -1 ) param = tmp_str;
}
// parse param and value
si = searchstr_index(param,"=");
value = param;
param = substr(param,0,si);
value = substr(value,si+1,strlength(value)-si-1);
if ( is_float(value) ) sev(self,param,to_float(value));
else sev(self,param,value);
}
if ( gev(self,"name") == NULL() ) {
cep(self,"name",model);
} else cep(self,"name",gev(self,"name"));
//drawstring(10,50,0,"alias: "+gev(self,"name"));
return 1;
}
float to_float(char num) {
char str_decimal = "", str_mantix = "", str_digit = "", tmp = "";
int decimal = 0, sign = 1, sign_flag = 0;
float digit = 0;
int i = 0;
float float_num = 0, mantix = 0;
i = searchstr_index(num,".");
if ( i != -1 ) {
str_decimal = substr(num,0,i);
str_mantix = substr(num,i+1,strlength(num)-i-1);
} else {
str_decimal = num;
str_mantix = "";
}
tmp = getchar(str_decimal,0);
if ( tmp == "+" ) { sign = 1; sign_flag = 1; }
else if ( tmp == "-" ) { sign = -1; sign_flag = 1; }
if ( sign_flag ) str_decimal = substr(str_decimal,1,strlength(str_decimal)-1);
// get decimal part
for ( i = strlength(str_decimal)-1; i >= 0; --i ) {
str_digit = getchar(str_decimal,i);
if ( str_digit == "0" ) digit = 0;
else if ( str_digit == "1" ) digit = 1;
else if ( str_digit == "2" ) digit = 2;
else if ( str_digit == "3" ) digit = 3;
else if ( str_digit == "4" ) digit = 4;
else if ( str_digit == "5" ) digit = 5;
else if ( str_digit == "6" ) digit = 6;
else if ( str_digit == "7" ) digit = 7;
else if ( str_digit == "8" ) digit = 8;
else if ( str_digit == "9" ) digit = 9;
else continue;
digit *= exp(10,strlength(str_decimal)-1-i);
decimal += digit;
}
// get mantix part
for ( i = 0; i < strlength(str_mantix); ++i ) {
int div = 0;
str_digit = getchar(str_mantix,i);
if ( str_digit == "0" ) digit = 0;
else if ( str_digit == "1" ) digit = 1;
else if ( str_digit == "2" ) digit = 2;
else if ( str_digit == "3" ) digit = 3;
else if ( str_digit == "4" ) digit = 4;
else if ( str_digit == "5" ) digit = 5;
else if ( str_digit == "6" ) digit = 6;
else if ( str_digit == "7" ) digit = 7;
else if ( str_digit == "8" ) digit = 8;
else if ( str_digit == "9" ) digit = 9;
else continue;
div = exp(10,i+1);
digit = (digit*1.0)/div; // *1.0 to normalize to float
mantix += digit;
}
float_num = (sign*(decimal+mantix));
return float_num;
}
int is_float(char num) {
char str_decimal = "", str_mantix = "", str_digit = "", tmp = "";
int sign_flag = 0;
float digit = 0;
int i = 0;
i = searchstr_index(num,".");
if ( i != -1 ) {
str_decimal = substr(num,0,i);
str_mantix = substr(num,i+1,strlength(num)-i-1);
} else {
str_decimal = num;
str_mantix = "";
}
tmp = getchar(str_decimal,0);
if ( tmp == "+" ) { sign_flag = 1; }
else if ( tmp == "-" ) { sign_flag = 1; }
if ( sign_flag ) str_decimal = substr(str_decimal,1,strlength(str_decimal)-1);
// get decimal part
for ( i = strlength(str_decimal)-1; i >= 0; --i ) {
str_digit = getchar(str_decimal,i);
if ( str_digit == "0" ) digit = 0;
else if ( str_digit == "1" ) digit = 1;
else if ( str_digit == "2" ) digit = 2;
else if ( str_digit == "3" ) digit = 3;
else if ( str_digit == "4" ) digit = 4;
else if ( str_digit == "5" ) digit = 5;
else if ( str_digit == "6" ) digit = 6;
else if ( str_digit == "7" ) digit = 7;
else if ( str_digit == "8" ) digit = 8;
else if ( str_digit == "9" ) digit = 9;
else return 0;
}
// get mantix part
for ( i = 0; i < strlength(str_mantix); ++i ) {
str_digit = getchar(str_mantix,i);
if ( str_digit == "0" ) digit = 0;
else if ( str_digit == "1" ) digit = 1;
else if ( str_digit == "2" ) digit = 2;
else if ( str_digit == "3" ) digit = 3;
else if ( str_digit == "4" ) digit = 4;
else if ( str_digit == "5" ) digit = 5;
else if ( str_digit == "6" ) digit = 6;
else if ( str_digit == "7" ) digit = 7;
else if ( str_digit == "8" ) digit = 8;
else if ( str_digit == "9" ) digit = 9;
else return 0;
}
return 1;
}
void get_parsed_var(char label) {
void self = glv("self");
void value = gev(self,label);
return value;
}