functions.php
```
<?php

### player id ####

find_local_id(<id>)                                                     // - searches for the local id slot. it returns the slot if it is found, else return 0.
get_player_ip()                                                         // - return the connected player ip
get_unique_id_by_username(<username>)           // - return unique id of the specified username
get_unique_id_by_local(<local_id>)                      // - return unique id of the specified local id
get_player_username(<unique_id>)                        // - return <unique_id> username
get_local_id_by_ip([ip])                                        // - if [ip] is specified, returns local id of that ip, else returns local id of the current connected ip
get_local_id_by_unique(<unique_id>)                     // - return local id of the <unique_id>

## player ####

get_active(<unique_id>)                                          // - return the unique id activity (1 if is active, 0 if isn't)
get_position(<unique_id>)                                        // - return player position (x,y,rotation)
get_gold(<unique_id>)                                            // - return player's gold
get_last_time_active(<unique_id>)                        // - return last time when the player was active
set_last_time_active(<unique_id>)                        // - set the current time into last_time_active.txt
set_position(<unique_id>,<x>,<y>,<rot>)          // - set the specified position into position.txt
set_gold(<unique_id>,<gold>)                             // - set the specified gold into gold.txt
set_active(<unique_id>,<state>)                          // - set the specified state (0 or 1)

inventory_get_slot(<unique_id>,<slot>)
inventory_set_slot(<unique_id>,<slot>,<item_id>)

player_get_troop_id(<unique_id> , <troop_slot>)                 //- W.I.P.
player_set_troop_slot(<unique_id>,<slot>,<troop_id>)   //- W.I.P.

send_initial_players(<unique_id>)                       // - sends all active players data
save_to_log(<string>,<dev>)                                     // - if <dev> is not 1, then the string gets saved into server log, else the string get saved into dev log

deconnect_player(<unique_id>)                            // - deconnect a player by deleting/setting 0 some files


send_data_to_player(<unique_id>,<arguments_number>,<data_array>,[strings_number]) // - sends the <data_array> to <unique_id>. data_array[0] = event number .

                                                  //    arguments number = int number + string number (without the event)


## files ##

read_file(<file_path>)                                                                            //    -returns file contents from the specified path
write_file(<file_path>,<contents>)                                                        //    -writes <contents> to the specified path
move_file_contents(<source_file>,<destination_file>,[delete]) //        - copy all contents from <source_file> to <destination file>,

          //    if [delete] is 1, then the source file becomes empty(0)
init_player(<unique_id>)                                                                          //    - creates all the files and folders for the specified id
make_dir(<path>)                                                                                          //    - creates a directory at the specified path


## other ##

check_string(<string>)                  // - return 1 if the <string> contains only alphanumeric and _-*[]~ characters, else return 0



?>
            ```



