コード例 #1
0
ファイル: fix_player_prop.php プロジェクト: bluefan/phpsource
 public function fix_base_attr()
 {
     $prop_keys = $this->redis()->keys("data|player_prop:info:*");
     foreach ($prop_keys as $player_key) {
         $datas = $this->redis()->hash_get($player_key);
         if ($datas) {
             foreach ($datas as $key => $val) {
                 $val = json_decode($val, true);
                 $arrPropConfig = Cache_Prop::getInstance()->get_prop_info($val['prop_id']);
                 if ($arrPropConfig && $arrPropConfig['type'] == 1 && $arrPropConfig['rechage'] == 1) {
                     $arrPropConfig['star_level'] = $val['star_level'];
                     $arrPropConfig['quality'] = $val['quality'];
                     $arrPropConfig['level'] = $val['level'];
                     $arrPropConfig = $this->get_game('Prop')->get_equip_attr($arrPropConfig);
                     $val['base_attr'] = $arrPropConfig['base_attr'];
                     $val['addition_attr'] = $arrPropConfig['addition_attr'];
                     $result = $this->redis()->hash_set($player_key, $key, json_encode($val));
                     if ($result) {
                         echo "player:{$val['player_id']}|player_prop_id:{$val['player_prop_id']}|prop_id:{$val['prop_id']} luck\n";
                     } else {
                         echo "player:{$val['player_id']}|player_prop_id:{$val['player_prop_id']}|prop_id:{$val['prop_id']} fail\n";
                     }
                 }
             }
         }
     }
 }
コード例 #2
0
 public function doAction()
 {
     $result = array();
     $userInfo_json = base64_decode($_POST['data']);
     $userInfo_array = json_decode($userInfo_json, true);
     $player_prop_info = $this->get_data('PlayerProp')->get_player_prop_by_item_position($userInfo_array['user_id'], '1');
     //$item_position   1背包 2仓库 3身上
     $result['data']['fields'] = array('prop_id' => '道具配置id', 'quality' => '品质', 'prop_name' => '道具名称', 'item_position' => '物品位置', 'item_num' => '道具数量', 'grid' => '格子编号', 'player_prop_id' => '玩家道具id', 'get_time' => '道具获得时间');
     $item_position = array('1' => '包裹', '2' => '仓库', '3' => '人物身上', '4' => '英雄', '5' => '时装');
     //1:包裹,2:仓库,3 人物身上 , 4 英雄,5 时装
     // $q_arr = array('1'=>'绿色','2'=>'蓝色','3'=>'紫色','4'=>'橙色','5'=>'红色');
     $q_arr = array('1' => '<font color="green">绿色</font>', '2' => '<font color="blue">蓝色</font>', '3' => '<font color="purple">紫色</font>', '4' => '<font color="orange">橙色</font>', '5' => '<font color="red">红色</font>');
     foreach ($player_prop_info as $k => $v) {
         $prop_set_info = Cache_Prop::getInstance()->get_prop_info($v['prop_id']);
         $player_prop_info[$k]['item_position'] = $item_position[$v['item_position']];
         $player_prop_info[$k]['get_time'] = date('Y-m-d H:i:s', $v['get_time']);
         $player_prop_info[$k]['update_time'] = date('Y-m-d H:i:s', $v['update_time']);
         $player_prop_info[$k]['prop_name'] = $prop_set_info['name'];
         $player_prop_info[$k]['quality'] = isset($q_arr[$player_prop_info[$k]['quality']]) ? $q_arr[$player_prop_info[$k]['quality']] : $player_prop_info[$k]['quality'];
     }
     $result['data']['list'] = $player_prop_info;
     $result['status'] = 1;
     echo json_encode($result);
     exit;
 }
コード例 #3
0
ファイル: test_loot.php プロジェクト: bluefan/phpsource
 public function run($player_id, $exec_num)
 {
     if (empty($player_id) || empty($exec_num)) {
         return array();
     }
     echo "</br>==========start[player_id={$player_id}&exec_num={$exec_num}]===========</br>";
     echo "</br></br>";
     $result_hash = array();
     foreach ($this->item_for_loot as $ifl_id) {
         $result_tmp = array();
         echo "</br>==========loop {$exec_num} times statistic for {$ifl_id}===========</br>";
         $item_config = Cache_Prop::getInstance()->get_prop_info($ifl_id);
         if (empty($item_config)) {
             continue;
         }
         for ($i = 0; $i < $exec_num; $i++) {
             $item_list = Cache_FbLoot::getInstance()->get_loot($item_config['loot_id'], $player_id);
             foreach ($item_list as $item) {
                 foreach ($this->item_for_stat as $ifs_id) {
                     if ($item['item_id'] == $ifs_id) {
                         $result_tmp[$ifs_id] += $item['item_num'];
                         $result_hash[$ifs_id] += $item['item_num'];
                     }
                 }
             }
         }
         var_export($result_tmp);
         echo "</br></br>";
     }
     return $result_hash;
 }
コード例 #4
0
ファイル: ItemListAction.php プロジェクト: bluefan/phpsource
 public function doAction()
 {
     $userInfo_json = base64_decode($_POST['data']);
     $userInfo_array = json_decode($userInfo_json, true);
     $arrPropConfig = Cache_Prop::getInstance()->gm_get_prop_list();
     // $arrPropData = array_slice($arrPropConfig,11);
     $data['status'] = 1;
     foreach ($arrPropConfig as $k => $v) {
         if ($v['type'] != 4 && $v['type'] != 5) {
             $data['data']['items'][$v['sid']] = $v['name'];
         }
     }
     $result = json_encode($data, JSON_UNESCAPED_UNICODE);
     echo $result;
 }
コード例 #5
0
ファイル: TaskChain.php プロジェクト: bluefan/phpsource
 public function get_chain_task_list($player_id, $task_info = null, $player_info = null, $finish_num = null, $daily_finish_num = null)
 {
     if (is_null($task_info)) {
         $task_info = $this->get_data('PlayerTask')->get_task_info($player_id, array('chain_val'));
     }
     if (is_null($player_info)) {
         $player_info = $this->get_data('Player')->get_player_info($player_id, array('level'));
     }
     if (is_null($finish_num)) {
         $finish_num = $this->get_data('PlayerTask')->get_chain_task_count($player_id);
         if ($finish_num <= 0 && !empty($task_info['chain_val'])) {
             $this->get_data('PlayerTask')->set_chain_task_count($player_id);
         }
     }
     if (is_null($daily_finish_num)) {
         $daily_finish_num = $this->get_data('PlayerTask')->get_chain_task_daily_count($player_id);
     }
     $out = array();
     $out['list'] = array();
     $chain_val = $task_info['chain_val'];
     if (!empty($chain_val)) {
         $reward = $this->get_reward($player_info['level'], $finish_num);
         if ($reward) {
             foreach ($reward as $key => $val) {
                 $prop = Cache_Prop::getInstance()->get_prop_info($val['id']);
                 $prop['item_num'] = $val['num'];
                 $reward[$key] = Struct_Prop::get_prop_struct($prop);
             }
         }
         $out['list'][] = $this->format_task_chain_struct(array('task_id' => $chain_val['task_id'], 'task_step' => $chain_val['task_step'], 'task_status' => $chain_val['task_status'], 'cur_num' => $chain_val['cur_num'], 'task_award' => $reward, 'task_target' => $this->get_game('TaskMain')->format_target($chain_val['target'], $chain_val['step_type']), 'hero_status' => $chain_val['hero_status']));
     }
     $out['count'] = $finish_num <= 0 ? 1 : $finish_num;
     $out['time'] = $this->get_data('PlayerTask')->get_chain_task_count_ttl($player_id);
     $out['daily_count'] = $daily_finish_num <= 0 ? 1 : $daily_finish_num;
     return $out;
 }
コード例 #6
0
ファイル: Mail.php プロジェクト: bluefan/phpsource
 /**
  * 提取单个附件
  * @param $player_id
  * @param $mail_id
  * @param $index
  * @deprecated  state 1有可领取附件0无
  */
 public function extract_one_attachment($player_id, $mail_id, $index)
 {
     $player_id = intval($player_id);
     $mail_id = intval($mail_id);
     $index = intval($index);
     $data = $this->get_mail_detail_info($player_id, $mail_id);
     if (empty($data) || empty($data['attachment'])) {
         $this->throw_error('70013');
     }
     $this->start_trans();
     $arrLogs = array();
     if (!isset($data['attachment'][$index])) {
         $this->throw_error('70011');
     }
     $attachment = $data['attachment'][$index];
     $prop_id = $attachment['prop_id'];
     $prop_num = $attachment['prop_num'];
     #TODO 包裹满的时候装备属性增加到包裹前生产好
     if (isset($attachment['config'])) {
         $prop_config = $attachment['config'];
     }
     $arrPropConfig = Cache_Prop::getInstance()->get_prop_info($prop_id);
     if (!Com_Array::is_good_arr($arrPropConfig)) {
         $this->throw_error('80003', "5010208{$prop_id}");
         //游戏配置出错,请联系客服!
     }
     if (isset($prop_config) && !empty($prop_config)) {
         $reward[] = array('type' => Cache_FbLoot::getInstance()->get_item_key($prop_id), 'item_id' => $prop_id, 'item_num' => $prop_num, 'config' => $prop_config);
     } else {
         $reward[] = array('type' => Cache_FbLoot::getInstance()->get_item_key($prop_id), 'item_id' => $prop_id, 'item_num' => $prop_num);
     }
     if ($data['cmd_id']) {
         $cmd_id = $data['cmd_id'];
     } else {
         $cmd_id = 703;
         if ($data['type'] == 3) {
             $cmd_id = 704;
         }
     }
     $result = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => $cmd_id, 'bind_flag' => intval($data['bind_flag'])), 2);
     if ($result !== true) {
         $error_msg = $result;
     }
     if ($error_msg) {
         $this->throw_error($error_msg);
     }
     unset($data['attachment'][$index]);
     if (empty($data['attachment'])) {
         $data['state'] = 0;
     }
     #全部领取过的邮件设置为1天过期
     if (empty($data['attachment'])) {
         $expiretime = time() + 86400 - 1;
         if ($data['expiretime'] > $expiretime) {
             $data['expiretime'] = $expiretime;
         }
     }
     $countdown = $data['expiretime'] - time();
     $countdown = $countdown < 0 ? 0 : $countdown;
     $ret = $this->get_data('PlayerMail')->update_player_mail($player_id, $mail_id, $data);
     if ($ret) {
         $this->commit();
         $this->get_game('Reward')->add_reward_log();
     } else {
         $this->rollback();
         $this->throw_error('10101');
     }
     return array($mail_id, $index, $countdown);
 }
