Ejemplo n.º 1
0
 public static function out($func_id = 0)
 {
     if (!empty(self::$_reward)) {
         foreach (self::$_reward as $player_id => $reward) {
             $out = array('type' => 1, 'reward' => array());
             foreach ($reward as $r) {
                 if (isset($r['overlay_num']) && $r['overlay_num'] > 0) {
                     $r['item_num'] = $r['overlay_num'];
                 }
                 $out['reward'][] = Struct_Prop::get_prop_struct($r);
             }
             $out['func_id'] = $func_id;
             Protocol::input($player_id, 8, 7, 843, $out);
         }
         self::$_reward = null;
     }
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
 /**
  * 获取道具tips
  * @param $player_id
  * @param $player_prop_id
  * @param $item_id
  * @param $item_num
  * @return array
  */
 public function get_prop_tips($player_id, $params)
 {
     $out = array();
     if ($params) {
         foreach ($params as $val) {
             if (!empty($val[0])) {
                 $player_prop_info = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $val[0]);
             } else {
                 $player_prop_info = Cache_Prop::getInstance()->get_prop_info($val[1]);
                 $player_prop_info['item_num'] = $val[2];
             }
             $out[] = Struct_Prop::get_prop_struct($player_prop_info);
         }
     }
     return array(0 => $out);
 }
Ejemplo n.º 4
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;
 }
Ejemplo n.º 5
0
 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;
 }
Ejemplo n.º 6
0
 public function reset_reward($reward, $prop, $player_id)
 {
     if (!empty($reward)) {
         Com_Array::multisort($reward, array('item_id' => 'asc'));
         if (!empty($prop)) {
             foreach ($reward as &$v) {
                 if (isset($v['prop_config'])) {
                     unset($v['prop_config']);
                 }
                 if ($v['item_id'] > 100) {
                     foreach ($prop as $pv) {
                         if ($pv['prop_id'] == $v['item_id']) {
                             if (isset($pv['overlay_num'])) {
                                 $pv['item_num'] = $pv['overlay_num'];
                             }
                             $v['attrs'] = Struct_Prop::get_prop_struct($pv);
                             $arr_replace = array();
                             $arr_replace[] = array('rep_type' => 0, 'rep_val' => $player_id);
                             $arr_replace[] = array('rep_type' => 1, 'rep_val' => 1030);
                             $arr_replace[] = array('rep_type' => 2, 'rep_val' => $v['item_id']);
                             $need_b = Cache_Prop::getInstance()->get_prop_info($v['item_id']);
                             $this->get_game('SystemNotice')->push_sys_notice($player_id, 1030, 0, $arr_replace, 0, $need_b['need_broad_cast']);
                         }
                     }
                 } else {
                     $v['attrs'] = array();
                 }
             }
         } else {
             foreach ($reward as &$v) {
                 $v['attrs'] = array();
             }
         }
     }
     return $reward;
 }