code.php
```
<?php
function main_code(unique_id,event,nr_args,args)
{
        event=args[0];
        if(unique_id==0&&event!=1&&event!=2)
        {
                send_data_to_player(unique_id,[2,0]);//force log in
        }else{

        if(event==1)
                        {
                                //REGISTER ACCOUNT
                                //INPUT:arg1-username  arg2-password
                                //OUTPUT:arg1- state  arg2 -unique id
                                if(isset(args[1])&&isset(args[2]))
                                {
                                        username=args[1];
                                        password=args[2];
                                        if(check_string(username) and check_string(password) and !(is_numeric(password)) and !(is_numeric(username)))
                                        {
                                                if(file_exists("accounts/".username.".txt"))
                                                {
                                                        send_data_to_player(unique_id,[1,0]);//the account already exists
                                                }else{
                                                        last_unique_id=read_file("server_vars/player.txt") + 1;
                                                        write_file("server_vars/player.txt",last_unique_id);

                                                        write_file("username_id/".username.".txt",last_unique_id);
                                                        write_file("accounts/".username.".txt",password);

                                                        make_dir('players/'.last_unique_id.'/');//create the id directory
                                                        init_player(last_unique_id,username);

                                                        send_data_to_player(unique_id,[1,1,last_unique_id]);//succesfull created account
                                                }
                                        }else{
                                                send_data_to_player(unique_id,[1,4]);//invalid characters used
                                        }
                                }
                        }
                else if(event==2)
                        {
                        //LOG IN
                        //INPUT:arg1-username  arg2-password
                        //OUTPUT:arg1- state  arg2 -unique id arg3- local id
                                if(isset(args[1])&&isset(args[2]))
                                {
                                        username=args[1];
                                        password=args[2];
                                        if(check_string(username) and check_string(password) and !(is_numeric(password)) and !(is_numeric(username)))
                                        {
                                                if(file_exists("accounts/".username.".txt"))
                                                {
                                                        real_password=read_file("accounts/".username.".txt");
                                                        if(real_password==password)
                                                        {
                                                                local_id_slot=find_local_id(0);
                                                                if(local_id_slot!=0)
                                                                {
                                                                        if(file_exists("ip_login/".get_player_ip().".txt"))
                                                                        {
                                                                                unique_id_real = get_unique_id_by_username(username);
                                                                                send_data_to_player(unique_id,[2,2,unique_id_real,get_local_id_by_ip()]);//succesfull log in
                                                                                send_initial_players(unique_id_real);
                                                                        }else{
                                                                                unique_id_real =get_unique_id_by_username(username);
                                                                                write_file("ip_login/".get_player_ip().".txt",local_id_slot);
                                                                                write_file("local_id/".local_id_slot.".txt",unique_id_real);
                                                                                write_file("players/".unique_id_real."/active.txt",1);
                                                                                write_file("players/".unique_id_real."/last_time_active.txt",time());
                                                                                write_file("players/".unique_id_real."/ip.txt",get_player_ip());
                                                                                write_file("players/".unique_id_real."/local_id.txt",local_id_slot);
                                                                                write_file("players/".unique_id_real."/ping.txt",0);
                                                                                write_file("players/".unique_id_real."/ping_var.txt",0);
                                                                                send_data_to_player(unique_id,[2,2,unique_id_real,local_id_slot]);//succesfull log in
                                                                                send_initial_players(unique_id);

                                                                                ti_on_player_connect(unique_id_real);

                                                                                }
                                                                }else{
                                                                        send_data_to_player(unique_id,[2,3]);//the server is full
                                                                }
                                                        }else{
                                                                send_data_to_player(unique_id,[2,1]);//invalid user or pass
                                                        }
                                                }else{
                                                        send_data_to_player(unique_id,[2,1]);//invalid user or pass
                                                }
                                        }else{
                                                send_data_to_player(unique_id,[2,4]);//invalid characters used
                                        }
                                }
                        }
                else if(event==3)
                        {
                                //CHAT
                                //Input arg1 - message
                                if(isset(args[1]))
                                {
                                        message = args[1];
                                        if(message=='')
                                        {
                                        }else{
                                                if(is_numeric(message))
                                                {
                                                        message = message.' ';
                                                }
                                                username=get_player_username(unique_id);
                                                for(i=1;i<=10;i++)
                                                {
                                                        u_id = get_unique_id_by_local(i);
                                                        if(u_id!=0)
                                                        {
                                                                send_data_to_player(u_id,[3,message,username],2);
                                                        }
                                                }
                                        }

                                }
                        }
                else if(event==4)
                        {
                                //SAVE PLAYER POSITION
                                //Input: arg1-x arg2-y arg3-rotation
                                //output:none
                                if(isset(args[1]) and isset(args[2]) and isset(args[3]))
                                {
                                        x=args[1];
                                        y=args[2];
                                        rot=args[3];
                                        global allow_teleport;

                                        if(allow_teleport)
                                        {
                                                set_position(unique_id,x,y,rot);
                                        }else{
                                                position=get_position(unique_id);
                                                old_x=position[0];
                                                old_y=position[1];
                                                old_rot=position[2];
                                                distance=sqrt( pow(old_x - x , 2)  +  pow(old_y - y , 2) );
                                                if(distance < 1000)
                                                        {
                                                                set_position(unique_id,x,y,rot);
                                                        }
                                                else
                                                        {
                                                                to_send[0]=5;
                                                                to_send[1]=old_x;
                                                                to_send[2]=old_y;
                                                                to_send[3]=old_rot;

                                                                send_data_to_player(unique_id,to_send);
                                                                // send_data_to_player(unique_id,[15," ".distance,0xFF0000],1);
                                                        }
                                        }
                                }
                        }
                else if(event==6)
                {
                                //SEND PLAYERS POSITION
                                //Input:none
                                //Output:arg1 - number of players  arg2 - local player id arg3 - x arg4- y arg5 - rot arg6 -local player id ....
                                number_of_players=0;
                                to_send[0]=6;
                                c=2;
                                for(i=1;i<=10;i++)
                                {
                                        u_id=get_unique_id_by_local(i);
                                        if(u_id!=0 and u_id!=unique_id)
                                        {
                                                number_of_players++;
                                                to_send[c]=i;
                                                c++;

                                                position=get_position(u_id);
                                                x=position[0];
                                                y=position[1];
                                                rot=position[2];

                                                to_send[c]=x;
                                                c++;
                                                to_send[c]=y;
                                                c++;
                                                to_send[c]=rot;
                                                c++;
                                        }
                                }
                                c--;
                                to_send[1]=number_of_players;

                                send_data_to_player(unique_id,to_send);
                }
                else if(event==9)
                        {
                                //PING
                                if(isset(args[1]))
                                {
                                        if(args[1]==0)
                                        {
                                                write_file("players/".unique_id."/ping_var.txt",round(microtime_float(), 2));
                                                send_data_to_player(unique_id,[9,1]);
                                        }else{
                                                time=read_file("players/".unique_id."/ping_var.txt");
                                                ping=round(round(round(microtime_float(), 2) - round(time,2),2)*100);
                                                write_file("players/".unique_id."/ping.txt",ping);
                                                write_file("players/".unique_id."/ping_var.txt",0);

                                                c=2;
                                                data[0]=9;
                                                data[1]=0;
                                                for(i=1;i<=10;i++)
                                                {
                                                        u_id=get_unique_id_by_local(i);
                                                        if(u_id!=0)
                                                        {
                                                                data[c]=read_file("players/".u_id."/ping.txt");
                                                                c++;
                                                        }else{
                                                                data[c]=0;
                                                                c++;
                                                        }
                                                }

                                                send_data_to_player(unique_id,data);
                                        }
                                }
                        }
                else if(event==10)
                        {
                                //SEND PLAYER INVENTORY
                                inv=read_file("players/".unique_id."/inventory.txt");
                                inv=explode("|",inv);
                                inv[0]=10;
                                send_data_to_player(unique_id,inv);
                        }
                else if(event==11)
                        {
                                //SEND PLAYER GOLD
                                send_data_to_player(unique_id,[11,get_gold(unique_id)]);
                        }
                else if(event==14)
                        {
                                //SEND PLAYER TROOPS
                                troops=read_file("players/".unique_id."/troops.txt");
                                troops=explode("|",troops);
                                nr=0;
                                foreach (a as troops)
                                {
                                        if(a!=-1)
                                                nr++;
                                }
                                troops[0]=14;
                                troops[1]=nr+2;//incrementing here, so we will not have to increment in the game
                                send_data_to_player(unique_id,troops);
                        }
                }
        }

?>
            ```