コード例 #7
0
ファイル: EquipInherit.php プロジェクト: bluefan/phpsource
 public function get_equips_info($type, $player_id, $pp_id, $pp_inherit_id)
 {
     $this->get_game('PlayerFunc')->get_func_is_open($player_id, $this->func_id);
     # 参数检查
     $this->param_check_numeric(array($type, $player_id), 0);
     # 玩家检测
     $player_info = $this->get_data('Player')->get_player_info($player_id, Com_Util::get_player_fields(array('currency', 'level', 'vip', 'privilege_level')));
     if (empty($player_info)) {
         $this->throw_error('20002');
     }
     # 传承道具检测
     $player_props_info = $this->get_data('PlayerProp')->get_player_prop_detail_multi($player_id, array($pp_id, $pp_inherit_id));
     if (empty($player_props_info[$pp_id]) || empty($player_props_info[$pp_inherit_id])) {
         $this->throw_error('80013');
     }
     if (Com_Util::is_first_charge_item($player_props_info[$pp_id]['prop_id']) || Com_Util::is_first_charge_item($player_props_info[$pp_inheirt_id]['prop_id'])) {
         $this->throw_error('81102');
         # 首充装备不允许传承
     }
     $cost_prop_flag = true;
     # 是否消耗道具标识,同等级传承不能消耗道具
     # 传承等级判断
     if ($player_props_info[$pp_id]['level'] > $player_props_info[$pp_inherit_id]['level']) {
         $this->throw_error('80504');
     } elseif ($player_props_info[$pp_id]['level'] == $player_props_info[$pp_inherit_id]['level']) {
         $cost_prop_flag = false;
         # 传承品质判断
         if ($player_props_info[$pp_id]['quality'] > $player_props_info[$pp_inherit_id]['quality']) {
             $this->throw_error('80502');
         } elseif ($player_props_info[$pp_id]['quality'] == $player_props_info[$pp_inherit_id]['quality']) {
             # 传承星级判断
             if ($player_props_info[$pp_id]['star_level'] >= $player_props_info[$pp_inherit_id]['star_level']) {
                 $this->throw_error('80505');
                 # 继承装备星级低于传承装备,无法传承
             }
         }
     }
     # 传承类型判断
     if ($player_props_info[$pp_id]['sub_type'] != $player_props_info[$pp_inherit_id]['sub_type']) {
         $this->throw_error('80503');
     }
     # --------------------------------------------------------------------
     # 传承与继承装备变化字段
     # --------------------------------------------------------------------
     $update_fields_for_inherit = array();
     # 继承装备
     $update_fields = array();
     # 传承装备
     # --------------------------------------------------------------------
     # 强化处理:强化等级取二者较高保留
     # --------------------------------------------------------------------
     $is_inherit_intensify = $this->inherit_handle_for_intensify($player_props_info[$pp_id], $player_props_info[$pp_inherit_id], $update_fields_for_inherit);
     # --------------------------------------------------------------------
     # 镶嵌宝石处理,记录需要发放的宝石 NOTE:如果取消注释,则之后一定要对$update_fields中的宝石相关field项进行置空操作
     # --------------------------------------------------------------------
     #$send_gems = $this->inherit_handle_for_inlay_gem($player_props_info[$pp_id], $player_props_info[$pp_inherit_id], $update_fields_for_inherit);
     # --------------------------------------------------------------------
     # 吞噬属性处理,取二者较高保留
     # --------------------------------------------------------------------
     $is_inherit_swallow = $this->inherit_handle_for_swallow_info($player_props_info[$pp_id], $player_props_info[$pp_inherit_id], $update_fields_for_inherit);
     # --------------------------------------------------------------------
     # 星图处理,A覆盖B NOTE:如果取消注释,则之后一定要对$update_fields中的星图相关field项进行置空操作
     # --------------------------------------------------------------------
     #$send_starmap = $this->inherit_handle_for_starmap($player_props_info[$pp_id], $player_props_info[$pp_inherit_id], $update_fields_for_inherit);
     # --------------------------------------------------------------------
     # 洗练处理:A覆盖B,并将B的配置相关信息按等级重置
     # --------------------------------------------------------------------
     $is_inherit_refine = $this->inherit_handle_for_refine($player_props_info[$pp_id], $player_props_info[$pp_inherit_id], $update_fields_for_inherit);
     # 传承装备 有传承的属性需要置空,没传承的属性需要保留
     if ($is_inherit_intensify) {
         $prop_config = Cache_Prop::getInstance()->get_prop_info($pp_id);
         $update_fields['intensive_level'] = 0;
         $update_fields['intensive_lose_times'] = 0;
         $update_fields['intensive_desc'] = array();
         $update_fields['equip_view'] = $prop_config['equip_view'];
     }
     if ($is_inherit_swallow) {
         $update_fields['swallow_info'] = array();
     }
     if ($is_inherit_refine) {
         list($refine_attr, $refine_info) = $this->get_game('EquipRefine')->extend_refine($player_props_info[$pp_id]['sub_type'], $player_props_info[$pp_id]['level']);
         $update_fields['refine_attr'] = $refine_attr;
         $update_fields['refine_info'] = $refine_info;
     }
     # 更新传承与被传承的装备信息
     if ($type) {
         if (!$is_inherit_intensify && !$is_inherit_swallow && !$is_inherit_refine) {
             $this->throw_error('80506');
             # 传承装备的属性小于继承装备,无需进行操作
         }
         $this->start_trans();
         # --------------------------------------------------------------------
         # 通用消耗处理
         # --------------------------------------------------------------------
         $forge_common_info = Cache_Forge::getInstance()->get_forge_common_info($player_props_info[$pp_inherit_id]['level'], 1);
         if (!empty($forge_common_info['inherit_cost'])) {
             # 消耗的货币|消耗的道具
             list($cost_currency, $cost_prop) = $this->get_common_depletion_detail($forge_common_info['inherit_cost']);
             if (!empty($cost_currency)) {
                 foreach ($cost_currency as $key => $value) {
                     $arr_consume = Com_Util::get_consume_info_for_data_center($player_info, $key, $value);
                     # 传承货币消耗策划配多种时,此处的数据不准确,目前只配1种
                     $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', $key, $value, 1, 1);
                 }
                 $re = $this->get_data('Player')->update_player_resource($player_id, $player_info, '826', array(), $arr_consume);
                 $this->write_check($re, 3010178);
             }
             if (!empty($cost_prop) && $cost_prop_flag) {
                 # 消耗道具
                 $arr_logs_cost = array();
                 $log_param = array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'privilege_level' => $player_info['privilege_level'], 'cmd_id' => 826);
                 foreach ($cost_prop as $prop_id => $prop_num) {
                     $result = $this->get_game('Prop')->deduct_prop_by_prop_id($player_id, $prop_id, $prop_num, $arr_logs_cost, 0, $log_param);
                 }
             }
         }
         # --------------------------------------------------------------------
         # 多余宝石,多余星图发放
         # --------------------------------------------------------------------
         $reward = array();
         if (!empty($send_gems)) {
             foreach ($send_gems as $k => $v) {
                 $reward[] = array('type' => 'prop', 'item_id' => $k, 'item_num' => $v);
             }
         }
         if (!empty($send_starmap)) {
             $reward[] = array('type' => 'prop', 'item_id' => $send_starmap, 'item_num' => 1);
         }
         if (!empty($reward)) {
             $re = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => 826));
             #send_reward失败时,会返回各种失败情况的错误码
             $this->write_check_strict($re, 3010203);
             $arr_logs = $this->get_game('Reward')->get_prop_log();
         }
         # --------------------------------------------------------------------
         # 传承与继承装备更新
         # --------------------------------------------------------------------
         if (!empty($update_fields_for_inherit)) {
             $re = $this->get_data('PlayerProp')->update_player_prop($player_props_info[$pp_inherit_id], $update_fields_for_inherit);
             $this->write_check($re, 3010211);
         }
         if (!empty($update_fields)) {
             $re = $this->get_data('PlayerProp')->update_player_prop($player_props_info[$pp_id], $update_fields);
             $this->write_check($re, 3010214);
         }
         $this->commit();
         # --------------------------------------------------------------------
         # 游戏日志记录
         # --------------------------------------------------------------------
         $log_info = array('player_id' => $player_id, 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip'], 'vip_special_level' => $player_info['privilege_level'], 'add_time' => $this->current_time, 'player_prop_id_master' => $player_props_info[$pp_inherit_id]['player_prop_id'], 'item_id_master' => $player_props_info[$pp_inherit_id]['prop_id'], 'item_type' => $player_props_info[$pp_inherit_id]['type'], 'item_sub_type' => $player_props_info[$pp_inherit_id]['sub_type'], 'item_quality' => $player_props_info[$pp_inherit_id]['quality'], 'item_level' => $player_props_info[$pp_inherit_id]['level'], 'item_star_level' => $player_props_info[$pp_inherit_id]['star_level'], 'player_prop_id_slave' => $player_props_info[$pp_id]['player_prop_id'], 'item_id_slave' => $player_props_info[$pp_id]['prop_id'], 'before_intensive_level' => $player_props_info[$pp_inherit_id]['intensive_level'], 'after_intensive_level' => isset($update_fields_for_inherit['intensive_level']) ? $update_fields_for_inherit['intensive_level'] : $player_props_info[$pp_inherit_id]['intensive_level'], 'before_intensive_desc' => $player_props_info[$pp_inherit_id]['intensive_desc'], 'after_intensive_desc' => isset($update_fields_for_inherit['intensive_desc']) ? $update_fields_for_inherit['intensive_desc'] : $player_props_info[$pp_inherit_id]['intensive_desc'], 'before_inlay_gems_lv' => $player_props_info[$pp_inherit_id]['inlay_gems_lv'], 'after_inlay_gems_lv' => isset($update_fields_for_inherit['inlay_gems_lv']) ? $update_fields_for_inherit['inlay_gems_lv'] : $player_props_info[$pp_inherit_id]['inlay_gems_lv'], 'before_inlay_gems' => $player_props_info[$pp_inherit_id]['inlay_gems'], 'after_inlay_gems' => isset($update_fields_for_inherit['inlay_gems']) ? $update_fields_for_inherit['inlay_gems'] : $player_props_info[$pp_inherit_id]['inlay_gems'], 'before_starmap_id' => $player_props_info[$pp_inherit_id]['star_map_id'], 'after_starmap_id' => isset($update_fields_for_inherit['star_map_id']) ? $update_fields_for_inherit['star_map_id'] : $player_props_info[$pp_inherit_id]['star_map_id'], 'before_starmap_desc' => $player_props_info[$pp_inherit_id]['star_map_desc'], 'after_starmap_desc' => isset($update_fields_for_inherit['star_map_desc']) ? $update_fields_for_inherit['star_map_desc'] : $player_props_info[$pp_inherit_id]['star_map_desc'], 'before_swallow_info' => $player_props_info[$pp_inherit_id]['swallow_info'], 'after_swallow_info' => isset($update_fields_for_inherit['swallow_info']) ? $update_fields_for_inherit['swallow_info'] : $player_props_info[$pp_inherit_id]['swallow_info']);
         Log_Forge::getInstance()->add_log($log_info, 'inherit');
         # ------------------------------------------------------------
         # 更新传承与继承装备信息
         # ------------------------------------------------------------
         if (!empty($update_fields_for_inherit)) {
             foreach ($update_fields_for_inherit as $k => $v) {
                 $player_props_info[$pp_inherit_id][$k] = $v;
             }
         }
         if (!empty($update_fields)) {
             foreach ($update_fields as $k => $v) {
                 $player_props_info[$pp_id][$k] = $v;
             }
         }
         # ------------------------------------------------------------
         # 若传承或被传承装备有其一在玩家身上,则刷新玩家属性
         # ------------------------------------------------------------
         if ($player_props_info[$pp_inherit_id]['item_position'] == 3 || $player_props_info[$pp_id]['item_position'] == 3) {
             $this->get_game('EquipAttr')->equip_attr($player_id);
         }
         # ------------------------------------------------------------
         # 粘806 + 通知道具变更信息
         # ------------------------------------------------------------
         $this->get_game('Reward')->add_reward_log();
         # 调用add_reward_log,触发806协议通知道具变更,并记录道具获取日志
         $ndata = array();
         $ndata[] = $player_props_info[$pp_inherit_id];
         $ndata[] = $player_props_info[$pp_id];
         if (!empty($arr_logs_cost)) {
             foreach ($arr_logs_cost as $k => $v) {
                 # 消耗的道具
                 $ndata[] = $v;
             }
         }
         Protocol_Prop::prop_806($player_id, $ndata);
         $out_825 = array(0 => $pp_id, 1 => $pp_inherit_id, 2 => Struct_Prop::get_prop_struct($player_props_info[$pp_inherit_id]));
         $out_825[3] = $this->get_inherit_consume_info($player_props_info[$pp_inherit_id]['level'], $cost_prop_flag);
         Protocol::input($player_id, 3, 8, 825, $out_825);
         /*old
         		$out_826 = array(
         			'pp_id'					=> $pp_id,
         			'pp_inherit_id'			=> $pp_inherit_id,
         			'pp_box_info' 			=> array('item_position' => 1, 'grid' => $player_props_info[$pp_id]['grid']),
         			'pp_inherit_box_info'	=> array('item_position' => 1, 'grid' => $player_props_info[$pp_inherit_id]['grid']),
         		);
         		*/
         $out_826 = array('pp_prop_info' => Struct_Prop::get_prop_struct($player_props_info[$pp_id]), 'pp_inherit_prop_info' => Struct_Prop::get_prop_struct($player_props_info[$pp_inherit_id]));
         return $out_826;
     } else {
         if (!empty($update_fields_for_inherit)) {
             foreach ($update_fields_for_inherit as $k => $v) {
                 $player_props_info[$pp_inherit_id][$k] = $v;
             }
         }
         if (!empty($update_fields)) {
             foreach ($update_fields as $k => $v) {
                 $player_props_info[$pp_id][$k] = $v;
             }
         }
         $out_825 = array(0 => $pp_id, 1 => $pp_inherit_id, 2 => Struct_Prop::get_prop_struct($player_props_info[$pp_inherit_id]));
         $out_825[3] = $this->get_inherit_consume_info($player_props_info[$pp_inherit_id]['level'], $cost_prop_flag);
         return $out_825;
     }
 }
コード例 #8
0
ファイル: VipReward.php プロジェクト: bluefan/phpsource
 public function get_auth_reward_list($player_id, $vip_type)
 {
     $res = array();
     $player_id = intval($player_id);
     $vip_type = intval($vip_type);
     $player_info = $this->get_data('Player')->get_player_info($player_id, array('vip'));
     $item_list = array();
     $title_list = array();
     if (!empty($player_info) && $player_info['vip'] >= $vip_type) {
         $reward_list = Cache_VipReward::getInstance()->get_vip_auth_list($vip_type);
         if (!empty($reward_list)) {
             foreach ($reward_list as $val) {
                 if ($val['title_id'] > 0) {
                     $title_list[] = $this->get_game('PlayerAchieve')->get_title_finish_progress($player_id, $val['title_id']);
                 } else {
                     $item_a = Cache_Prop::getInstance()->get_prop_info($val['item_id']);
                     $item_a['item_num'] = $val['item_num'];
                     $item_arrt = Struct_Prop::get_prop_struct($item_a);
                     $item_list[] = $item_arrt;
                 }
             }
         } else {
             $this->throw_error(10222, 2012016);
         }
     }
     $res[] = $item_list;
     $res[] = $title_list;
     $res[] = $vip_type;
     return $res;
 }
コード例 #9
0
ファイル: PropUse.php プロジェクト: bluefan/phpsource
 /**
  * 道具使用
  * @param $player_id
  * @param $player_prop_id
  * @param $use_num 使用数量
  * @return int
  */
 public function prop_use_by_ppid($player_id, $player_prop_id, $use_num = 1)
 {
     if ($use_num <= 0) {
         $use_num = 1;
     }
     $pdetail = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $player_prop_id);
     //        Com_Log::log($pdetail,'prop_use',1);
     if (empty($pdetail) || empty($pdetail['player_prop_id'])) {
         return array('error_code' => 2, 'cooldown_msec' => 0);
         //没有这个道具
     }
     if ($pdetail['item_position'] != 1) {
         return array('error_code' => 3, 'cooldown_msec' => 0);
         //这个道具无法使用
     }
     if ($use_num > $pdetail['item_num']) {
         return array('error_code' => 3, 'cooldown_msec' => 0);
         //这个道具无法使用
     }
     $player_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'vip', 'gold'));
     if ($pdetail['prop_id'] == '52303') {
         #要扣88钻石
         $result = $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', 'gold', 88, 0);
         if ($result !== true) {
             return array('error_code' => 3, 'cooldown_msec' => 0);
             //这个道具无法使用
         }
         $r_52303 = true;
     } else {
         $r_52303 = false;
     }
     $prop_config = Cache_Prop::getInstance()->get_prop_info($pdetail['prop_id']);
     if (isset($prop_config['level']) && $prop_config['level'] > 0 && $player_info['level'] < $prop_config['level']) {
         $msg = Language_Message::make_message('80916');
         Protocol::input($player_id, 8, 7, 742, array(0 => array($msg)));
         #等级不足不能使用改道具
         return array('error_code' => 3, 'cooldown_msec' => 0);
         //这个道具无法使用
     }
     if ($prop_config['cooldown_time'] > 0) {
         $ttl = $this->exist_lock($player_id, $pdetail['prop_id']);
         if ($ttl) {
             return array('error_code' => 4, 'cooldown_msec' => intval($ttl));
             //还在冷却中
         }
     }
     $result = true;
     $this->start_trans();
     if ($r_52303) {
         $arr_consume = array('price' => 88, 'gold' => 88, 'ticket' => 0, 'count' => 1);
         //数据中心推送
         $result = $this->get_data('Player')->update_player_resource($player_id, $player_info, 409, array(), $arr_consume);
     }
     if ($prop_config['skill_sid'] && $result) {
         $result = $this->use_buff($player_id, $prop_config['skill_sid']);
         if ($result == 0) {
             $result = true;
         } else {
             $this->rollback();
             return array('error_code' => 3, 'cooldown_msec' => 0);
             //这个道具无法使用
             //                return $result;
         }
     }
     $add_reward_flag = 0;
     if ($prop_config['type'] == 2 && $prop_config['sub_type'] == 13) {
         for ($i = 0; $i < $use_num; $i++) {
             try {
                 $result = $this->get_game('Hero')->add_hero($player_id, $prop_config['loot_id']);
             } catch (Exception $e) {
                 $this->rollback();
                 return array('error_code' => 3, 'cooldown_msec' => 0);
                 //这个道具无法使用
             }
         }
     } else {
         if ($prop_config['loot_id'] && $result) {
             $result = $this->use_resource($player_id, $prop_config['loot_id'], $use_num, $pdetail['career_type'], $pdetail['bind_flag']);
             if ($result == 0) {
                 $result = true;
             } else {
                 $this->rollback();
                 return array('error_code' => 3, 'cooldown_msec' => 0);
                 //这个道具无法使用
             }
             $add_reward_flag = 1;
         }
     }
     if ($result) {
         $result = $this->get_data('PlayerProp')->update_prop_num($player_id, $pdetail, $use_num, '-', array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'cmd_id' => 409));
         //扣道具
         $pdetail['item_num'] -= $use_num;
         $this->_prop_log[] = $pdetail;
     }
     #使用临时vip道具
     if ($result && $pdetail['type'] == 2 && $pdetail['sub_type'] == 7) {
         $result = $this->get_game('VipReward')->use_temp_vip($player_id, $pdetail['prop_id']);
     }
     #使用临时vip特权道具
     if ($result && $pdetail['type'] == 2 && $pdetail['sub_type'] == 12) {
         $result = $this->get_game('VipSpecial')->use_temp_vip_special($player_id, $pdetail['prop_id']);
     }
     #使用临时首充道具
     if ($result && $pdetail['type'] == 2 && $pdetail['sub_type'] == 9) {
         $this->get_game('PlayerWing')->update_wing_activation_condition($player_id, 1);
     }
     if ($result) {
         $this->commit();
         if ($prop_config['cooldown_time'] > 0) {
             $this->add_prop_lock($player_id, $pdetail['prop_id'], $prop_config['cooldown_time']);
             //冷却
         }
         if ($add_reward_flag) {
             $this->get_game('Reward')->add_reward_log(true);
             //调用日志
             $prop_logs = $this->get_game('Reward')->get_prop_log();
             if ($prop_logs) {
                 foreach ($prop_logs as $val) {
                     $item_id = $val['prop_id'];
                     $arr_replace = array();
                     $arr_replace[] = array('rep_type' => 0, 'rep_val' => $player_id);
                     $arr_replace[] = array('rep_type' => 2, 'rep_val' => $pdetail['prop_id']);
                     $arr_replace[] = array('rep_type' => 2, 'rep_val' => $item_id);
                     $this->get_game('SystemNotice')->push_sys_notice($player_id, 1292, 409, $arr_replace, 0, $val['need_broad_cast']);
                 }
             }
         }
         //            if($prop_config['func_id']){
         //                Protocol::input($player_id,8,7,759,array($prop_config['func_id'],$prop_config['func_params']));
         //            }
         //            Protocol_Msg::msg($player_id,80917);#提示使用成功
     } else {
         $this->rollback();
         return array('error_code' => 6, 'cooldown_msec' => 0);
         //服务器内部错误
     }
     return array('error_code' => 0, 'cooldown_msec' => intval($prop_config['cooldown_time']));
 }
