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; }
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; }
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; }
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); }