multiplayer.php
```
<?php
header_remove();
                function set_content_length(output)
                {
                        header("Content-Length: ".strlen(output));
                        return output;
                }
                ob_start("set_content_length");


include'functions/functions.php';
include'code.php';
 counter=1;

 //checking for active players
 last_time_check=read_file("server_vars/check_time.txt");
 if((time()-last_time_check) >=1)
 {
        write_file("server_vars/check_time.txt",time());
        check_players_activity();
 }
 //check end


 player_ip=get_player_ip();
 if(file_exists("ip_login/".player_ip.".txt"))
 {
        local_id=read_file("ip_login/".player_ip.".txt");
        unique_id=read_file("local_id/".local_id.".txt");
 }else{
        unique_id=0;
 }
 if(isset(_GET["event".counter]))
 {
 }elseif(unique_id==0){
        send_data_to_player(unique_id,[2,0]);
 }
 if(unique_id!=0)
        {
                write_file("players/".unique_id."/last_time_active.txt",time());
        }

 while((isset(_GET["event".counter])))
{
        data_args[0]=_GET["event".counter];//initialize data array
        if(isset(_GET["nrarg".counter]))
        {
                number_of_arguments=_GET["nrarg".counter];
                number_of_arguments--;//decrement 1, because we used the event arg

                for(i=1;i<=number_of_arguments;i++)//saving all args in the data array
                {
                        if(isset(_GET["arg".counter.'|'.i]))
                        {
                                data_args[i]=_GET["arg".counter.'|'.i];
                        }
                }
                event = _GET["event".counter];
                main_code(unique_id,event,number_of_arguments,data_args);//calling the main code(programable)
                counter++;
        }else{
                break;
        }
}
        send_data(unique_id);
?>
```