Ejemplo n.º 7
0
 /**
  * @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;
 }
Ejemplo n.º 8
0
 public function wing_equip_swallow($type, $player_id, $player_prop_id, $swallow_equips, $onekey = 0)
 {
     $this->get_game('PlayerFunc')->get_func_is_open($player_id, $this->func_id);
     $this->param_check_numeric(array($type, $player_id), 0);
     if (empty($swallow_equips)) {
         $this->throw_error('10107');
     }
     # 参数错误
     $player_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'vip', 'career_type'));
     $player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id, Protocol_Player::get_player_attr_detail_key());
     # 1515展示协议返回数据,1515协议需要写死传回已配置的所有吞噬属性,即便当前道具尚未有激活任意项吞噬属性,也需要用初始值填充
     $out_1515 = array('player_ppid' => $player_prop_id, 'swallow_ppids' => $swallow_equips, 'item_struct' => array());
     $swallow_equips = explode(':', $swallow_equips);
     $swallow_equips = array_filter($swallow_equips);
     $player_prop_info = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $player_prop_id);
     $before_player_prop_info = $player_prop_info;
     if (empty($player_prop_info)) {
         $this->throw_error('80013');
         //玩家没有该装备!
     }
     if (Com_Util::is_first_charge_item($player_prop_info['prop_id'])) {
         if (!empty($type)) {
             # 实际吞噬
             $this->throw_error('81106');
             # 首充装备不允许吞噬
         } else {
             $message = array('texts' => array(array('code' => 81106, 'content' => array(), 'params' => array())), 'delay' => 0);
             Protocol::input($player_id, 3, 7, 742, $message);
             # 首充装备不允许吞噬
             $out_1515['swallow_ppids'] = "";
             return $out_1515;
         }
     }
     # 计算吞噬属性最大等级
     $swallow_lv_max = $this->get_we_swallow_lv_max($player_prop_info['vocation_limit'], $player_detail);
     $swallow_config_max = Cache_Forge::getInstance()->get_we_swallow_config_by_lv($swallow_lv_max);
     if (empty($swallow_config_max)) {
         $this->throw_error('80047');
         # 未找到翅膀装备吞噬配置信息
     }
     $player_prop_details = $this->get_data('PlayerProp')->get_player_prop_detail_multi($player_id, $swallow_equips);
     if (empty($player_prop_details)) {
         $this->throw_error('80024');
         //未选择有效的被吞噬装备
     }
     # 被吞噬装备信息
     $before_swallow_info = empty($player_prop_info['we_swallow_info']) ? array() : $player_prop_info['we_swallow_info'];
     $player_prop_id_slave = "";
     $item_id_slave = "";
     $onekey_prop_list = array();
     # 保存允许一键吞噬的装备ID列表
     foreach ($swallow_equips as $pprop_id) {
         if (!empty($type)) {
             # 实际吞噬
             if (empty($player_prop_details[$pprop_id])) {
                 $this->throw_error('80013');
                 # 玩家没有该装备!
             }
             if (Com_Util::is_first_charge_item($player_prop_details[$pprop_id]['prop_id'])) {
                 $this->throw_error('81107');
                 # 首充装备不允许被吞噬
             }
             if ($player_prop_details[$pprop_id]['quality'] < $this->min_swallow_quality) {
                 $this->throw_error('80044');
                 # 装备品质未达到被吞噬要求
             }
             if (isset($player_prop_info['we_swallow_info']['swallow_exp']) && $player_prop_info['we_swallow_info']['swallow_exp'] >= $swallow_config_max['swallow_exp'] - 1) {
                 $this->throw_error('80045');
                 # 装备已达到最大吞噬等级
             }
         } else {
             # 非实际吞噬
             if (!empty($onekey)) {
                 # 一键勾选
                 if (empty($player_prop_details[$pprop_id])) {
                     continue;
                 }
                 if (Com_Util::is_first_charge_item($player_prop_details[$pprop_id]['prop_id'])) {
                     continue;
                 }
                 if ($player_prop_details[$pprop_id]['quality'] < $this->min_swallow_quality) {
                     continue;
                 }
                 if (isset($player_prop_info['we_swallow_info']['swallow_exp']) && $player_prop_info['we_swallow_info']['swallow_exp'] >= $swallow_config_max['swallow_exp'] - 1) {
                     continue;
                 }
             } else {
                 # 单项勾选,单次勾选获取吞噬信息需要弹提示属性满的消息,但不能阻断程序执行,只能跳出循环
                 if (empty($player_prop_details[$pprop_id])) {
                     $message = array('texts' => array(array('code' => 80013, 'content' => array(), 'params' => array())), 'delay' => 0);
                     Protocol::input($player_id, 3, 7, 742, $message);
                     # 玩家没有该装备!
                     break;
                 }
                 if (Com_Util::is_first_charge_item($player_prop_details[$pprop_id]['prop_id'])) {
                     $message = array('texts' => array(array('code' => 81107, 'content' => array(), 'params' => array())), 'delay' => 0);
                     Protocol::input($player_id, 3, 7, 742, $message);
                     # 首充装备不允许被吞噬
                     break;
                 }
                 if ($player_prop_details[$pprop_id]['quality'] < $this->min_swallow_quality) {
                     $message = array('texts' => array(array('code' => 80044, 'content' => array(), 'params' => array())), 'delay' => 0);
                     Protocol::input($player_id, 3, 7, 742, $message);
                     # 装备品质未达到被吞噬要求
                     break;
                 }
                 if (isset($player_prop_info['we_swallow_info']['swallow_exp']) && $player_prop_info['we_swallow_info']['swallow_exp'] >= $swallow_config_max['swallow_exp'] - 1) {
                     $message = array('texts' => array(array('code' => 80045, 'content' => array(), 'params' => array())), 'delay' => 0);
                     Protocol::input($player_id, 3, 7, 742, $message);
                     # 装备已达到最大吞噬等级
                     break;
                 }
             }
         }
         $player_prop_id_slave .= "{$pprop_id}:";
         $item_id_slave .= $player_prop_details[$pprop_id]['prop_id'] . ":";
         $onekey_prop_list[] = $pprop_id;
         # 计算增加属性值 && 修正经验值
         $add_swallow_exp = self::$swallow_quality_to_exp_map[$player_prop_details[$pprop_id]['quality']] * (1 + intval($player_prop_details[$pprop_id]['level'] / 5) / 4);
         if (isset($player_prop_info['we_swallow_info'])) {
             $player_prop_info['we_swallow_info']['swallow_exp'] += $add_swallow_exp;
         } else {
             $player_prop_info['we_swallow_info'] = array('swallow_lv' => 0, 'swallow_exp' => $add_swallow_exp, 'swallow_attr' => array());
         }
     }
     # 根据吞噬属性的exp,刷新吞噬属性的lv
     if (!empty($player_prop_info['we_swallow_info'])) {
         $swallow_config = Cache_Forge::getInstance()->get_we_swallow_config_by_exp($player_prop_info['we_swallow_info']['swallow_exp']);
         if (!empty($swallow_config)) {
             $player_prop_info['we_swallow_info']['swallow_lv'] = min($swallow_config['swallow_lv'], $swallow_lv_max);
             # 根据最大lv,修正经验值
             if ($player_prop_info['we_swallow_info']['swallow_exp'] >= $swallow_config_max['swallow_exp'] - 1) {
                 $player_prop_info['we_swallow_info']['swallow_exp'] = $swallow_config_max['swallow_exp'] - 1;
             }
         } else {
             $this->throw_error('80047');
             # 未找到翅膀装备吞噬配置信息
         }
     }
     # 根据吞噬等级,计算吞噬加成附加属性
     $we_swallow_revise_info = Cache_Forge::getInstance()->get_we_swallow_config_by_lv($player_prop_info['we_swallow_info']['swallow_lv']);
     if (empty($we_swallow_revise_info)) {
         $this->throw_error('80047');
         # 未找到翅膀装备吞噬配置信息
     }
     foreach ($player_prop_info['addition_attr'] as $attr_key => $attr_val) {
         $attr_val = ceil($attr_val * $we_swallow_revise_info['attr_revise_ratio'] / 10000) + $we_swallow_revise_info[$attr_key];
         $player_prop_info['we_swallow_info']['swallow_attr'][$attr_key] = $attr_val;
     }
     if (empty($type)) {
         # 修正被吞噬的装备列表,去除吞噬属性达到上限及之后的其它装备
         $out_1515['swallow_ppids'] = empty($onekey_prop_list) ? "" : implode(":", $onekey_prop_list);
         $out_1515['item_struct'] = Struct_Prop::get_prop_struct($player_prop_info);
         if (empty($out_1515['swallow_ppids']) && !empty($onekey)) {
             # 没有能被吞噬的装备
             $message = array('texts' => array(array('code' => 80046, 'content' => array(), 'params' => array())), 'delay' => 0);
             Protocol::input($player_id, 3, 7, 742, $message);
             # 没有可以被吞噬的装备
         }
         return $out_1515;
     }
     $out_1516 = array(0 => $player_prop_id, 1 => array('item_position' => 1, 'grid_list' => array()));
     $this->start_trans();
     # 更新吞噬信息
     $re = $this->get_data('PlayerProp')->update_player_prop($player_prop_info, array('we_swallow_info' => $player_prop_info['we_swallow_info'], 'we_swallow_version' => $this->we_swallow_version));
     $this->write_check($re, 3010177);
     # 扣除被吞噬装备
     foreach ($player_prop_details as $k => $v) {
         $re = $this->get_data('PlayerProp')->update_prop_num($player_id, $v, 1, '-', array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'cmd_id' => 1516));
         $this->write_check($re, 3010182);
     }
     # 刷新玩家翅膀战力与镶嵌装备的附加属性及战力
     if ($player_prop_info['item_position'] == $this->wing_pos) {
         $wing_attr = $player_detail['wing_info'][$player_prop_info['vocation_limit']];
         # 修正缓存的翅膀装备吞噬信息
         $wing_attr['equipment'][$player_prop_info['sub_type']]['we_swallow_info'] = $player_prop_info['we_swallow_info'];
         $wing_attr['equip_attr'] = $this->get_game('PlayerWing')->get_wing_equip_attr($wing_attr['equipment']);
         # 减去吞噬之前的战力
         Struct_Prop::get_item_additions($before_player_prop_info);
         $wing_attr['fight'] -= $before_player_prop_info['fpower'];
         $wing_attr['equipment_fight'] -= $before_player_prop_info['fpower'];
         if ($wing_attr['fight'] < 0) {
             $wing_attr['fight'] = 0;
         }
         if ($wing_attr['equipment_fight'] < 0) {
             $wing_attr['equipment_fight'] = 0;
         }
         # 加上吞噬之后的战力
         $player_prop_info_cp = $player_prop_info;
         Struct_Prop::get_item_additions($player_prop_info_cp);
         $wing_attr['fight'] += $player_prop_info_cp['fpower'];
         $wing_attr['equipment_fight'] += $player_prop_info_cp['fpower'];
         # 更新wing_info
         $player_detail['wing_info'][$player_prop_info['vocation_limit']] = $wing_attr;
         $re = $this->get_data('PlayerDetail')->update_player_detail($player_id, array('wing_info' => $player_detail['wing_info']));
         $this->write_check($re, 3010242);
         #更新翅膀排行
         if ($player_detail['wing_info'][$player_prop_info['vocation_limit']]['fight'] > 0) {
             $wing_fight = $player_detail['wing_info'][$player_prop_info['vocation_limit']]['fight'];
             $this->get_data('RankList')->update_wing_rank($player_id, $player_prop_info['vocation_limit'], $wing_fight);
         }
     }
     $this->commit();
     # 成就相关埋
     $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_id, 39, $player_prop_info['we_swallow_info']['swallow_lv'], 8);
     # --------------------------------------------------------------------
     # 游戏日志记录
     # --------------------------------------------------------------------
     $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_slave' => rtrim($player_prop_id_slave, ":"), 'item_id_slave' => rtrim($item_id_slave, ":"), 'before_swallow_info' => $before_swallow_info, 'after_swallow_info' => $player_prop_info['we_swallow_info'], 'before_swallow_lv' => empty($before_swallow_info) ? 0 : $before_swallow_info['swallow_lv'], 'after_swallow_lv' => $player_prop_info['we_swallow_info']['swallow_lv'], 'before_swallow_exp' => empty($before_swallow_info) ? 0 : $before_swallow_info['swallow_exp'], 'after_swallow_exp' => $player_prop_info['we_swallow_info']['swallow_exp']);
     Log_Forge::getInstance()->add_log($log_info, 'we_swallow');
     # 通知翅膀属性变更
     if ($player_prop_info['item_position'] == $this->wing_pos) {
         #同步翅膀属性
         $str = $this->get_game('PlayerWing')->get_activation_wing_interface($player_id, $player_detail['wing_info']);
         Protocol_Player::p2c_part_update($player_id, array('had_on_swings' => $str, 'wing' => '', 'attr' => '', 'player_data' => array('player_detail' => $player_detail, 'player' => array('career_type' => $player_info['career_type'], 'level' => $player_info['level']))));
     }
     # 通知道具变更806
     $ndata = array();
     $ndata[] = $player_prop_info;
     foreach ($player_prop_details as $key => &$val) {
         $val['item_num'] -= 1;
         $out_1516[1]['grid_list'][] = $val['grid'];
         $ndata[] = $val;
     }
     Protocol_Prop::prop_806($player_id, $ndata);
     # 刷装备1506[翅膀装备强化面板]与1514[可吞噬道具列表]
     $out_1506 = $this->get_game('PlayerWing')->equipment_intensify_panel($player_id, 4);
     $out_1514 = $this->get_wing_equips_for_swallow($player_id, $player_prop_id);
     Protocol::input($player_id, 3, 15, 1506, $out_1506);
     Protocol::input($player_id, 3, 15, 1514, $out_1514);
     # 记录行为
     Com_Log::write('xgame.forge_we_swallow', "{$player_id}\t" . "we_swallow\t" . "{$type}\t" . "{$player_prop_id}\t" . implode(",", $swallow_equips));
     return $out_1516;
 }
Ejemplo n.º 9
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;
 }
Ejemplo n.º 10
0
 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;
 }
Ejemplo n.º 11
0
 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;
 }
Ejemplo n.º 12
0
 public function get_equip_intensify_info($player_id, $player_prop_id)
 {
     $this->get_game('PlayerFunc')->get_func_is_open($player_id, $this->func_id_intensifier);
     # 参数检查
     $this->param_check_numeric(array($player_id));
     $player_equip_info = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $player_prop_id);
     if (!$player_equip_info) {
         $this->throw_error('80013');
         //玩家没有该装备!
     }
     # 获取强化等级上限
     $intensify_lv_limit = $this->get_intensify_lv_limit_by_item_level($player_equip_info['level']);
     $silver_index = Cache_Currency::getInstance()->get_index('silver');
     # 判断是否满级
     if ($player_equip_info['intensive_level'] >= $intensify_lv_limit) {
         # 取强化配置信息
         $intensify_config = Cache_Forge::getInstance()->get_intensify_info($player_equip_info['intensive_level'], 1);
         $data[] = array('result' => 1, 'item_pid' => $player_prop_id, 'upgrade_item' => array(), 'success_per' => 0, 'success_num' => 0, 'fail_num' => 0, 'expend_prop' => "{$intensify_config['item_id']}:0", 'expend_currency' => "{$silver_index}:0", 'max_intensify_lv' => $intensify_lv_limit);
     } else {
         # 更新装备的强化等级
         $player_equip_info['intensive_level'] += 1;
         # 取强化配置信息
         $intensify_config = Cache_Forge::getInstance()->get_intensify_info($player_equip_info['intensive_level'], 1);
         # 获取最新的星图加成信息与强化属性加成信息
         if ($player_equip_info['star_map_id']) {
             $player_equip_info['star_map_desc'] = $this->get_game('EquipStarMap')->get_latest_starmap_desc($player_equip_info);
         }
         $player_equip_info['intensive_desc'] = Game_EquipIntensifier::get_latest_intensive_desc($player_equip_info, $intensify_config);
         $sure_succeed = $intensify_config['lose_num'] - $player_equip_info['intensive_lose_times'];
         # 剩余必定成功次数
         if ($sure_succeed < 0) {
             $sure_succeed = 0;
         }
         $succeed_probability = $sure_succeed == 0 ? 100 : intval($intensify_config['chance_display'] / 100);
         # 剩余必定成功次数为0时成功率置为100
         if ($sure_succeed > $this->sure_succeed_show_norm) {
             $sure_succeed = 0;
         }
         # 超过标准则不显示强化剩余必定成功次数
         $data[] = array('result' => 0, 'item_pid' => $player_prop_id, 'upgrade_item' => Struct_Prop::get_prop_struct($player_equip_info), 'success_per' => $succeed_probability, 'success_num' => $sure_succeed, 'fail_num' => intval($player_equip_info['intensive_lose_times']), 'expend_prop' => "{$intensify_config['item_id']}:{$intensify_config['item_num']}", 'expend_currency' => "{$silver_index}:{$intensify_config['silver_num']}", 'max_intensify_lv' => $intensify_lv_limit);
     }
     #var_export($data);
     return $data;
 }
Ejemplo n.º 13
0
 public function game_over($world_boss_id, $roles, $roles_dmg, $roles_online, $killer_role_id, $killer_role_name)
 {
     $world_boss_id = intval($world_boss_id);
     $killer_role_id = intval($killer_role_id);
     $baseinfo = $this->get_base_info_id($world_boss_id);
     if (empty($baseinfo)) {
         $this->throw_error('10222', 2010100);
     }
     #配置表错误
     $res = array();
     $reward_result = array();
     if ($killer_role_id > 0) {
         $reward_result['sid'] = 1;
     } else {
         $reward_result['sid'] = 0;
     }
     if ($world_boss_id) {
         $killer_player_info = null;
         $rank_list = Cache_WorldBoss::getInstance()->get_rank_reward();
         $rank_num = count($rank_list);
         #邮件内容
         $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(4000);
         $time = time();
         if (!empty($roles) && !empty($roles_dmg)) {
             $num = count($roles);
             $use_set = Cache_ActivityHall::getInstance()->get_Activity_set(4011);
             #功能按钮开启
             $setting = Cache_WorldBoss::getInstance()->get_worldboss_set();
             $dps_list = Cache_UnionBoss::getInstance()->get_dps_reward();
             if ($killer_role_id) {
                 #结束活动
                 $this->get_data('WorldBoss')->set_game_over();
             }
             for ($i = 0; $i < $num; $i++) {
                 if ($roles[$i] == 0) {
                     continue;
                 }
                 if ($killer_role_id) {
                     #重置挖尸体相关数据
                     $reset_list = array('list' => '', 'sid' => $world_boss_id, 'start_time' => $time, 'list_log' => json_encode(array()));
                     $this->get_data('WorldBoss')->set_boss_reward_list($roles[$i], $reset_list);
                 }
                 $player_info = $this->get_data('Player')->get_player_info($roles[$i], array('player_id', 'privilege_level', 'level', 'vip', 'name', 'gm', 'is_dummy'));
                 #非本服玩家忽略
                 if ($player_info['player_id'] <= 0) {
                     continue;
                 }
                 #更新玩家伤害值,形成排行榜
                 if (!empty($player_info) && ($player_info['gm'] == 0 || $player_info['gm'] == 3) && $player_info['is_dummy'] == 0) {
                     $this->get_data('WorldBoss')->set_harm_list($roles[$i], $roles_dmg[$i]);
                 }
                 #vip特权加成奖励
                 $vip_exp = 0;
                 if ($player_info['privilege_level'] > 0) {
                     $left_cd = $this->get_game('VipSpecial')->get_left_time($roles[$i]);
                     if ($left_cd > 0) {
                         $vip_set = Cache_VipLevelLimit::getInstance()->get_limit_info($player_info['privilege_level'], 10034);
                         if (!empty($vip_set)) {
                             $vip_exp = $vip_set['max_times'];
                         }
                     }
                 }
                 #获取排名奖励
                 $all_reward = $this->get_rank_reward($rank_list, $rank_num, $i, $roles[$i], $player_info, $vip_exp, $baseinfo);
                 if ($roles[$i] == $killer_role_id) {
                     #最后一击奖励走掉落库
                     $killer_player_info = $player_info;
                     $bossreward = explode('|', $baseinfo['boss_reward']);
                     if (!empty($bossreward)) {
                         foreach ($bossreward as $lid) {
                             $temp = Cache_FbLoot::getInstance()->get_loot($lid, $killer_role_id);
                             if (!empty($temp)) {
                                 foreach ($temp as $v) {
                                     if ($v['item_id'] == 3) {
                                         $v['item_num'] = ($vip_exp / 10000 + 1) * $v['item_num'];
                                     }
                                     $all_reward[] = $v;
                                 }
                             }
                         }
                     }
                 }
                 #伤害奖励
                 $dps_rewards = $this->get_dps_reward($baseinfo['dps_reward'], $baseinfo['crystal_reward'], $roles_dmg[$i], $vip_exp, $dps_list);
                 $all_reward[] = $dps_rewards['exp'];
                 $reward_result['rank_num'] = $i + 1;
                 #排名
                 $reward_result['reward_list'] = array();
                 if ($roles_online[$i] == 1) {
                     #在线直接发奖励
                     $result = $this->get_game('Reward')->send_reward($roles[$i], $all_reward, array('cmd_id' => '462', 'bind_flag' => 0), 1);
                     if ($result === true) {
                         $sum_exp = 0;
                         $this->get_game('Reward')->add_reward_log();
                         //记录日志
                         $out_reward_log = $this->get_game('Reward')->get_out_reward();
                         if ($out_reward_log) {
                             #获取修正倍率后的奖励
                             foreach ($out_reward_log as $item_id => $item_num) {
                                 if ($item_id == 1) {
                                     $sum_exp += $item_num;
                                 }
                             }
                             if ($sum_exp > 0) {
                                 $prop_attr = Cache_Prop::getInstance()->get_prop_info(1);
                                 $prop_attr['item_num'] = $sum_exp;
                                 $attr = Struct_Prop::get_prop_struct($prop_attr);
                                 if (!empty($attr)) {
                                     $reward_result['reward_list'][] = $attr;
                                 }
                             }
                         }
                         $prop_logs = $this->get_game('Reward')->get_prop_log();
                         if ($prop_logs) {
                             foreach ($prop_logs as $val) {
                                 if (isset($val['overlay_num'])) {
                                     $val['item_num'] = $val['overlay_num'];
                                 }
                                 $reward_result['reward_list'][] = Struct_Prop::get_prop_struct($val);
                             }
                         }
                     }
                     Protocol::input($roles[$i], 8, 11, 1118, $reward_result);
                 } else {
                     #不在线发邮件
                     if (!empty($phrase_config)) {
                         $content = sprintf($phrase_config['content'], $res['rank_num']);
                         $attachment = array();
                         if (!empty($all_reward)) {
                             foreach ($all_reward as $val_reward) {
                                 $attachment[] = array("prop_id" => $val_reward['item_id'], "prop_num" => $val_reward['item_num']);
                             }
                         }
                         $re = $this->get_game('Mail')->async_trigger_mail($roles[$i], $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 1, 462, 0);
                         $this->write_check($re);
                     }
                 }
                 #-------------------------扣次数-----同步次数给c++---------------------------
                 $this->get_data("PlayerDailyTime")->add_used_time($roles[$i], "world_boss_count");
                 $used = 0 + $this->get_data("PlayerDailyTime")->get_player_used_time($roles[$i], "world_boss_count");
                 if (empty($use_set)) {
                     $left_num = 0;
                 } else {
                     $left_num = $use_set[0]['max_times'] - $used;
                 }
                 if ($left_num < 0) {
                     $left_num = 0;
                 }
                 Protocol_Player::p2c_part_update($roles[$i], array('worldboss_remaining_count' => $left_num));
                 #添加日常任务进度跟踪
                 $this->get_game('TaskTrigger')->async_trigger_task($roles[$i], 104, $world_boss_id, 1);
                 //找回资源埋点
                 $this->get_game('GetBackCurrency')->add_function_day_times($roles[$i], 7);
                 $rank = $i + 1;
                 $this->get_data('GetBackCurrency')->set_player_times($roles[$i], 'world_boss_battle_rank', $rank);
                 #活动日志
                 $_event_log = array('log_type' => 'world_boss', 'player_id' => $roles[$i], 'reg_time' => time(), 'map_id' => $world_boss_id, 'damage' => $roles_dmg[$i], 'rank' => $i + 1);
                 $this->get_game('Event')->async_deal_event_log($_event_log);
                 #添加活跃度
                 $this->get_game('DailyBoon')->async_trigger_daily_boon_task($roles[$i], 3005);
                 if ($killer_role_id) {
                     #通知功能按钮开启
                     $func[0][] = array('operate' => 1, 'func_id' => 1110, 'open' => 1, 'guide' => 0, 'cd' => $setting[0]['corpse_save_time']);
                     Protocol::input($roles[$i], 8, 7, 741, $func);
                 }
                 //添加日志
                 $log_data = array('player_id' => $roles[$i], 'channel' => 62, 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip'], 'add_time' => time(), 'sid' => $world_boss_id, 'role_dmg' => $roles_dmg[$i], 'type' => 1);
                 Log_WorldBoss::getInstance()->add_log($log_data);
             }
         }
         //保存世界boss纪录
         $save_data['sid'] = $world_boss_id;
         $save_data['roles'] = json_encode($roles);
         $save_data['roles_dmp'] = json_encode($roles_dmg);
         $save_data['roles_online'] = json_encode($roles_online);
         $save_data['killer_role_id'] = $killer_role_id;
         if ($killer_role_id) {
             #if(is_null($killer_player_info)){
             #	 $killer_player_info =  $this->get_data('Player')->get_player_info($killer_role_id,array('name'));
             #}
             $save_data['killer_role_name'] = $killer_role_name;
             #$killer_player_info['name'];
             #发广播通知
             $arr_replace = array();
             $arr_replace[] = array('rep_type' => 0, 'rep_val' => $killer_role_id, 'txt' => $killer_role_name);
             $msg = Language_Message::make_message(11018, $arr_replace);
             $this->get_game('SystemNotice')->send_system_msg($killer_role_id, $msg, 1, 6);
             #判断是否开启抢宝箱
             $open_set = Cache_WorldBoss::getInstance()->get_open_boss_set($world_boss_id);
             if (!empty($open_set) && $open_set['treasure_loot_entrance_sid'] > 0) {
                 $arr_replace = array();
                 $arr_replace[] = array('rep_type' => 0, 'rep_val' => $killer_role_id, 'txt' => $killer_role_name);
                 $msg = Language_Message::make_message(11019, $arr_replace);
                 $this->get_game('SystemNotice')->send_system_msg($killer_role_id, $msg, 1, 6);
             }
         } else {
             $save_data['killer_role_name'] = '';
         }
         $this->get_data('WorldBoss')->save_rank_log($save_data, $world_boss_id);
     } else {
         #参数错误
         $this->throw_error('10107', 2010101);
     }
 }
Ejemplo n.º 14
0
 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;
     }
 }
Ejemplo n.º 15
0
 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;
     }
 }
Ejemplo n.º 16
0
 public function get_sell_panel($player_id)
 {
     $auction_data = $this->get_data('Auction')->get_player_sell_list($player_id);
     $data = array();
     if ($auction_data) {
         foreach ($auction_data as $val) {
             $s_time = $this->_past_due - (time() - $val['add_time']);
             $prop = json_decode($val['prop_info'], true);
             $data[] = array('auction_id' => $val['auction_id'], 'prop' => Struct_Prop::get_prop_struct($prop), 'time' => $s_time < 0 ? 0 : $s_time, 'sell_price' => $val['sell_price'] / $prop['item_num']);
         }
     }
     return array(0 => $data);
 }
Ejemplo n.º 17
0
 /**
  * 获取邮件详细信息
  * @param $player_id
  * @param $mail_id
  * @return null|array
  */
 public function get_mail_detail_info($player_id, $mail_id)
 {
     $player_id = intval($player_id);
     $mail_id = intval($mail_id);
     $objmail = $this->get_data('PlayerMail');
     $data = $objmail->get_player_mail_info($player_id, $mail_id);
     $prop_tip = array();
     if (isset($data['isread'])) {
         if ($data['isread'] == 0) {
             //未读
             $data['isread'] = 1;
             $objmail->update_player_mail($player_id, $mail_id, $data);
             $this->get_data('PlayerMail')->decr_unread_mail_num($player_id);
         }
         if (Com_Array::is_good_arr($data['attachment'])) {
             foreach ($data['attachment'] as $key => $val) {
                 $player_prop_info = Cache_Prop::getInstance()->get_prop_info($val['prop_id']);
                 $player_prop_info['item_num'] = $val['prop_num'];
                 $player_prop_info['bind_flag'] = $data['bind_flag'];
                 $data['attachment'][$key]['prop_tips'] = Struct_Prop::get_prop_struct($player_prop_info);
             }
         }
     }
     return $data;
 }
