public function postRedeem(Request $request)
 {
     $api = new API();
     $voucher = Voucher::findOrFail($request->code);
     if (!VoucherLog::redeemed($voucher->id)->exists()) {
         $mail = ['title' => trans('voucher.mail.title', ['code' => $request->code]), 'message' => trans('voucher.mail.message', ['name' => $voucher->item_name, 'count' => $voucher->item_count]), 'money' => 0, 'item' => ['id' => $voucher->item_id, 'pos' => 0, 'count' => $voucher->item_count, 'max_count' => $voucher->item_count, 'data' => $voucher->item_octets, 'proctype' => $voucher->item_proc_type, 'expire_date' => 0, 'guid1' => 0, 'guid2' => 0, 'mask' => $voucher->item_mask]];
         $api->sendMail(Auth::user()->characterId(), $mail['title'], $mail['message'], $mail['item'], $mail['money']);
         VoucherLog::create(['voucher_id' => $voucher->id, 'user_id' => Auth::user()->ID]);
         flash()->success(trans('voucher.successfully_redeemed'));
     } else {
         flash()->error(trans('voucher.already_redeemed'));
     }
     return redirect()->back();
 }
 public function getSelect($role_id)
 {
     //TODO Check to see if the role belongs to the user.
     $api = new API();
     if (settings('server_version') == '07') {
         $role_name = NULL;
         $roles = $api->getRoles(Auth::user()->ID);
         foreach ($roles['roles'] as $role) {
             if ($role_id == $role['id']) {
                 $role_name = $role['name'];
             }
         }
         session()->put('character_id', $role_id);
         session()->put('character_name', $role_name);
         flash()->success(trans('character.success'));
     } else {
         $role_data = $api->getRole($role_id);
         if (isset($role_data)) {
             // Doens't work yet
             /*if($roleData['base']['userid'])
               {
                   //$_SESSION['selectedRoleId'] = $role;
                   //$_SESSION['selectedRoleName'] = $roleData['base']['name'];
                   Session::set($action, time());
                   Session::set('selectedRoleId', $role);
                   Session::set('selectedRoleName', $roleData['base']['name']);
                   echo 'selected';
               }
               else
               {
                   echo 'Character does not belong to your Account.';
               }*/
             session()->put('character_id', $role_data['base']['id']);
             session()->put('character_name', $role_data['base']['name']);
             flash()->success(trans('character.success'));
         } else {
             flash()->error(trans('character.error.role'));
         }
     }
     return redirect()->back();
 }
Beispiel #3
0
 public function postGift(Request $request, ShopItem $item)
 {
     $this->validate($request, ['friends' => 'required|array|min:1']);
     $user = Auth::user();
     $item_price = $item->discount > 0 ? $item->price - $item->price / 100 * $item->discount : $item->price;
     if ($user->money > $item_price) {
         $api = new API();
         $mail = array('title' => trans('shop.gift_item.title'), 'message' => trans('shop.gift_item.message', ['name' => $item->name, 'count' => $item->count, 'player' => $user->characterName()]), 'money' => 0, 'item' => array('id' => $item->item_id, 'pos' => 0, 'count' => $item->count, 'max_count' => $item->max_count, 'data' => $item->octet, 'proctype' => $item->protection_type, 'expire_date' => $item->expire_date, 'guid1' => 0, 'guid2' => 0, 'mask' => $item->mask));
         foreach ($request->friends as $friend) {
             if ($api->sendMail($friend, $mail['title'], $mail['message'], $mail['item'], $mail['money'])) {
                 //TODO Add notifications
                 $user->money = $user->money - $item_price;
                 $user->save();
                 flash()->success(trans('shop.gift_complete', ['name' => $item->name, 'count' => count($request->friends)]));
             } else {
                 flash()->error(trans('main.server_not_online'));
             }
         }
     } else {
         flash()->error(trans('main.not_enough', ['currency' => strtolower(settings('currency_name'))]));
     }
     return redirect()->back();
 }
 public function postForbid(Request $request)
 {
     $this->validate($request, ['user_id' => 'required|numeric|min:1', 'length' => 'required|numeric|min:1', 'reason' => 'required']);
     $api = new API();
     switch ($request->type) {
         case 'ban_acc':
             $api->forbidAcc($request->user_id, $request->length, $request->reason);
             flash()->success(trans('management.complete.forbid.ban.account'), ['user' => $request->user_id, 'seconds' => $request->length]);
             break;
         case 'ban_char':
             $api->forbidRole($request->user_id, $request->length, $request->reason);
             flash()->success(trans('management.complete.forbid.ban.character', ['user' => $request->user_id, 'seconds' => $request->length]));
             break;
         case 'mute_acc':
             $api->muteAcc($request->user_id, $request->length, $request->reason);
             flash()->success(trans('management.complete.forbid.mute.account', ['user' => $request->user_id, 'seconds' => $request->length]));
             break;
         case 'mute_char':
             $api->muteRole($request->user_id, $request->length, $request->reason);
             flash()->success(trans('management.complete.forbid.mute.character', ['user' => $request->user_id, 'seconds' => $request->length]));
             break;
     }
     return redirect()->back();
 }