server_config.php
```
<?php
dev_log = 1; //it holds all the data(every single packet). it is for devs or for errors reporting. 1- enable 0 - disable
dev_log_path= 'logs/dev_log.txt';

server_log = 1;//enable log save
server_log_path= 'logs/server_log.txt';

allow_teleport = 1; //1 - allow teleport on the map; 0 - does not allow . If set to 0, it is possible to crash the game when you try to teleport.

starting_gold=2000;
?>
```



test.php
```
<?php
echo "All setups are fine!";
?>
            ```



functions/check_players_activity.php
```
<?php
function check_players_activity()
{
        for(i=1;i<=10;i++)
        {
                unique_id=read_file("local_id/".i.".txt");
                if(unique_id!=0)
                {
                        last_time_active=read_file("players/".unique_id."/last_time_active.txt");
                        if(time()-last_time_active > 3)//if more than 3 seconds passed since last active
                        {
                                deconnect_player(unique_id);

                        }
                }
        }
}
?>
            ```



functions/deconnect_player.php
```
<?php
        function deconnect_player(unique_id)
        {
                player_ip=read_file("players/".unique_id."/ip.txt");
                local_id=get_local_id_by_unique(unique_id);
                if(file_exists("ip_login/".player_ip.".txt"))
                {
                        unlink("ip_login/".player_ip.".txt");//deletes the file
                }
                write_file("local_id/".get_local_id_by_unique(unique_id).".txt",0);
                write_file("players/".unique_id."/active.txt",0);
                write_file("players/".unique_id."/ip.txt","0.0.0.0");
                write_file("players/".unique_id."/local_id.txt",0);

                ti_on_player_deconnect(unique_id,local_id);
        }
?>
            ```



functions/files_functions.php
```
<?php
function make_dir(path)
        {
                mkdir(path, 0700);
        }

function move_file_contents(file_source,file_output,delete=0)
        {
                contents=read_file(file_source);
                write_file(file_output,contents);
                if(delete==1)
                {
                        write_file(file_source,0);
                }
        }

function read_file(_FILE_PATH)
{
        if(file_exists(_FILE_PATH))
        {
                _CONTENTS = file(_FILE_PATH);
                _RESULT = implode(_CONTENTS);
                return _RESULT;
        }else{
                return 0;
        }
}

function write_file(_FILE_PATH,_CONTENTS)
{
        _FO = fopen(_FILE_PATH, "w");
        fwrite(_FO, _CONTENTS);
        fclose(_FO);
}
?>
            ```



functions/functions.php
```
<?php
include './server_config.php';

//functions
include 'functions/hardwired_functions.php';
include 'functions/init_player.php';
include 'functions/deconnect_player.php';
include 'functions/troops_functions.php';
include 'functions/player_id_functions.php';
include 'functions/player_functions.php';
include 'functions/files_functions.php';
include 'functions/other_functions.php';

//triggers
include './triggers/on_connect.php';
include './triggers/on_deconnect.php';
?>
            ```



