Example #1
0
 /**
  * 公会建筑管理
  * @param unknown $union_id
  */
 public function get_build_info($player_id, $union_id)
 {
     $union_id = intval($union_id);
     $objUnionInfoData = $this->get_data('UnionInfo');
     $unionInfo = $objUnionInfoData->get_union_info($union_id);
     if (!$unionInfo) {
         $this->throw_error('170303');
         //该公会未创建
     }
     $objUnionPlayerData = $this->get_data('UnionPlayer');
     $unionPlayerInfo = $objUnionPlayerData->get_union_player_info($union_id, $player_id);
     if (empty($unionPlayerInfo)) {
         $this->throw_error('171001');
         //该玩家未加入该公会
     }
     $out = array();
     $objUnionBuildConfig = Cache_UnionBuild::getInstance();
     foreach ($this->_build_redis_prefix as $build_type) {
         if ($build_type == "union") {
             continue;
         }
         $is_up = 0;
         $build_max_exp = 0;
         $build_up_exp = 0;
         $redisLevelField = $build_type . "_level";
         $redisSidField = $build_type . "_sid";
         $build_level = $unionInfo[$redisLevelField] ? $unionInfo[$redisLevelField] : 1;
         $npc_sid = $unionInfo[$redisSidField] ? $unionInfo[$redisSidField] : 1;
         $unionBuildLevelConfig = $objUnionBuildConfig->get_union_build_info($npc_sid, $build_level);
         $item["npc_sid"] = $npc_sid;
         $item["build_level"] = $build_level;
         $item["build_name"] = $unionBuildLevelConfig['build_name'];
         //1.建筑等级<公会等级2.公会资金>升级需要消耗的资金
         if ($item["build_level"] < $unionInfo['union_level'] && $unionInfo["fund"] > $unionBuildLevelConfig['lvl_up_cost_num']) {
             $is_up = 1;
         }
         $item["is_up"] = $is_up;
         $item["lvl_up_cost_type"] = $unionBuildLevelConfig['lvl_up_cost_type'];
         if ($unionBuildLevelConfig['lvl_up_cost_type'] == 2) {
             $redisUpExpField = $build_type . "_up_exp";
             if ($build_type == "union") {
                 $nextLevelConfig = Cache_UnionBase::getInstance()->get_union_base_info($unionInfo["union_level"]);
                 $build_max_exp = $nextLevelConfig['exp'];
                 $build_up_exp = $unionInfo["union_exp"];
             } else {
                 $build_up_exp = $unionInfo[$redisUpExpField];
                 $build_max_exp = $this->get_game('UnionBomb')->get_max_exp($item["build_level"]);
             }
         }
         $item["build_up_exp"] = intval($build_up_exp);
         $item["build_max_exp"] = intval($build_max_exp);
         $item["sid"] = intval($unionBuildLevelConfig['sid']);
         $list[] = $item;
     }
     $out['list'] = $list;
     $out['player_job_id'] = intval($unionPlayerInfo['job_id']);
     return $out;
 }
Example #2
0
 /**
  * 获取副本经验加成
  * @Param $player_id 玩家ID
  * @Param $exp_add_per 基础经验
  * @Param $player_info 玩家信息
  */
 public function get_fb_exp_add($player_id, $exp_add_per, $player_info = null, $union_level = 0)
 {
     $all_exp = $exp_add_per;
     if (empty($player_info) || !isset($player_info['union_id']) || !isset($player_info['privilege_level']) || !isset($player_info['level']) || !isset($player_info['vip'])) {
         #获取玩家VIP
         $player_info = $this->get_data('Player')->get_player_info($player_id, array('union_id', 'privilege_level', 'level', 'vip'));
     }
     #获取VIP类型
     $vip_type = Cache_VipLevelLimit::getInstance()->get_limit_info_func_id(10071);
     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'];
     }
     $privilege_exp = 0;
     if ($player_vip > 0) {
         #获取VIP配置表经验加成配置
         $add_exp_vip_table = Cache_VipLevelLimit::getInstance()->get_limit_info($player_vip, 10071);
         if (!$add_exp_vip_table) {
             return '10109';
             #配置表读取错误
         }
         $privilege_exp = $all_exp * ($add_exp_vip_table['max_times'] / 10000);
     }
     $guild_exp = 0;
     if ($player_info['union_id'] > 0) {
         if ($union_level == 0) {
             #获取公会等级
             $union_level = $this->get_data('UnionInfo')->get_union_info($player_info['union_id'], 'union_level');
         }
         if ($union_level > 0) {
             $union_table = Cache_UnionBase::getInstance()->get_union_base_info($union_level);
             if (!$union_table) {
                 return '10109';
                 #配置表读取错误
             }
             $guild_exp = $all_exp * ($union_table['exp_main'] / 100);
         }
     }
     $all_exp = $all_exp + $privilege_exp + $guild_exp;
     return $all_exp;
 }