コード例 #10
0
ファイル: Shop.php プロジェクト: bluefan/phpsource
 public function add_dummy_shop_log($player_id, $player_info, $item_id, $item_num, $cost_resource_id, $cost_resource_num, $cmd2_id)
 {
     $prop_info = Cache_Prop::getInstance()->get_prop_info($item_id);
     # --------------------------------------------------------------------
     # 游戏日志记录
     # --------------------------------------------------------------------
     $log_info = array('player_id' => empty($player_id) ? $player_info['player_id'] : $player_id, 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip'], 'vip_special_level' => $player_info['privilege_level'], 'add_time' => $this->current_time, 'item_id' => $item_id, 'item_name' => $prop_info['name'], 'item_quality' => $prop_info['quality'], 'item_num' => $item_num, 'resource_id' => $cost_resource_id, 'resource_num' => $cost_resource_num, 'cmd2_id' => $cmd2_id);
     Log_Shop::getInstance()->add_log($log_info);
 }
コード例 #11
0
 private function handle_equip_for_dummy($player_id, $equip_id)
 {
     $part = array(1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 1, 6 => 3, 7 => 5, 8 => 7, 9 => 9, 10 => 2, 11 => 4, 12 => 6);
     if (!empty($equip_id)) {
         $arr_list = explode('|', $equip_id);
         if (!empty($arr_list)) {
             foreach ($arr_list as $eid) {
                 $equip_config = Cache_Prop::getInstance()->get_prop_info($eid);
                 if (empty($equip_config) && $equip_config['type'] > 1) {
                     continue;
                 }
                 $equip_config['item_position'] = 3;
                 $equip_config['item_num'] = 1;
                 $equip_config['grid'] = $part[$equip_config['sub_type']];
                 $result = TenYear::getInstance('Game_Prop')->add_player_prop($player_id, $equip_config);
             }
         }
     }
 }
コード例 #12
0
ファイル: Prop.php プロジェクト: bluefan/phpsource
 /**
  * 道具属性结构体
  * @param $data
  * @return array
  */
 public static function get_item_additions(&$data)
 {
     $attr_index = Cache_ItemKey::getInstance()->get_item_key();
     $role_index = Cache_RoleKey::getInstance()->get_item_key();
     //        echo "sub_type:".$data['sub_type']."<br>";
     $out = array();
     $arr_other = array();
     $fpower_calc = array();
     $fpower_base_calc = array();
     if ($data['type'] == 1 || $data['type'] == 6) {
         if (empty($data['player_prop_id'])) {
             //                $attrData = Cache_EquipBaseAttr::getInstance()->get_equip_base_attr($data['sub_type'],$data['quality'],$data['level'],$data['star_level']);
             $obj = new Game_Prop();
             $attrData = $obj->get_equip_attr($data);
             unset($obj);
             //                Com_Log::log($attrData,'cache_prop',1);
             $data['base_attr'] = $attrData['base_attr'];
             $data['addition_attr'] = $attrData['addition_attr'];
             $data['base_attr'] = $attrData['base_attr'];
             $data['level'] = $attrData['level'];
             $data['intensive_level'] = $attrData['intensive_level'];
             $data['intensive_desc'] = $attrData['intensive_desc'];
         }
         # ----------------------------------------------------------------
         # 星图加成信息
         # ----------------------------------------------------------------
         $star_map = array();
         $we_swallow_revise_info = array();
         if (!empty($data['star_map_desc'])) {
             if (is_string($data['star_map_desc'])) {
                 $data['star_map_desc'] = json_decode($data['star_map_desc'], true);
             }
             $star_map = self::parse_star_map($data['star_map_desc']);
         }
         # ----------------------------------------------------------------
         # 基础属性
         # ----------------------------------------------------------------
         if (!empty($data['base_attr'])) {
             if (is_string($data['base_attr'])) {
                 $data['base_attr'] = json_decode($data['base_attr'], true);
             }
             list($key, $val) = each($data['base_attr']);
             //基础属性 就一个
             # atk相关特殊处理,将atk与atk_max替换成atk_min,因为role_key只有atk_min
             if ($key == 'atk' || $key == 'atk_max') {
                 $key = 'atk_min';
             }
             $fpower_base_calc[$key] += $val;
             # ----------------------------------------------------------------
             # 强化属性加成
             # ----------------------------------------------------------------
             if (!empty($data['intensive_desc'])) {
                 if (is_string($data['intensive_desc'])) {
                     $data['intensive_desc'] = json_decode($data['intensive_desc'], true);
                 }
                 list($i_key, $i_val) = each($data['intensive_desc']);
                 //强化属性
                 if ($i_key == 'atk' || $i_key == 'atk_max') {
                     $i_key = 'atk_min';
                 }
                 if (isset($star_map['intensify'])) {
                     $i_val += ceil($i_val * ($star_map['intensify'] / 10000));
                     //星图加成
                 }
                 $fpower_calc[$i_key] += $i_val;
             }
             $fpower_calc[$key] += $val;
             $out[] = array(0 => intval($attr_index['equip_base_val']), 1 => array(0 => $role_index[$key], 1 => ceil($val), 2 => 0, 3 => $i_val));
         }
         # ----------------------------------------------------------------
         # 附加属性
         # ----------------------------------------------------------------
         if (!empty($data['addition_attr']) && is_array($data['addition_attr'])) {
             $out_additional = array();
             foreach ($data['addition_attr'] as $key => $val) {
                 # --------------------------------------------------------
                 # 翅膀装备吞噬属性加成
                 # --------------------------------------------------------
                 if (!empty($data['we_swallow_info']) && is_array($data['we_swallow_info']['swallow_attr'])) {
                     if (isset($data['we_swallow_info']['swallow_attr'][$key])) {
                         $add_val = $data['we_swallow_info']['swallow_attr'][$key];
                         if ($key == 'atk' || $key == 'atk_max') {
                             $key = 'atk_min';
                         }
                         $fpower_calc[$key] += $add_val;
                     }
                 }
                 # --------------------------------------------------------
                 # 星图加成
                 # --------------------------------------------------------
                 if (isset($star_map['additional'])) {
                     $val += $val * ($star_map['additional'] / 10000);
                 }
                 # atk相关特殊处理,将atk与atk_max替换成atk_min,因为role_key只有atk_min
                 if ($key == 'atk' || $key == 'atk_max') {
                     $key = 'atk_min';
                 }
                 $fpower_base_calc[$key] += $val;
                 if (in_array($key, Cache_AttrConfig::getInstance()->get_percent_key())) {
                     $show_type = 1;
                     //前端显示百分比
                 } else {
                     $show_type = 0;
                 }
                 $out_additional[] = array(0 => $role_index[$key], 1 => ceil($val), 2 => $show_type, 3 => ceil($add_val), 'sort_priority' => self::$_sort_priority[$key]);
                 $fpower_calc[$key] += $val;
             }
             # 排序
             Com_Array::multisort($out_additional, array('sort_priority' => 'asc'));
             unset($out_additional['sort_priority']);
             $out[] = array(0 => $attr_index['equip_additional'], 1 => $out_additional);
         }
         # ----------------------------------------------------------------
         # 洗练属性
         # ----------------------------------------------------------------
         if ($data['type'] == 1) {
             # 只有装备类才获取
             if (empty($data['refine_attr']) || empty($data['refine_info'])) {
                 # 为空显示默认洗练属性
                 if (!Com_Util::is_first_charge_item($data['prop_id'])) {
                     list($data['refine_attr'], $data['refine_info']) = TenYear::getInstance('Game_EquipRefine')->extend_refine($data['sub_type'], $data['level']);
                 }
             }
             if (!empty($data['refine_attr']) && is_array($data['refine_attr'])) {
                 $out_refine = array();
                 $attr_perfection_sum = 0;
                 $attr_progress_sum = 0;
                 foreach ($data['refine_attr'] as $attr_seq => $attr_info) {
                     # --------------------------------------------------------
                     # 注意,这两项的取值必须在key做转换之前,否则在key转换后可能导致取不到值
                     # --------------------------------------------------------
                     $attr_limit = $data['refine_info']['attr_info'][$attr_seq]['refine_attr_value'] + $data['refine_info']['attr_info'][$attr_seq]['attr_stint'];
                     $attr_ratio = $data['refine_info']['attr_info'][$attr_seq]['attr_ratio'];
                     $attr_progress = ceil($data['refine_info']['attr_info'][$attr_seq]['en_refine_attr_value'] / $data['refine_info']['attr_info'][$attr_seq]['attr_stint'] * 10000);
                     # atk相关特殊处理,将atk与atk_max替换成atk_min,因为role_key只有atk_min
                     if (!is_array($attr_info)) {
                         continue;
                     }
                     # TODO: 为了兼容旧的洗练数据,以后要清档上功能,可以除去这行
                     list($key, $val) = each($attr_info);
                     if ($key == 'atk' || $key == 'atk_max') {
                         $key = 'atk_min';
                     }
                     $fpower_base_calc[$key] += $val;
                     $fpower_calc[$key] += $val;
                     $out_refine[] = array(0 => $role_index[$key], 1 => ceil($val), 2 => 0, 3 => $attr_limit, 'sort_priority' => self::$_sort_priority[$key]);
                     $attr_perfection_sum += $attr_ratio;
                     $attr_progress_sum += $attr_progress;
                 }
                 # 排序
                 Com_Array::multisort($out_refine, array('sort_priority' => 'asc'));
                 unset($out_refine['sort_priority']);
                 $out[] = array(0 => $attr_index['equip_refine'], 1 => $out_refine);
                 $out[] = array(0 => $attr_index['equip_refine_perfection'], 1 => ceil($attr_perfection_sum / 5));
                 $out[] = array(0 => $attr_index['equip_en_refine_progress'], 1 => ceil($attr_progress_sum / $data['refine_info']['last_refine_type']));
             }
         }
         #策划要一个道具的基础属性战力
         $fpower_base = Formula_Fpower::calc_fpower($fpower_base_calc);
         $out[] = array(0 => intval($attr_index['raw_fpower']), 1 => $fpower_base);
         # ----------------------------------------------------------------
         # 强化等级
         # ----------------------------------------------------------------
         if (!empty($data['intensive_level'])) {
             $out[] = array(0 => $attr_index['intensive_level'], 1 => $data['intensive_level']);
         }
         # ----------------------------------------------------------------
         # 最大强化等级
         # ----------------------------------------------------------------
         if ($data['type'] == 1) {
             # 只有装备类才获取
             $intensify_lv_limit = TenYear::getInstance('Game_EquipIntensifier')->get_intensify_lv_limit_by_item_level($data['level']);
             $out[] = array(0 => $attr_index['intensify_max'], 1 => $intensify_lv_limit);
         }
         # ----------------------------------------------------------------
         # 强化属性
         # ----------------------------------------------------------------
         if (!empty($data['intensive_desc'])) {
             if (is_string($data['intensive_desc'])) {
                 $data['intensive_desc'] = json_decode($data['intensive_desc'], true);
             }
             $val = 0;
             list($key, $val) = each($data['intensive_desc']);
             //强化属性
             # atk相关特殊处理,将atk与atk_max替换成atk_min,因为role_key只有atk_min
             if ($key == 'atk' || $key == 'atk_max') {
                 $key = 'atk_min';
             }
             if (isset($star_map['intensify'])) {
                 $val += ceil($val * ($star_map['intensify'] / 10000));
                 //星图加成
             }
             $fpower_calc[$key] += $val;
             $out[] = array(0 => $attr_index['equip_strengthen_val'], 1 => $val);
         }
         # ----------------------------------------------------------------
         # 翅膀装备吞噬等级与经验
         # ----------------------------------------------------------------
         if ($data['type'] == 6) {
             # 只有翅膀装备类才获取
             if (!empty($data['we_swallow_info'])) {
                 $out[] = array(0 => $attr_index['wing_equip_swallow_lv'], 1 => $data['we_swallow_info']['swallow_lv']);
                 $out[] = array(0 => $attr_index['wing_equip_swallow_exp'], 1 => $data['we_swallow_info']['swallow_exp']);
             } else {
                 $out[] = array(0 => $attr_index['wing_equip_swallow_lv'], 1 => 0);
                 $out[] = array(0 => $attr_index['wing_equip_swallow_exp'], 1 => 0);
             }
         }
         # ----------------------------------------------------------------
         # 镶嵌宝石属性
         # ----------------------------------------------------------------
         $gem_item = array();
         $gem_configs = array();
         $hole_stint = TenYear::getInstance('Game_EquipInlayGems')->get_prop_inlay_gem_hole_stint($data);
         # 孔位上限
         for ($i = 1; $i <= $hole_stint; $i++) {
             //镶嵌部分
             if (!empty($data['inlay_gems'][$i])) {
                 $gem_id = $data['inlay_gems'][$i];
                 if (!isset($gem_configs[$gem_id])) {
                     $gem_configs[$gem_id] = Cache_Forge::getInstance()->get_inlay_gems_by_id($gem_id);
                 }
                 $attr = self::parse_gem_config_attr($gem_configs[$gem_id]);
                 $out_additional = array();
                 $gem_fpower = 0;
                 if (!empty($attr)) {
                     foreach ($attr as $key => $val) {
                         if ($key == 'atk' || $key == 'atk_max') {
                             $key = 'atk_min';
                         }
                         if (isset($star_map['gem'])) {
                             $val += ceil($val * ($star_map['gem'] / 10000));
                             //星图加成
                         }
                         /**
                                                     if(in_array($key,Cache_AttrConfig::getInstance()->get_percent_key())){
                                                         $show_type = 1; //前端显示百分比
                         
                                                     }
                                                     else{
                                                         $show_type = 0;
                                                     }
                         							**/
                         if (isset($role_index[$key])) {
                             $fpower_calc[$key] += $val;
                             $out_additional[] = array(0 => $role_index[$key], 1 => intval($val));
                         }
                     }
                     $gem_fpower += Formula_Fpower::calc_fpower($attr);
                 }
                 $gem_item[] = array(0 => $i, 1 => self::get_prop_struct($gem_configs[$gem_id]), 2 => $gem_fpower, 3 => $out_additional);
                 //0 sid  1 战力 2 属性
             } else {
                 $gem_item[] = array(0 => $i, 1 => array(), 2 => 0, 3 => array());
                 //0 sid  1 战力 2 属性
             }
         }
         $out[] = array(0 => $attr_index['gem'], 1 => $gem_item);
         //星图属性
         if (isset($data['star_map_id']) && $data['star_map_id'] > 0) {
             $star_attr = array();
             $star_map_config = Cache_Prop::getInstance()->get_prop_info($data['star_map_id']);
             $star_attr['star'] = self::get_prop_struct($star_map_config);
             $star_attr['power'] = 0;
             //战力计算
             $star_attr['property'] = array();
             $star_map_info = Cache_Forge::getInstance()->get_star_map_config_byid($data['star_map_id']);
             if ($star_map_info) {
                 foreach ($star_map_info as $k => $v) {
                     $a = array();
                     $a['addition_type'] = self::$_star_map_attr_enum[$v['data']];
                     #$a['addition_key'] = $v['data'];
                     $a['addition_val'] = $v['data_value'];
                     if (isset($attr_index[$k])) {
                         //                            if(!isset($attr_index[$k])){
                         //                                Com_Log::log($k,'addition',1);
                         //                            }
                         $a['condition_type'] = 0;
                         $a['condition_key'] = array('k' => $attr_index[$k], 'v' => $v['limit_value'], 'per' => 0);
                     } else {
                         if ($k == 'inlay_gems_lv') {
                             $a['condition_type'] = 1;
                         } elseif ($k == 'inlay_gems') {
                             $a['condition_type'] = 2;
                         } elseif ($k == 'activate') {
                             $a['condition_type'] = 3;
                         }
                         $a['condition_key'] = array('k' => 0, 'v' => $v['limit_value'], 'per' => 0);
                     }
                     $star_attr['property'][] = $a;
                 }
             }
             $out[] = array(0 => $attr_index['star'], 1 => $star_attr);
         }
         # ----------------------------------------------------------------
         # 吞噬属性:需要写死传回已配置的所有吞噬属性,即便当前道具尚未有激活任意项吞噬属性,也需要用初始值填充
         # ----------------------------------------------------------------
         list($allow_swallow_sub_type, $allow_swallow_id) = TenYear::getInstance('Game_EquipSwallow')->get_swallow_restriction_info($data['sub_type']);
         $distinct_swallow_list = Cache_Forge::getInstance()->get_distinct_swallow_list();
         foreach ($distinct_swallow_list as $swallow_info) {
             if (!empty($allow_swallow_id) && !in_array($swallow_info['swallow_id'], $allow_swallow_id)) {
                 continue;
             }
             $swallow[$swallow_info['swallow_id']] = array('swallow_id' => $swallow_info['swallow_id'], 'swallow_lv' => 0, 'swallow_exp' => 0);
         }
         if (!empty($data['swallow_info'])) {
             foreach ($data['swallow_info'] as $swallow_id => $swallow_info) {
                 $swallow[$swallow_id] = array('id' => $swallow_info['swallow_id'], 'lv' => $swallow_info['swallow_lv'], 'value' => $swallow_info['swallow_exp']);
             }
         }
         $out[] = array(0 => $attr_index['swallow'], 1 => $swallow);
         if (!empty($data['equip_view'])) {
             if (is_string($data['equip_view'])) {
                 $equip_view = $data['equip_view'];
             } else {
                 $equip_view = implode(':', $data['equip_view']);
             }
             if ($equip_view == '0:0:0:0' || $equip_view == '0:0:0') {
                 $equip_view = '';
             }
         }
         $out[] = array(0 => $attr_index['equip_view'], 1 => $equip_view);
         if (!empty($fpower_calc)) {
             //                Com_Log::log('============[start]===========','equip_fpower',1);
             //                Com_Log::log("prop_id:{$data['prop_id']}",'equip_fpower',1);
             //                Com_Log::log($fpower_calc,'equip_fpower',1);
             $data['fpower'] = Formula_Fpower::calc_fpower($fpower_calc);
             //                Com_Log::log("fpower:{$data['fpower']}",'equip_fpower',1);
             //                Com_Log::log('============[end]===========','equip_fpower',1);
         } else {
             $data['fpower'] = 0;
         }
     }
     foreach (self::$_out_base_keys as $key) {
         if ($key == 'bind_type') {
             #特殊处理下
             if (isset($attr_index[$key]) && isset($data['bind_flag'])) {
                 $out[] = array(0 => intval($attr_index[$key]), 1 => intval($data['bind_flag']));
             }
         } elseif ($key == 'star_level') {
             if ($data['star_level'] > 10) {
                 $data['star_level'] = $data['show_star'];
             }
             $out[] = array(0 => intval($attr_index[$key]), 1 => intval($data['star_level']));
         } else {
             if (isset($attr_index[$key]) && isset($data[$key]) && !empty($data[$key])) {
                 $out[] = array(0 => intval($attr_index[$key]), 1 => intval($data[$key]));
             }
         }
     }
     return $out;
 }
コード例 #13
0
ファイル: Auction.php プロジェクト: bluefan/phpsource
 /**
  * 回购
  * @param $player_id
  * @param $auction_id
  * @return array
  */
 public function buy_back($player_id, $auction_id)
 {
     $auction_data = $this->get_data('Auction')->get_auction($auction_id);
     if (empty($auction_data)) {
         $this->throw_error('80913');
         //道具不存在
     }
     $player_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'vip', 'privilege_level'));
     //        $has_silver = $player_info['silver'];
     //        if($this->_buy_back_need_silver > $has_silver){
     //            $this->throw_error('10113'); //金币不足
     //        }
     //$this->get_data('Player')->check_player_resource($player_id,$player_info,"-",'silver',$this->_buy_back_need_silver);
     $prop = json_decode($auction_data['prop_info'], true);
     if ($prop['player_id'] != $player_id) {
         $this->throw_error('71606');
         //不是你的道具,你不能回购
     }
     $this->start_trans();
     $reward[] = array('type' => 'prop', 'item_id' => $prop['prop_id'], 'item_num' => $prop['item_num']);
     $result = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => '775'));
     if ($result !== true) {
         $this->throw_error($result);
     }
     $logs = $this->get_game('Reward')->get_prop_log();
     if (isset($logs[0]['player_prop_id'])) {
         $prop['player_prop_id'] = $logs[0]['player_prop_id'];
         $prop['item_num'] = $logs[0]['item_num'];
     }
     //        $result = $this->get_data("PlayerProp")->insert_player_prop($prop);
     if ($result) {
         //            $result = $this->get_data('Player')->update_player_info($player_id,array('silver'=>"-".$this->_buy_back_need_silver));
         //$result = $this->get_data('Player')->update_player_resource($player_id,$player_info,775);
     }
     if ($result) {
         $this->get_data('Auction')->del_auction($auction_id);
     }
     if ($result) {
         $this->commit();
         //回购&到期
         if ($this->_past_due > time() - $auction_data['add_time']) {
             $type = 4;
         } else {
             $type = 5;
         }
         $prop_config = Cache_Prop::getInstance()->get_prop_info($prop['prop_id']);
         Log_Trade::getInstance()->add_trade_log($player_id, $player_info['level'], $player_info['vip'], $player_info['privilege_level'], $type, $prop['prop_id'], $prop_config['name'], $prop['quality'], $prop['item_num'], 0, $prop['level'], $prop, 0, 0);
         //            Protocol_Prop::prop_806($player_id,array(0=>$prop));
         //            Protocol_Player::p2c_part_update($player_id,array('silver'=>0));
         $this->get_game('Reward')->add_reward_log();
         return array('result' => 1, 'auction_id' => $auction_id, 'ppid' => $prop['player_prop_id']);
     }
     return array('result' => 0, 'auction_id' => $auction_id, 'ppid' => 0);
 }