functions/hardwired_functions.php
```
<?php

                function send_data(unique_id)
                {
                        global dev_log;

                        slots=[];
                        //decide wich slots to send, because there is a max of 100 args to be sended
                        total_lenght=0;

                        output='';
                        for(i=1;i<=10;i++)
                        {
                                args=read_file('players/'.unique_id.'/to_send/'.i.'.txt');
                                args=explode("|",args);
                                nr_str=read_file('players/'.unique_id.'/to_send/nr_string_'.i.'.txt');
                                nr_arg=count(args) - 1;


                                if( ( (total_lenght+nr_arg) <100) and (nr_arg!=0) and (read_file('players/'.unique_id.'/to_send/'.i.'.txt') != 0) )//max 100 args; will be tweaked later
                                {
                                        total_lenght+=nr_arg;
                                        output.=nr_arg.'|'.nr_str.'|'.implode("|",args).'|';

                                         //deleting the data
                                        write_file('players/'.unique_id.'/to_send/'.i.'.txt',0);
                                        write_file('players/'.unique_id.'/to_send/nr_string_'.i.'.txt',0);
                                        //deleting the data
                                }

                        }


                        //increasing the priority of the remaining data
                        j=1;
                        for(i=1;i<=10;i++)
                        {
                                nr_arg=read_file('players/'.unique_id.'/to_send/nr_'.i.'.txt');
                                if(nr_arg!=0)
                                {
                                        move_file_contents('players/'.unique_id.'/to_send/'.i.'.txt','players/'.unique_id.'/to_send/'.j.'.txt',1);
                                        move_file_contents('players/'.unique_id.'/to_send/nr_string_'.i.'.txt','players/'.unique_id.'/to_send/nr_string_'.j.'.txt',1);

                                }
                        }



                        echo output;

                        //adding to server log
                        if(dev_log)
                        {
                                save_to_log(output,1);
                        }

                }




function send_data_to_player(player_id,data,nr_strings=0)
{               //data[0]=event; data[1]=arg1
                //numer of args is without the event
         // player_ip=get_player_ip();
         //finding a slot to save the output
        slot=10;
        for(i=1;i<=10;i++)
        {
                args=read_file('players/'.player_id.'/to_send/'.i.'.txt');
                args=explode("|",args);
                nr_arg=count(args) - 1;
                if(nr_arg==0)
                {
                        slot=i;
                        break;
                }
        }
         //slot found
         nr_args=count(data);
         nr_args--;
         output=data[0];//data[0];
         for(i=1;i<=nr_args;i++)
         {
                output.='|'.data[i];
         }
         write_file('players/'.player_id.'/to_send/'.slot.'.txt',output);
         write_file('players/'.player_id.'/to_send/nr_string_'.slot.'.txt',nr_strings);


}
?>
            ```



functions/init_player.php
```
<?php

function init_player(unique_id,username)
{
        global starting_gold;
        player_root="players/".unique_id.'/';
        make_dir(player_root."to_send");
        for(i=1;i<=10;i++)
        {
                write_file(player_root."to_send/".i.".txt",0);
                write_file(player_root."to_send/nr_string_".i.".txt",0);
        }
        write_file(player_root."position.txt","0|0|0");
        write_file(player_root."username.txt",username);
        write_file(player_root."local_id.txt",0);
        write_file(player_root."ip.txt",0);
        write_file(player_root."active.txt",0);
        write_file(player_root."last_time_active.txt",0);
        write_file(player_root."ping.txt",0);
        write_file(player_root."ping_var.txt",0);
        write_file(player_root."gold.txt",starting_gold);

        inv=-1;
        for(i=1;i<=91;i++)
        {
                inv.='|-1';
        }
        write_file(player_root."inventory.txt",inv);

        troops='-1|-1|0';
        for(i=1;i<=39;i++)
        {
                troops.='|-1';
        }
        write_file(player_root."troops.txt",troops);
}
?>
            ```



