Esempio n. 1
0
 public function get_reward_info($reward_id)
 {
     if (empty($reward_id)) {
         return false;
     }
     $sql = "select * from event_reward_master where reward_id = {$reward_id}";
     $record = $this->select_one($sql, $this->get_cache_key(array('reward_id' => $reward_id), $this->prefix_event_reward_master));
     if (!empty($record['valid_date_flag'])) {
         # 每日活动奖励
         $date_start = Com_Util::get_date_start();
         # 修正每日活动的相关时间
         $record['valid_date_head'] += $date_start;
         $record['valid_date_tail'] += $date_start;
     }
     return $record;
 }
Esempio n. 2
0
 public function get_action_log($plm_id, $num)
 {
     if (empty($plm_id) || empty($num)) {
         return false;
     }
     $action_log_list = array();
     $current_time = time();
     $start = Com_Util::get_date_start($current_time);
     $base_offset = $start + 5 * 3600;
     # 基准时间点以每天5点为准
     if ($current_time >= $base_offset) {
         $stt_offset = $base_offset;
         $end_offset = $base_offset + 86400;
     } else {
         $stt_offset = $base_offset - 86400;
         $end_offset = $base_offset;
     }
     $sql = "select * from player_magic_parliament_log where plm_id = {$plm_id} and reg_time > {$stt_offset} and reg_time < {$end_offset} order by reg_time desc limit {$num}";
     $this->query($sql);
     while ($this->next_record()) {
         $action_log_list[] = $this->get_record();
     }
     return $action_log_list;
 }
Esempio n. 3
0
 public function init_event_panel($player_id, $event_template = 1, $just_get_reward_num = 0)
 {
     $this->param_check_numeric(array($player_id, $event_template), 0);
     #$player_info = $this->get_data('Player')->get_player_info($player_id, array('map_id', 'level', 'vip'));
     #-----------------------------------------------------------------
     # 获取所有有效[在展示中的]活动的列表,并排序
     #-----------------------------------------------------------------
     $event_list = $this->get_data('Event')->get_event_list_for_announce($event_template);
     if (empty($event_list)) {
         $this->throw_error('12001');
         # 开启的运营活动为空
     }
     Com_Array::multisort($event_list, array('event_priority' => 'asc'));
     #-----------------------------------------------------------------
     # 将有效活动列表转换为哈希结构,并获取去重的标签哈希
     #-----------------------------------------------------------------
     $event_hash = array();
     $tag_hash = array();
     foreach ($event_list as $event_info) {
         $event_hash[$event_info['event_id']] = $event_info;
         $tag_hash[$event_info['event_tag']] = 1;
     }
     #-----------------------------------------------------------------
     # 通过标签ID的哈希,获取标签详细信息的哈希
     #-----------------------------------------------------------------
     $tag_detail_hash = $this->get_data('Event')->get_tag_detail_hash($tag_hash);
     $can_receive_reward_num = 0;
     # 可领取的奖励总数
     #-----------------------------------------------------------------
     # 按标签分类记录活动列表
     #-----------------------------------------------------------------
     $event_tag_list = array();
     # 有效活动标签列表
     $most_imp_event_list = array();
     # 最重点活动列表
     $less_imp_event_list = array();
     # 次重点活动列表
     $date_stt = Com_Util::get_date_start();
     $date_end = Com_Util::get_date_end();
     foreach ($event_hash as $event_id => $event_info) {
         $event_tag = $event_info['event_tag'];
         if (!isset($event_tag_list[$event_tag])) {
             $event_tag_list[$event_tag] = array('event_tag' => $event_tag, 'tag_name' => $tag_detail_hash[$event_tag]['tag_name'], 'tag_sign' => 0, 'event_list' => array(), 'tag_priority' => $tag_detail_hash[$event_tag]['tag_priority']);
         }
         # 是否是新活动
         $event_sign = 0;
         if ($event_info['announce_date_head'] >= $date_stt && $event_info['announce_date_head'] <= $date_end) {
             $event_tag_list[$event_tag]['tag_sign'] = 1;
             $event_sign = 1;
         }
         #$event_cd = max($event_info['open_date_head'] - $this->current_time, 0); 	# 开始倒计时
         $event_cd = max($event_info['open_date_tail'] - $this->current_time, 0);
         # 结束倒计时
         #-----------------------------------------------------------------
         # 获取奖励项列表
         #-----------------------------------------------------------------
         $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 += $real_remain_gain_num;
                 }
                 $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);
             }
         }
         #-----------------------------------------------------------------
         # 最、次重点活动列表
         #-----------------------------------------------------------------
         #echo "</br>===============".$event_info['event_id'].":".$event_info['event_importance']."==================</br>";
         if ($event_info['event_importance'] == $this->most_imp_event_importance && !empty($event_info['event_recommend_flag'])) {
             $most_imp_event_list[$event_id] = array('event_tag' => $event_tag, 'event_id' => $event_id);
         } elseif ($event_info['event_importance'] == $this->less_imp_event_importance && !empty($event_info['event_recommend_flag'])) {
             $less_imp_event_list[$event_id] = array('event_tag' => $event_tag, 'event_id' => $event_id);
         }
         $event_tag_list[$event_tag]['event_list'][$event_id] = array('event_id' => $event_id, 'event_title_res' => $event_info['event_title_res'], 'event_comment' => $event_info['event_comment'], 'event_cd' => $event_cd, 'special_reward_list' => $special_reward_list, 'open_date_head' => $event_info['open_date_head'], 'open_date_tail' => $event_info['open_date_tail'], 'reward_date_head' => $event_info['reward_date_head'], 'reward_date_tail' => $event_info['reward_date_tail'], 'jump_btn_type' => $event_info['event_jump_btn_type'], 'jump_btn_target' => $event_info['event_jump_btn_target'], 'jump_btn_res' => $event_info['event_jump_btn_res'], 'event_content' => $event_info['event_desc'], 'event_content_res' => $event_info['event_desc_res'], 'event_ad_res' => $event_info['event_ad_res'], 'event_reward_list' => $event_reward_list, 'event_sign' => $event_sign, 'event_title_bg_res' => $event_info['event_title_bg_res']);
     }
     #var_export($event_tag_list);
     #var_export($less_imp_event_list);
     if ($just_get_reward_num) {
         return $can_receive_reward_num;
     }
     # 对活动标签列表升序排序
     Com_Array::multisort($event_tag_list, array('tag_priority' => 'asc'));
     $out_2303 = array('time' => $this->current_time, 'event_tag_list' => $event_tag_list, 'most_imp_event_list' => $most_imp_event_list, 'less_imp_event_list' => $less_imp_event_list, 'event_template' => $event_template);
     return $out_2303;
 }