コード例 #14
0
ファイル: PlayerWing.php プロジェクト: bluefan/phpsource
 public function get_wing_equip_gift_list($player_id, $vocation_limit = 7, $out_type = 0)
 {
     $this->param_check_numeric(array($player_id));
     # 获取装备列表
     $item_list = Cache_PlayerWing::getInstance()->get_wing_equip_gift_info_list($vocation_limit);
     if (empty($item_list)) {
         $this->throw_error('80048');
         # 未配置赠送的翅膀装备
     }
     #var_export($item_list);
     $start = strtotime(SERVER_FIRST_START_TIME);
     list($login_series_max, $login_acc) = $this->get_game('EventCondFunc')->_cal_login_refer($player_id, $start, $this->current_time);
     $deal_log_hash = $this->get_data('Wing')->get_deal_log_by_player_id($player_id);
     #var_export($deal_log_hash);
     $out_1517 = array('vocation_limit' => $vocation_limit, 'item_list' => array());
     $out_status = 0;
     # 0没有可领取道具,1有可领取道具
     foreach ($item_list as $item_info) {
         $gain_status = 0;
         # 领取状态:0可领,1条件未达成不可领,2已领取不可领[NOTE:可领只有一种情况,不可领有多种情况,所以这样表示]
         # 判断达成条件
         if ($login_acc < $item_info['login_acc']) {
             $gain_status = 1;
         }
         # 判断是否已领取
         if (!empty($deal_log_hash[$item_info['item_id']])) {
             $gain_status = 2;
         }
         $prop_info = Cache_Prop::getInstance()->get_prop_info($item_info['item_id']);
         $prop_info['item_num'] = 1;
         $out_1517['item_list'][] = array('item' => Struct_Prop::get_prop_struct($prop_info), 'login_acc' => $item_info['login_acc'], 'login_series' => $item_info['login_series'], 'gain_status' => $gain_status);
         if ($gain_status == 0) {
             $out_status = 1;
         }
     }
     if (empty($out_type)) {
         return $out_1517;
     } else {
         return $out_status;
     }
 }
コード例 #15
0
 /**
  * 格式化奖励
  * @param $reward
  * @return array
  */
 protected function format_reward($reward)
 {
     if (empty($reward)) {
         return array();
     }
     $arr = explode("|", $reward);
     $props = array();
     if ($arr) {
         foreach ($arr as $val) {
             $prop = explode(":", $val);
             $prop_info = Cache_Prop::getInstance()->get_prop_info($prop[0]);
             $prop_info['item_num'] = $prop[1];
             $props[] = Struct_Prop::get_prop_struct($prop_info);
         }
     }
     return $props;
 }
コード例 #16
0
ファイル: EquipStarMap.php プロジェクト: bluefan/phpsource
 public function equip_starmap_do($player_id, $player_prop_id, $star_spid)
 {
     $this->get_game('PlayerFunc')->get_func_is_open($player_id, $this->func_id);
     $this->param_check_numeric(array($player_id));
     # 没有玩家信息
     $player_info = $this->get_data('Player')->get_player_info($player_id);
     if (empty($player_info)) {
         $this->throw_error('10104');
     }
     # 玩家没有该装备
     $player_prop_info = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $player_prop_id);
     if (empty($player_prop_info)) {
         $this->throw_error('80013');
     }
     if (Com_Util::is_first_charge_item($player_prop_info['prop_id'])) {
         $this->throw_error('81103');
         # 首充装备不允许觉醒
     }
     # 824展示协议返回数据
     $out_824 = array('player_prop_id' => $player_prop_id, 'star_pid' => $star_spid, 'box_up' => array(), 'box_down' => array());
     $before_starmap_desc = $player_prop_info['star_map_desc'];
     # 判断行为类型:flag=0星图卸载;flag=1星图安装;flag=2星图替换
     if (empty($star_spid)) {
         if (empty($player_prop_info['star_map_id'])) {
             $this->throw_error('80031');
             //该装备未曾安装星图!
         }
         $flag = 0;
     } else {
         $flag = empty($player_prop_info['star_map_id']) ? 1 : 2;
     }
     # 检查旧星图配置信息【卸载||替换】
     if ($flag == 0 || $flag == 2) {
         $starmap_config_forSend = Cache_Prop::getInstance()->get_prop_info($player_prop_info['star_map_id']);
         if (!$starmap_config_forSend) {
             $this->throw_error('80033');
             //没有该星图的配置信息!
         }
     }
     # 检查新星图配置信息【安装||替换】
     if ($flag == 1 || $flag == 2) {
         $starmap_info_forInstall = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $star_spid);
         if (!$starmap_info_forInstall) {
             $this->throw_error('80032');
             //玩家没有该星图!
         }
         $out_824['box_up'] = array('pos' => $starmap_info_forInstall['item_position'], 'index' => $starmap_info_forInstall['grid']);
         $starmap_config_forInstall = Cache_Prop::getInstance()->get_prop_info($starmap_info_forInstall['prop_id']);
         if (!$starmap_config_forInstall) {
             $this->throw_error('80033');
             //没有该星图的配置信息!
         }
         $starmap_config = Cache_Forge::getInstance()->get_starmap_info($starmap_info_forInstall['prop_id']);
         # 允许的装备种类检查
         if (!empty($starmap_config[0]['require_sub_type'])) {
             $require_sub_type = explode(":", $starmap_config[0]['require_sub_type']);
             if (!in_array($player_prop_info['sub_type'], $require_sub_type)) {
                 $this->throw_error('80035');
                 //该觉醒石不允许镶嵌在该种类的装备上
             }
         }
         # 要求的等级检查
         if (!empty($starmap_config[0]['require_equip_level']) && $player_prop_info['level'] < $starmap_config[0]['require_equip_level']) {
             $this->throw_error('80040');
             # 装备等级低于觉醒石要求等级,不允许镶嵌
         }
     }
     $this->start_trans();
     if ($flag == 0 || $flag == 2) {
         //发放旧星图【卸载||替换】
         $reward = array();
         $sendarrLogs = array();
         $reward[] = array('type' => 'prop', 'item_id' => $player_prop_info['star_map_id'], 'item_num' => 1);
         $re = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => 824));
         #send_reward失败时,会返回各种失败情况的错误码
         $this->write_check_strict($re, 3010130);
         $sendarrLogs = $this->get_game('Reward')->get_prop_log();
         $out_824['box_down'] = array('pos' => $sendarrLogs[0]['item_position'], 'index' => $sendarrLogs[0]['grid']);
         if ($flag == 2) {
             //扣除新星图【替换】
             $re = $this->get_data('PlayerProp')->update_prop_num($player_id, $starmap_info_forInstall, 1, '-', array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'cmd_id' => 824));
             $this->write_check($re, 3010136);
         }
     } else {
         //扣除新星图【安装】
         $re = $this->get_data('PlayerProp')->update_prop_num($player_id, $starmap_info_forInstall, 1, '-', array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'cmd_id' => 824));
         $this->write_check($re, 3010140);
     }
     # 更新装备状态
     if ($flag) {
         # 【安装||替换】
         $player_prop_info['star_map_id'] = $starmap_info_forInstall['prop_id'];
         $player_prop_info['star_map_desc'] = $this->get_latest_starmap_desc($player_prop_info);
     } else {
         # 【卸载】
         $player_prop_info['star_map_id'] = '';
         $player_prop_info['star_map_desc'] = array();
     }
     $re = $this->get_data('PlayerProp')->update_player_prop($player_prop_info, array('star_map_id' => $player_prop_info['star_map_id'], 'star_map_desc' => $player_prop_info['star_map_desc']));
     $this->write_check($re, 3010152);
     $this->commit();
     # --------------------------------------------------------------------
     # 游戏日志记录
     # --------------------------------------------------------------------
     $log_info = array('player_id' => $player_id, 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip'], 'vip_special_level' => $player_info['privilege_level'], 'add_time' => $this->current_time, 'player_prop_id_master' => $player_prop_info['player_prop_id'], 'item_id_master' => $player_prop_info['prop_id'], 'item_type' => $player_prop_info['type'], 'item_sub_type' => $player_prop_info['sub_type'], 'item_quality' => $player_prop_info['quality'], 'item_level' => $player_prop_info['level'], 'item_star_level' => $player_prop_info['star_level'], 'player_prop_id_install' => $starmap_info_forInstall ? $starmap_info_forInstall['player_prop_id'] : 0, 'item_id_install' => $starmap_info_forInstall ? $starmap_info_forInstall['prop_id'] : 0, 'player_prop_id_uninstall' => $sendarrLogs ? $sendarrLogs[0]['player_prop_id'] : 0, 'item_id_uninstall' => $sendarrLogs ? $sendarrLogs[0]['prop_id'] : 0, 'before_starmap_desc' => $before_starmap_desc, 'after_starmap_desc' => $player_prop_info['star_map_desc']);
     Log_Forge::getInstance()->add_log($log_info, 'starmap');
     if ($flag == 1 || $flag == 2) {
         # 安装和替换才算
         # 引导任务埋点
         $this->get_game('TaskTrigger')->async_trigger_guide_task($player_id, 25, 1);
     }
     $this->handle_starmap_refer_achieve($player_id);
     # 刷新玩家属性
     if ($player_prop_info['item_position'] == 3) {
         $this->get_game('EquipAttr')->equip_attr($player_id);
     }
     # 通知道具变更 粘包806
     $this->get_game('Reward')->add_reward_log();
     # 调用add_reward_log,触发806协议通知道具变更,并记录道具获取日志
     $ndata = array();
     $ndata[] = $player_prop_info;
     /**
     		//发放的星图
     		if($flag == 0 || $flag == 2) {
     			foreach($sendarrLogs as $key => $val) {
     				$ndata[] = $val;
     			}
     		}
     		**/
     //扣除的星图
     if ($flag == 1 || $flag == 2) {
         $starmap_info_forInstall['item_num'] -= 1;
         $ndata[] = $starmap_info_forInstall;
     }
     Protocol_Prop::prop_806($player_id, $ndata);
     //获取 星图
     $player_star_map = $this->get_game('Prop')->get_prop_list_by_type($player_id, $this->starmap_type, $this->starmap_sub_type);
     # 过滤不允许镶嵌该装备的星图
     $player_star_map = $this->filter_unvalid_starmap($player_prop_info, $player_star_map);
     $data = array();
     if ($player_star_map) {
         foreach ($player_star_map as $k => $v) {
             $data[] = Struct_Prop::get_item_box_struct($v);
         }
     }
     $emp = array(0 => $player_prop_id, 1 => $data);
     Protocol::input($player_id, 3, 8, 824, $out_824);
     Protocol::input($player_id, 3, 8, 823, $emp);
 }