functions/other_functions.php
```
<?php
function check_players_activity()
{
        for(i=1;i<=10;i++)
        {
                unique_id=read_file("local_id/".i.".txt");
                if(unique_id!=0)
                {
                        last_time_active=read_file("players/".unique_id."/last_time_active.txt");
                        if(time()-last_time_active > 3)//if more than 3 seconds passed since last active
                        {
                                deconnect_player(unique_id);

                        }
                }
        }
}

function microtime_float()
{
    list(usec, sec) = explode(" ", microtime());
    return ((float)usec + (float)sec);
}

function check_string(string)
{
        if(preg_match("/^[a-zA-Z0-9\_\-\[\]\~]+/", string))
        {
                return 1;
        }else{
                return 0;
        }
}

function send_initial_players(unique_id)
        {
                nr_players=0;
                to_send[0]=8;
                c=1;
                for(i=1;i<=10;i++)
                        {
                                u_id=get_unique_id_by_local(i);
                                if(u_id!=0)
                                {
                                        position=get_position(u_id);
                                        x=position[0];
                                        y=position[1];
                                        rot=position[2];

                                        to_send[c]=x;
                                        c++;
                                        to_send[c]=y;
                                        c++;
                                        to_send[c]=rot;
                                        c++;
                                        to_send[c]=get_player_username(u_id);
                                        c++;
                                        to_send[c]=get_active(u_id);
                                        c++;
                                }else{
                                        to_send[c]=0;
                                        c++;
                                        to_send[c]=0;
                                        c++;
                                        to_send[c]=0;
                                        c++;
                                        to_send[c]="Offline";
                                        c++;
                                        to_send[c]=0;
                                        c++;

                                }
                        }
                send_data_to_player(unique_id,to_send,10);
        }

function save_to_log(string,dev=0)
{
        if(dev)
        {
                global dev_log_path;

                fh = fopen(dev_log_path, 'a');
                fwrite(fh , _SERVER['REMOTE_ADDR']."--"._SERVER["REQUEST_URI"]." --- ".string."\r\n");
                fclose(fh);
        }else{
                global server_log;
                global server_log_path;

                if(server_log)
                {
                        fh = fopen(server_log_path, 'a');
                        fwrite(fh, string."\r\n");
                        fclose(fh);
                }
        }
}
?>
            ```



functions/player_functions.php
```
<?php


//get functions
function get_active(unique_id)
{
        return read_file('players/'.unique_id.'/active.txt');
}

function get_position(unique_id)
{
        position= read_file('players/'.unique_id.'/position.txt');
        array=explode("|",position);
        return array;
}

function get_gold(unique_id)
{
        return read_file('players/'.unique_id.'/gold.txt');
}

function get_last_time_active(unique_id)
{
        return read_file('players/'.unique_id.'/last_time.txt');
}

function inventory_get_slot(unique_id,slot)
        {
                inv=read_file("players/".unique_id."/inventory.txt");
                inv_array=explode("|",inv);
                return inv_array[slot];
        }

//set functions

function inventory_set_slot(unique_id,slot,value)
{
        inv=read_file("players/".unique_id."/inventory.txt");
        inv_array=explode("|",inv);
        inv_array[slot]=value;
        to_write=implode("|",inv_array);
        write_file("players/".unique_id."/inventory.txt",to_write);
}

function set_last_time_active(unique_id)
{
        write_file('players/'.unique_id.'/last_time.txt',time());
}

function set_position(unique_id,x,y,rot)
{
        write_file('players/'.unique_id.'/position.txt',x.'|'.y.'|'.rot);
}

function set_gold(unique_id,gold)
{
        write_file('players/'.unique_id.'/gold.txt',gold);
}

function set_active(unique_id,state)
{
        write_file('players/'.unique_id.'/active.txt',state);
}
?>










            ```



