Guest User

controller.ajax.php

a guest
May 12th, 2021
54
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.     in_file();
  3.  
  4.     class ajax extends controller
  5.     {
  6.         protected $vars = [], $errors = [];
  7.         protected $resetSkillTreeClass = [2, 3, 7, 18, 19, 23, 34, 35, 39, 49, 50, 51, 54, 65, 66, 67, 70, 82, 83, 84, 87, 97, 98, 99, 102, 114, 115, 118, 130, 131, 135, 147, 151];
  8.  
  9.         public function __construct()
  10.         {
  11.             parent::__construct();
  12.             $this->load->helper('website');
  13.             $this->load->lib('session', ['DmNCMS']);
  14.             $this->load->lib('csrf');                        
  15.             if($this->session->userdata(['user' => 'logged_in'])){
  16.                 if(!in_array($this->request->get_method(), ['event_timers', 'get_time'])){
  17.                     if($this->config->values('scheduler_config', 'type') == 3){
  18.                         file_get_contents($this->config->base_url . 'interface/web.php?key=' . $this->config->values('scheduler_config', 'key'));
  19.                     }
  20.                 }
  21.             }
  22.         }
  23.  
  24.         public function index()
  25.         {
  26.             throw new exception('Nothing to see in here');
  27.         }
  28.  
  29.         public function checkcaptcha()
  30.         {
  31.             if(isset($_POST['act'], $_POST['qaptcha_key'])){
  32.                 $_SESSION['qaptcha_key'] = false;
  33.                 if(htmlentities($_POST['act'], ENT_QUOTES, 'UTF-8') == 'qaptcha'){
  34.                     $_SESSION['qaptcha_key'] = $_POST['qaptcha_key'];
  35.                     json(['error' => false]);
  36.                 } else{
  37.                     json(['error' => true]);
  38.                 }
  39.             } else{
  40.                 json(['error' => true]);
  41.             }
  42.         }
  43.  
  44.         public function login()
  45.         {
  46.             if($this->session->userdata(['user' => 'logged_in'])){
  47.                 json(['error' => __('You are already logged in. Please logout first.')]);
  48.             } else{
  49.                 $servers = $this->website->server_list();
  50.                 $default = array_keys($servers)[0];
  51.                 if(!isset($_POST['server'])){
  52.                     $_POST['server'] = $default;
  53.                 } else{
  54.                     if(!array_key_exists($_POST['server'], $servers)){
  55.                         $_POST['server'] = $default;
  56.                     }
  57.                 }
  58.                 if($this->website->is_multiple_accounts() == true){
  59.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($_POST['server'], true)]);
  60.                 } else{
  61.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  62.                 }
  63.                 $this->load->model('account');
  64.                 $this->vars['config'] = $this->config->values('registration_config');
  65.                 if($this->vars['config'] != false && !empty($this->vars['config'])){
  66.                     $this->Maccount->servers = $servers;
  67.                     foreach($_POST as $key => $value){
  68.                         $this->Maccount->$key = trim($value);
  69.                     }
  70.                     if($this->Maccount->check_login_attemts() == true){
  71.                         json(['error' => __('You have reached max failed login attemts, please come back after 15 minutes.')]);
  72.                     } else{
  73.                         if(!isset($this->Maccount->vars['username']))
  74.                             json(['error' => __('You haven\'t entered a username.')]); else{
  75.                             if($this->Maccount->vars['username'] == '')
  76.                                 json(['error' => __('You haven\'t entered a username.')]); else{
  77.                                 if(!isset($this->Maccount->vars['password']))
  78.                                     json(['error' => __('You haven\'t entered a password.')]); else{
  79.                                     if($this->Maccount->vars['password'] == '')
  80.                                         json(['error' => __('You haven\'t entered a password.')]); else{
  81.                                         if(!$this->Maccount->valid_username($this->Maccount->vars['username'], '\w\W', [$this->vars['config']['min_username'], $this->vars['config']['max_username']]))
  82.                                             json(['error' => __('The username you entered is invalid.')]); else{
  83.                                             if(!$this->Maccount->valid_password($this->Maccount->vars['password'], '\w\W', [$this->vars['config']['min_password'], $this->vars['config']['max_password']]))
  84.                                                 json(['error' => __('The password you entered is invalid.')]); else{
  85.                                                 if(isset($this->Maccount->vars['server'])){
  86.                                                     if($this->Maccount->vars['server'] == '')
  87.                                                         json(['error' => __('Please select proper server.')]);
  88.                                                     else{
  89.                                                         $ban_info = $this->Maccount->check_acc_ban();
  90.                                                         if($ban_info != false){
  91.                                                             if($ban_info['time'] > time() && $ban_info['is_permanent'] == 0){
  92.                                                                 json(['error' => sprintf(__('Your account is blocked until %s'), date('d.m.Y H:i', $ban_info['time']))]);
  93.                                                             } else{
  94.                                                                 if($ban_info['is_permanent'] == 1){
  95.                                                                     json(['error' => __('Your account is blocked permanently')]);
  96.                                                                 } else{
  97.                                                                     goto login;
  98.                                                                 }
  99.                                                             }
  100.                                                         } else{
  101.                                                             goto login;
  102.                                                         }
  103.                                                     }
  104.                                                 } else{
  105.                                                     goto login;
  106.                                                 }
  107.                                                 login:
  108.                                                 if($login = $this->Maccount->login_user()){        
  109.                                                     if(($this->vars['config']['email_validation'] == 1) && ($login['activated'] == 0)){
  110.                                                         $this->session->unset_session_key('user');
  111.                                                         json(['error' => __('Please activate your account first. <a id="repeat_activation" href="' . $this->config->base_url . 'registration/resend-activation">Did not receive activation email?</a>'), 'sticky' => 1]);
  112.                                                     } else{
  113.                                                         $this->Maccount->log_user_ip();
  114.                                                         $this->Maccount->clear_login_attemts();
  115.                                                         $this->change_user_vip_session($this->Maccount->vars['username'], $this->Maccount->vars['server']);
  116.                                                         setcookie("DmN_Current_User_Server_" . $this->Maccount->vars['username'], $_POST['server'], strtotime('+1 days', time()), "/");
  117.                                                         if(defined('IPS_CONNECT') && IPS_CONNECT == true){
  118.                                                             $this->load->lib('ipb');
  119.                                                             if($this->ipb->checkEmail($this->session->userdata(['user' => 'email'])) == true){
  120.                                                                 $salt = $this->ipb->fetchSalt(2, $this->session->userdata(['user' => 'email']));
  121.                                                                 $ipb_login_data = $this->ipb->login(2, $this->session->userdata(['user' => 'email']), $this->ipb->encrypt_password($this->Maccount->vars['password'], $salt));
  122.                                                                 $this->session->session_key_overwrite('user', [0 => 'ipb_id', 1 => $ipb_login_data['connect_id']]);
  123.                                                                 json(['success' => __('You have logged in successfully.'), 'ipb_login' => $this->ipb->crossLogin($ipb_login_data['connect_id'], $this->config->base_url . 'account-panel')]);
  124.                                                                    
  125.                                                                                                                                                                      
  126.                                                             }
  127.                                                         }
  128.                                                                                                                                                                                        
  129.                                                         json(['success' => __('You have logged in successfully.')]);
  130.                                                     }
  131.                                                 } else{
  132.                                                     $this->Maccount->add_login_attemt();
  133.                                                     json(['error' => __('Wrong username and/or password.')]);
  134.                                                 }
  135.                                             }
  136.                                         }
  137.                                     }
  138.                                 }
  139.                             }
  140.                         }
  141.                     }
  142.                 } else{
  143.                     json(['error' => __('Registration settings has not yet been configured.')]);
  144.                 }
  145.             }
  146.         }
  147.  
  148.         public function switch_server()
  149.         {
  150.             if($this->session->userdata(['user' => 'logged_in'])){
  151.                 if(isset($_POST['server'])){
  152.                     $server_list = $this->website->server_list();
  153.                     if(array_key_exists($_POST['server'], $server_list)){
  154.                         if($this->website->is_multiple_accounts() == true){
  155.                             $this->load->model('account');
  156.                             if($this->Maccount->check_user_on_server($this->session->userdata(['user' => 'username']), $_POST['server'])){
  157.                                 $this->change_user_session_server($this->session->userdata(['user' => 'username']), $_POST['server'], $server_list);
  158.                                 $this->change_user_vip_session($this->session->userdata(['user' => 'username']), $_POST['server']);
  159.                                 json(['success' => __('Server Changed.')]);
  160.                             } else{
  161.                                 json(['error' => __('You have not created account on this server. Please logout and create.')]);
  162.                             }
  163.                         } else{
  164.                             $this->change_user_session_server($this->session->userdata(['user' => 'username']), $_POST['server'], $server_list);
  165.                             $this->change_user_vip_session($this->session->userdata(['user' => 'username']), $_POST['server']);
  166.                             json(['success' => __('Server Changed.')]);
  167.                         }
  168.                     } else{
  169.                         json(['error' => __('Invalid server selected.')]);
  170.                     }
  171.                 } else{
  172.                     json(['error' => __('Invalid server selected.')]);
  173.                 }
  174.             } else{
  175.                 json(['error' => __('Please login into website.')]);
  176.             }
  177.         }
  178.  
  179.         private function change_user_session_server($user, $server, $server_list)
  180.         {
  181.             $this->session->session_key_overwrite('user', [0 => 'server', 1 => $server]);
  182.             $this->session->session_key_overwrite('user', [0 => 'server_t', 1 => $server_list[$server]['title']]);
  183.             setcookie("DmN_Current_User_Server_" . $user, $server, strtotime('+1 days', time()), "/");
  184.         }
  185.  
  186.         private function change_user_vip_session($user, $server)
  187.         {
  188.             $this->vars['config'] = $this->config->values('vip_config');
  189.            
  190.             if(!empty($this->vars['config']) && $this->vars['config']['active'] == 1){
  191.                 $this->load->model('account');
  192.                 if($this->vars['vip_data'] = $this->Maccount->check_vip($user, $server)){
  193.                     $this->vars['vip_package_info'] = $this->Maccount->load_vip_package_info($this->vars['vip_data']['viptype'], $server);
  194.                     if($this->vars['vip_data']['viptime'] <= time()){
  195.                         $this->Maccount->remove_vip($this->vars['vip_data']['viptype'], $user, $server);
  196.                         if($this->vars['vip_package_info'] != false){
  197.                             $this->Maccount->check_connect_member_file($this->vars['vip_package_info']['connect_member_load'], $user);
  198.                         }
  199.                     } else{
  200.                         $this->Maccount->set_vip_session($this->vars['vip_data']['viptime'], $this->vars['vip_package_info']);
  201.                     }
  202.                 } else{
  203.                     $this->session->unset_session_key('vip');
  204.                 }
  205.             }
  206.         }
  207.        
  208.         public function change_password()
  209.         {
  210.             if($this->session->userdata(['user' => 'logged_in'])){
  211.                 $this->vars['config'] = $this->config->values('registration_config');
  212.                 if($this->website->is_multiple_accounts() == true){
  213.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  214.                 } else{
  215.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  216.                 }
  217.                 $this->load->model('account');
  218.                 foreach($_POST as $key => $value){
  219.                     $this->Maccount->$key = trim($value);
  220.                 }
  221.                 if(!isset($this->Maccount->vars['old_password']))
  222.                     json(['error' => __('You haven\'t entered your current password.')]); else{
  223.                     if(!$this->Maccount->compare_passwords())
  224.                         json(['error' => __('The current password you entered is wrong.')]); else{
  225.                         if(!isset($this->Maccount->vars['new_password']))
  226.                             json(['error' => __('You haven\'t entered your new password.')]); else{
  227.                             if(!$this->Maccount->valid_password($this->Maccount->vars['new_password']))
  228.                                 json(['error' => __('The new password you entered is invalid.')]); else{
  229.                                 $this->Maccount->test_password_strength($this->Maccount->vars['new_password'], [$this->vars['config']['min_password'], $this->vars['config']['max_password']], $this->vars['config']['password_strength']);
  230.                                 if(isset($this->Maccount->errors))
  231.                                     json(['error' => $this->Maccount->vars['errors']]); else{
  232.                                     if(!isset($this->Maccount->vars['new_password2']))
  233.                                         json(['error' => __('You haven\'t entered new password-repetition.')]); else{
  234.                                         if($this->Maccount->vars['new_password'] != $this->Maccount->vars['new_password2'])
  235.                                             json(['error' => __('The two passwords you entered do not match.')]); else{
  236.                                             if($this->Maccount->vars['old_password'] == $this->Maccount->vars['new_password'])
  237.                                                 json(['error' => __('New password cannot be same as old!')]); else{
  238.                                                 if($this->Maccount->update_password()){
  239.                                                     $this->session->destroy();
  240.                                                     json(['success' => [__('Your password was successfully changed.'), __('You\'ve been logged out for security reasons!')]]);
  241.                                                 } else{
  242.                                                     json(['error' => __('Password could not be updated.')]);
  243.                                                 }
  244.                                             }
  245.                                         }
  246.                                     }
  247.                                 }
  248.                             }
  249.                         }
  250.                     }
  251.                 }
  252.             } else{
  253.                 json(['error' => __('Please login into website.')]);
  254.             }
  255.         }
  256.  
  257.         public function change_email()
  258.         {
  259.             if($this->session->userdata(['user' => 'logged_in'])){
  260.                 if($this->config->config_entry('account|allow_mail_change') == 1){
  261.                     if($this->website->is_multiple_accounts() == true){
  262.                         $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  263.                     } else{
  264.                         $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  265.                     }
  266.                     $this->load->model('account');
  267.                     foreach($_POST as $key => $value){
  268.                         $this->Maccount->$key = trim($value);
  269.                     }
  270.                     if(!isset($this->Maccount->vars['email']))
  271.                         json(['error' => __('You haven\'t entered your current email.')]); else{
  272.                         if(!$this->Maccount->valid_email($this->Maccount->vars['email']))
  273.                             json(['error' => __('You have entered an invalid email-address.')]); else{
  274.                             if(!$this->Maccount->check_existing_email())
  275.                                 json(['error' => __('Email-address is wrong for this account.')]); else{
  276.                                 if($this->Maccount->create_email_confirmation_entry(1)){
  277.                                     if($this->Maccount->send_email_confirmation()){
  278.                                         json(['success' => __('Please check your current mail-box for confirmation link.')]);
  279.                                     } else{
  280.                                         $this->Maccount->delete_old_confirmation_entries($this->session->userdata(['user' => 'username']), 1);
  281.                                         json(['error' => $this->Maccount->error]);
  282.                                     }
  283.                                 } else{
  284.                                     json(['error' => __('Unable to write confirmation code into database.')]);
  285.                                 }
  286.                             }
  287.                         }
  288.                     }
  289.                 }
  290.             } else{
  291.                 json(['error' => __('Please login into website.')]);
  292.             }
  293.         }
  294.  
  295.         public function set_new_email()
  296.         {
  297.             if($this->session->userdata(['user' => 'logged_in'])){
  298.                 if($this->config->config_entry('account|allow_mail_change') == 1){
  299.                     if($this->website->is_multiple_accounts() == true){
  300.                         $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  301.                     } else{
  302.                         $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  303.                     }
  304.                     $this->load->model('account');
  305.                     foreach($_POST as $key => $value){
  306.                         $this->Maccount->$key = trim($value);
  307.                     }
  308.                     if(!isset($this->Maccount->vars['email']))
  309.                         json(['error' => __('You haven\'t entered your new email-address.')]); else{
  310.                         if(!$this->Maccount->valid_email($this->Maccount->vars['email']))
  311.                             json(['error' => __('You have entered an invalid email-address.')]); else{
  312.                             if($this->Maccount->check_duplicate_email($this->Maccount->vars['email']))
  313.                                 json(['error' => __('This email-address is already used.')]); else{
  314.                                 if($this->Maccount->create_email_confirmation_entry(0)){
  315.                                     if($this->Maccount->send_email_confirmation()){
  316.                                         $this->Maccount->delete_old_confirmation_entries($this->session->userdata(['user' => 'username']), 1);
  317.                                         json(['success' => __('Please check your new mail-box for confirmation link.')]);
  318.                                     } else{
  319.                                         $this->Maccount->delete_old_confirmation_entries($this->session->userdata(['user' => 'username']));
  320.                                         json(['error' => $this->Maccount->error]);
  321.                                     }
  322.                                 } else{
  323.                                     json(['error' => __('Unable to write confirmation code into database.')]);
  324.                                 }
  325.                             }
  326.                         }
  327.                     }
  328.                 }
  329.             } else{
  330.                 json(['error' => __('Please login into website.')]);
  331.             }
  332.         }
  333.  
  334.         public function status()
  335.         {
  336.             if($this->session->userdata(['user' => 'logged_in'])){
  337.                 json(['success' => true]);
  338.             } else{
  339.                 json(['error' => __('Please login into website.')]);
  340.             }
  341.         }
  342.  
  343.         public function checkcredits()
  344.         {
  345.             if($this->session->userdata(['user' => 'logged_in'])){
  346.                 if($this->website->is_multiple_accounts() == true){
  347.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  348.                 } else{
  349.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  350.                 }
  351.                 $this->load->model('account');
  352.                 $payment_method = (isset($_POST['payment_method']) && ctype_digit($_POST['payment_method'])) ? (int)$_POST['payment_method'] : '';
  353.                 $credits = (isset($_POST['credits']) && ctype_digit($_POST['credits'])) ? (int)$_POST['credits'] : '';
  354.                 $gcredits = (isset($_POST['gcredits']) && ctype_digit($_POST['gcredits'])) ? (int)$_POST['gcredits'] : '';
  355.                 if(!in_array($payment_method, [1, 2]))
  356.                     json(['error' => __('Invalid payment method.')]); else if($credits === '')
  357.                     json(['error' => sprintf(__('Invalid amount of %s'), $this->config->config_entry('credits_' . $this->session->userdata(['user' => 'server']) . '|title_1'))]);
  358.                 else if($gcredits === '')
  359.                     json(['error' => sprintf(__('Invalid amount of %s'), $this->config->config_entry('credits_' . $this->session->userdata(['user' => 'server']) . '|title_2'))]);
  360.                 else{
  361.                     $status = $this->website->get_user_credits_balance($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $payment_method, $this->session->userdata(['user' => 'id']));
  362.                     if($payment_method == 1){
  363.                         if($status['credits'] < $credits){
  364.                             json(['error' => sprintf(__('You have insufficient amount of %s'), $this->config->config_entry('credits_' . $this->session->userdata(['user' => 'server']) . '|title_1'))]);
  365.                         } else{
  366.                             json(['success' => true]);
  367.                         }
  368.                     }
  369.                     if($payment_method == 2){
  370.                         if($status['credits'] < $gcredits){
  371.                             json(['error' => sprintf(__('You have insufficient amount of %s'), $this->config->config_entry('credits_' . $this->session->userdata(['user' => 'server']) . '|title_2'))]);
  372.                         } else{
  373.                             json(['success' => true]);
  374.                         }
  375.                     }
  376.                 }
  377.             } else{
  378.                 json(['error' => __('Please login into website.')]);
  379.             }
  380.         }
  381.  
  382.         public function vote()
  383.         {
  384.             if($this->session->userdata(['user' => 'logged_in'])){
  385.                 $this->vars['votereward_config'] = $this->config->values('votereward_config', $this->session->userdata(['user' => 'server']));
  386.                 if($this->vars['votereward_config']['active'] == 1){
  387.                     if($this->website->is_multiple_accounts() == true){
  388.                         $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  389.                     } else{
  390.                         $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  391.                     }
  392.                     $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  393.                     $this->load->model('account');
  394.                     $this->load->model('character');
  395.                     if(isset($_POST['vote']) && ctype_digit($_POST['vote'])){
  396.                         if($this->vars['votereward_config']['req_char'] == 1){
  397.                             $this->vars['has_char'] = ($info = $this->Mcharacter->load_char_list()) ? $info : false;
  398.                         }
  399.                         if(isset($this->vars['has_char']) && $this->vars['has_char'] == false){
  400.                              json(['error' => __('Voting require character.')]);
  401.                         }
  402.                         if(isset($this->vars['has_char'])) {
  403.                             $lvl_total = 0;
  404.                             $res_total = 0;
  405.                             foreach ($this->vars['has_char'] as $key => $value) {
  406.                                 $lvl_total += $value['level'];
  407.                                 $res_total += $value['resets'];
  408.                             }
  409.  
  410.                             if ($this->vars['votereward_config']['req_lvl'] > $lvl_total) {
  411.                                 json(['error' => __('Your character total level sum need to be atleast') . ' ' . $this->vars['votereward_config']['req_lvl']]);
  412.                             }
  413.                             if ($this->vars['votereward_config']['req_res'] > $res_total) {
  414.                                 json(['error' => __('Your character total res sum need to be atleast') . ' ' . $this->vars['votereward_config']['req_res']]);
  415.                             }
  416.                         }
  417.                         if(!$check_link = $this->Maccount->check_vote_link($_POST['vote'])){
  418.                             json(['error' => __('Voting link not found.')]);
  419.                         } else{
  420.                             if($check_link['api'] == 2){
  421.                                 json(['success_mmotop' => __('Thank You, we will review your vote and reward you.')]);
  422.                             } else{
  423.                                 if($check_last_vote = $this->Maccount->get_last_vote($_POST['vote'], $check_link['hours'], 0, $this->vars['votereward_config']['xtremetop_same_acc_vote'], $this->vars['votereward_config']['xtremetop_link_numbers'])){
  424.                                     json(['error' => sprintf(__('Already voted. Next vote after %s'), $this->Maccount->calculate_next_vote($check_last_vote, $check_link['hours']))]);
  425.                                 } else{
  426.                                     if($check_link['api'] == 1){
  427.                                         if($valid_votes = $this->Maccount->check_xtremetop_vote()){
  428.                                             if(!empty($valid_votes)){
  429.                                                 $count = count($valid_votes);
  430.                                                 $i = 0;
  431.                                                 foreach($valid_votes AS $valid){
  432.                                                     $i++;
  433.                                                     $this->Maccount->set_valid_vote_xtremetop($valid['id']);
  434.                                                     $this->Maccount->reward_voter($check_link['reward'], $check_link['reward_type'], $this->session->userdata(['user' => 'server']));
  435.                                                     $this->Maccount->check_vote_rankings($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  436.                                                     if($i == $count){
  437.                                                         if($this->Maccount->log_vote($_POST['vote'])){
  438.                                                             json(['success' => vsprintf(__('Vote was successful. You have received %d %s'), [$check_link['reward'], $this->website->translate_credits($check_link['reward_type'], $this->session->userdata(['user' => 'server']))]), 'next_vote' => $this->Maccount->calculate_next_vote((time() - 60), $check_link['hours']), 'reward' => $check_link['reward']]);
  439.                                                         } else{
  440.                                                             json(['error' => __('Unable to log vote. Please try again latter')]);
  441.                                                         }
  442.                                                     }
  443.                                                 }
  444.                                             } else{
  445.                                                 json(['error' => __('Unable to log vote. Please try again latter')]);
  446.                                             }
  447.                                         } else{
  448.                                             json(['error' => __('Unable to validate vote. Please try again after few minutes.')]);
  449.                                         }
  450.                                     } else if($check_link['api'] == 3){
  451.                                         if($valid_votes = $this->Maccount->check_gtop100_vote()){
  452.                                             if(!empty($valid_votes)){
  453.                                                 $count = count($valid_votes);
  454.                                                 $i = 0;
  455.                                                 foreach($valid_votes AS $valid){
  456.                                                     $i++;
  457.                                                     $this->Maccount->set_valid_vote_gtop100($valid['id']);
  458.                                                     $this->Maccount->reward_voter($check_link['reward'], $check_link['reward_type'], $this->session->userdata(['user' => 'server']));
  459.                                                     $this->Maccount->check_vote_rankings($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  460.                                                     if($i == $count){
  461.                                                         if($this->Maccount->log_vote($_POST['vote'])){
  462.                                                             json(['success' => vsprintf(__('Vote was successful. You have received %d %s'), [$check_link['reward'], $this->website->translate_credits($check_link['reward_type'], $this->session->userdata(['user' => 'server']))]), 'next_vote' => $this->Maccount->calculate_next_vote((time() - 60), $check_link['hours']), 'reward' => $check_link['reward']]);
  463.                                                         } else{
  464.                                                             json(['error' => __('Unable to log vote. Please try again latter')]);
  465.                                                         }
  466.                                                     }
  467.                                                 }
  468.                                             } else{
  469.                                                 json(['error' => __('Unable to validate vote. Please try again after few minutes.')]);
  470.                                             }
  471.                                         } else{
  472.                                             json(['error' => __('Unable to validate vote. Please try again after few minutes.')]);
  473.                                         }
  474.                                     } else if($check_link['api'] == 4){
  475.                                         if($valid_votes = $this->Maccount->check_topg_vote()){
  476.                                             if(!empty($valid_votes)){
  477.                                                 $count = count($valid_votes);
  478.                                                 $i = 0;
  479.                                                 foreach($valid_votes AS $valid){
  480.                                                     $i++;
  481.                                                     $this->Maccount->set_valid_vote_topg($valid['id']);
  482.                                                     $this->Maccount->reward_voter($check_link['reward'], $check_link['reward_type'], $this->session->userdata(['user' => 'server']));
  483.                                                     $this->Maccount->check_vote_rankings($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  484.                                                     if($i == $count){
  485.                                                         if($this->Maccount->log_vote($_POST['vote'])){
  486.                                                             json(['success' => vsprintf(__('Vote was successful. You have received %d %s'), [$check_link['reward'], $this->website->translate_credits($check_link['reward_type'], $this->session->userdata(['user' => 'server']))]), 'next_vote' => $this->Maccount->calculate_next_vote((time() - 60), $check_link['hours']), 'reward' => $check_link['reward']]);
  487.                                                         } else{
  488.                                                             json(['error' => __('Unable to log vote. Please try again latter')]);
  489.                                                         }
  490.                                                     }
  491.                                                 }
  492.                                             } else{
  493.                                                 json(['error' => __('Unable to validate vote. Please try again after few minutes.')]);
  494.                                             }
  495.                                         } else{
  496.                                             json(['error' => __('Unable to validate vote. Please try again after few minutes.')]);
  497.                                         }
  498.                                     } else if($check_link['api'] == 5){
  499.                                         if($valid = $this->Maccount->check_top100arena_vote()){
  500.                                             if($this->Maccount->log_vote($_POST['vote']) && $this->Maccount->set_valid_vote_top100arena($valid['id'])){
  501.                                                 $this->Maccount->reward_voter($check_link['reward'], $check_link['reward_type'], $this->session->userdata(['user' => 'server']));
  502.                                                 $this->Maccount->check_vote_rankings($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  503.                                                 json(['success' => vsprintf(__('Vote was successful. You have received %d %s'), [$check_link['reward'], $this->website->translate_credits($check_link['reward_type'], $this->session->userdata(['user' => 'server']))]), 'next_vote' => $this->Maccount->calculate_next_vote((time() - 60), $check_link['hours']), 'reward' => $check_link['reward']]);
  504.                                             } else{
  505.                                                 json(['error' => __('Unable to log vote. Please try again latter')]);
  506.                                             }
  507.                                         } else{
  508.                                             json(['error' => __('Unable to validate vote. Please try again after few minutes.')]);
  509.                                         }
  510.                                     } else if($check_link['api'] == 6){
  511.                                         if($valid = $this->Maccount->check_mmoserver_vote()){
  512.                                             if($this->Maccount->log_vote($_POST['vote']) && $this->Maccount->set_valid_vote_mmoserver($valid['id'])){
  513.                                                 $this->Maccount->reward_voter($check_link['reward'], $check_link['reward_type'], $this->session->userdata(['user' => 'server']));
  514.                                                 $this->Maccount->check_vote_rankings($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  515.                                                 json(['success' => vsprintf(__('Vote was successful. You have received %d %s'), [$check_link['reward'], $this->website->translate_credits($check_link['reward_type'], $this->session->userdata(['user' => 'server']))]), 'next_vote' => $this->Maccount->calculate_next_vote((time() - 60), $check_link['hours']), 'reward' => $check_link['reward']]);
  516.                                             } else{
  517.                                                 json(['error' => __('Unable to log vote. Please try again latter')]);
  518.                                             }
  519.                                         } else{
  520.                                             json(['error' => __('Unable to validate vote. Please try again after few minutes.')]);
  521.                                         }
  522.                                     } else if($check_link['api'] == 8){
  523.                                         if($valid_votes = $this->Maccount->check_ultratop_vote()){
  524.                                             if(!empty($valid_votes)){
  525.                                                 $count = count($valid_votes);
  526.                                                 $i = 0;
  527.                                                 foreach($valid_votes AS $valid){
  528.                                                     $i++;
  529.                                                     $this->Maccount->set_valid_vote_ultratop($valid['id']);
  530.                                                     $this->Maccount->reward_voter($check_link['reward'], $check_link['reward_type'], $this->session->userdata(['user' => 'server']));
  531.                                                     $this->Maccount->check_vote_rankings($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  532.                                                     if($i == $count){
  533.                                                         if($this->Maccount->log_vote($_POST['vote'])){
  534.                                                             json(['success' => vsprintf(__('Vote was successful. You have received %d %s'), [$check_link['reward'], $this->website->translate_credits($check_link['reward_type'], $this->session->userdata(['user' => 'server']))]), 'next_vote' => $this->Maccount->calculate_next_vote((time() - 60), $check_link['hours']), 'reward' => $check_link['reward']]);
  535.                                                         } else{
  536.                                                             json(['error' => __('Unable to log vote. Please try again latter')]);
  537.                                                         }
  538.                                                     }
  539.                                                 }
  540.                                             } else{
  541.                                                 json(['error' => __('Unable to log vote. Please try again latter')]);
  542.                                             }
  543.                                         } else{
  544.                                             json(['error' => __('Unable to validate vote. Please try again after few minutes.')]);
  545.                                         }
  546.                                     } else if($check_link['api'] == 9){
  547.                                         if($valid_votes = $this->Maccount->check_gametop100_vote()){
  548.                                             if(!empty($valid_votes)){
  549.                                                 $count = count($valid_votes);
  550.                                                 $i = 0;
  551.                                                 foreach($valid_votes AS $valid){
  552.                                                     $i++;
  553.                                                     $this->Maccount->set_valid_vote_gametop100($valid['id']);
  554.                                                     $this->Maccount->reward_voter($check_link['reward'], $check_link['reward_type'], $this->session->userdata(['user' => 'server']));
  555.                                                     $this->Maccount->check_vote_rankings($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  556.                                                     if($i == $count){
  557.                                                         if($this->Maccount->log_vote($_POST['vote'])){
  558.                                                             json(['success' => vsprintf(__('Vote was successful. You have received %d %s'), [$check_link['reward'], $this->website->translate_credits($check_link['reward_type'], $this->session->userdata(['user' => 'server']))]), 'next_vote' => $this->Maccount->calculate_next_vote((time() - 60), $check_link['hours']), 'reward' => $check_link['reward']]);
  559.                                                         } else{
  560.                                                             json(['error' => __('Unable to log vote. Please try again latter')]);
  561.                                                         }
  562.                                                     }
  563.                                                 }
  564.                                             } else{
  565.                                                 json(['error' => __('Unable to log vote. Please try again latter')]);
  566.                                             }
  567.                                         } else{
  568.                                             json(['error' => __('Unable to validate vote. Please try again after few minutes.')]);
  569.                                         }
  570.                                     }
  571.                                     /** SUPREMETOP100 **/
  572.                                     else if($check_link['api'] == 10)
  573.                                     {
  574.                                         if($valid_votes = $this->Maccount->check_supremetop_vote())
  575.                                         {
  576.                                             if(!empty($valid_votes))
  577.                                             {
  578.                                                 $count = count($valid_votes);
  579.                                                 $i = 0;
  580.                                                 foreach($valid_votes AS $valid)
  581.                                                 {
  582.                                                     $i++;
  583.                                                     $this->Maccount->set_valid_vote_supremetop($valid['id']);
  584.                                                     $this->Maccount->reward_voter($check_link['reward'], $check_link['reward_type'], $this->session->userdata(['user' => 'server']));
  585.                                                     $this->Maccount->check_vote_rankings($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  586.                                                     if($i == $count)
  587.                                                     {
  588.                                                         if($this->Maccount->log_vote($_POST['vote']))
  589.                                                         {
  590.                                                             json(['success' => vsprintf(__('Vote was successful. You have received %d %s'), [$check_link['reward'], $this->website->translate_credits($check_link['reward_type'], $this->session->userdata(['user' => 'server']))]), 'next_vote' => $this->Maccount->calculate_next_vote((time() - 60), $check_link['hours']), 'reward' => $check_link['reward']]);
  591.                                                         }
  592.                                                         else
  593.                                                         {
  594.                                                             json(['error' => __('Unable to log your SupremeTop100 vote. Please try again later.')]);
  595.                                                         }
  596.                                                     }
  597.                                                 }
  598.                                             }
  599.                                             else
  600.                                             {
  601.                                                 json(['error' => __('Unable to validate your SupremeTop100 vote. Please try again later.')]);
  602.                                             }
  603.                                         }
  604.                                         else
  605.                                         {
  606.                                             json(['error' => __('Unable to validate your SupremeTop100 vote. Please try again after few minutes.')]);
  607.                                         }
  608.                                     }
  609.                                     /** SUPREMETOP100 **/
  610.                                     else{
  611.                                         if($this->Maccount->log_vote($_POST['vote'])){
  612.                                             $this->Maccount->reward_voter($check_link['reward'], $check_link['reward_type'], $this->session->userdata(['user' => 'server']));
  613.                                             $this->Maccount->check_vote_rankings($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  614.                                             json(['success' => vsprintf(__('Vote was successful. You have received %d %s'), [$check_link['reward'], $this->website->translate_credits($check_link['reward_type'], $this->session->userdata(['user' => 'server']))]), 'next_vote' => $this->Maccount->calculate_next_vote((time() - 60), $check_link['hours']), 'reward' => $check_link['reward']]);
  615.                                         } else{
  616.                                             json(['error' => __('Unable to log vote. Please try again latter')]);
  617.                                         }
  618.                                     }
  619.                                 }
  620.                             }
  621.                         }
  622.                     } else{
  623.                         json(['error' => __('Invalid voting link.')]);
  624.                     }
  625.                 } else{
  626.                     json(['error' => __('Module disabled.')]);
  627.                 }
  628.             } else{
  629.                 json(['error' => __('Please login into website.')]);
  630.             }
  631.         }
  632.  
  633.         public function reset_character()
  634.         {
  635.             if($this->session->userdata(['user' => 'logged_in'])){
  636.                 if($this->website->is_multiple_accounts() == true){
  637.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  638.                 } else{
  639.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  640.                 }
  641.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  642.                 $this->load->model('account');
  643.                 $this->load->model('character');
  644.                 foreach($_POST as $key => $value){
  645.                     if($key == 'character'){
  646.                         $this->Mcharacter->$key = trim($this->website->hex2bin($value));
  647.                     } else{
  648.                         $this->Mcharacter->$key = trim($value);
  649.                     }
  650.                 }
  651.                
  652.                 usleep(mt_rand(1000000, 5000000));
  653.                
  654.                 if(!$this->Maccount->check_connect_stat())
  655.                     json(['error' => __('Please logout from game.')]); else{
  656.                     if(!isset($_POST['character']) || $_POST['character'] == ''){
  657.                         json(['error' => __('Invalid Character')]);
  658.                     } else{
  659.                         if(!$this->Mcharacter->check_char())
  660.                             json(['error' => __('Character not found.')]); else{
  661.                             $reset_config = $this->config->values('reset_config', $this->session->userdata(['user' => 'server']));
  662.                             $greset_config = $this->config->values('greset_config', $this->session->userdata(['user' => 'server']));
  663.                             if(!$reset_config)
  664.                                 json(['error' => __('Reset configuration for this server not found.')]); else{
  665.                                 if($reset_config['allow_reset'] == 0)
  666.                                     json(['error' => __('Reset function is disabled for this server')]); else{
  667.                                     unset($reset_config['allow_reset']);
  668.                                     if(isset($greset_config)){
  669.                                         unset($greset_config['allow_greset']);
  670.                                     }
  671.                                                                  
  672.                                     foreach($reset_config AS $key => $values){
  673.                                         list($start_res, $end_res) = explode('-', $key);
  674.                                         if($this->Mcharacter->char_info['resets'] >= $start_res && $this->Mcharacter->char_info['resets'] < $end_res){
  675.                                             $this->Mcharacter->char_info['res_info'] = $values;
  676.                                         }
  677.                                     }
  678.                                     $this->Mcharacter->char_info['bonus_greset_stats_points'] = 0;
  679.                                     if(isset($this->Mcharacter->char_info['res_info'])){
  680.                                         if($this->Mcharacter->char_info['res_info']['bonus_gr_points'] == 1){
  681.                                             $greset_bonus_data = [];
  682.                                             $greset_bonus_info = [];
  683.                                             foreach($greset_config AS $key => $values){
  684.                                                 $greset_range = explode('-', $key);
  685.                                                 for($i = $greset_range[0]; $i < $greset_range[1]; $i++){
  686.                                                     $greset_bonus_data[$i] = $values['bonus_points'];
  687.                                                     $greset_bonus_info[$i] = $values['bonus_points_save'];
  688.                                                 }
  689.                                             }
  690.                                             foreach($greset_bonus_data AS $gres => $data){
  691.                                                 if($this->Mcharacter->char_info['grand_resets'] <= $gres)
  692.                                                     break;
  693.                                                 if($greset_bonus_info[$gres] == 1){
  694.                                                     $this->Mcharacter->char_info['bonus_greset_stats_points'] += $data[$this->Mcharacter->class_code_to_readable($this->Mcharacter->char_info['Class'])];
  695.                                                 } else{
  696.                                                     $this->Mcharacter->char_info['bonus_greset_stats_points'] = $data[$this->Mcharacter->class_code_to_readable($this->Mcharacter->char_info['Class'])];
  697.                                                 }
  698.                                             }
  699.                                         }
  700.                                                                                      
  701.                                         if($this->Mcharacter->char_info['res_info']['clear_equipment'] == 1){                              
  702.                                             if(!$this->Mcharacter->check_equipment()){
  703.                                                 json(['error' => __('Before reset please remove your equipped items.')]);
  704.                                                 return;
  705.                                             }
  706.                                         }
  707.                                                                                    
  708.                                         $next_reset = (int)$this->Mcharacter->char_info['last_reset_time'] + $this->Mcharacter->char_info['res_info']['reset_cooldown'];
  709.                                         if($next_reset > time()){
  710.                                             json(['error' => sprintf(__('You will be able to reset at %s'), date('d/m/Y H:i', $next_reset))]);
  711.                                         } else{
  712.                                             $req_zen = $this->Mcharacter->check_zen($this->Mcharacter->char_info['res_info']['money'], $this->Mcharacter->char_info['res_info']['money_x_reset'], 'resets');
  713.                                             if($req_zen !== true){
  714.                                                 $req_zen_wallet = $this->Mcharacter->check_zen_wallet($this->Mcharacter->char_info['res_info']['money'], $this->Mcharacter->char_info['res_info']['money_x_reset'], 'resets');
  715.                                                 if($req_zen_wallet !== true){
  716.                                                     json(['error' => sprintf(__('Your have insufficient amount of zen. Need: %s'), $this->website->zen_format($req_zen))]);
  717.                                                     return;
  718.                                                 }
  719.                                             }
  720.                                             $req_lvl = $this->Mcharacter->check_lvl($this->Mcharacter->char_info['res_info']['level']);
  721.                                             if($req_lvl !== true)
  722.                                                 json(['error' => sprintf(__('Your lvl is too low. You need %d lvl.'), $req_lvl)]); else{
  723.                                                 if($this->Mcharacter->reset_character()){
  724.                                                     json(['success' => __('Your character has been successfully reseted.')]);
  725.                                                 } else{
  726.                                                     json(['error' => __('Unable to reset character.')]);
  727.                                                 }
  728.                                             }
  729.                                         }
  730.                                     } else{
  731.                                         json(['error' => __('Reset Disabled')]);
  732.                                     }
  733.                                 }
  734.                             }
  735.                         }
  736.                     }
  737.                 }
  738.             }
  739.         }
  740.  
  741.         public function add_level_reward()
  742.         {
  743.             if($this->session->userdata(['user' => 'logged_in'])){
  744.                 if($this->website->is_multiple_accounts() == true){
  745.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  746.                 } else{
  747.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  748.                 }
  749.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  750.                 $this->load->model('account');
  751.                 $this->load->model('character');
  752.                 $id = (isset ($_POST['id']) && preg_match('/^\d*$/', $_POST['id'])) ? $_POST['id'] : '';
  753.                 $char = isset($_POST['char']) ? $_POST['char'] : '';
  754.                 $level_rewards = $this->config->values('level_rewards_config');
  755.                 if($id == '')
  756.                     json(['error' => __('Invalid level reward id.')]); else{
  757.                     if($level_rewards == false || !array_key_exists($id, $level_rewards))
  758.                         json(['error' => __('Level reward not found.')]);
  759.                     else{
  760.                         if($char == '')
  761.                             json(['error' => __('Invalid Character')]); else{
  762.                             if(!$this->Mcharacter->check_char($char))
  763.                                 json(['error' => __('Character not found.')]); else{
  764.                                 if($level_rewards[$id]['req_level'] > $this->Mcharacter->char_info['cLevel'])
  765.                                     json(['error' => sprintf(__('Character lvl is too low required %d lvl'), $level_rewards[$id]['req_level'])]); else{
  766.                                     if($level_rewards[$id]['req_mlevel'] > $this->Mcharacter->char_info['mlevel'])
  767.                                         json(['error' => sprintf(__('Character master lvl is too low required %d lvl'), $level_rewards[$id]['req_mlevel'])]); else{
  768.                                         if($this->Mcharacter->check_claimed_level_rewards($id, $char, $this->session->userdata(['user' => 'server']))){
  769.                                             json(['error' => __('Reward was already claimed with this character.')]);
  770.                                         } else{
  771.                                             $this->website->add_credits($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $level_rewards[$id]['reward'], $level_rewards[$id]['reward_type']);
  772.                                             $this->Maccount->add_account_log('Claimed level reward from character ' . $char . ' for ' . $this->website->translate_credits($level_rewards[$id]['reward_type']), $level_rewards[$id]['reward'], $this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  773.                                             $this->Mcharacter->log_level_reward($id, $char, $this->session->userdata(['user' => 'server']));
  774.                                             json(['success' => __('Referral reward was claimed successfully.')]);
  775.                                         }
  776.                                     }
  777.                                 }
  778.                             }
  779.                         }
  780.                     }
  781.                 }
  782.             } else{
  783.                 json(['error' => __('Please login into website.')]);
  784.             }
  785.         }
  786.  
  787.         public function add_ref_reward()
  788.         {
  789.             if($this->session->userdata(['user' => 'logged_in'])){
  790.                 if($this->website->is_multiple_accounts() == true){
  791.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  792.                 } else{
  793.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  794.                 }
  795.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  796.                 $this->load->model('account');
  797.                 $this->load->model('character');
  798.                 $id = (isset ($_POST['id']) && preg_match('/^\d*$/', $_POST['id'])) ? $_POST['id'] : '';
  799.                 $char = isset($_POST['char']) ? $_POST['char'] : '';
  800.                                                                                                                    
  801.                 if($id == '')
  802.                     json(['error' => __('Invalid referral reward id.')]); else{
  803.                     if(!$reward_data = $this->Maccount->check_referral_reward($id, $this->session->userdata(['user' => 'server'])))
  804.                         json(['error' => __('Referral reward not found.')]); else{
  805.                         if($char == '')
  806.                             json(['error' => __('Invalid Character')]); else{
  807.                             if(!$this->Mcharacter->check_char_no_account($char, $this->session->userdata(['user' => 'server'])))
  808.                                 json(['error' => __('Character not found.')]); else{
  809.                                 if($reward_data['required_lvl'] > $this->Mcharacter->char_info['cLevel'] + $this->Mcharacter->char_info['mlevel'])
  810.                                     json(['error' => sprintf(__('Character lvl is too low required %d lvl'), $reward_data['required_lvl'])]); else{
  811.                                     if(!$this->check_ref_req_resets($reward_data['required_res'], $this->Mcharacter->char_info))
  812.                                         json(['error' => sprintf(__('Character reset is too low required %d reset'), $reward_data['required_res'])]); else{
  813.                                         if(!$this->check_ref_req_gresets($reward_data['required_gres'], $this->Mcharacter->char_info))
  814.                                             json(['error' => sprintf(__('Character grand reset is too low required %d grand reset'), $reward_data['required_gres'])]); else{
  815.                                             $history = $this->Maccount->check_name_in_history($char, $reward_data['server']);
  816.                                             if(!empty($history)){
  817.                                                 $check_chars = [$char];
  818.                                                 foreach($history AS $names){
  819.                                                     $check_chars[] = $names['old_name'];
  820.                                                     $check_chars[] = $names['new_name'];                       
  821.                                                 }
  822.                                                 $check_chars = array_unique($check_chars);
  823.                                             } else{
  824.                                                 $check_chars = [$char];
  825.                                             }
  826.                                             if($this->Maccount->check_claimed_referral_rewards($reward_data['id'], $check_chars, $reward_data['server'])){
  827.                                                 json(['error' => __('Reward was already claimed with this character.')]);
  828.                                             } else{
  829.                                                 if($this->config->values('referral_config', 'claim_type') == 0){
  830.                                                     if($this->Maccount->check_if_reward_was_claimed($reward_data['id'], $reward_data['server'], $this->Mcharacter->char_info['AccountId'])){
  831.                                                         json(['error' => __('Reward can be claimed only once. It was already claimed by different character.')]);
  832.                                                         return;
  833.                                                     }
  834.                                                 }
  835.                                                 if($this->config->values('referral_config', 'compare_ips') == 1){
  836.                                                     if($this->Maccount->check_referral_ips($this->Mcharacter->char_info['AccountId'])){
  837.                                                         json(['error' => __('You can not claim rewards for own accounts.')]);
  838.                                                         return;
  839.                                                     }                                                                        
  840.                                                 }
  841.                                                 $this->Maccount->add_referral_reward($reward_data['reward'], $reward_data['reward_type'], $char);
  842.                                                 $this->Maccount->log_reward($reward_data['id'], $char, $reward_data['server'], $this->Mcharacter->char_info['AccountId']);
  843.                                                 json(['success' => __('Referral reward was claimed successfully.')]);
  844.                                             }
  845.                                         }
  846.                                     }
  847.                                 }
  848.                             }
  849.                         }
  850.                     }
  851.                 }
  852.             } else{
  853.                 json(['error' => __('Please login into website.')]);
  854.             }
  855.         }
  856.  
  857.         private function check_ref_req_resets($req, $char_info)
  858.         {
  859.             if($req > 0){
  860.                 if($req > $char_info['resets']){
  861.                     return false;
  862.                 }
  863.             }
  864.             return true;
  865.         }
  866.  
  867.         private function check_ref_req_gresets($req, $char_info)
  868.         {
  869.             if($req > 0){
  870.                 if($req > $char_info['grand_resets']){
  871.                     return false;
  872.                 }
  873.             }
  874.             return true;
  875.         }
  876.  
  877.         public function greset_character()
  878.         {
  879.             if($this->session->userdata(['user' => 'logged_in'])){
  880.                 if($this->website->is_multiple_accounts() == true){
  881.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  882.                 } else{
  883.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  884.                 }
  885.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  886.                 $this->load->model('account');
  887.                 $this->load->model('character');
  888.                 foreach($_POST as $key => $value){
  889.                     if($key == 'character'){
  890.                         $this->Mcharacter->$key = trim($this->website->hex2bin($value));
  891.                     } else{
  892.                         $this->Mcharacter->$key = trim($value);
  893.                     }
  894.                 }
  895.                
  896.                 usleep(mt_rand(1000000, 5000000));
  897.                
  898.                 if(!$this->Maccount->check_connect_stat())
  899.                     json(['error' => __('Please logout from game.')]); else{
  900.                     if(!isset($_POST['character']) || $_POST['character'] == ''){
  901.                         json(['error' => __('Invalid Character')]);
  902.                     } else{
  903.                         if(!$this->Mcharacter->check_char())
  904.                             json(['error' => __('Character not found.')]); else{
  905.                             $reset_config = $this->config->values('reset_config', $this->session->userdata(['user' => 'server']));
  906.                             $greset_config = $this->config->values('greset_config', $this->session->userdata(['user' => 'server']));
  907.                             if(!$greset_config)
  908.                                 json(['error' => __('Grand Reset configuration for this server not found.')]); else{
  909.                                 if($greset_config['allow_greset'] == 0)
  910.                                     json(['error' => __('Grand Reset function is disabled for this server')]); else{
  911.                                     unset($greset_config['allow_greset']);
  912.                                     if(isset($reset_config)){
  913.                                         unset($reset_config['allow_reset']);
  914.                                     }
  915.                                                                  
  916.                                     foreach($greset_config AS $key => $values){
  917.                                         list($start_gres, $end_gres) = explode('-', $key);
  918.                                         if($this->Mcharacter->char_info['grand_resets'] >= $start_gres && $this->Mcharacter->char_info['grand_resets'] < $end_gres){
  919.                                             $this->Mcharacter->char_info['gres_info'] = $values;
  920.                                         }
  921.                                     }
  922.                                     $this->Mcharacter->char_info['bonus_reset_stats_points'] = 0;
  923.                                     if(isset($this->Mcharacter->char_info['gres_info'])){
  924.                                         if($this->Mcharacter->char_info['gres_info']['bonus_reset_stats'] == 1){
  925.                                             $reset_data = [];
  926.                                             foreach($reset_config AS $key => $values){
  927.                                                 $reset_range = explode('-', $key);
  928.                                                 for($i = $reset_range[0]; $i < $reset_range[1]; $i++){
  929.                                                     $reset_data[$i] = $values['bonus_points'];
  930.                                                 }
  931.                                             }
  932.                                          
  933.                                             foreach($reset_data AS $res => $data){
  934.                                                 if($this->Mcharacter->char_info['resets'] <= $res)
  935.                                                     break;
  936.                                                 $this->Mcharacter->char_info['bonus_reset_stats_points'] += $data[$this->Mcharacter->class_code_to_readable($this->Mcharacter->char_info['Class'])];
  937.                                             }
  938.                                         }
  939.                                      
  940.                                                                                          
  941.                                         $req_zen = $this->Mcharacter->check_zen($this->Mcharacter->char_info['gres_info']['money'], $this->Mcharacter->char_info['gres_info']['money_x_reset'], 'grand_resets');
  942.                                         if($req_zen !== true){
  943.                                             $req_zen_wallet = $this->Mcharacter->check_zen_wallet($this->Mcharacter->char_info['gres_info']['money'], $this->Mcharacter->char_info['gres_info']['money_x_reset'], 'grand_resets');
  944.                                             if($req_zen_wallet !== true){
  945.                                                 json(['error' => sprintf(__('Your have insufficient amount of zen. Need: %s'), $this->website->zen_format($req_zen))]);
  946.                                                 return;
  947.                                             }
  948.                                         }
  949.                                         if(!$this->Mcharacter->check_lvl($this->Mcharacter->char_info['gres_info']['level']))
  950.                                             json(['error' => sprintf(__('Your lvl is too low. You need %d lvl.'), $this->Mcharacter->char_info['gres_info']['level'])]); else{
  951.                                             if(!$this->Mcharacter->check_resets($this->Mcharacter->char_info['gres_info']['reset']))
  952.                                                 json(['error' => sprintf(__('Your resets is too low. You need %d resets.'), $this->Mcharacter->char_info['gres_info']['reset'])]); else{
  953.                                                 if($this->Mcharacter->greset_character()){
  954.                                                     json(['success' => __('Your character has been successfully reseted.')]);
  955.                                                 } else{
  956.                                                     json(['error' => __('Unable to reset character.')]);
  957.                                                 }
  958.                                             }
  959.                                         }
  960.                                     } else{
  961.                                         json(['error' => __('GrandReset Disabled')]);
  962.                                     }
  963.                                 }
  964.                             }
  965.                         }
  966.                     }
  967.                 }
  968.             } else{
  969.                 json(['error' => __('Please login into website.')]);
  970.             }
  971.         }
  972.  
  973.         public function pk_clear()
  974.         {
  975.             if($this->session->userdata(['user' => 'logged_in'])){
  976.                 if($this->website->is_multiple_accounts() == true){
  977.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  978.                 } else{
  979.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  980.                 }
  981.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  982.                 $this->load->model('account');
  983.                 $this->load->model('character');
  984.                 foreach($_POST as $key => $value){
  985.                     if($key == 'character'){
  986.                         $this->Mcharacter->$key = trim($this->website->hex2bin($value));
  987.                     }                                                                  
  988.                 }
  989.                 if(!$this->Maccount->check_connect_stat())
  990.                     json(['error' => __('Please logout from game.')]);
  991.                 else{
  992.                     if(!isset($_POST['character']))
  993.                         json(['error' => __('Invalid Character')]);
  994.                     else{
  995.                         if(!$this->Mcharacter->check_char())
  996.                             json(['error' => __('Character not found.')]);
  997.                         else{
  998.                             if(!$this->Mcharacter->check_pk())
  999.                                 json(['error' => __('You are not a murder.')]);
  1000.                             else{
  1001.                                 $price = $this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|pk_clear_price');
  1002.                                 $method = $this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|pk_clear_payment_method');
  1003.                                
  1004.                                 if($this->session->userdata('vip')){
  1005.                                     $price -= $this->session->userdata(['vip' => 'pk_clear_discount']);
  1006.                                 }
  1007.                                 if($method == 0){
  1008.                                     if($this->Mcharacter->char_info['Money'] < $price)
  1009.                                         json(['error' => sprintf(__('Your have insufficient amount of zen. Need: %s'), $this->website->zen_format($price))]);
  1010.                                     else{
  1011.                                         $this->Mcharacter->clear_pk($price);
  1012.                                         json(['success' => __('Your murders have been successfully reseted.')]);
  1013.                                     }
  1014.                                 }
  1015.                                 else{
  1016.                                     if(in_array($method, [1,2])){
  1017.                                          $status = $this->website->get_user_credits_balance($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $method, $this->session->userdata(['user' => 'id']));
  1018.                                          if($status['credits'] < $price){
  1019.                                             json(['error' => sprintf(__('You have insufficient amount of %s'), $this->website->translate_credits($method, $this->session->userdata(['user' => 'server'])))]);
  1020.                                          }
  1021.                                          else{
  1022.                                             $this->Mcharacter->clear_pk(0);
  1023.                                             $this->website->charge_credits($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $price, $method);
  1024.                                             json(['success' => __('Your murders have been successfully reseted.')]);
  1025.                                          }
  1026.                                     }
  1027.                                     else{
  1028.                                          $this->vars['table_config'] = $this->config->values('table_config', $this->session->userdata(['user' => 'server']));
  1029.                                          
  1030.                                          if($status = $this->Mcharacter->get_wcoins($this->vars['table_config']['wcoins'], $this->session->userdata(['user' => 'server']))){
  1031.                                             if($status < $price)
  1032.                                                 json(['error' => sprintf(__('You have insufficient amount of %s'), __('WCoins'))]);
  1033.                                             else{
  1034.                                                 $this->Mcharacter->clear_pk(0);
  1035.                                                 $this->Mcharacter->remove_wcoins($this->vars['table_config']['wcoins'], $price);
  1036.                                                 json(['success' => __('Your murders have been successfully reseted.')]);
  1037.                                             }
  1038.                                         } else{
  1039.                                             json(['error' => __('Unable to load wcoins')]);
  1040.                                         }
  1041.                                     }
  1042.                                 }
  1043.                             }
  1044.                         }
  1045.                     }
  1046.                 }
  1047.             } else{
  1048.                 json(['error' => __('Please login into website.')]);
  1049.             }
  1050.         }
  1051.  
  1052.         public function reset_stats()
  1053.         {
  1054.             if($this->session->userdata(['user' => 'logged_in'])){
  1055.                 if($this->website->is_multiple_accounts() == true){
  1056.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  1057.                 } else{
  1058.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  1059.                 }
  1060.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  1061.                 if($this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|allow_reset_stats') == 1){
  1062.                     $this->load->model('account');
  1063.                     $this->load->model('character');
  1064.                     foreach($_POST as $key => $value){
  1065.                         if($key == 'character'){
  1066.                             $this->Mcharacter->$key = trim($this->website->hex2bin($value));
  1067.                         } else{
  1068.                             $this->Mcharacter->$key = trim($value);
  1069.                         }
  1070.                     }
  1071.                     if(!$this->Maccount->check_connect_stat())
  1072.                         json(['error' => __('Please logout from game.')]);
  1073.                     else{
  1074.                         if(!isset($_POST['character']))
  1075.                             json(['error' => __('Invalid Character')]);
  1076.                         else{
  1077.                             if(!$this->Mcharacter->check_char())
  1078.                                 json(['error' => __('Character not found.')]);
  1079.                             else{
  1080.                                 if($this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|reset_stats_price') > 0){
  1081.                                     $status = $this->website->get_user_credits_balance($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|reset_stats_payment_type'), $this->session->userdata(['user' => 'id']));
  1082.                                     if($status['credits'] < $this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|reset_stats_price')){
  1083.                                         json(['error' => sprintf(__('You have insufficient amount of %s'), $this->website->translate_credits($this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|reset_stats_payment_type'), $this->session->userdata(['user' => 'server'])))]);
  1084.                                     } else{
  1085.                                         $this->Mcharacter->reset_stats();
  1086.                                         $this->website->charge_credits($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|reset_stats_price'), $this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|reset_stats_payment_type'));
  1087.                                         $this->Mcharacter->add_account_log('Cleared character ' . $this->website->hex2bin($_POST['character']) . ' stats for ' . $this->website->translate_credits($this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|reset_stats_payment_type'), $this->session->userdata(['user' => 'server'])) . '', -$this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|reset_stats_price'), $this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  1088.                                         json(['success' => __('Stats successfully reseted.')]);
  1089.                                     }
  1090.                                 } else{
  1091.                                     $this->Mcharacter->reset_stats();
  1092.                                     json(['success' => __('Stats successfully reseted.')]);
  1093.                                 }
  1094.                             }
  1095.                         }
  1096.                     }
  1097.                 } else{
  1098.                     json(['error' => __('Reset Stats Disabled')]);
  1099.                 }
  1100.             } else{
  1101.                 json(['error' => __('Please login into website.')]);
  1102.             }
  1103.         }
  1104.  
  1105.         public function reset_skilltree()
  1106.         {
  1107.             if($this->session->userdata(['user' => 'logged_in'])){
  1108.                 if($this->website->is_multiple_accounts() == true){
  1109.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  1110.                 } else{
  1111.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  1112.                 }
  1113.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  1114.                 if($this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|allow_reset_skilltree') == 1){
  1115.                     $this->load->model('account');
  1116.                     $this->load->model('character');
  1117.                     foreach($_POST as $key => $value){
  1118.                         if($key == 'character'){
  1119.                             $this->Mcharacter->$key = trim(hex2bin($value));
  1120.                         } else{
  1121.                             $this->Mcharacter->$key = trim($value);
  1122.                         }
  1123.                     }
  1124.                     if(!$this->Maccount->check_connect_stat())
  1125.                         json(['error' => __('Please logout from game.')]);
  1126.                     else{
  1127.                         if(!isset($_POST['character']))
  1128.                             json(['error' => __('Invalid Character')]);
  1129.                         else{
  1130.                             if(!$this->Mcharacter->check_char())
  1131.                                 json(['error' => __('Character not found.')]);
  1132.                             else{
  1133.                                 if(!in_array($this->Mcharacter->char_info['Class'], $this->resetSkillTreeClass))
  1134.                                     json(['error' => __('Your class is not allowed to reset skilltree.')]); else{
  1135.                                     $status = $this->Maccount->get_amount_of_credits($this->session->userdata(['user' => 'username']), $this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|skilltree_reset_price_type'), $this->session->userdata(['user' => 'server']), $this->session->userdata(['user' => 'id']));
  1136.                                     $price = $this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|skilltree_reset_price');
  1137.                                     if($this->session->userdata('vip')){
  1138.                                         $price -= ($price / 100) * $this->session->userdata(['vip' => 'clear_skilltree_discount']);
  1139.                                     }
  1140.                                     if($status < $price){
  1141.                                         json(['error' => sprintf(__('You have insufficient amount of %s'), $this->website->translate_credits($this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|skilltree_reset_price_type'), $this->session->userdata(['user' => 'server'])))]);
  1142.                                     } else{
  1143.                                         $skill_tree = $this->Mcharacter->reset_skill_tree($this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|skill_tree_type'), $this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|skilltree_reset_level'), $this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|skilltree_reset_points'), $this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|skilltree_points_multiplier'));
  1144.                                         if($skill_tree){
  1145.                                             $this->website->charge_credits($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $price, $this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|skilltree_reset_price_type'));
  1146.                                             $this->Mcharacter->add_account_log('Cleared character ' . $this->website->hex2bin($_POST['character']) . ' skill tree for ' . $this->website->translate_credits($this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|skilltree_reset_price_type'), $this->session->userdata(['user' => 'server'])), -$price, $this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  1147.                                             json(['success' => __('SkillTree successfully reseted.')]);
  1148.                                         } else{
  1149.                                             json(['error' => __('Unable to reset skilltree.')]);
  1150.                                         }
  1151.                                     }
  1152.                                 }
  1153.                             }
  1154.                         }
  1155.                     }
  1156.                 }
  1157.                 else{
  1158.                     json(['error' => __('Reset SkillTree Disabled')]);
  1159.                 }
  1160.             } else{
  1161.                 json(['error' => __('Please login into website.')]);
  1162.             }
  1163.         }
  1164.  
  1165.         public function clear_inventory()
  1166.         {
  1167.             if($this->session->userdata(['user' => 'logged_in'])){
  1168.                 if($this->website->is_multiple_accounts() == true){
  1169.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  1170.                 } else{
  1171.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  1172.                 }
  1173.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  1174.                 $this->load->model('account');
  1175.                 $this->load->model('character');
  1176.                 foreach($_POST as $key => $value){
  1177.                     $this->Mcharacter->$key = trim($value);
  1178.                 }
  1179.                 if(!$this->Maccount->check_connect_stat())
  1180.                     json(['error' => __('Please logout from game.')]);
  1181.                                 else{
  1182.                     if(!isset($this->Mcharacter->vars['character']))
  1183.                         json(['error' => __('Invalid Character')]);
  1184.                                             else{
  1185.                         if(!isset($this->Mcharacter->vars['inventory']) && !isset($this->Mcharacter->vars['equipment']) && !isset($this->Mcharacter->vars['store']) && !isset($this->Mcharacter->vars['exp_inv_1']) && !isset($this->Mcharacter->vars['exp_inv_2']))
  1186.                             json(['error' => __('Please select one of options.')]);
  1187.                                                     else{
  1188.                             if(!$this->Mcharacter->check_char())
  1189.                                 json(['error' => __('Character not found.')]);
  1190.                                                             else{
  1191.                                 $this->Mcharacter->clear_inv();
  1192.                                 json(['success' => __('Character inventory successfully cleared.')]);
  1193.                             }
  1194.                         }
  1195.                     }
  1196.                 }
  1197.             } else{
  1198.                 json(['error' => __('Please login into website.')]);
  1199.             }
  1200.         }
  1201.  
  1202.         public function buy_level()
  1203.         {
  1204.             if($this->session->userdata(['user' => 'logged_in'])){
  1205.                 if($this->website->is_multiple_accounts() == true){
  1206.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  1207.                 } else{
  1208.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  1209.                 }
  1210.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  1211.                 $this->load->model('account');
  1212.                 $this->load->model('character');
  1213.                 $level_conf = $this->config->values('buylevel_config', $this->session->userdata(['user' => 'server']));
  1214.                 foreach($_POST as $key => $value){
  1215.                     $this->Mcharacter->$key = trim($value);
  1216.                 }
  1217.                 if(!$this->Maccount->check_connect_stat())
  1218.                     json(['error' => __('Please logout from game.')]); else{
  1219.                     if(!isset($this->Mcharacter->vars['character']))
  1220.                         json(['error' => __('Invalid Character')]); else{
  1221.                         if(!isset($this->Mcharacter->vars['level']))
  1222.                             json(['error' => __('Please select level.')]); else{
  1223.                             if(!$this->Mcharacter->check_char())
  1224.                                 json(['error' => __('Character not found.')]); else{
  1225.                                 if(!array_key_exists($this->Mcharacter->vars['level'], $level_conf['levels']))
  1226.                                     json(['error' => __('Invalid level selected.')]); else{
  1227.                                     if(!$this->check_max_level_allowed($level_conf, $this->Mcharacter->vars['level'], $this->Mcharacter->char_info['cLevel']))
  1228.                                         json(['error' => sprintf(__('You will exceed max level allowed: %d, please try to buy lower level.'), isset($level_conf['max_level']) ? $level_conf['max_level'] : 0)]); else{
  1229.                                         $status = $this->Maccount->get_amount_of_credits($this->session->userdata(['user' => 'username']), $level_conf['levels'][$this->Mcharacter->vars['level']]['payment_type'], $this->session->userdata(['user' => 'server']), $this->session->userdata(['user' => 'id']));
  1230.                                         if($status < $level_conf['levels'][$this->Mcharacter->vars['level']]['price']){
  1231.                                             json(['error' => sprintf(__('You have insufficient amount of %s'), $this->website->translate_credits($level_conf['levels'][$this->Mcharacter->vars['level']]['payment_type'], $this->session->userdata(['user' => 'server'])))]);
  1232.                                         } else{
  1233.                                             if($this->Mcharacter->update_level()){
  1234.                                                 $this->website->charge_credits($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $level_conf['levels'][$this->Mcharacter->vars['level']]['price'], $level_conf['levels'][$this->Mcharacter->vars['level']]['payment_type']);
  1235.                                                 json(['success' => __('Character level updated.')]);
  1236.                                             } else{
  1237.                                                 json(['error' => __('Unable to update character level.')]);
  1238.                                             }
  1239.                                         }
  1240.                                     }
  1241.                                 }
  1242.                             }
  1243.                         }
  1244.                     }
  1245.                 }
  1246.             } else{
  1247.                 json(['error' => __('Please login into website.')]);
  1248.             }
  1249.         }
  1250.  
  1251.         private function check_max_level_allowed($level_config, $levels_to_add, $char_level)
  1252.         {
  1253.             if($level_config != false){
  1254.                 if(isset($level_config['max_level'])){
  1255.                     $new_char_level = $levels_to_add + $char_level;
  1256.                     if($new_char_level <= $level_config['max_level'])
  1257.                         return true;
  1258.                 }
  1259.             }
  1260.             return false;
  1261.         }
  1262.  
  1263.         public function buy_points()
  1264.         {
  1265.             if($this->session->userdata(['user' => 'logged_in'])){
  1266.                 if($this->website->is_multiple_accounts() == true){
  1267.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  1268.                 } else{
  1269.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  1270.                 }
  1271.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  1272.                 $this->load->model('account');
  1273.                 $this->load->model('character');
  1274.                 foreach($_POST as $key => $value){
  1275.                     $this->Mcharacter->$key = trim($value);
  1276.                 }
  1277.                 if(!$this->Maccount->check_connect_stat())
  1278.                     json(['error' => __('Please logout from game.')]); else{
  1279.                     if(!isset($this->Mcharacter->vars['character']))
  1280.                         json(['error' => __('Invalid Character')]); else{
  1281.                         if(!isset($this->Mcharacter->vars['points']))
  1282.                             json(['error' => __('Please enter amount of points.')]); else{
  1283.                             if(!$this->Mcharacter->check_char())
  1284.                                 json(['error' => __('Character not found.')]); else{
  1285.                                 if($this->Mcharacter->vars['points'] < $this->config->config_entry('buypoints|points'))
  1286.                                     json(['error' => __('Minimal points value: %d points.', $this->config->config_entry('buypoints|points'))]); else{
  1287.                                     $status = $this->Maccount->get_amount_of_credits($this->session->userdata(['user' => 'username']), $this->config->config_entry('buypoints|price_type'), $this->session->userdata(['user' => 'server']), $this->session->userdata(['user' => 'id']));
  1288.                                     $price = ceil(($this->Mcharacter->vars['points'] * $this->config->config_entry('buypoints|price')) / $this->config->config_entry('buypoints|points'));
  1289.                                     if($status < $price){
  1290.                                         json(['error' => sprintf(__('You have insufficient amount of %s'), $this->website->translate_credits($this->config->config_entry('buypoints|price_type'), $this->session->userdata(['user' => 'server'])))]);
  1291.                                     } else{
  1292.                                         if($this->Mcharacter->update_points()){
  1293.                                             $this->website->charge_credits($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $price, $this->config->config_entry('buypoints|price_type'));
  1294.                                             json(['success' => __('Character statpoints updated.')]);
  1295.                                         } else{
  1296.                                             json(['error' => __('Unable to update character statpoints.')]);
  1297.                                         }
  1298.                                     }
  1299.                                 }
  1300.                             }
  1301.                         }
  1302.                     }
  1303.                 }
  1304.             } else{
  1305.                 json(['error' => __('Please login into website.')]);
  1306.             }
  1307.         }
  1308.  
  1309.         public function buy_gm()
  1310.         {
  1311.             if($this->session->userdata(['user' => 'logged_in'])){
  1312.                 if($this->website->is_multiple_accounts() == true){
  1313.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  1314.                 } else{
  1315.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  1316.                 }
  1317.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  1318.                 $this->load->model('account');
  1319.                 $this->load->model('character');
  1320.                 foreach($_POST as $key => $value){
  1321.                     $this->Mcharacter->$key = trim($value);
  1322.                 }
  1323.                 if(!$this->Maccount->check_connect_stat())
  1324.                     json(['error' => __('Please logout from game.')]); else{
  1325.                     if(!isset($this->Mcharacter->vars['character']))
  1326.                         json(['error' => __('Invalid Character')]); else{
  1327.                         if(!$this->Mcharacter->check_char())
  1328.                             json(['error' => __('Character not found.')]); else{
  1329.                             if($this->Mcharacter->char_info['CtlCode'] == $this->config->config_entry('buygm|gm_ctlcode'))
  1330.                                 json(['error' => __('Your character already is GameMaster.')]); else{
  1331.                                 $status = $this->Maccount->get_amount_of_credits($this->session->userdata(['user' => 'username']), $this->config->config_entry('buygm|price_t'), $this->session->userdata(['user' => 'server']), $this->session->userdata(['user' => 'id']));
  1332.                                 if($status < $this->config->config_entry('buygm|price')){
  1333.                                     json(['error' => sprintf(__('You have insufficient amount of %s'), $this->website->translate_credits($this->config->config_entry('buygm|price_t'), $this->session->userdata(['user' => 'server'])))]);
  1334.                                 } else{
  1335.                                     if($this->Mcharacter->update_gm()){
  1336.                                         $this->Maccount->add_account_log('Bought GM Status For ' . $this->website->translate_credits($this->config->config_entry('buygm|price_t'), $this->session->userdata(['user' => 'server'])), -$this->config->config_entry('buygm|price'), $this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  1337.                                         $this->website->charge_credits($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $this->config->config_entry('buygm|price'), $this->config->config_entry('buygm|price_t'));
  1338.                                         json(['success' => __('Character successfully promoted to GameMaster.')]);
  1339.                                     } else{
  1340.                                         json(['error' => __('Unable to update character gm status.')]);
  1341.                                     }
  1342.                                 }
  1343.                             }
  1344.                         }
  1345.                     }
  1346.                 }
  1347.             } else{
  1348.                 json(['error' => __('Please login into website.')]);
  1349.             }
  1350.         }
  1351.  
  1352.         public function load_class_list()
  1353.         {
  1354.             if($this->session->userdata(['user' => 'logged_in'])){
  1355.                 if($this->website->is_multiple_accounts() == true){
  1356.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  1357.                 } else{
  1358.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  1359.                 }
  1360.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  1361.                 $this->load->model('account');
  1362.                 $this->load->model('character');
  1363.                 foreach($_POST as $key => $value){
  1364.                     $this->Mcharacter->$key = trim($value);
  1365.                 }
  1366.                 if(!$this->Maccount->check_connect_stat())
  1367.                     json(['error' => __('Please logout from game.')]); else{
  1368.                     if(!isset($this->Mcharacter->vars['character']))
  1369.                         json(['error' => __('Invalid Character')]); else{
  1370.                         if(!$this->Mcharacter->check_char())
  1371.                             json(['error' => __('Character not found.')]); else{
  1372.                             if($select = $this->Mcharacter->gen_class_select_field($this->config->values('change_class_config', 'class_list'))){
  1373.                                 json(['data' => $select]);
  1374.                             } else{
  1375.                                 json(['error' => __('This character is not allowed to change class.')]);
  1376.                             }
  1377.                         }
  1378.                     }
  1379.                 }
  1380.             } else{
  1381.                 json(['error' => __('Please login into website.')]);
  1382.             }
  1383.         }
  1384.  
  1385.         public function buy_class()
  1386.         {
  1387.             if($this->session->userdata(['user' => 'logged_in'])){
  1388.                 if($this->website->is_multiple_accounts() == true){
  1389.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  1390.                 } else{
  1391.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  1392.                 }
  1393.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  1394.                 $this->load->model('account');
  1395.                 $this->load->model('character');
  1396.                 foreach($_POST as $key => $value){
  1397.                     $this->Mcharacter->$key = trim($value);
  1398.                 }
  1399.                 if(!$this->Maccount->check_connect_stat())
  1400.                     json(['error' => __('Please logout from game.')]); else{
  1401.                     if(!isset($this->Mcharacter->vars['character']))
  1402.                         json(['error' => __('Invalid Character')]); else{
  1403.                         if(!$this->Mcharacter->check_char())
  1404.                             json(['error' => __('Character not found.')]); else{
  1405.                             if(!isset($this->Mcharacter->vars['class_select']))
  1406.                                 json(['error' => __('Invalid class selected')]); else{
  1407.                                 if($this->Mcharacter->vars['class_select'] == $this->Mcharacter->char_info['Class'])
  1408.                                     json(['error' => __('You already have this class.')]); else{
  1409.                                     $this->vars['changeclass_config'] = $this->config->values('change_class_config');
  1410.                                     $status = $this->Maccount->get_amount_of_credits($this->session->userdata(['user' => 'username']), $this->vars['changeclass_config']['payment_type'], $this->session->userdata(['user' => 'server']), $this->session->userdata(['user' => 'id']));
  1411.                                     $price = $this->vars['changeclass_config']['price'];
  1412.                                     if($this->session->userdata('vip')){
  1413.                                         $price -= ($price / 100) * $this->session->userdata(['vip' => 'change_class_discount']);
  1414.                                     }
  1415.                                     if($status < $price){
  1416.                                         json(['error' => sprintf(__('You have insufficient amount of %s'), $this->website->translate_credits($this->vars['changeclass_config']['payment_type'], $this->session->userdata(['user' => 'server'])))]);
  1417.                                     } else{
  1418.                                         if($this->Mcharacter->check_equipment()){
  1419.                                             $this->Mcharacter->gen_class_select_field();
  1420.                                             if(isset($this->vars['changeclass_config']['class_list'][$this->Mcharacter->char_info['Class']]) && in_array($this->Mcharacter->vars['class_select'], $this->vars['changeclass_config']['class_list'][$this->Mcharacter->char_info['Class']])){
  1421.                                                 if(isset($this->vars['changeclass_config']['skill_tree']['active']) && $this->vars['changeclass_config']['skill_tree']['active'] == 1){
  1422.                                                     if(in_array($this->Mcharacter->char_info['Class'], $this->resetSkillTreeClass)){
  1423.                                                         $this->Mcharacter->reset_skill_tree($this->config->config_entry('character_' . $this->session->userdata(['user' => 'server']) . '|skill_tree_type'), isset($this->vars['changeclass_config']['skill_tree']['reset_level']) ? $this->vars['changeclass_config']['skill_tree']['reset_level'] : 0, isset($this->vars['changeclass_config']['skill_tree']['reset_points']) ? $this->vars['changeclass_config']['skill_tree']['reset_points'] : 0, isset($this->vars['changeclass_config']['skill_tree']['points_multiplier']) ? $this->vars['changeclass_config']['skill_tree']['points_multiplier'] : 0);
  1424.                                                     }
  1425.                                                 }
  1426.                                                 $this->Mcharacter->update_char_class();
  1427.                                                 $this->Maccount->add_account_log('Changed Character ' . $this->Mcharacter->char_info['Name'] . ' class for ' . $this->website->translate_credits($this->vars['changeclass_config']['payment_type'], $this->session->userdata(['user' => 'server'])), -$price, $this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  1428.                                                 $this->website->charge_credits($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $price, $this->vars['changeclass_config']['payment_type']);
  1429.                                                 json(['success' => __('Character class successfully changed.')]);
  1430.                                             } else{
  1431.                                                 json(['error' => __('You are not allowed to use this class.')]);
  1432.                                             }
  1433.                                         } else{
  1434.                                             json(['error' => __('Before changing class please remove your equipped items.')]);
  1435.                                         }
  1436.                                     }
  1437.                                 }
  1438.                             }
  1439.                         }
  1440.                     }
  1441.                 }
  1442.             } else{
  1443.                 json(['error' => __('Please login into website.')]);
  1444.             }
  1445.         }
  1446.  
  1447.         public function change_name()
  1448.         {
  1449.             if($this->session->userdata(['user' => 'logged_in'])){
  1450.                 if($this->website->is_multiple_accounts() == true){
  1451.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  1452.                 } else{
  1453.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  1454.                 }
  1455.                 $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  1456.                 $this->load->model('account');
  1457.                 $this->load->model('character');
  1458.                 foreach($_POST as $key => $value){
  1459.                     $this->Mcharacter->$key = trim($value);
  1460.                 }
  1461.                 if(!$this->Maccount->check_connect_stat())
  1462.                     json(['error' => __('Please logout from game.')]); else{
  1463.                     if(!isset($this->Mcharacter->vars['old_name']) || $this->Mcharacter->vars['old_name'] == ''){
  1464.                         json(['error' => __('Old name can not be empty.')]);
  1465.                     } else{
  1466.                         if(!isset($this->Mcharacter->vars['new_name']) || $this->Mcharacter->vars['new_name'] == ''){
  1467.                             json(['error' => __('New name can not be empty.')]);
  1468.                         } else{
  1469.                             //if(!preg_match('/^[\p{L}]+$/u', $this->Mcharacter->vars['new_name'])){
  1470.                             //if(!preg_match('/^[' . str_replace('/', '\/', $this->config->config_entry('changename|allowed_pattern')) . ']+$/u', $this->Mcharacter->vars['new_name'])){
  1471.                              //   json(['error' => __('You are using forbidden chars in your new name.')]);
  1472.                             //} else{
  1473.                                 if(mb_strlen($this->Mcharacter->vars['new_name']) < 2 || mb_strlen($this->Mcharacter->vars['new_name']) > $this->config->config_entry('changename|max_length')){
  1474.                                     json(['error' => sprintf(__('Character Name can be 2-%d chars long!'), $this->config->config_entry('changename|max_length'))]);
  1475.                                 } else{
  1476.                                     if($this->Mcharacter->vars['new_name'] === $this->website->hex2bin($this->Mcharacter->vars['old_name'])){
  1477.                                         json(['error' => __('New name can not be same as old.')]);
  1478.                                     } else{
  1479.                                         $old_char_data = $this->Mcharacter->check_if_char_exists($this->website->hex2bin($this->Mcharacter->vars['old_name']));
  1480.                                         $new_char_data = $this->Mcharacter->check_if_char_exists($this->Mcharacter->vars['new_name']);
  1481.                                         if(!$old_char_data){
  1482.                                             json(['error' => __('Old character not found on your account.')]);
  1483.                                         } else{
  1484.                                             if($old_char_data['AccountId'] != $this->session->userdata(['user' => 'username'])){
  1485.                                                 json(['error' => __('You are not owner of this character.')]);
  1486.                                             } else{
  1487.                                                 if($new_char_data){
  1488.                                                     json(['error' => __('Character with this name already exists.')]);
  1489.                                                 } else{
  1490.                                                     if($this->config->config_entry('changename|check_guild') == 1 && $this->Mcharacter->has_guild($this->website->hex2bin($this->Mcharacter->vars['old_name']))){
  1491.                                                         json(['error' => __('You are not allowed to change name while you are in guild.')]);
  1492.                                                     } else{
  1493.                                                         $restricted_words = explode(',', $this->config->config_entry('changename|forbidden'));
  1494.                                                         $restrict = false;
  1495.                                                         foreach($restricted_words as $key => $words){
  1496.                                                             if(stripos($this->Mcharacter->vars['new_name'], $words) !== false){
  1497.                                                                 $restrict = true;
  1498.                                                                 break;
  1499.                                                             }
  1500.                                                         }
  1501.                                                         if($restrict != false){
  1502.                                                             json(['error' => __('Found forbidden word in new character name please fix it.')]);
  1503.                                                         } else{
  1504.                                                             $status = $this->Maccount->get_amount_of_credits($this->session->userdata(['user' => 'username']), $this->config->config_entry('changename|price_type'), $this->session->userdata(['user' => 'server']), $this->session->userdata(['user' => 'id']));
  1505.                                                             $price = $this->config->config_entry('changename|price');
  1506.                                                             if($this->session->userdata('vip')){
  1507.                                                                 $price -= ($price / 100) * $this->session->userdata(['vip' => 'change_name_discount']);
  1508.                                                             }
  1509.                                                             if($status < $price){
  1510.                                                                 json(['error' => sprintf(__('You have insufficient amount of %s'), $this->website->translate_credits($this->config->config_entry('changename|price_type'), $this->session->userdata(['user' => 'server'])))]);
  1511.                                                             } else{
  1512.                                                                 $this->website->charge_credits($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $price, $this->config->config_entry('changename|price_type'));
  1513.                                                                 if($this->Mcharacter->update_account_character($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name'])){
  1514.                                                                     if($this->config->config_entry('changename|check_guild') == 0){
  1515.                                                                         $this->Mcharacter->update_guild($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1516.                                                                         $this->Mcharacter->update_guild_member($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1517.                                                                     }
  1518.                                                                     $this->Mcharacter->update_character($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1519.                                                                     $this->Mcharacter->update_option_data($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1520.                                                                     $this->Mcharacter->update_t_friendlist($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1521.                                                                     $this->Mcharacter->update_t_friendmail($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1522.                                                                     $this->Mcharacter->update_t_cguid($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1523.                                                                     $this->Mcharacter->update_T_CurCharName($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1524.                                                                     $this->Mcharacter->update_T_Event_Inventory($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1525.                                                                     if($this->config->config_entry('changename|user_master_level') == 1 && (strtolower($this->config->values('table_config', [$this->session->userdata(['user' => 'server']), 'master_level', 'table'])) != 'character' && trim($this->config->values('table_config', [$this->session->userdata(['user' => 'server']), 'master_level', 'table'])) != '')){
  1526.                                                                         $this->Mcharacter->update_master_level_table($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name'], $this->session->userdata(['user' => 'server']));
  1527.                                                                     }
  1528.                                                                     $this->Mcharacter->update_IGC_Gens($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1529.                                                                     $this->Mcharacter->update_IGC_GensAbuse($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1530.                                                                     $this->Mcharacter->update_IGC_HuntingRecord($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1531.                                                                     $this->Mcharacter->update_IGC_HuntingRecordOption($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1532.                                                                     $this->Mcharacter->update_IGC_LabyrinthClearLog($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1533.                                                                     $this->Mcharacter->update_IGC_LabyrinthInfo($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1534.                                                                     $this->Mcharacter->update_IGC_LabyrinthLeagueLog($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1535.                                                                     $this->Mcharacter->update_IGC_LabyrinthLeagueUser($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1536.                                                                     $this->Mcharacter->update_IGC_LabyrinthMissionInfo($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1537.                                                                     $this->Mcharacter->update_IGC_MixLostItemInfo($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1538.                                                                     $this->Mcharacter->update_IGC_Muun_Inventory($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1539.                                                                     $this->Mcharacter->update_IGC_RestoreItem_Inventory($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1540.                                                                     $this->Mcharacter->update_IGC_PeriodBuffInfo($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1541.                                                                     $this->Mcharacter->update_IGC_PeriodExpiredItemInfo($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1542.                                                                     $this->Mcharacter->update_IGC_PeriodItemInfo($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1543.                                                                     $this->Mcharacter->update_IGC_PentagramInfo($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1544.                                                                     $this->Mcharacter->update_T_3rd_Quest_Info($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1545.                                                                     $this->Mcharacter->update_T_GMSystem($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1546.                                                                     $this->Mcharacter->update_T_LUCKY_ITEM_INFO($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1547.                                                                     $this->Mcharacter->update_T_PentagramInfo($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1548.                                                                     $this->Mcharacter->update_T_QUEST_EXP_INFO($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1549.                                                                     $this->Mcharacter->update_T_WaitFriend($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1550.                                                                     $this->Mcharacter->update_T_WaitFriend($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1551.                                                                     $this->Mcharacter->update_PetWarehouse($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1552.                                                                     $this->Mcharacter->update_DmN_Ban_List($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1553.                                                                     $this->Mcharacter->update_DmN_Gm_List($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1554.                                                                     $this->Mcharacter->update_DmN_Market($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1555.                                                                     $this->Mcharacter->update_DmN_Market_Logs($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1556.                                                                     $this->Mcharacter->update_DmN_Votereward_Ranking($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1557.                                                                     $this->Maccount->add_account_log('Changed Name To ' . $this->Mcharacter->vars['new_name'] . ' for ' . $this->website->translate_credits($this->config->config_entry('changename|price_type'), $this->session->userdata(['user' => 'server'])), -$price, $this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  1558.                                                                     $this->Mcharacter->add_to_change_name_history($this->website->hex2bin($this->Mcharacter->vars['old_name']), $this->Mcharacter->vars['new_name']);
  1559.                                                                     json(['success' => __('Character Name Successfully Changed.'), 'new_name' => bin2hex($this->Mcharacter->vars['new_name'])]);
  1560.                                                                 }
  1561.                                                             }
  1562.                                                         }
  1563.                                                     }
  1564.                                                 }
  1565.                                             }
  1566.                                         }
  1567.                                     }
  1568.                                 }
  1569.                             //}
  1570.                         }
  1571.                     }
  1572.                 }
  1573.             } else{
  1574.                 json(['error' => __('Please login into website.')]);
  1575.             }
  1576.         }
  1577.  
  1578.         public function exchange_wcoins()
  1579.         {
  1580.             if($this->session->userdata(['user' => 'logged_in'])){
  1581.                 $this->load->model('account');
  1582.                 $this->load->model('character');
  1583.                 foreach($_POST as $key => $value){
  1584.                     $this->Mcharacter->$key = trim($value);
  1585.                 }
  1586.                 if(!$this->Maccount->check_connect_stat())
  1587.                     json(['error' => __('Please logout from game.')]); else{
  1588.                     if(!preg_match('/^[0-9]+$/', $this->Mcharacter->vars['credits']))
  1589.                         json(['error' => sprintf(__('Invalid amount of %s'), $this->website->translate_credits($this->vars['wcoin_config']['credits_type'], $this->session->userdata(['user' => 'server'])))]); else{
  1590.                         $this->vars['wcoin_config'] = $this->config->values('wcoin_exchange_config', $this->session->userdata(['user' => 'server']));
  1591.                         $this->vars['table_config'] = $this->config->values('table_config', $this->session->userdata(['user' => 'server']));
  1592.                         if(isset($this->vars['table_config']['wcoins']) && $this->vars['wcoin_config'] != false && $this->vars['wcoin_config']['active'] == 1){
  1593.                             if($this->Mcharacter->vars['credits'] < $this->vars['wcoin_config']['min_rate'])
  1594.                                 json(['error' => vsprintf(__('Minimal exchange rate is %d %s'), [$this->vars['wcoin_config']['min_rate'], $this->website->translate_credits($this->vars['wcoin_config']['credits_type'], $this->session->userdata(['user' => 'server']))])]); else{
  1595.                                 if($this->vars['wcoin_config']['reward_coin'] < 0)
  1596.                                     $total = floor($this->Mcharacter->vars['credits'] * abs($this->vars['wcoin_config']['reward_coin'])); else
  1597.                                     $total = floor($this->Mcharacter->vars['credits'] / $this->vars['wcoin_config']['reward_coin']);
  1598.                                 if($this->vars['wcoin_config']['change_back'] == 1){
  1599.                                     if($this->Mcharacter->vars['exchange_type'] == 1){
  1600.                                         goto exchange_wcoins;
  1601.                                     } else{
  1602.                                         goto exchange_credits;
  1603.                                     }
  1604.                                 }
  1605.                                 exchange_wcoins:
  1606.                                 $status = $this->Maccount->get_amount_of_credits($this->session->userdata(['user' => 'username']), $this->vars['wcoin_config']['credits_type'], $this->session->userdata(['user' => 'server']), $this->session->userdata(['user' => 'id']));
  1607.                                 if($status < $this->Mcharacter->vars['credits'])
  1608.                                     json(['error' => sprintf(__('You have insufficient amount of %s'), $this->website->translate_credits($this->vars['wcoin_config']['credits_type'], $this->session->userdata(['user' => 'server'])))]); else{
  1609.                                     $this->website->charge_credits($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $this->Mcharacter->vars['credits'], $this->vars['wcoin_config']['credits_type']);
  1610.                                     $this->Maccount->add_account_log('Exchange ' . $this->website->translate_credits($this->vars['wcoin_config']['credits_type'], $this->session->userdata(['user' => 'server'])) . ' to' . __('WCoins'), -$this->Mcharacter->vars['credits'], $this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  1611.                                     $this->Mcharacter->add_wcoins($total, $this->vars['table_config']['wcoins']);
  1612.                                     json(['success' => __('WCoins successfully exchanged.')]);
  1613.                                 }
  1614.                                 exchange_credits:
  1615.                                 if($status = $this->Mcharacter->get_wcoins($this->vars['table_config']['wcoins'], $this->session->userdata(['user' => 'server']))){
  1616.                                     if($status < $this->Mcharacter->vars['credits'])
  1617.                                         json(['error' => sprintf(__('You have insufficient amount of %s'), __('WCoins'))]); else{
  1618.                                         $this->website->add_credits($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $total, $this->vars['wcoin_config']['credits_type']);
  1619.                                         $this->Maccount->add_account_log('Exchange ' . __('WCoins') . ' to ' . $this->website->translate_credits($this->vars['wcoin_config']['credits_type'], $this->session->userdata(['user' => 'server'])), -$this->Mcharacter->vars['credits'], $this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']));
  1620.                                         $this->Mcharacter->remove_wcoins($this->vars['table_config']['wcoins']);
  1621.                                         json(['success' => __('WCoins successfully exchanged.')]);
  1622.                                     }
  1623.                                 } else{
  1624.                                     json(['error' => __('Unable to exchange Wcoins')]);
  1625.                                 }
  1626.                             }
  1627.                         } else{
  1628.                             json(['error' => __('This module has been disabled.')]);
  1629.                         }
  1630.                     }
  1631.                 }
  1632.             } else{
  1633.                 json(['error' => __('Please login into website.')]);
  1634.             }
  1635.         }
  1636.  
  1637.         public function switch_language()
  1638.         {
  1639.             if(isset($_POST['lang'])){
  1640.                 setcookie("dmn_language", $this->website->c($_POST['lang']), strtotime('+5 days', time()), "/");
  1641.                 json(['success' => true]);                                                                                             
  1642.             }
  1643.             json(['error' => true]);
  1644.         }
  1645.  
  1646.         public function paypal()
  1647.         {
  1648.             if($this->session->userdata(['user' => 'logged_in'])){
  1649.                 $this->load->model('donate');
  1650.                 if(isset($_POST['proccess_paypal'])){
  1651.                     if($package_data = $this->Mdonate->get_paypal_package_data_by_id($_POST['proccess_paypal'])){
  1652.                         if($this->Mdonate->insert_paypal_order($package_data['reward'], $package_data['price'], $package_data['currency']))
  1653.                             json($this->Mdonate->get_paypal_data()); else
  1654.                             json(['error' => __('Unable to checkout please try again.')]);
  1655.                     } else{
  1656.                         json(['error' => __('Paypal package not found.')]);
  1657.                     }
  1658.                 } else{
  1659.                     json(['error' => __('Unable to checkout please try again.')]);
  1660.                 }
  1661.             } else{
  1662.                 json(['error' => __('Please login into website.')]);
  1663.             }
  1664.         }
  1665.  
  1666.         public function paycall()
  1667.         {
  1668.             if($this->session->userdata(['user' => 'logged_in'])){
  1669.                 $this->load->model('donate');
  1670.                 if(isset($_POST['proccess_paycall'])){
  1671.                     if($package_data = $this->Mdonate->get_paycall_package_data_by_id($_POST['proccess_paycall'])){
  1672.                         if($this->Mdonate->insert_paycall_order($package_data['reward'], $package_data['price']))
  1673.                             json($this->Mdonate->get_paycall_data($package_data['reward'], $package_data['price'])); else
  1674.                             json(['error' => __('Unable to checkout please try again.')]);
  1675.                     } else{
  1676.                         json(['error' => __('Paycall package not found.')]);
  1677.                     }
  1678.                 } else{
  1679.                     json(['error' => __('Unable to checkout please try again.')]);
  1680.                 }
  1681.             } else{
  1682.                 json(['error' => __('Please login into website.')]);
  1683.             }
  1684.         }
  1685.  
  1686.         public function hide_chars()
  1687.         {
  1688.             if($this->session->userdata(['user' => 'logged_in'])){
  1689.                 if($this->website->is_multiple_accounts() == true){
  1690.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  1691.                 } else{
  1692.                     $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  1693.                 }
  1694.                 $this->load->model('account');
  1695.                 if($this->config->config_entry('account|hide_char_enabled') == 1){                                                     
  1696.                     $status = $this->Maccount->get_amount_of_credits($this->session->userdata(['user' => 'username']), $this->config->config_entry('account|hide_char_price_type'), $this->session->userdata(['user' => 'server']), $this->session->userdata(['user' => 'id']));
  1697.                     $price = $this->config->config_entry('account|hide_char_price');
  1698.                     if($this->session->userdata('vip')){
  1699.                         $price -= ($price / 100) * $this->session->userdata(['vip' => 'hide_info_discount']);
  1700.                     }
  1701.                     if($status < $price){
  1702.                         json(['error' => sprintf(__('You have insufficient amount of %s'), $this->website->translate_credits($this->config->config_entry('account|hide_char_price_type'), $this->session->userdata(['user' => 'server'])))]);
  1703.                     } else{
  1704.                         $check_hide = $this->Maccount->check_hide_time();
  1705.                         if($check_hide == 'None'){
  1706.                             $this->Maccount->add_hide($price);
  1707.                             $this->website->charge_credits($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $price, $this->config->config_entry('account|hide_char_price_type'));
  1708.                             json(['success' => __('You have successfully hidden your chars')]);
  1709.                         } else{  
  1710.                             $this->Maccount->extend_hide($check_hide, $price);
  1711.                             $this->website->charge_credits($this->session->userdata(['user' => 'username']), $this->session->userdata(['user' => 'server']), $price, $this->config->config_entry('account|hide_char_price_type'));
  1712.                             json(['success' => __('You char hide time has been extended')]);
  1713.                         }
  1714.                     }
  1715.                 } else{
  1716.                     json(['error' => __('This module has been disabled.')]);
  1717.                 }
  1718.             } else{
  1719.                 json(['error' => __('Please login into website.')]);
  1720.             }
  1721.         }
  1722.  
  1723.         public function download()
  1724.         {
  1725.             $this->load->model('admin');
  1726.             if(!isset($_POST['image'])){
  1727.                 exit;
  1728.             } else{
  1729.                 if(!ctype_digit($_POST['image'])){
  1730.                     exit;
  1731.                 }
  1732.                 if(!$image = $this->Madmin->check_gallery_image($_POST['image'])){
  1733.                     exit;
  1734.                 } else{
  1735.                     $file = BASEDIR . 'assets' . DS . 'uploads' . DS . 'normal' . DS . $image['name'];
  1736.                     if(file_exists($file)){
  1737.                         header('Pragma: public');
  1738.                         header('Cache-Control: public, no-cache');
  1739.                         header('Content-Type: application/octet-stream');
  1740.                         header('Content-Length: ' . filesize($file));
  1741.                         header('Content-Disposition: attachment; filename="' . basename($file) . '"');
  1742.                         header('Content-Transfer-Encoding: binary');
  1743.                         readfile($file);
  1744.                     } else{
  1745.                         exit;
  1746.                     }
  1747.                 }
  1748.             }
  1749.         }
  1750.  
  1751.         public function get_time()
  1752.         {
  1753.             if(isset($_GET['callback'])){
  1754.                 echo htmlspecialchars($_GET['callback']) . '(' . "{'ServerTime' : '" . date('m/d/Y h:i:s A', time()) . "'}" . ')';
  1755.             } else{
  1756.                 return false;
  1757.             }
  1758.         }
  1759.  
  1760.         public function click_ads()
  1761.         {
  1762.             if(defined('IS_GOOGLE_ADD_VOTE') && IS_GOOGLE_ADD_VOTE == true){
  1763.                 if($this->session->userdata(['user' => 'logged_in'])){
  1764.                     if($this->website->is_multiple_accounts() == true){
  1765.                         $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']), true)]);
  1766.                     } else{
  1767.                         $this->load->lib(['account_db', 'db'], [HOST, USER, PASS, $this->website->get_default_account_database()]);
  1768.                     }
  1769.                     $this->load->lib(['game_db', 'db'], [HOST, USER, PASS, $this->website->get_db_from_server($this->session->userdata(['user' => 'server']))]);
  1770.                     $this->load->model('account');
  1771.                     if($this->Maccount->get_last_ads_vote(GOOGLE_ADD_TIME) != false){
  1772.                         return false;
  1773.                     } else{
  1774.                         if($this->Maccount->log_ads_vote()){
  1775.                             $this->Maccount->reward_voter(GOOGLE_ADD_REWARD, 1, $this->session->userdata(['user' => 'server']));
  1776.                             return true;
  1777.                         } else{
  1778.                             return false;
  1779.                         }
  1780.                     }
  1781.                 } else{
  1782.                     return false;
  1783.                 }
  1784.             } else{
  1785.                 return false;
  1786.             }
  1787.         }
  1788.     }
RAW Paste Data