Example #3
0
 public function strenglen_action($player_id, $id)
 {
     $player_id = intval($player_id);
     $id = intval($id);
     $player_info = $this->get_data('Player')->get_player_info($player_id, array('union_id', 'name', 'silver', 'ticket', 'gold', 'player_id', 'level', 'vip', 'fame', 'privilege_level'));
     $level_info = $this->get_union_by_id($id);
     if ($player_info['union_id'] == 0) {
         $this->throw_error(171101);
     }
     if (empty($level_info)) {
         $this->throw_error('10222', 2010069);
     }
     if ($level_info['type_id'] == 2) {
         $vip_limit = Cache_VipLevelLimit::getInstance()->get_limit_info_unrelated_to_vip_level(10040);
         if (!empty($vip_limit)) {
             if ($player_info['vip'] < $vip_limit['vip_level']) {
                 $this->throw_error('11089');
             }
         }
     } elseif ($level_info['type_id'] == 3) {
         $vip_limit = Cache_VipLevelLimit::getInstance()->get_limit_info_unrelated_to_vip_level(10041);
         if (!empty($vip_limit)) {
             if ($player_info['vip'] < $vip_limit['vip_level']) {
                 $this->throw_error('11089');
             }
         }
     }
     #判断消耗
     $res = array();
     $res['res'] = 1;
     #1强化成功 2金币不足  3次数用完
     $old = 0;
     $arr_consume = array();
     if ($level_info['cost_type'] == 3) {
         $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', 'silver', abs($level_info['cost_num']));
     } elseif ($level_info['cost_type'] == 2 || $level_info['cost_type'] == 20) {
         #先扣除彩钻
         $cost = abs($level_info['cost_num']);
         $ticket = 0;
         $gold = $cost;
         if ($player_info['ticket'] > 0) {
             if ($player_info['ticket'] >= $cost) {
                 $ticket = $cost;
                 $gold = 0;
             } else {
                 $ticket = $player_info['ticket'];
                 $gold = $cost - $player_info['ticket'];
             }
         }
         $arr_consume = array('price' => $cost, 'gold' => $gold, 'ticket' => $ticket, 'count' => 1);
         #数据中心推送
         $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', 'gold', $cost, 1, 1);
     } else {
         $this->throw_error('10222', 2010070);
     }
     #判断今日次数
     $union_conf = Cache_UnionBase::getInstance()->get_union_conf();
     if (empty($union_conf)) {
         $this->throw_error(10222, 2010071);
     } else {
         if (isset($union_conf['max_bomb_time'])) {
             $used = 0 + $this->get_data('PlayerDailyTime')->get_player_used_time($player_id, 'union_bomb_count');
             if ($used >= $union_conf['max_bomb_time']) {
                 $this->throw_error(174401);
             }
         } else {
             $this->throw_error(10222, 2010072);
         }
     }
     $res['res'] = 1;
     $union_info = $this->get_data('UnionInfo')->get_union_info($player_info['union_id']);
     $res['bomb_exp'] = isset($union_info['bomb_exp']) ? $union_info['bomb_exp'] : 0;
     $res['max_exp'] = $level_info['max_exp'];
     $res['bomb_level'] = $level_info['level'];
     if ($res['res'] == 1) {
         #扣消耗
         #$this->start_trans();
         $result = $this->get_data('Player')->update_player_resource($player_id, $player_info, 1723, array(), $arr_consume);
         if (false !== $result) {
             #保存记录
             $this->save_strength_log($player_info['union_id'], $player_id, $player_info['name'], $level_info);
             #福利大厅任务接口
             if ($level_info['type_id'] == 3) {
                 $this->get_game('UnionBoonHall')->async_trigger_union_task($player_id, 2, '9040_2');
             }
             $this->get_game('UnionBoonHall')->async_trigger_union_task($player_id, 2, '9040_1');
             $update = array();
             $update['fund'] = (isset($union_info['fund']) ? $union_info['fund'] : 0) + $level_info['union_fund'];
             $update['bomb_exp'] = (isset($union_info['bomb_exp']) ? $union_info['bomb_exp'] : 0) + $level_info['bomb_exp'];
             $update['bomb_up_exp'] = (isset($union_info['bomb_up_exp']) ? $union_info['bomb_up_exp'] : 0) + $level_info['bomb_exp'];
             $update['bomb_level'] = isset($union_info['bomb_level']) ? $union_info['bomb_level'] : 1;
             #判断是否升级
             $up = false;
             if ($update['bomb_up_exp'] >= $level_info['max_exp']) {
                 $nowLvl = isset($union_info['bomb_level']) ? $union_info['bomb_level'] : 1;
                 if ($union_info['union_level'] > $nowLvl) {
                     $update['bomb_level'] = $nowLvl + 1;
                     $update['bomb_up_exp'] -= $level_info['max_exp'];
                     $level_info['max_exp'] = $this->get_max_exp($update['bomb_level']);
                     $up = true;
                 } else {
                     $update['bomb_up_exp'] = $level_info['max_exp'];
                     $update['bomb_level'] = $nowLvl;
                 }
             }
             if ($up) {
                 //添加日志
                 $arr_replace = array();
                 $objUnionBaseGame = $this->get_game('UnionBase');
                 $objUnionBaseGame->sys_add_union_log($player_id, $player_info['union_id'], 173902, $arr_replace);
                 $this->get_game('UnionAchieve')->async_trigger_union_achieve($player_id, 23, $update['bomb_level'], 2);
             }
             //添加日志
             $arr_replace = array();
             $type_name = '';
             if ($level_info['type_id'] == 1) {
                 $type_name = '初级强化';
             } elseif ($level_info['type_id'] == 2) {
                 $type_name = '中级强化';
             } elseif ($level_info['type_id'] == 3) {
                 $type_name = '高级强化';
                 $this->get_game('UnionAchieve')->async_trigger_union_achieve($player_id, 16, 1, 1);
             }
             $arr_replace[] = array('rep_type' => 0, 'rep_val' => $player_id);
             $arr_replace[] = array('rep_type' => 7, 'rep_val' => $type_name);
             #强化类型
             $arr_replace[] = array('rep_type' => 7, 'rep_val' => $level_info['player_dedicate']);
             #公会贡献
             $arr_replace[] = array('rep_type' => 7, 'rep_val' => $level_info['union_fund']);
             #公会资金
             $objUnionBaseGame = $this->get_game('UnionBase');
             $objUnionBaseGame->sys_add_union_log($player_id, $player_info['union_id'], 173901, $arr_replace);
             #贡献玩家贡献-声望
             $this->get_game('Reward')->send_reward($player_id, array(array('type' => Cache_FbLoot::getInstance()->get_item_key(14), 'item_id' => 14, 'item_num' => $level_info['fame'])), array('cmd_id' => '1723'));
             $myinfo = $this->get_data("UnionPlayer")->get_union_player_info($player_info['union_id'], $player_id);
             $myold = isset($myinfo['total_dedicate']) ? $myinfo['total_dedicate'] : 0;
             $myinfo['total_dedicate'] = $myold + $level_info['player_dedicate'];
             $this->get_game("UnionPlayer")->add_player_dedicate($player_id, $level_info['player_dedicate']);
             $this->get_data("UnionInfo")->update_union_info($player_info['union_id'], $update);
             $this->get_data('PlayerDailyTime')->add_used_time($player_id, 'union_bomb_count');
             $this->get_game('UnionGuide')->async_trigger_union_guide($player_id, $used + 1, $union_conf['max_bomb_time'], 3, 3);
             $res['bomb_exp'] = $update['bomb_up_exp'];
             $res['max_exp'] = $level_info['max_exp'];
             $res['bomb_level'] = $update['bomb_level'];
             $res['id'] = $id;
             $res['total_dedicate'] = $myold + $level_info['player_dedicate'];
             $res['fund'] = $update['fund'];
             $res['fame'] = $player_info['fame'] + $level_info['fame'];
             #变形金刚让加一个声望字段
             $this->get_game('Reward')->add_reward_log();
             #$this->commit();
             #任务埋点
             $this->get_game('UnionAchieve')->async_trigger_union_achieve($player_id, 12, 1, 1);
             //公会贡献-流水日志
             $log_data = array('player_id' => $player_id, 'channel' => 16, 'type' => 1, 'item_id' => 11, 'item_num' => $level_info['player_dedicate'], 'amount' => $myold, 'after_amount' => $myinfo['total_dedicate'], 'cmd_id' => 1723);
             Log_Common::getInstance()->add_log($log_data);
             $this->get_game('Union')->Sync_Union_msg($player_info['union_id']);
         } else {
             #$this->rollback();
             $this->throw_error('10110', 2010073);
         }
     }
     return $res;
 }