コード例 #17
0
ファイル: Strengthen.php プロジェクト: bluefan/phpsource
 /**
  * 装备推荐
  * @param $player_id
  * @param $level
  * @param $data
  * @return array
  */
 protected function get_prop_recommend($player_id, $level, $data, $pos)
 {
     $out = array();
     if (empty($data)) {
         $strengthen = Cache_Strengthen::getInstance()->get_strengthen_by_condition_type($level, 1);
         $strengthen['name'] = $this->_body_part[$pos];
         $out['pid'] = $pos;
         $strengthen_list[$strengthen['sub_type']][$strengthen['sid']] = $strengthen;
         $out['advise'] = $this->format_advise_list(1, $strengthen_list);
         //                array(
         //                'name'=>$this->_arr_equip_sub_type_name[$strengthen['sub_type']],
         //                'advise'=>array(array(
         //                    'color_type'=>$strengthen['color'],
         //                    'desc'=>$strengthen['condition_desc'],
         //                    'btn_name'=>$strengthen['button_name'],
         //                    'btn_func_id'=>$strengthen['func_id'],
         //                    'btn_params'=>'',
         //                )),
         //            );
     } else {
         $strengthen = Cache_Strengthen::getInstance()->get_strengthen($level, 1);
         $out['pid'] = $pos;
         $out['advise'] = array();
         $strengthen_list = array();
         if (isset($data['prop_id'])) {
             $prop_config = Cache_Prop::getInstance()->get_prop_info($data['prop_id']);
         } else {
             $prop_config = array();
         }
         foreach ($strengthen as $key => $val) {
             if (empty($prop_config)) {
                 $val['name'] = $this->_body_part[$pos];
             } else {
                 $val['name'] = $prop_config['name'];
             }
             if ($val['func_id'] == 13) {
                 $val['func_params'] = $pos;
             }
             if (count($strengthen_list[$val['sub_type']]) >= 2) {
                 break;
             }
             if (isset($data['refine_info'])) {
                 $refine = $this->get_game('EquipRefine')->cal_attr_perfection_avg($data['refine_info']);
                 $en_refine_attr_full_flag = ceil($refine[0] / 100);
                 #完美度
                 $attr_perfection_avg = $refine[0];
                 #是否精炼属性满级
             } else {
                 $en_refine_attr_full_flag = 0;
                 #完美度
                 $attr_perfection_avg = 0;
                 #是否精炼属性满级
             }
             switch ($val['condition_type']) {
                 case 1:
                     continue 2;
                     break;
                 case 2:
                     //装备的等级、品质、星级
                     $c_val = explode(':', $val['condition_val']);
                     if ($this->cal_condition($c_val[0], $data['level'], $val['condition_operation']) && $this->cal_condition($c_val[1], $data['level'], $val['condition_operation']) && $this->cal_condition($c_val[2], $data['level'], $val['condition_operation'])) {
                         continue 2;
                     }
                     break;
                 case 3:
                     //装备的强化等级
                     if ($this->cal_condition($val['condition_val'], $data['intensive_level'], $val['condition_operation'])) {
                         continue 2;
                     }
                     break;
                 case 4:
                     //镶嵌宝石个数
                     $num = count($data['inlay_gems']);
                     if (!$this->cal_condition($val['condition_val'], $num, $val['condition_operation'])) {
                         continue 2;
                     }
                     break;
                 case 5:
                     //宝石等级
                     if (!$this->cal_condition($val['condition_val'], $data['inlay_gems_lv'], $val['condition_operation'])) {
                         continue 2;
                     }
                     break;
                 case 6:
                     //吞噬属性1的等级
                     if (!empty($data['swallow_info'])) {
                         list($id, $swallow_info) = each($data['swallow_info']);
                         if (!$this->cal_condition($val['condition_val'], $swallow_info['swallow_lv'], $val['condition_operation'])) {
                             continue 2;
                         }
                     }
                     break;
                 case 7:
                     //吞噬属性2的等级
                     if (!empty($data['swallow_info']) && count($data['swallow_info']) > 1) {
                         list($id, $swallow_info) = next($data['swallow_info']);
                         if (!$this->cal_condition($val['condition_val'], $swallow_info['swallow_lv'], $val['condition_operation'])) {
                             continue 2;
                         }
                     }
                     break;
                 case 8:
                     //有无觉醒石
                     if ($data['star_map_id']) {
                         continue 2;
                     }
                     break;
                 case 9:
                     if ($data['star_map_id']) {
                         $prop = Cache_Prop::getInstance()->get_prop_info($data['star_map_id']);
                         if (!empty($prop) && $this->cal_condition($val['condition_val'], $prop['quality'], $val['condition_operation'])) {
                             continue 2;
                         }
                     }
                     break;
                 case 10:
                     if (!empty($data['star_map_desc'])) {
                         $num = count($data['star_map_desc']);
                         if ($this->cal_condition($val['condition_val'], $num, $val['condition_operation'])) {
                             continue 2;
                         }
                     }
                     break;
                 case 38:
                     #洗练完美度
                     if (!$this->cal_condition($val['condition_val'], $en_refine_attr_full_flag, $val['condition_operation'])) {
                         continue 2;
                     }
                     break;
                 case 39:
                     #精炼属性是否已经满了
                     if ($this->cal_condition($val['condition_val'], $attr_perfection_avg, $val['condition_operation'])) {
                         continue 2;
                     }
                     break;
             }
             $strengthen_list[$val['sub_type']][$key] = $val;
         }
         if (!empty($strengthen_list)) {
             $out['advise'] = $this->format_advise_list(1, $strengthen_list);
         } else {
             $out['advise'] = array();
         }
     }
     return $out;
 }
コード例 #18
0
ファイル: FbLoot.php プロジェクト: bluefan/phpsource
 /**
  *
  * @param $sid
  * @param $player_info
  * @return array
  */
 public function get_loot($sid, $player_id = null, $param = array())
 {
     $drop_list = $this->get_fb_loot_info($sid);
     if (empty($drop_list)) {
         return array();
     }
     $items = array();
     if (!empty($player_id) && empty($param)) {
         $param = $this->get_data('Player')->get_player_info($player_id, array('career_type', 'level'));
     }
     $arr_special = array();
     foreach ($drop_list as $key => $drop) {
         $arr_special[$drop['special']][$key] = $drop;
         # TODO: 郭鑫又改规则了
     }
     foreach ($arr_special as $list) {
         $condition = array();
         $conditions_by_role = array();
         #按职业随机掉的
         $conditions_by_99 = array();
         #必掉的
         foreach ($list as $key => $drop) {
             if ($drop['type'] > 0) {
                 if ($drop['type'] == $param['career_type']) {
                     $conditions_by_role[$key] = $drop['rate'];
                 }
                 if ($drop['type'] == 99) {
                     $conditions_by_99[] = $key;
                 }
                 continue;
             } else {
                 if ($drop['rate'] > 0) {
                     $condition[$key] = $drop['rate'];
                 }
             }
         }
         if ($conditions_by_role) {
             $key = Com_Random::get_probability_key($conditions_by_role, 1);
             $prop_param = explode(":", $drop_list[$key]['item_id']);
             if (count($prop_param) > 1) {
                 $prop = Cache_Prop::getInstance()->get_prop_by_param_and_career_type($param['level'], $param['career_type'], $prop_param[0], $prop_param[1], $prop_param[2], $prop_param[3]);
                 $items[] = array('type' => $this->get_item_key($prop['prop_id']), 'item_id' => $prop['prop_id'], 'item_num' => $drop_list[$key]['num']);
             } else {
                 $items[] = array('type' => $this->get_item_key($drop_list[$key]['item_id']), 'item_id' => $drop_list[$key]['item_id'], 'item_num' => $drop_list[$key]['num']);
             }
         }
         if ($conditions_by_99) {
             foreach ($conditions_by_99 as $key) {
                 $prop_param = explode(":", $drop_list[$key]['item_id']);
                 if (count($prop_param) > 1) {
                     $prop = Cache_Prop::getInstance()->get_prop_by_param($param['level'], $prop_param[0], $prop_param[1], $prop_param[2], $prop_param[3]);
                     $items[] = array('type' => $this->get_item_key($prop['prop_id']), 'item_id' => $prop['prop_id'], 'item_num' => $drop_list[$key]['num']);
                 } else {
                     $items[] = array('type' => $this->get_item_key($drop_list[$key]['item_id']), 'item_id' => $drop_list[$key]['item_id'], 'item_num' => $drop_list[$key]['num']);
                 }
             }
         }
         if ($condition) {
             $key = Com_Random::get_probability_key($condition, 1);
             $prop_param = explode(":", $list[$key]['item_id']);
             if (count($prop_param) > 1) {
                 $prop = Cache_Prop::getInstance()->get_prop_by_param($param['level'], $prop_param[0], $prop_param[1], $prop_param[2], $prop_param[3]);
                 //                    Com_Log::log($prop,'prop_use',1);
                 $items[] = array('type' => $this->get_item_key($prop['prop_id']), 'item_id' => $prop['prop_id'], 'item_num' => $drop_list[$key]['num']);
             } else {
                 $items[] = array('type' => $this->get_item_key($drop_list[$key]['item_id']), 'item_id' => $drop_list[$key]['item_id'], 'item_num' => $drop_list[$key]['num']);
             }
         }
     }
     if ($items) {
         $now_time = time();
         foreach ($items as $key => $item) {
             if ($item['item_id'] > 200) {
                 $arrPropConfig = Cache_Prop::getInstance()->get_prop_info($item['item_id']);
                 $items[$key]['prop_config'] = $arrPropConfig;
                 if (!empty($arrPropConfig['generate_start_time']) && !empty($arrPropConfig['generate_end_time']) && ($now_time < strtotime($arrPropConfig['generate_start_time']) || $now_time > strtotime($arrPropConfig['generate_end_time']))) {
                     unset($items[$key]);
                 }
             }
         }
     }
     return $items;
 }
コード例 #19
0
ファイル: Util.php プロジェクト: bluefan/phpsource
 public static function is_first_charge_item($item_id)
 {
     $prop_info = Cache_Prop::getInstance()->get_prop_info($item_id);
     if (!empty($prop_info['rechage'])) {
         return true;
     } else {
         return false;
     }
     /**
     		$first_charge_item = array('10000' => 1, '30000' => 1, '40000' => 1); # 首充道具ID列表
     		if (isset($first_charge_item[$item_id])) {
     			return true;
     		} else {
     			return false;
     		}
     		**/
 }
