/** * 公会建筑管理 * @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; }
/** * 获取副本经验加成 * @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; }
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; }
/** * 每天晚上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); } } } } } } }
/** * 获取最大次数 * @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; }
/** * 允许添加的公会经验数量 * @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; }
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); } } }
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); }