Example #4
0
 /**
 * 每天晚上12点要给公会的会长和副会长发工资
 	会长:公会人数*1000(可配置)
 	副会长:公会人数*600(可配置)
 * @param unknown $union_id
 */
 public function union_manager_reward()
 {
     return false;
     $all_union_info = $this->get_data('UnionInfo')->get_all_union_info();
     if ($all_union_info) {
         foreach ($all_union_info as $key => $union_info) {
             $union_id = $union_info['union_id'];
             $player_num = $union_info['player_num'];
             $union_level = $union_info['union_level'];
             if ($union_level > 0) {
                 $objUnionPlayerData = $this->get_data('UnionPlayer');
                 $unionPlayerList = $objUnionPlayerData->get_union_player_info($union_id);
                 if (Com_Array::is_good_arr($unionPlayerList)) {
                     $unionBaseConfig = Cache_UnionBase::getInstance()->get_union_base_info($union_level);
                     $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(9001);
                     foreach ($unionPlayerList as $union_player_id => $val) {
                         if ($val['job_id'] <= 2) {
                             $attachment = array();
                             $job_salary = explode("|", $unionBaseConfig["job{$val['job_id']}_salary"]);
                             if (Com_Array::is_good_arr($job_salary)) {
                                 foreach ($job_salary as $salary) {
                                     $prop = explode(":", $salary);
                                     $prop_num = intval($player_num * $prop[1]);
                                     $attachment[] = array('prop_id' => $prop[0], 'prop_num' => $prop_num);
                                 }
                             }
                             $this->get_game('Mail')->async_trigger_mail($val['player_id'], $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 1700);
                         }
                     }
                 }
             }
         }
     }
 }