Ejemplo n.º 18
0
 /**
  * 获取玩家可合成碎片列表
  * @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;
 }
Ejemplo n.º 19
0
 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;
 }
Ejemplo n.º 20
0
 /**
  * 获取道具展示
  * @param $player_id
  * @param $player_prop_id
  * @return array
  */
 public function show_prop($player_id, $player_prop_id)
 {
     if (empty($player_prop_id)) {
         $this->throw_error('80913');
     }
     $prop_info = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $player_prop_id);
     //        Com_Log::write("show_prop",var_export($prop_info,true));
     if (empty($prop_info)) {
         $this->throw_error('80913');
     }
     return array(Struct_Prop::get_prop_struct($prop_info));
 }
Ejemplo n.º 21
0
 /**
  * 获取成就某勋章任务列表
  *
  */
 public function get_achieve_medal_task_list($player_id, $title_id)
 {
     $this->achieve_repair($player_id);
     $achieve_configs = Cache_AchieveConfig::getInstance()->get_achieve_config_by_titleid($title_id);
     if (empty($achieve_configs)) {
         $this->throw_error('10222');
     }
     $task_type_progress = $this->get_data('PlayerAchieveCounter')->get_player_achieve_counter_info($player_id, 'task_type_progress');
     $player_achieve_title_data = $this->get_data('PlayerAchieve')->get_player_achieve_info($player_id, $title_id);
     $data["achieve_list"] = array();
     $target_finish_num = 0;
     foreach ($achieve_configs as $config) {
         $item = array();
         $player_achieve_data = $player_achieve_title_data[$config['achieve_id']];
         $item['achieve_id'] = $config['achieve_id'];
         $item['achieve_state'] = intval($player_achieve_data['state']);
         //1为点亮
         $item['target_info'] = $config['target_info'];
         $item['reward'] = $this->get_format_achieve_reward($config["reward"]);
         foreach ($item['reward'] as $key => $val) {
             $prop_id = $val[0];
             $prop_num = $val[1];
             $arrPropConfig = Cache_Prop::getInstance()->get_prop_info($prop_id);
             if (!isset($arrPropConfig['base_attr'])) {
                 if ($arrPropConfig['type'] == 1 || $arrPropConfig['type'] == 6) {
                     if (isset($player_achieve_title_data[$config['achieve_id']]['config'][$prop_id])) {
                         $arrPropConfig = $player_achieve_title_data[$config['achieve_id']]['config'][$prop_id];
                     } else {
                         if (!isset($arrPropConfig['base_attr'])) {
                             $arrPropConfig = $this->get_game("Prop")->get_equip_attr($arrPropConfig);
                         }
                         $player_achieve_title_data[$config['achieve_id']]['config'][$prop_id] = $arrPropConfig;
                         $this->get_data("PlayerAchieve")->update_player_achieve($player_id, $title_id, $player_achieve_title_data, $config['achieve_id']);
                     }
                 }
             }
             $arrPropConfig['item_num'] = $prop_num;
             $arrPropConfig['bind_flag'] = 0;
             $item['reward'][$key][3] = Struct_Prop::get_prop_struct($arrPropConfig);
         }
         $item['icon'] = $config['icon'];
         $item['reward_state'] = $item['reward'] ? intval($player_achieve_data['reward_state']) : 0;
         //奖励领取状态
         $item['achieve_point'] = intval($config['achieve_point']);
         //成就点
         $item['upts'] = intval($player_achieve_data['upts']);
         $item['target_title'] = $config['target_title'];
         $finish_num = 0;
         $total_num = intval($config['target_val']);
         if (in_array($config['achieve_type'], array(6, 10, 35, 36, 40, 48))) {
             //装备(品质:星级:强化)
             $arr_target_val = explode(":", $config['target_val']);
             $total_num = $arr_target_val[0];
             $finish_num = $player_achieve_data['val'];
         } else {
             if ($config['achieve_type'] == 28) {
                 //圣器
                 $finish_val = 0;
                 $arr_config_val = explode(":", $config['target_val']);
                 for ($i = 0; $i < count($arr_config_val); $i++) {
                     if ($i % 2 != 0) {
                         $finish_val += intval($arr_config_val[$i]);
                     }
                 }
                 $arr_finish_num = json_decode($finish_num, true);
                 if (is_array($arr_finish_num)) {
                     $finish_num = array_sum($arr_finish_num);
                 }
                 $total_num = $finish_val;
             } else {
                 if (isset($task_type_progress[$config['achieve_type']]) && $finish_num == 0) {
                     $finish_num = intval($task_type_progress[$config['achieve_type']]['val']);
                 }
             }
         }
         #资源类从player表里读取
         if ($config['achieve_type'] == 23) {
             $finish_num = $this->get_data('Player')->get_player_info($player_id, "silver");
         }
         $item['target_finish_num'] = intval($finish_num);
         $item['target_total_num'] = intval($total_num);
         $item['target_tips'] = str_replace("%s", intval($finish_num), $config['target_tips']);
         $show_progress = 0;
         if ($item['achieve_state'] == 0) {
             $show_progress = intval($config['show_progress']);
             $item['upts'] = 0;
         }
         $item['show_progress'] = $show_progress;
         if ($item['achieve_state']) {
             $item['target_tips'] = "";
             $target_finish_num++;
         }
         $item['achieve_rank'] = $config['achieve_rank'];
         $data["achieve_list"][] = $item;
     }
     $title_config = Cache_TitleConfig::getInstance()->get_title_config_by_id($title_id);
     //当前称号成就任务完成数量
     $data["target_finish_num"] = $target_finish_num;
     $data["target_total_num"] = count($achieve_configs);
     $data["title_id"] = $title_id;
     $data["icon"] = $title_config['icon'];
     $data["title_name"] = $title_config['title_name'];
     $data['reward'] = $this->get_format_achieve_attr($title_config['reward']);
     Com_Array::multisort($data["achieve_list"], array('achieve_state' => 'desc', 'achieve_rank' => 'asc'));
     return $data;
 }