コード例 #20
0
ファイル: PropLoot.php プロジェクト: bluefan/phpsource
 /**
  * 获取掉落数据
  * @param $loot_id
  * @return array
  */
 public function get_prop_loot($loot_id, $career_type = 0)
 {
     $prop_list = array();
     $condition = Cache_LootCondition::getInstance()->get_loot_condition($loot_id);
     if (intval($condition['prob_part_per_million']) > 0) {
         //0直接退出
         $flag = Com_Random::probability($condition['prob_part_per_million'], 1000000);
         if ($flag) {
             $loop_times = 0;
             //普通循环次数
             $arr_loop = array();
             $arr_critical_loop = array();
             for ($i = 0; $i < 5; $i++) {
                 //把循环次数权重取出
                 $lkey = 'count_weight' . $i;
                 $wkey = 'critical_weight' . $i;
                 $arr_loop[$i] = $condition[$lkey];
                 $arr_critical_loop[$i] = $condition[$wkey];
             }
             $crit_flag = Com_Random::probability($condition['critical_prob_part_per_million']);
             if ($crit_flag) {
                 //算暴击次数
                 $wkey = Com_Random::get_probability_key($arr_critical_loop);
                 $wkey = 'critical_times' . $wkey;
                 $loop_times += $condition[$wkey];
             }
             $lkey = Com_Random::get_probability_key($arr_loop);
             $lkey = 'count' . $lkey;
             $loop_times += $condition[$lkey];
             $loot_info = Cache_Loot::getInstance()->get_Loot_info($condition['loot_id']);
             if (!empty($loot_info)) {
                 $arr_loot_lib = array();
                 foreach ($loot_info as $loot) {
                     $arr_loot_lib[$loot['loot_lib_id']] = $loot['weight'];
                 }
                 $loot_lib = array();
                 for ($i = 0; $i < $loop_times; $i++) {
                     //获取掉落库的随机次数
                     $key = Com_Random::get_probability_key($arr_loot_lib);
                     $loot_lib[$key] += 1;
                 }
                 if (!empty($loot_lib)) {
                     foreach ($loot_lib as $key => $times) {
                         $arr_loot_lib = Cache_LootLib::getInstance()->get_loot_lib_info($key);
                         if (!empty($arr_loot_lib)) {
                             $arr_item = array();
                             $arr_item_limit = array();
                             $arr_item_num = array();
                             foreach ($arr_loot_lib as $loot_lib_info) {
                                 if ($loot_lib_info['class_filter'] > 0 && $loot_lib_info['class_filter'] != $career_type) {
                                     continue;
                                 }
                                 $arr_item[$loot_lib_info['item_sid']] = $loot_lib_info['weight'];
                                 $arr_item_num[$loot_lib_info['item_sid']] = $loot_lib_info['count'] <= 0 ? 1 : $loot_lib_info['count'];
                                 if ($loot_lib_info['loop_limit'] > 0) {
                                     if ($loot_lib_info['loop_limit'] > 0) {
                                         $arr_item_limit[$loot_lib_info['item_sid']] = $loot_lib_info['loop_limit'];
                                     }
                                 }
                             }
                             if (!empty($arr_item)) {
                                 for ($i = 0; $i < $times; $i++) {
                                     if (empty($arr_item)) {
                                         break;
                                     }
                                     $key = Com_Random::get_probability_key($arr_item);
                                     if (!isset($prop_list[$key])) {
                                         $type = $this->get_item_key($key);
                                         if ($type == 'prop') {
                                             $prop_list[$key] = array('type' => $type, 'item_id' => $key, 'item_num' => $arr_item_num[$key]);
                                         } else {
                                             $prop_list[$key] = array('type' => $type, 'item_id' => $key, 'item_num' => $arr_item_num[$key]);
                                         }
                                     } else {
                                         $prop_list[$key]['item_num'] += $arr_item_num[$key];
                                     }
                                     if (isset($arr_item_limit[$key])) {
                                         $arr_item_limit[$key] -= 1;
                                         if ($arr_item_limit[$key] <= 0) {
                                             unset($arr_item[$key]);
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     $flag = Com_Random::probability($condition['prob_silver_part_per_million'], 1000000);
     if ($flag) {
         $item_num = rand($condition['min_silver'], $condition['max_silver']);
         if ($item_num > 0) {
             if (isset($prop_list[3])) {
                 $item_num = $prop_list[3]['item_num'] + $item_num;
             }
             $prop_list[3] = array('type' => $this->get_item_key(3), 'item_id' => 3, 'item_num' => $item_num);
         }
     }
     $flag = Com_Random::probability($condition['prob_mojo_part_per_million'], 1000000);
     if ($flag) {
         $item_num = rand($condition['min_mojo'], $condition['max_mojo']);
         if ($item_num > 0) {
             if (isset($prop_list[13])) {
                 $item_num = $prop_list[13]['item_num'] + $item_num;
             }
             $prop_list[13] = array('type' => $this->get_item_key(13), 'item_id' => 13, 'item_num' => $item_num);
         }
     }
     if ($prop_list) {
         $now_time = time();
         foreach ($prop_list as $key => $item) {
             if ($item['item_id'] > 200) {
                 $arrPropConfig = Cache_Prop::getInstance()->get_prop_info($item['item_id']);
                 $prop_list[$key]['prop_config'] = $arrPropConfig;
                 if (!empty($arrPropConfig['generate_start_time']) && !empty($arrPropConfig['generate_end_time']) && ($now_time < strtotime($arrPropConfig['generate_start_time']) || $now_time > strtotime($arrPropConfig['generate_end_time']))) {
                     unset($prop_list[$key]);
                 }
             }
         }
     }
     return $prop_list;
 }
コード例 #21
0
ファイル: GrabTreasure.php プロジェクト: bluefan/phpsource
 /**
  * 获取玩家可合成碎片列表
  * @param unknown $player_id
  * @param unknown $grab_treasure_info
  * @return Ambigous <multitype:, number>
  */
 public function get_prop_compose_info($player_id, &$grab_treasure_info, $is_refresh = 0)
 {
     $grab_treasure_info = $this->get_cross("GrabTreasure")->get_grab_treasure($player_id);
     $func_vip_info = Cache_VipLevelLimit::getInstance()->get_limit_info_func(1240);
     foreach ($func_vip_info as $expand_info) {
         $expand_id = $this->default_refresh_compose_num + $expand_info['max_times'];
         if ($expand_info['max_times'] > 0 && !isset($expand[$expand_id])) {
             $expand[$expand_id] = $expand_info["vip_level"];
             $max_expand_id = $expand_id;
         }
     }
     $player_info = $this->get_data('Player')->get_player_info($player_id, array('vip', 'level', 'privilege_level'));
     $auto_refresh_compose_num = $this->default_refresh_compose_num;
     if ($player_info['vip'] > 0) {
         #获取VIP类型
         $vip_type = Cache_VipLevelLimit::getInstance()->get_limit_info_func_id(1240);
         if ($vip_type['fun_type'] == 2) {
             $left_time = $this->get_game('VipSpecial')->get_left_time($player_id);
             $player_vip = $left_time == 0 ? 0 : $player_info['privilege_level'];
         } else {
             $player_vip = $player_info['vip'];
         }
         if ($player_vip > 0) {
             $vip_set = Cache_VipLevelLimit::getInstance()->get_limit_info($player_vip, 1240);
             if (!empty($vip_set)) {
                 $vip_num = $vip_set['max_times'];
             }
             $auto_refresh_compose_num += $vip_num;
         }
     }
     if (empty($grab_treasure_info) || $is_refresh == 1) {
         #数据空为新手引导
         $is_guide = 0;
         if (empty($grab_treasure_info)) {
             $is_guide = 1;
         }
         #首次自动随机可合成物品
         $rand_prop_list = $this->rand_compose_pieces($auto_refresh_compose_num, $player_info['level'], array(), $is_guide);
         foreach ($rand_prop_list as $prop_id => $pieces) {
             $rand_prop_ids[] = $prop_id;
             foreach ($pieces as $piece_id => $quality) {
                 $quality_piece_ids[$quality][$piece_id] = $piece_id;
             }
         }
         $update_data['rand_prop_ids'] = $rand_prop_ids;
         #随便机产生的可合成物品
         $update_data['compose_prop_ids'] = array();
         #合成物品ID
         $update_data['quality_piece_ids'] = $quality_piece_ids;
         #品质碎片
         $update_data['player_id'] = $player_id;
         $update_data['refresh_compose_num'] = $auto_refresh_compose_num;
         $update_data["is_guide"] = $is_guide;
         $update_data["config"] = array();
         $this->get_cross("GrabTreasure")->update_grab_treasure($player_id, $update_data);
         $grab_treasure_info = $update_data;
     } else {
         if (!empty($grab_treasure_info['rand_prop_ids']) && count($grab_treasure_info['rand_prop_ids']) < $auto_refresh_compose_num) {
             #异常处理
             $rand_num = $auto_refresh_compose_num - count($grab_treasure_info['rand_prop_ids']);
             $rand_prop_list = $this->rand_compose_pieces($rand_num, $player_info['level'], $grab_treasure_info['rand_prop_ids']);
             foreach ($rand_prop_list as $prop_id => $pieces) {
                 $grab_treasure_info['rand_prop_ids'][] = $prop_id;
                 foreach ($pieces as $piece_id => $quality) {
                     $grab_treasure_info['quality_piece_ids'][$quality][$piece_id] = $piece_id;
                 }
             }
             $this->get_cross("GrabTreasure")->update_grab_treasure($player_id, $grab_treasure_info);
         }
     }
     $compose_info = array();
     for ($i = 0; $i < $max_expand_id; $i++) {
         $rand_prop_id = intval($grab_treasure_info["rand_prop_ids"][$i]);
         $pieces = array();
         if ($rand_prop_id > 0) {
             $grab_prop_config = Cache_GrabTreasureBase::getInstance()->get_grab_treasure_id($rand_prop_id);
             $need_pieces = $grab_prop_config['piece_type'];
             $arr_need_pieces = explode(",", $need_pieces);
             foreach ($arr_need_pieces as $key => $piece_id) {
                 $pieces[$key]['prop_id'] = $piece_id;
                 $pieces[$key]['is_get'] = isset($grab_treasure_info['quality_piece_ids'][$grab_prop_config["quality"]][$piece_id]) ? 1 : 0;
                 $pieces[$key]['quality'] = intval($grab_prop_config["quality"]);
             }
         }
         $compose_info[$i]["prop_id"] = $rand_prop_id;
         $compose_info[$i]["need_vip"] = intval($expand[$i + 1]);
         $compose_info[$i]["is_open"] = $rand_prop_id > 0 ? 1 : 0;
         $compose_info[$i]["is_compose"] = 0;
         $compose_info[$i]["pieces"] = $pieces;
         $arrPropConfig = Cache_Prop::getInstance()->get_prop_info($rand_prop_id);
         if (!isset($arrPropConfig['base_attr'])) {
             if ($arrPropConfig['type'] == 1 || $arrPropConfig['type'] == 6) {
                 if (isset($grab_treasure_info['config'][$rand_prop_id])) {
                     $arrPropConfig = $grab_treasure_info['config'][$rand_prop_id];
                 } else {
                     if (!isset($arrPropConfig['base_attr'])) {
                         $arrPropConfig = $this->get_game("Prop")->get_equip_attr($arrPropConfig);
                     }
                     $grab_treasure_info['config'][$rand_prop_id] = $arrPropConfig;
                     $this->get_cross("GrabTreasure")->update_grab_treasure($player_id, $grab_treasure_info);
                 }
             }
         }
         $compose_info[$i]["prop_attrs"] = Struct_Prop::get_prop_struct($arrPropConfig);
     }
     return $compose_info;
 }
コード例 #22
0
ファイル: GloryShop.php プロジェクト: bluefan/phpsource
 private function send_system_notice($player_id, $player_info, $type, $item_id, $func_id)
 {
     if ($func_id > 0) {
         $arr_replace = array();
         $arr_replace[] = array('rep_type' => 0, 'rep_val' => $player_id);
         $need_b = Cache_Prop::getInstance()->get_prop_info($item_id);
         $arr_replace[] = array('rep_type' => 1, 'rep_val' => $func_id);
         $arr_replace[] = array('rep_type' => 2, 'rep_val' => $item_id);
         $this->get_game('SystemNotice')->push_sys_notice($player_id, $func_id, 0, $arr_replace, 0, $need_b['need_broad_cast']);
     }
     /*
     	if($type==1){
     		$arr_replace[] = array('rep_type'=> 1, 'rep_val'=> 1053);
     		$arr_replace[] = array('rep_type'=> 2, 'rep_val'=> $item_id);
            			 	$this->get_game('SystemNotice')->push_sys_notice($player_id,1053,0,$arr_replace,0,$need_b['need_broad_cast']);
     	}elseif(2==$type){
     		$arr_replace[] = array('rep_type'=> 1, 'rep_val'=> 1064);
     		$arr_replace[] = array('rep_type'=> 2, 'rep_val'=> $item_id);
             			$this->get_game('SystemNotice')->push_sys_notice($player_id,1064,0,$arr_replace,0,$need_b['need_broad_cast']);
     	}
     */
 }
コード例 #23
0
ファイル: PlayerFB.php プロジェクト: bluefan/phpsource
 /**
  * @Purpose:
  * 格式化配置表装备通用结构
  * @param $prop_list 道具列表
  * @param $career_type 职业
  */
 private function format_prop_currency_struct_table($prop_info, $career_type = 0)
 {
     $rtn_data = array();
     if ($prop_info) {
         $data = explode("|", $prop_info);
         if (Com_Array::is_good_arr($data)) {
             foreach ($data as $second_layer) {
                 $list = explode(":", $second_layer);
                 if ($career_type > 0) {
                     if ($list[0] == $career_type) {
                         for ($i = 1; $i < count($list); $i++) {
                             $item = Cache_Prop::getInstance()->get_prop_info($list[$i]);
                             $item['item_num'] = 1;
                             $rtn_data[] = Struct_Prop::get_prop_struct($item);
                         }
                     }
                 } else {
                     $item = Cache_Prop::getInstance()->get_prop_info($list[0]);
                     $item['item_num'] = $list[1];
                     $rtn_data[] = Struct_Prop::get_prop_struct($item);
                 }
             }
         }
     }
     return $rtn_data;
 }
コード例 #24
0
ファイル: EverydayDo.php プロジェクト: bluefan/phpsource
 public function get_everyday_do($player_id, $type, $player_info_all = null, $player_detail_all = null, $player_used_time = null)
 {
     $everyday_config = Cache_EverydayDo::getInstance()->get_everyday_do_info($type);
     if (empty($everyday_config)) {
         $this->throw_error('10107');
     }
     $out = array();
     if (is_null($player_detail_all)) {
         $func_open = $this->get_data('PlayerDetail')->get_player_detail($player_id, 'func_open');
     } else {
         $func_open = $player_detail_all['func_open'];
     }
     if (is_null($player_info_all)) {
         $player_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'career_type'));
     } else {
         $player_info = $player_info_all;
     }
     if (is_null($player_used_time)) {
         $player_used_time = $this->get_data('PlayerDailyTime')->get_player_used_time($player_id);
     }
     $arr_times = $this->get_daily_time($player_id, null, $player_used_time);
     $finish = array();
     $out[0] = array();
     $i = 0;
     //        $func_configs = Cache_FuncConfig::getInstance()->get_func_config_info();
     foreach ($everyday_config as $val) {
         if (!isset($func_open[$val['func_id']])) {
             #判断功能是否开启
             continue;
         }
         $arr_reward = array();
         if (!empty($val['reward_1'])) {
             $rewards1 = Com_FmtData::format_table_prop2($val['reward_1']);
             if ($rewards1) {
                 foreach ($rewards1 as $item) {
                     if ($item['career_type'] != $player_info['career_type']) {
                         continue;
                     }
                     $data = Cache_Prop::getInstance()->get_prop_info($item['id']);
                     $data['item_num'] = $item['num'];
                     $arr_reward[] = Struct_Prop::get_prop_struct($data);
                 }
             }
         }
         if (!empty($val['reward_2'])) {
             $rewards2 = Com_FmtData::format_table_prop($val['reward_2']);
             foreach ($rewards2 as $item) {
                 $data = array('prop_id' => $item['id'], 'item_num' => $item['num']);
                 $arr_reward[] = Struct_Prop::get_prop_struct($data);
             }
         }
         if (in_array($val['func_id'], $this->_can_add_times)) {
             $show_add_times = 1;
         } else {
             $show_add_times = 0;
         }
         if ($arr_times[$val['func_id']]['cur_num'] < $arr_times[$val['func_id']]['max_num']) {
             if ($i < 2 && $type > 0) {
                 $recommend = 1;
             } else {
                 $recommend = 0;
             }
             $out[0][] = array('type' => $type, 'icon_id' => $val['func_id'], 'reward' => $arr_reward, 'max_num' => intval($arr_times[$val['func_id']]['max_num']), 'cur_num' => intval($arr_times[$val['func_id']]['cur_num']), 'jump_id' => $val['jump_id'], 'recommend' => $recommend, 'show_add_times' => $show_add_times, 'star' => $val['star']);
         } else {
             $finish[] = array('type' => $type, 'icon_id' => $val['func_id'], 'reward' => $arr_reward, 'max_num' => intval($arr_times[$val['func_id']]['max_num']), 'cur_num' => intval($arr_times[$val['func_id']]['cur_num']), 'jump_id' => $val['jump_id'], 'recommend' => 0, 'show_add_times' => $show_add_times, 'star' => $val['star']);
         }
         ++$i;
     }
     if (!empty($finish)) {
         $out[0] = array_merge($out[0], $finish);
     }
     return $out;
 }
コード例 #25
0
ファイル: Compose.php プロジェクト: bluefan/phpsource
 public function compose($player_id, $target_id, $comp_type, $comp_sub_type, $auto_buy, $onekey)
 {
     $this->get_game('PlayerFunc')->get_func_is_open($player_id, $this->func_id);
     # 参数校验,comp_sub_type允许为0
     $this->param_check_numeric(array($player_id, $target_id, $comp_type, $comp_sub_type), 0);
     $player_info = $this->get_data('Player')->get_player_info($player_id, Com_Util::get_player_fields(array('currency', 'player_id', 'level', 'vip', 'privilege_level')));
     # 一键合成不允许自动购买
     if ($onekey) {
         $auto_buy = 0;
     }
     # 获取具体合成信息
     $comp_info = Cache_ItemCompose::getInstance()->get_item_compose_info_by_target_id($target_id);
     if (empty($comp_info)) {
         $this->throw_error('90002');
         # 没有配置该道具的合成信息
     }
     $comp_type = $comp_info['comp_type'];
     $comp_sub_type = $comp_info['comp_sub_type'];
     /** 由于前端问题,传参此处可能报异常,反正这两个参数不实用,故忽略
     		if ($comp_info['comp_type'] != $comp_type || $comp_info['comp_sub_type'] != $comp_sub_type) {
     			$this->throw_error('90003'); # 合成参数异常
     		}
     		**/
     # 检查消耗情况
     $cost_material_info_hash = array();
     # 消耗材料信息哈希,为了方便一次性查找所有消耗材料的持有数
     for ($i = 1; $i <= 5; $i++) {
         if (!empty($comp_info['m' . $i . '_id']) && !empty($comp_info['m' . $i . '_amount'])) {
             $cost_material_info_hash[$comp_info['m' . $i . '_id']] = $comp_info['m' . $i . '_amount'];
         }
     }
     # --------------------------------------------------------------------
     # 计算可一键合成的产物数量
     # --------------------------------------------------------------------
     $onekey_num_list = array();
     # 每项材料可以满足合成条件几次
     if (!empty($cost_material_info_hash)) {
         $material_hold_nums = $this->get_game('Prop')->get_prop_num_by_prop_id($player_id, array_keys($cost_material_info_hash));
         foreach ($cost_material_info_hash as $m_id => $m_amount) {
             $onekey_num_list[$m_id] = intval($material_hold_nums[$m_id] / $m_amount);
         }
     }
     $onekey_num = min($onekey_num_list);
     # 木桶原理,能一键合成的产物数由最少材料项决定
     if ($onekey) {
         if (empty($onekey_num)) {
             $this->throw_error('90004');
             # 合成所需材料不足
         }
         $onekey_num = min($onekey_num, intval($player_info['silver'] / $comp_info['cost']));
         # 木桶原理,能一键合成的产物数还由玩家持有货币决定
         if (empty($onekey_num)) {
             $this->throw_error('10113');
             # 金币不足
         }
     } else {
         if (empty($onekey_num) && empty($auto_buy)) {
             $this->throw_error('90004');
             # 合成所需材料不足
         }
         $onekey_num = 1;
         # 非一键合成一次只允许合成一件
     }
     $this->start_trans();
     # 消耗虚拟货币
     $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', 'silver', $comp_info['cost'] * $onekey_num, 1, 1);
     # 消耗材料
     $arr_logs = array();
     $log_param = array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'privilege_level' => $player_info['privilege_level'], 'cmd_id' => 2202);
     foreach ($cost_material_info_hash as $m_id => $m_amount) {
         $hold_num = !empty($material_hold_nums[$m_id]) ? $material_hold_nums[$m_id] : 0;
         if (!empty($auto_buy) && $hold_num < $m_amount) {
             # 一定是单次合成
             # 获取正确的单价
             $price_info = $this->get_game('Shop')->shortcut_purchase_interface($m_id, 1);
             if (empty($price_info['item_price'])) {
                 $this->throw_error('130001');
                 # 商城没有出售该道具
             }
             # 策划价格配置多项时,选其中一项
             list($cur_idx, $cur_val) = each($price_info['item_price']);
             $price = $cur_val;
             $cost_currency_key = Cache_Currency::getInstance()->get_key($cur_idx);
             $cost_currency_value = intval($cur_val * ($m_amount - $hold_num));
             $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', $cost_currency_key, $cost_currency_value, 1, $cur_idx);
             if ($hold_num > 0) {
                 # 该方法在道具不足时会报错,无需外层再判断是否道具足够
                 $re = $this->get_game('Prop')->deduct_prop_by_prop_id($player_id, $m_id, $material_hold_nums[$m_id], $arr_logs, 0, $log_param);
                 $this->write_check($re, 3010156);
             }
             # 若有购买缺少材料,记录虚假商城购买日志
             if ($cost_currency_value > 0) {
                 $this->get_game('Shop')->add_dummy_shop_log($player_id, $player_info, $m_id, intval($m_amount - $hold_num), $cur_idx, $cost_currency_value, 2202);
             }
         } else {
             # 可能单次,可能一键
             # 该方法在道具不足时会报错,无需外层再判断是否道具足够
             $re = $this->get_game('Prop')->deduct_prop_by_prop_id($player_id, $m_id, $m_amount * $onekey_num, $arr_logs, 0, $log_param);
             $this->write_check($re, 3010161);
         }
     }
     # TODO: 数据中心推送
     $re = $this->get_data('Player')->update_player_resource($player_id, $player_info, '2202');
     $this->write_check($re, 3010167);
     #---------------------------------------------------------------------
     # 按概率计算成功次数
     #---------------------------------------------------------------------
     $success_num = 0;
     for ($i = 1; $i <= $onekey_num; $i++) {
         if (Com_Random::probability($comp_info['succ_rate'], 10000)) {
             # 成功
             $success_num += 1;
         }
     }
     if ($success_num) {
         # 成功
         # 发送道具
         $reward[] = array('type' => 'prop', 'item_id' => $target_id, 'item_num' => $success_num);
         $re = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => 2202));
         #send_reward失败时,会返回各种失败情况的错误码
         $this->write_check_strict($re, 3010173);
     }
     # 记录合成日志
     $this->commit();
     # --------------------------------------------------------------------
     # 通知道具变更,粘包806
     # --------------------------------------------------------------------
     $this->get_game('Reward')->add_reward_log();
     # 调用add_reward_log,触发806协议通知道具变更,并记录道具获取日志
     if (!empty($arr_logs) && is_array($arr_logs)) {
         $ndata = array();
         foreach ($arr_logs as $key => $val) {
             $ndata[] = $val;
         }
         Protocol_Prop::prop_806($player_id, $ndata);
     }
     # --------------------------------------------------------------------
     # 刷新2201协议
     # --------------------------------------------------------------------
     $data_2201 = $this->get_compose_info($player_id, $comp_type, $comp_sub_type);
     Protocol::input($player_id, 3, 22, 2201, $data_2201);
     # 记录行为
     Com_Log::write('xgame.compose', "{$player_id}\t" . "{$target_id}\t" . "{$auto_buy}\t" . "{$onekey}\t" . "{$onekey_num}\t" . "{$success_num}\t");
     # 日常任务埋点,宝石合成才触发,考虑宝石种类可能包含多种,不方便使用$arr_logs[0]['type'] == 3 && $arr_logs[0]['sub_type'] == 6类似条件
     #if ($comp_type == $this->comp_type_for_gem) { # 改为任意合成都算
     $this->get_game('TaskTrigger')->async_trigger_task($player_id, 109, 109, $onekey_num);
     #}
     #引导任务
     $this->get_game('TaskTrigger')->async_trigger_guide_task($player_id, 12, $onekey_num);
     # --------------------------------------------------------------------
     # 公告
     # --------------------------------------------------------------------
     $replace_info = array(array('rep_type' => 0, 'rep_val' => $player_id), array('rep_type' => 1, 'rep_val' => 70), array('rep_type' => 2, 'rep_val' => $target_id));
     $prop_info = Cache_Prop::getInstance()->get_prop_info($target_id);
     $this->get_game('SystemNotice')->push_sys_notice($player_id, 70, 0, $replace_info, 0, $prop_info['need_broad_cast']);
     $out_2202 = array('result' => 1);
     return $out_2202;
 }
コード例 #26
0
ファイル: Event.php プロジェクト: bluefan/phpsource
 public function get_event_reward($player_id, $event_id, $reward_id, $event_template)
 {
     $this->param_check_numeric(array($player_id, $event_id, $reward_id));
     # 加锁失败
     if (!Com_Lock::lock("lock|get_event_reward|player_id={$player_id}")) {
         $this->throw_error('170501');
         # 系统繁忙
     }
     $player_info = $this->get_data('Player')->get_player_info($player_id, Com_Util::get_player_fields(array('currency', 'level', 'vip', 'privilege_level', 'map_id')));
     if ($player_info['map_id'] == 2100) {
         $this->throw_error('12012');
         # 请在完成序章后领取
     }
     # 获取活动配置
     $event_info = $this->get_data('Event')->get_event_info($event_id);
     if (empty($event_info) || empty($event_info['event_reward_info'])) {
         $this->throw_error('12004');
         # 无效的活动,未找到活动配置信息
     }
     $reward_id_array = explode(':', $event_info['event_reward_info']);
     if (!in_array($reward_id, $reward_id_array)) {
         $this->throw_error('12006');
         # 无效的奖励,未找到活动奖励配置信息
     }
     # NOTE: 因为允许在活动结束后领奖,所以领奖时不用活动开启时间段[open_date_head,open_date_tail]做检测
     if ($event_info['reward_date_head'] > $this->current_time || $event_info['reward_date_tail'] < $this->current_time) {
         $this->throw_error('12005');
         # 未到或已超过活动奖励领取时间
     }
     # 获取奖励配置
     $reward_info = $this->get_data('Event')->get_reward_info($reward_id);
     if (empty($reward_info) || empty($reward_info['cond_func'])) {
         $this->throw_error('12006');
         # 无效的奖励,未找到活动奖励配置信息
     }
     if (!empty($reward_info['valid_date_head']) || !empty($reward_info['valid_date_tail'])) {
         if ($reward_info['valid_date_head'] > $this->current_time || $reward_info['valid_date_tail'] < $this->current_time) {
             $this->throw_error('12007');
             # 未到或已超过活动奖励有效时间
         }
     }
     /**
     		# --------------------------------------------------------------------
     		# 活动领奖周期内的领奖次数上限判断
     		# --------------------------------------------------------------------
     		if (!empty($event_info['event_reward_stint']) && !empty($event_info['event_reward_cycle'])) {
     			# 向上取整获取最大领奖期数
     			$max_cycle = ceil(($event_info['reward_date_tail'] - $event_info['reward_date_head']) / $event_info['event_reward_cycle']);
     			for($i = 1; $i <= $max_cycle; $i++) {
     				$cycle_head = $event_info['reward_date_head'] + $event_info['event_reward_cycle'] * ($i - 1); 	# 领奖周期首部时间
     				$cycle_tail = $event_info['reward_date_head'] + $event_info['event_reward_cycle'] * $i - 1;		# 领奖周期尾部时间,减一是为了相邻两个区间没有交集
     				if ($this->current_time < $cycle_head || $this->current_time > $cycle_tail) { # 当前时间不在该领奖周期内
     					continue; 
     				} else {
     					# 获取该周期内的领奖次数
     					list($reward_record, $reward_record_count) = $this->get_data('Event')->get_event_reward_record_part($player_id, $event_id, $cycle_head, $cycle_tail);
     					if ($reward_record_count >= $event_info['event_reward_stint']) {
     						$this->throw_error('12008'); # 已达到活动领奖周期内的领取次数上限
     					}
     					break;
     				}
     			}
     		}
     
     		# --------------------------------------------------------------------
     		# 奖励领奖周期内的领奖次数上限判断,NOTO:没有考虑循环奖励的领取上限不仅由reward_gain_stint决定,还由循环达成数loop_num决定
     		# --------------------------------------------------------------------
     		if (!empty($reward_info['reward_gain_stint']) && !empty($reward_info['reward_gain_cycle'])) {
     			# 向上取整获取最大领奖期数
     			$max_cycle = ceil(($event_info['reward_date_tail'] - $event_info['reward_date_head']) / $reward_info['reward_gain_cycle']);
     			for($i = 1; $i <= $max_cycle; $i++) {
     				$cycle_head = $event_info['reward_date_head'] + $reward_info['reward_gain_cycle'] * ($i - 1); 	# 领奖周期首部时间
     				$cycle_tail = $event_info['reward_date_head'] + $reward_info['reward_gain_cycle'] * $i - 1;		# 领奖周期尾部时间,减一是为了相邻两个区间没有交集
     				if ($this->current_time < $cycle_head || $this->current_time > $cycle_tail) { # 当前时间不在该领奖周期内
     					continue; 
     				} else {
     					# 获取该周期内的领奖次数
     					list($reward_record, $reward_record_count) = $this->get_data('Event')->exactly_get_event_reward_record_part($player_id, $event_id, $reward_id, $cycle_head, $cycle_tail);
     					if ($reward_record_count >= $reward_info['reward_gain_stint']) {
     						$this->throw_error('12009'); # 已达到奖励领奖周期内的领取次数上限
     					}
     					break;
     				}
     			}
     		}
     		**/
     # 进度计算
     $sys_params = array('event_id' => $event_info['event_id'], 'announce_date_head' => $event_info['announce_date_head'], 'announce_date_tail' => $event_info['announce_date_tail'], 'open_date_head' => $event_info['open_date_head'], 'open_date_tail' => $event_info['open_date_tail'], 'reward_id' => $reward_info['reward_id'], 'reward_type' => $reward_info['reward_type'], 'reward_billing_cycle' => $reward_info['reward_billing_cycle']);
     $ret = $this->call_cond_func($player_id, $reward_info['cond_func'], $reward_info['cond_func_relation'], $sys_params);
     # 剩余领奖次数计算
     list($real_remain_gain_num, $reward_remain_gain_num, $config_gain_stint) = $this->_cal_reward_remain_gain_num($player_id, $event_info, $reward_info, $ret);
     if (empty($real_remain_gain_num)) {
         $this->throw_error('12009');
         # 已达到奖励领奖周期内的领取次数上限
     }
     # --------------------------------------------------------------------
     # 奖励达成条件判断
     # --------------------------------------------------------------------
     # 进度计算
     $sys_params = array('event_id' => $event_info['event_id'], 'announce_date_head' => $event_info['announce_date_head'], 'announce_date_tail' => $event_info['announce_date_tail'], 'open_date_head' => $event_info['open_date_head'], 'open_date_tail' => $event_info['open_date_tail'], 'reward_id' => $reward_info['reward_id'], 'reward_type' => $reward_info['reward_type'], 'reward_billing_cycle' => $reward_info['reward_billing_cycle']);
     $ret = $this->call_cond_func($player_id, $reward_info['cond_func'], $reward_info['cond_func_relation'], $sys_params);
     if (empty($ret['status'])) {
         $this->throw_error('12010');
         # 未达到奖励的领取条件
     }
     # --------------------------------------------------------------------
     # 发奖 + 消耗道具 + 并刷新奖励信息
     # --------------------------------------------------------------------
     $this->start_trans();
     # 消耗道具
     if (!empty($reward_info['consume_info'])) {
         $consume_currency = false;
         $arr_logs_consume = array();
         $reward_item_info_arr = explode("|", $reward_info['consume_info']);
         $log_param = array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'privilege_level' => $player_info['privilege_level'], 'cmd_id' => 2304);
         foreach ($reward_item_info_arr as $item_info) {
             list($item_id, $item_num) = explode(":", $item_info);
             $item_key = Cache_PropLoot::getInstance()->get_item_key($item_id);
             if ($item_key == 'prop') {
                 # 消耗道具
                 # deduct_prop_by_prop_id方法中有判断道具是否足够,故外层不判断
                 $re = $this->get_game('Prop')->deduct_prop_by_prop_id($player_id, $item_id, $item_num, $arr_logs_consume, 0, $log_param);
                 $this->write_check($re, 3010311);
             } else {
                 # 消耗资源
                 $arr_consume = Com_Util::get_consume_info_for_data_center($player_info, $item_key, $item_num);
                 $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', $item_key, $item_num, 1, $item_id);
                 $consume_currency = true;
             }
         }
         if ($consume_currency) {
             $re = $this->get_data('Player')->update_player_resource($player_id, $player_info, '2304', array(), $arr_consume);
             $this->write_check($re, 3010332);
         }
     }
     # 奖励道具
     $reward = array();
     $reward_detail = array();
     if (!empty($reward_info['reward_info'])) {
         $reward_item_info_arr = explode("|", $reward_info['reward_info']);
         foreach ($reward_item_info_arr as $item_info) {
             list($item_id, $item_num, $item_tag) = explode(":", $item_info);
             $reward_detail[$item_id] = $item_num;
         }
     }
     $this->get_game('Reward')->gen_reward_array($reward_detail, $reward);
     $re = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => '2304', 'bind_flag' => 0));
     $this->write_check_strict($re, 3010347);
     # 记录奖励领取日志
     $re = $this->get_data('Event')->record_player_event_reward($player_id, $event_id, $reward_id, $this->current_time);
     $this->write_check($re, 3010351);
     $this->commit();
     # 蛋疼的次数同步埋点
     if ($event_template == 2) {
         # 充值回馈需要同步次数变更
         $this->get_game('PlayerFunc')->sync_func_tips($player_id, 1260);
     }
     # 粘806 + 通知道具变更信息
     $ndata = array();
     if (!empty($arr_logs_consume)) {
         foreach ($arr_logs_consume as $k => $v) {
             # 消耗的道具
             $ndata[] = $v;
         }
         Protocol_Prop::prop_806($player_id, $ndata);
     }
     # 该方法会自动推送843协议告知前端显示奖励信息,会调用prop_806协议通知道具变更,调用p2c_part_update通知人物信息变更
     $ret = $this->get_game('Reward')->add_reward_log(true);
     #-----------------------------------------------------------------
     # 重新获取奖励项列表
     #-----------------------------------------------------------------
     $event_reward_list = array();
     $special_reward_list = array();
     if (!empty($event_info['event_reward_info'])) {
         $reward_id_array = explode(':', $event_info['event_reward_info']);
         #echo "</br>===============".$event_info['event_id']."==================</br>";
         #var_export($reward_id_array);
         $reward_info = $this->get_data('Event')->multi_get_reward_info($reward_id_array);
         #var_export($reward_info);
         # 对奖励列表升序排序
         Com_Array::multisort($reward_info, array('reward_priority' => 'asc'));
         foreach ($reward_info as $reward) {
             #echo "</br>===============reward_id:".$reward['reward_id']."==================</br>";
             # 获取奖励的具体道具列表
             $reward_item_list = array();
             if (!empty($reward['reward_info'])) {
                 $reward_item_info_arr = explode("|", $reward['reward_info']);
                 foreach ($reward_item_info_arr as $item_info) {
                     list($item_id, $item_num, $item_tag) = explode(":", $item_info);
                     $item_config = Cache_Prop::getInstance()->get_prop_info($item_id);
                     $item_config['item_num'] = $item_num;
                     $item_struct = Struct_Prop::get_prop_struct($item_config);
                     $reward_item_list[$item_id] = $item_struct;
                     if ($item_tag == $this->reward_item_tag_for_special) {
                         $special_reward_list[$item_id] = $item_struct;
                     }
                 }
             }
             # 进度计算
             $sys_params = array('event_id' => $event_info['event_id'], 'announce_date_head' => $event_info['announce_date_head'], 'announce_date_tail' => $event_info['announce_date_tail'], 'open_date_head' => $event_info['open_date_head'], 'open_date_tail' => $event_info['open_date_tail'], 'reward_id' => $reward['reward_id'], 'reward_type' => $reward['reward_type'], 'reward_billing_cycle' => $reward['reward_billing_cycle']);
             $ret = $this->call_cond_func($player_id, $reward['cond_func'], $reward['cond_func_relation'], $sys_params);
             # 剩余领奖次数计算
             list($real_remain_gain_num, $reward_remain_gain_num, $config_gain_stint) = $this->_cal_reward_remain_gain_num($player_id, $event_info, $reward, $ret);
             # 领奖状态判定
             if ($event_info['reward_date_head'] > $this->current_time || $event_info['reward_date_tail'] < $this->current_time) {
                 $reward_status = 0;
                 # 未到或已超过活动奖励领取时间
             } elseif ((!empty($reward['valid_date_head']) || !empty($reward['valid_date_tail'])) && ($reward['valid_date_head'] > $this->current_time || $reward['valid_date_tail'] < $this->current_time)) {
                 $reward_status = 0;
                 # 未到或已超过活动奖励有效时间
             } elseif (empty($real_remain_gain_num)) {
                 # 用实际剩余领奖次数判断领奖状态
                 $reward_status = 0;
             } else {
                 $reward_status = $ret['status'];
             }
             # 可领奖总数计算
             if ($reward_status) {
                 $can_receive_reward_num += 1;
             }
             $event_reward_list[] = array('reward_id' => $reward['reward_id'], 'reward_cond' => $reward['cond_desc'], 'reward_item_list' => $reward_item_list, 'reward_progress_head' => $ret['progress_head'], 'reward_progress_tail' => $ret['progress_tail'], 'reward_remain_gain_num' => $reward_remain_gain_num, 'reward_status' => $reward_status, 'reward_type' => $reward['reward_type'], 'consume_info' => $reward['consume_info'], 'reward_gain_stint' => $config_gain_stint);
         }
     }
     $out_2304 = array('event_tag' => $event_info['event_tag'], 'event_id' => $event_id, 'event_reward_list' => $event_reward_list, 'event_template' => $event_template);
     # 记录行为
     Com_Log::write('xgame.event', "{$player_id}\t" . "get_event_reward\t" . "{$event_id}\t" . "{$reward_id}\t");
     return $out_2304;
 }
コード例 #27
0
 /**
  * 格式化奖励
  * @param string $reward
  * @param int $career_type career_type
  * @return array
  */
 protected function format_reward($reward, $career_type = 0)
 {
     if (empty($reward)) {
         return array();
     }
     $arr = explode("|", $reward);
     $props = array();
     if ($arr) {
         foreach ($arr as $val) {
             $prop = explode(":", $val);
             if ($career_type && isset($prop[2]) && $prop[2] && $career_type != $prop[2]) {
                 continue;
             }
             $prop_info = Cache_Prop::getInstance()->get_prop_info($prop[0]);
             $prop_info['item_num'] = $prop[1];
             $props[] = Struct_Prop::get_prop_struct($prop_info);
             //$props[] = $prop[0];
         }
     }
     return $props;
 }
コード例 #28
0
ファイル: Prop.php プロジェクト: bluefan/phpsource
 /**
  * 发新道具的接口  如果道具叠加 可以吧道具拆多个发 给send_prop_auto_overlay方法调用
  * @param $player_id
  * @param $prop_id
  * @param $prop_num
  * @param $arrLogs 返回 道具日志
  * @param null $arrPropConfig  道具配置信息
  * @param null $channel 0包裹满不发邮件 1 包裹满发邮件
  * @return bool|string
  */
 protected function send_prop_to_player($player_id, $prop_id, $prop_num, &$arrLogs, $cmd_id, $arrPropConfig = null, $channel = 0, $player_info = null)
 {
     if (!$arrPropConfig) {
         $arrPropConfig = Cache_Prop::getInstance()->get_prop_info($prop_id);
     }
     if (!$arrPropConfig) {
         # 对于偶发性的奖励发送报道具配置出错问题添加调试日志
         //			Com_Log::write('xgame.debug', "Error occured in " . __CLASS__ . ":\t$player_id\t$prop_id\t$prop_num\t".json_encode($arrPropConfig));
         $this->throw_error('80003', '101800248');
         //道具配置出错,请联系客服!
     }
     if ($arrPropConfig['max_lap_num'] > 0) {
         $new_num = ceil($prop_num / $arrPropConfig['max_lap_num']);
         $rest_prop_num = $prop_num;
         $bag_pos = $this->get_empty_pos($player_id, $new_num, 1, $player_info);
         //            Com_Log::log($bag_pos,"pos.log",1);
         if (!$bag_pos) {
             if ($channel == 1) {
                 $phrase_id = 100000 + $cmd_id;
                 $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id);
                 if (empty($phrase_config)) {
                     $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(1);
                 }
                 $attachment = array();
                 if ($arrPropConfig['type'] == 1) {
                     if (!isset($arrPropConfig['base_attr'])) {
                         $arrPropConfig = $this->get_equip_attr($arrPropConfig);
                     }
                     #TODO 包裹满的时候装备属性增加到包裹前生产好
                     $attachment[] = array('prop_id' => $prop_id, 'prop_num' => $prop_num, 'config' => $arrPropConfig);
                 } else {
                     $attachment[] = array('prop_id' => $prop_id, 'prop_num' => $prop_num);
                 }
                 $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, $cmd_id);
                 //	                $this->throw_error("80034");//包裹已满,已发送到邮件!
                 $arrPropConfig["item_num"] = $prop_num;
                 $arrPropConfig['send_mail'] = 1;
                 $arrLogs[] = $arrPropConfig;
                 return true;
             } else {
                 $this->throw_error("80001");
                 //包裹已满!
             }
         }
         for ($i = 0; $i < $new_num; $i++) {
             $arrPropConfig['level'] = $arrPropConfig['level'];
             $arrPropConfig['bind_flag'] = $arrPropConfig['bind_flag'];
             $arrPropConfig['grid'] = $bag_pos[$i];
             $arrPropConfig['item_position'] = 1;
             $arrPropConfig['from_item_position'] = 0;
             $old_item_num = $arrPropConfig["item_num"];
             $arrPropConfig["item_num"] = $rest_prop_num > $arrPropConfig['max_lap_num'] ? $arrPropConfig['max_lap_num'] : $rest_prop_num;
             $rest_prop_num = $rest_prop_num - $arrPropConfig["item_num"];
             $res = $this->add_player_prop($player_id, $arrPropConfig, $cmd_id);
             if (!$res) {
                 $this->throw_error('80002');
             }
             //                $arrPropConfig['star_level'] = $res["star_level"];
             //                $arrTempLogs = array_merge($arrPropConfig,$res);
             //                $arrPropConfig['player_prop_id'] = $res['player_prop_id'];
             //                $arrPropConfig['prop_id'] = $res['sid'];
             //                $arrPropConfig['item_num'] = $res["item_num"];
             //                $arrPropConfig['star_level'] = $res["star_level"];
             //                $arrPropConfig['base_attr'] = $res["base_attr"];
             //                $arrPropConfig['addition_attr'] = $res["addition_attr"];
             //                $arrPropConfig['equip_view'] = $res["equip_view"];
             $arrLogs[] = $res;
             unset($arrTempLogs);
         }
     } else {
         $bag_pos = $this->get_empty_pos($player_id, $prop_num, 1, $player_info);
         //            Com_Log::log($bag_pos,"pos.log",1);
         if (!$bag_pos) {
             if ($channel == 1) {
                 $phrase_id = 100000 + $cmd_id;
                 $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id);
                 if (empty($phrase_config)) {
                     $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(1);
                 }
                 $attachment = array();
                 if ($arrPropConfig['type'] == 1) {
                     if (!isset($arrPropConfig['base_attr'])) {
                         $arrPropConfig = $this->get_equip_attr($arrPropConfig);
                     }
                     #TODO 包裹满的时候装备属性增加到包裹前生产好
                     $attachment[] = array('prop_id' => $prop_id, 'prop_num' => $prop_num, 'config' => $arrPropConfig);
                 } else {
                     $attachment[] = array('prop_id' => $prop_id, 'prop_num' => $prop_num);
                 }
                 $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, $cmd_id);
                 //	            	$this->throw_error("80034");//包裹已满,已发送到邮件!
                 $arrPropConfig["item_num"] = $prop_num;
                 $arrPropConfig['send_mail'] = 1;
                 $arrLogs[] = $arrPropConfig;
                 return true;
             } else {
                 $this->throw_error("80001");
                 //包裹已满!
             }
         }
         for ($i = 0; $i < $prop_num; $i++) {
             $arrPropConfig['level'] = $arrPropConfig['level'];
             $arrPropConfig['bind_flag'] = $arrPropConfig['bind_flag'];
             $arrPropConfig['grid'] = $bag_pos[$i];
             $arrPropConfig['item_position'] = 1;
             $arrPropConfig["item_num"] = 1;
             $res = $this->add_player_prop($player_id, $arrPropConfig, $cmd_id, $player_info);
             if (!$res) {
                 $this->throw_error('80002');
             }
             //                $arrPropConfig['star_level'] = $res["star_level"];
             //                $arrTempLogs = array_merge($arrPropConfig,$res);
             $arrLogs[] = $res;
         }
     }
     return true;
 }