Esempio n. 4
0
 public function _cal_login_refer($player_id, $event_date_head = 0, $event_date_tail = 0)
 {
     $login_series_max = $login_acc = 0;
     if (empty($player_id) || empty($event_date_head) || empty($event_date_tail)) {
         return array($login_series_max, $login_acc);
     }
     # 没有定义活动周期
     # 出于效率考虑,日志查询仅执行1次
     $event_logs = $this->get_data('Event')->get_player_event_log_login($player_id, $event_date_head, $event_date_tail);
     if (empty($event_logs)) {
         return array($login_series_max, $login_acc);
     }
     $login_status = array();
     # 轮询活动所跨日期区间
     $event_date_end = Com_Util::get_date_end($event_date_tail);
     $loop_time = $event_date_head;
     while ($loop_time < $event_date_end) {
         $day_stt = Com_Util::get_date_start($loop_time);
         # 当前起始时间戳
         $day_end = Com_Util::get_date_end($loop_time);
         # 当前结束时间戳
         #$day_stt_correct = max($day_stt, $event_date_head);	# 修正,由于日志记录严格按照活动时间获取,故没必要修正
         #$day_end_corrent = min($day_end, $event_date_tail);	# 修正,由于日志记录严格按照活动时间获取,故没必要修正
         foreach ($event_logs as $event_log) {
             if ($event_log['login_time'] >= $day_stt && $event_log['login_time'] <= $day_end) {
                 # 当天有登录,结束循环
                 $login_status[$day_stt] = 1;
                 break;
             } elseif ($event_log['logout_time'] >= $day_stt && $event_log['logout_time'] <= $day_end) {
                 # 当天有登出,则也算有登录
                 $login_status[$day_stt] = 1;
                 break;
             }
         }
         $loop_time += 86400;
     }
     $login_acc = count($login_status);
     $login_series = 0;
     # 当前计数连续登录天数
     $pre_day_time = 0;
     # 前一天当前时间戳
     if (!empty($login_status)) {
         foreach ($login_status as $day_time => $status) {
             if (empty($login_series)) {
                 $login_series = 1;
             } else {
                 if ($day_time - $pre_day_time == 86400) {
                     $login_series += 1;
                 } else {
                     $login_series_max = max($login_series_max, $login_series);
                     $login_series = 0;
                 }
             }
             $pre_day_time = $day_time;
         }
     }
     return array($login_series_max, $login_acc);
 }