Example #5
0
 /**
  * 获取最大次数
  * @param $player_id
  * @param $fun_id
  * @param $vip_level
  */
 public function get_max_daily_time($player_id, $field, $vip_level = 0)
 {
     $max_num = 0;
     switch ($field) {
         case 'pub_left_num':
             #普通抽取总次数
             $max_num = $this->get_game('PubHero')->get_max_free_time($vip_level, 1);
             break;
         case 'pub_left_ten_num':
             #十连抽
             $max_num = $this->get_game('PubHero')->get_max_free_time($vip_level, 3);
             break;
         case 'daily_task_finish_count':
             # 日常任务每日完成轮数上限
             $max_num = $this->get_game('TaskHandler')->get_daily_task_finish_stint($player_id);
             break;
         case 'challenge_battle_num':
             # 天梯战斗挑战次数上限
             list($challenge_battle_num, $max_num) = $this->get_game('Challenge')->get_challenge_battle_num_info($player_id);
             break;
         case 'used_fight_num':
             #副本挑战总次数
             $max_num = $this->get_game('PlayerPVE')->get_max_times($player_id, $vip_level);
             break;
         case 'coin_exchange_free_times_max':
             #炼金最大免费使用次数
             $max_num = $this->get_game('PlayerCoinExchange')->get_free_times_max_interface($player_id, $vip_level);
             break;
         case 'daily_sign_free_times_max':
             #签到最大免费次数
             $max_num = $this->get_game('DailySign')->get_free_times_max_interface($player_id, $vip_level);
             break;
         case 'union_wanted_times_max':
             #公会通缉任务最大完成次数
             $max_num = $this->get_game('UnionWanted')->get_free_times_max_interface($player_id, $vip_level);
             break;
         case 'kf_arena_add_times_max':
             #竞技场最大的挑战次数
             $kf_arena_conf = Cache_CrossArenaConf::getInstance()->get_conf(array('max_fight_times'));
             $max_fight_times = $kf_arena_conf['max_fight_times'];
             $max_num = $max_fight_times['val'] + $this->get_data('PlayerDailyTime')->get_player_used_time($player_id, 'kf_arena_add_times');
             break;
         case 'kf_duel_add_times_max':
             #组队最大的挑战次数
             $kf_duel_conf = Cache_CrossDuel::getInstance()->get_battle_conf(41001);
             $max_fight_times = $kf_duel_conf['times'];
             $max_num = $max_fight_times + $this->get_player_used_time($player_id, 'kf_duel_add_times');
             break;
         case 'union_bomb_count':
             #魔能巨炮强化最大次数
             $union_conf = Cache_UnionBase::getInstance()->get_union_conf();
             $max_num = $union_conf['max_bomb_time'];
             break;
         case 'grab_treasure_battle_times_max':
             $grab_treasure_battle_buy_type = $this->get_game('GrabTreasure')->get_grab_treasure_battle_buy_type();
             $buy_times_info = Cache_BuyTimes::getInstance()->get_buy_times_info($grab_treasure_battle_buy_type, 1);
             # 获取: 每日已挑战次数 + 每日挑战购买次数 + 当天剩余可用挑战次数
             $battle_buy_times = $this->get_data('PlayerDailyTime')->get_player_used_time($player_id, 'grab_treasure_battle_buy_times');
             if (empty($battle_buy_times)) {
                 $battle_buy_times = 0;
             }
             $max_num = $battle_buy_times * $buy_times_info['per_num'] + $this->get_game('GrabTreasure')->get_grab_treasure_max_times();
             break;
     }
     return $max_num;
 }