コード例 #29
0
ファイル: PlayerBag.php プロジェクト: bluefan/phpsource
 /**
  * 一键出售道具
  * @param $player_id
  * @return array
  * @throws Exception]
  */
 public function batch_sell_prop($player_id)
 {
     $sell_id = array();
     $objPlayerPropData = $this->get_data('PlayerProp');
     $prop_list = $objPlayerPropData->get_player_prop_by_item_position($player_id);
     //冲从包裹取出道具
     if ($prop_list) {
         $props = array();
         foreach ($prop_list as $prop) {
             $props[] = $prop['prop_id'];
         }
         $prop_configs = Cache_Prop::getInstance()->get_prop_info($props);
         foreach ($prop_list as $key => $prop) {
             if ($prop_configs[$prop['prop_id']]['type'] == 3 && $prop_configs[$prop['prop_id']]['sub_type'] == 21 && $prop_configs[$prop['prop_id']]['quality'] <= 4) {
                 $sell_id[$prop['player_prop_id']] = $prop;
             } elseif ($prop_configs[$prop['prop_id']]['type'] == 1 && $prop_configs[$prop['prop_id']]['sub_type'] <= 12 && $prop_configs[$prop['prop_id']]['quality'] <= 2) {
                 $sell_id[$prop['player_prop_id']] = $prop;
             }
         }
     }
     if ($sell_id) {
         $get_silver = 0;
         foreach ($sell_id as $prop) {
             if ($prop_configs[$prop['prop_id']]['sale_price'] > 0) {
                 $get_silver += $prop_configs[$prop['prop_id']]['sale_price'] * $prop['item_num'];
             }
         }
         if ($get_silver) {
             $player_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'vip', 'silver', 'privilege_level'));
             $this->get_data('Player')->check_player_resource($player_id, $player_info, "+", 'silver', $get_silver);
             $result = true;
             $objPlayerPropData->start_watch($player_id);
             $this->start_trans();
             $log_param = array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'cmd_id' => 804);
             foreach ($sell_id as $player_prop_id => $val) {
                 $result = $objPlayerPropData->update_prop_num($player_id, $val, $val['item_num'], "-", $log_param);
                 $sell_id[$player_prop_id] = 0;
                 if (!$result) {
                     $this->throw_error(80003, '10180062601');
                 }
             }
             if ($result) {
                 $result = $this->get_data('Player')->update_player_resource($player_id, $player_info, 804);
             }
             if ($result) {
                 Com_AdCache::set_pipe(false);
                 $this->commit();
                 $out['result'] = 1;
                 $out['item'] = array('pos' => 1, 'index' => array());
                 $asyData = array();
                 foreach ($sell_id as $arr_prop_detail) {
                     $out['item']['index'][] = $arr_prop_detail['grid'];
                 }
                 $out['silver'] = Cache_Currency::getInstance()->get_index('silver') . ":" . $get_silver;
                 Protocol_Prop::prop_806($player_id, $sell_id);
                 return $out;
             }
         }
     }
     return array('result' => 1, array());
 }
