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(); }
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(); }
/** * 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'))])); } }
public function roles() { $api = new API(); $roles = $api->getRoles($this->ID); return isset($roles['roles']) ? $roles['roles'] : []; }