Example #6
0
 /**
  * 允许添加的公会经验数量
  * @param unknown $union_id
  * @param unknown $add_exp
  * @return number|Ambigous <number, unknown>
  */
 protected function get_addible_union_exp($item_num)
 {
     #每日公会添加经验上限
     $daily_union_exp_max = $this->get_data('PlayerDailyTime')->get_player_used_time($this->union_id, 'daily_union_exp_max');
     $daily_union_exp_max = intval($daily_union_exp_max);
     if ($daily_union_exp_max == 0) {
         $unionBaseConfig = Cache_UnionBase::getInstance()->get_union_base_info($this->arrUnion['union_level']);
         $this->get_data('PlayerDailyTime')->set_used_time($this->union_id, 'daily_union_exp_max', $unionBaseConfig['daily_exp_max']);
         $daily_union_exp_max = $unionBaseConfig['daily_exp_max'];
     }
     #今日已增加的公会经验
     $daily_add_union_exp = $this->get_data('PlayerDailyTime')->get_player_used_time($this->union_id, 'daily_add_union_exp');
     $daily_add_union_exp = intval($daily_add_union_exp);
     if ($daily_add_union_exp >= $daily_union_exp_max) {
         $need_add_exp = 0;
     } else {
         if ($daily_add_union_exp + $item_num > $daily_union_exp_max) {
             $need_add_exp = $daily_union_exp_max - $daily_add_union_exp;
         } else {
             $need_add_exp = $item_num;
         }
     }
     return $need_add_exp;
 }
Example #7
0
 public function get_upgrade_level_by_exp($union_level, $union_exp)
 {
     while ($union_exp >= 0) {
         $level_config = Cache_UnionBase::getInstance()->get_union_base_info($union_level + 1);
         $upgradeLevelExp = $level_config['exp'];
         if (empty($level_config)) {
             $upgradeLevelExp = 999999999;
             return array('union_level' => $union_level, 'union_exp' => $union_exp, 'union_upgrade_exp' => $upgradeLevelExp);
         }
         if ($union_exp >= $upgradeLevelExp) {
             $union_level++;
             $union_exp -= $upgradeLevelExp;
         } else {
             return array('union_level' => $union_level, 'union_exp' => $union_exp, 'union_upgrade_exp' => $upgradeLevelExp);
         }
     }
 }
Example #8
0
 public function get_cost_num($player_id, $union_id)
 {
     $player_info = $this->get_data("Player")->get_player_info($player_id, array('gold', 'silver'));
     $union_info = $this->get_data('UnionInfo')->get_union_info($union_id);
     $union_level = isset($union_info['union_level']) ? $union_info['union_level'] : 1;
     $soap_base = Cache_UnionBase::getInstance()->get_union_base_info($union_level);
     $used_time = 0 + $this->get_data("PlayerDailyTime")->get_player_used_time($player_id, 'union_swim_soap_count');
     $cost_list = explode('|', $soap_base['soap_cost_num']);
     if (empty($cost_list)) {
         $this->throw_error('10222');
     }
     if ($used_time >= count($cost_list)) {
         $used_time = count($cost_list) - 1;
     }
     $num = $cost_list[$used_time];
     if ($soap_base['soap_cost_type'] == 1) {
         $mynum = $player_info['silver'];
     } else {
         $mynum = $player_info['gold'];
     }
     return array($mynum, $soap_base['soap_cost_type'], $num);
 }