コード例 #30
0
ファイル: CzReward.php プロジェクト: bluefan/phpsource
 private function get_list_for_time($time, $job_id)
 {
     $list = Cache_CzReward::getInstance()->get_reward_set();
     if (empty($list)) {
         $this->throw_error('10222', 2010026);
     }
     $res = array();
     foreach ($list as $v) {
         if ($v['date_type'] == $time) {
             $temp = array();
             if ($v['job_id'] == 1) {
                 $items = explode('|', $v['item_id']);
                 if (count($items) < 4) {
                     $this->throw_error(10222, 2010027);
                 }
                 if ($job_id > count($items)) {
                     $job_id = count($items);
                 }
                 $temp['item_id'] = $items[$job_id - 1];
             } else {
                 $temp['item_id'] = intval($v['item_id']);
             }
             $value = array();
             $value['sid'] = $v['sid'];
             if ($v['item_type'] == 1) {
                 $item_a = Cache_Prop::getInstance()->get_prop_info($temp['item_id']);
                 $value['attrs'] = Struct_Prop::get_prop_struct($item_a);
                 $value['item_id'] = $temp['item_id'];
                 $value['item_num'] = $v['item_num'];
                 $value['item_type'] = $v['item_type'];
                 $res[] = $value;
             } elseif ($v['item_type'] == 2) {
                 #翅膀
                 $value['attrs'] = array();
                 $value['item_id'] = $temp['item_id'];
                 $value['item_num'] = $v['item_num'];
                 $value['item_type'] = $v['item_type'];
                 $res[] = $value;
             } elseif ($v['item_type'] == 3) {
                 #时装
                 $fashion = Cache_Fashion::getInstance()->get_fashion($temp['item_id']);
                 if (empty($fashion)) {
                     $this->throw_error(10222, 2010025);
                 }
                 $value['attrs'] = $this->get_game('PlayerFashion')->get_fashion_data($fashion, 0);
                 $value['item_id'] = $temp['item_id'];
                 $value['item_num'] = $v['item_num'];
                 $value['item_type'] = $v['item_type'];
                 $res[] = $value;
             }
         }
     }
     return $res;
 }