functions/player_id_functions.php
```
<?php

function find_local_id(id)
{
        for(i=1;i<=10;i++)
        {
                file_id=read_file("local_id/".i.".txt");
                if(file_id==id)
                {
                        return i;
                }
        }
        return 0;
}

function get_player_ip()
        {
                return _SERVER['REMOTE_ADDR'];
        }

function get_unique_id_by_username(username)
        {
                return read_file("username_id/".username.".txt");
        }

function get_unique_id_by_local(local)
        {
                return read_file("local_id/".local.".txt");
        }

function get_player_username(unique_id)
        {
                return read_file("players/".unique_id."/username.txt");
        }

function get_local_id_by_ip(ip=0)
        {
                if(ip==0)
                {
                        return read_file("ip_login/"._SERVER['REMOTE_ADDR'].".txt");
                }else{
                        return read_file("ip_login/".ip.".txt");
                }
        }

function get_local_id_by_unique(unique_id)
        {
                return read_file("players/".unique_id."/local_id.txt");
        }


?>
            ```



functions/send_initial_players.php
```
<?php

function send_initial_players(unique_id)
        {
                nr_players=0;
                to_send[0]=8;
                c=1;
                for(i=1;i<=10;i++)
                        {
                                u_id=get_unique_id_by_local(i);
                                if(u_id!=0)
                                {
                                        position=get_position(u_id);
                                        x=position[0];
                                        y=position[1];
                                        rot=position[2];

                                        to_send[c]=x;
                                        c++;
                                        to_send[c]=y;
                                        c++;
                                        to_send[c]=rot;
                                        c++;
                                        to_send[c]=get_player_username(u_id);
                                        c++;
                                        to_send[c]=get_active(u_id);
                                        c++;
                                }else{
                                        to_send[c]=0;
                                        c++;
                                        to_send[c]=0;
                                        c++;
                                        to_send[c]=0;
                                        c++;
                                        to_send[c]="Offline";
                                        c++;
                                        to_send[c]=0;
                                        c++;

                                }
                        }
                send_data_to_player(unique_id,to_send,10);
        }
?>
            ```



functions/troops_functions.php
```
<?php

function player_get_troop_id(unique_id,troop_slot)
        {
                troop=read_file("players/".unique_id."/troops.txt");
                array=explode("|",troop);
                return array[slot];
        }

function player_set_troop_slot(unique_id,slot,troop_id)
{
        troop=read_file("players/".unique_id."/troops.txt");
        array=explode("|",troop);
        array[slot]=troop_id;
        to_write=implode("|",array);
        write_file("players/".unique_id."/troops.txt",to_write);
}
?>
            ```



server_vars/check_time.txt
```
1380653098
            ```



server_vars/player.txt
```
0
            ```



triggers/on_connect.php
```
<?php

function ti_on_player_connect(unique_id)
        {

                username=get_player_username(unique_id);
                local_id=get_local_id_by_unique(unique_id);

                //send player log in to all active players
                for(i=1;i<=10;i++)
                {
                        u_id=get_unique_id_by_local(i);
                        if(u_id!=0)
                        {
                                send_data_to_player(u_id,[7,1,local_id,username],1);//player log in!
                        }
                }

                position=get_position(unique_id);
                x=position[0];
                y=position[1];
                rot=position[2];

                to_send[0]=5;
                to_send[1]=x;
                to_send[2]=y;
                to_send[3]=rot;

                send_data_to_player(unique_id,to_send);

                save_to_log(username . ' connected with ip ' . get_player_ip());

                send_data_to_player(unique_id,[15,"Hello ".username."!^Welcome to my test server!",0xA0EDF7],1);
                send_data_to_player(unique_id,[15,"R^O",0xFF0000],1);
                send_data_to_player(unique_id,[15,"M^A",0xF7FF05],1);
                send_data_to_player(unique_id,[15,"N^I^A",0xA0E3F7],1);

        }
?>
            ```



triggers/on_deconnect.php
```
<?php

function ti_on_player_deconnect(unique_id,local_id)
        {
                username=get_player_username(unique_id);

                for(j=1;j<=10;j++)//send player disconnect to all active players
                {
                        u_id=get_unique_id_by_local(j);
                        if(u_id!=0 and u_id!=unique_id)
                        {
                                send_data_to_player(u_id,[7,2,local_id,username],1);//player deconnect
                        }
                }
                save_to_log(username . ' lost connection/disconnect');
        }
?>
            ```

Rewrite that code using Python and implement all functionality on that language. At the same time, implement a way to launch it and access it through the web.