Beispiel #5
0
 /**
  * Define the application's command schedule.
  *
  * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
  * @return void
  */
 protected function schedule(Schedule $schedule)
 {
     /*
      * Cubi Transferring
      */
     $schedule->call(function () {
         $transfers = Transfer::all();
         foreach ($transfers as $transfer) {
             if (!DB::table('usecashnow')->where('userid', $transfer->user_id)->where('zoneid', $transfer->zone_id)->take(1)->exists()) {
                 DB::table('usecashnow')->insert(['userid' => $transfer->user_id, 'zoneid' => $transfer->zone_id, 'sn' => 0, 'aid' => 1, 'point' => 0, 'cash' => $transfer->cash, 'status' => 1, 'creatime' => Carbon::now()]);
                 DB::table('pweb_transfer')->where('user_id', $transfer->user_id)->where('zone_id', $transfer->zone_id)->where('cash', $transfer->cash)->take(1)->delete();
             }
         }
     })->everyMinute();
     /*
      * Update Players
      */
     $schedule->call(function () {
         $api = new API();
         if ($api->online) {
             set_time_limit(0);
             $users = User::all();
             foreach ($users as $user) {
                 $roles = $api->getRoles($user->ID) ? $api->getRoles($user->ID)['roles'] : [];
                 foreach ($roles as $role) {
                     $role_data = $api->getRole($role['id']);
                     $var_data = settings('server_version') != '07' ? $api->parseOctet($role_data['status']['var_data'], 'var_data') : ['pk_count' => 0, 'dead_flag' => 0];
                     if (!empty($role_data['status']['faction_contrib'])) {
                         $faction_contrib = $api->parseOctet($role_data['status']['faction_contrib'], 'faction_contrib');
                     }
                     if (!empty($role_data['status']['force_data'])) {
                         $force_data = $api->parseOctet($role_data['status']['force_data'], 'force_data');
                     }
                     if (!empty($role_data['status']['title_data'])) {
                         $title_data = $api->parseOctet($role_data['status']['title_data'], 'title_data');
                     }
                     $user_faction = $api->getUserFaction($role['id']);
                     if (!empty($user_faction['fid'])) {
                         $faction_info = $api->getFactionInfo($user_faction['fid']);
                     }
                     $role_info = ['id' => $role_data['base']['id'], 'name' => $role_data['base']['name'], 'cls' => $role_data['base']['cls'], 'gender' => $role_data['base']['gender'], 'spouse' => $role_data['base']['spouse'], 'level' => $role_data['status']['level'], 'level2' => $role_data['status']['level2'], 'hp' => $role_data['status']['hp'], 'mp' => $role_data['status']['mp'], 'pariah_time' => $role_data['status']['pariah_time'], 'reputation' => $role_data['status']['reputation'], 'time_used' => $role_data['status']['time_used'], 'pk_count' => $var_data['pk_count'], 'dead_flag' => $var_data['dead_flag'], 'force_id' => !empty($force_data['cur_force_id']) ? $force_data['cur_force_id'] : 0, 'title_id' => !empty($title_data['cur_title_id']) ? $title_data['cur_title_id'] : 0, 'faction_id' => !empty($user_faction['fid']) ? $user_faction['fid'] : '', 'faction_name' => !empty($faction_info['name']) ? $faction_info['name'] : '', 'faction_role' => !empty($user_faction['role']) ? $user_faction['role'] : '', 'faction_contrib' => !empty($faction_contrib['consume_contrib']) ? $faction_contrib['consume_contrib'] : 0, 'faction_feat' => !empty($faction_contrib['cumulate_contrib']) ? $faction_contrib['cumulate_contrib'] : 0, 'equipment' => json_encode($role_data['equipment'])];
                     if ($player = Player::find($role_info['id'])) {
                         $player->update($role_info);
                     } else {
                         Player::create($role_info);
                     }
                     unset($role_data);
                     unset($var_data);
                     unset($force_data);
                     unset($faction_info);
                     unset($faction_contrib);
                     unset($user_faction);
                 }
             }
         }
     })->everyTenMinutes();
     /*
      * Update Factions
      */
     $schedule->call(function () {
         $gamed = new Gamed();
         $api = new API();
         $handler = NULL;
         if ($api->online) {
             set_time_limit(0);
             do {
                 $raw_info = $api->getRaw('factioninfo', $handler);
                 if (isset($raw_info['Raw']) || count($raw_info['Raw']) > 1) {
                     return true;
                 }
                 for ($i = 0; $i < count($raw_info['Raw']); $i++) {
                     if (empty($raw_info['Raw'][$i]['key']) || empty($raw_info['Raw'][$i]['value'])) {
                         unset($raw_info['Raw'][$i]);
                         continue;
                     }
                     $id = $gamed->getArrayValue(unpack("N", pack("H*", $raw_info['Raw'][$i]['key'])), 1);
                     $pack = pack("H*", $raw_info['Raw'][$i]['value']);
                     $faction = $gamed->unmarshal($pack, $api->data['FactionInfo']);
                     if (!empty($faction['master']['roleid']) && $faction['master']['roleid'] > 0) {
                         $user_faction = $api->getUserFaction($faction['master']['roleid']);
                         $faction_info = ['id' => $faction['fid'], 'name' => $faction['name'], 'level' => $faction['level'] + 1, 'master' => $faction['master']['roleid'], 'master_name' => $user_faction['name'], 'members' => count($faction['member']), 'reputation' => $this->getFactionStat($faction['fid'], 'reputation') > 0 ? $this->getFactionStat($faction['fid'], 'reputation') : 0, 'time_used' => $this->getFactionStat($faction['fid'], 'time_used') > 0 ? $this->getFactionStat($faction['fid'], 'time_used') : 0, 'pk_count' => $this->getFactionStat($faction['fid'], 'pk_count') > 0 ? $this->getFactionStat($faction['fid'], 'pk_count') : 0, 'announce' => $faction['announce'], 'territories' => Territory::where('owner', $faction['fid'])->count()];
                         if ($faction = Faction::find($faction_info['id'])) {
                             $faction->update($faction_info);
                         } else {
                             Faction::create($faction_info);
                         }
                     }
                     unset($id);
                     unset($faction);
                     unset($user_faction);
                     unset($raw_info['Raw'][$i]['value']);
                 }
                 $raw_count = count($raw_info['Raw']) - 1;
                 $last_raw = $raw_info['Raw'][$raw_count];
                 $last_key = $last_raw['key'];
                 $new_key = hexdec($last_key) + 1;
                 $handler = bin2hex(pack("N*", $new_key));
             } while (TRUE);
         }
     })->everyTenMinutes();
     /*
      * Update Territories
      */
     $schedule->call(function () {
         $api = new API();
         if ($api->online) {
             $territories = $api->getTerritories() ? $api->getTerritories()['Territory'] : [];
             foreach ($territories as $territory) {
                 if ($territory['owner'] > 0) {
                     $owner = $api->getFactionInfo($territory['owner']);
                 }
                 if ($territory['challenger'] > 0) {
                     $challenger = $api->getFactionInfo($territory['challenger']);
                 }
                 $territory_info = ['id' => $territory['id'], 'level' => $territory['level'], 'owner' => $territory['owner'], 'owner_name' => !empty($owner['name']) ? $owner['name'] : '', 'occupy_time' => $territory['occupy_time'], 'challenger' => $territory['challenger'], 'challenger_name' => !empty($challenger['name']) ? $challenger['name'] : '', 'deposit' => $territory['deposit'], 'cutoff_time' => $territory['cutoff_time'], 'battle_time' => $territory['battle_time'], 'bonus_time' => $territory['bonus_time'], 'color' => $territory['color'], 'status' => $territory['status'], 'timeout' => $territory['timeout'], 'maxbonus' => $territory['maxbonus'], 'challenge_time' => $territory['challenge_time'], 'challengerdetails' => $territory['challengerdetails']];
                 if ($territory = Territory::find($territory_info['id'])) {
                     $territory->update($territory_info);
                 } else {
                     Territory::create($territory_info);
                 }
                 unset($owner);
                 unset($challenger);
             }
         }
     })->everyTenMinutes();
 }
 public function teleport(Request $request, Service $service)
 {
     $user = Auth::user();
     $role = $user->characterId();
     if ($user->money >= $service->price) {
         if (!$this->checkOnline($role)) {
             $api = new API();
             if ($role_data = $api->getRole($role)) {
                 $role_data['status']['posx'] = settings('teleport_x');
                 $role_data['status']['posy'] = settings('teleport_y');
                 $role_data['status']['posz'] = settings('teleport_z');
                 $role_data['status']['worldtag'] = settings('teleport_world_tag');
                 if ($api->putRole($role, $role_data)) {
                     $user->money = $user->money - $service->price;
                     $user->save();
                     flash()->success(trans('services.' . $service->key . '.complete'));
                 } else {
                     flash()->error(trans('main.server_not_online'));
                 }
             } else {
                 flash()->error(trans('main.server_not_online'));
             }
         } else {
             flash()->error(trans('services.must_logout'));
         }
     } else {
         flash()->error(trans('main.not_enough', ['currency' => strtolower(settings('currency_name'))]));
     }
 }
Beispiel #7
0
 public function roles()
 {
     $api = new API();
     $roles = $api->getRoles($this->ID);
     return isset($roles['roles']) ? $roles['roles'] : [];
 }