/** * 复活 * @param unknown $player_id */ public function relive($player_id) { $player_info = $this->get_data('Player')->get_player_info($player_id, array("privilege_level", "ticket", "level", "vip", "map_id", "gold", 'player_id')); $map_id = intval($player_info["map_id"]); $map_join_list = Cache_ResourceFight::getInstance()->get_resource_fight($map_id); if (!$map_join_list) { $this->throw_error(10222); } $map_join_info = array(); foreach ($map_join_list as $config) { if (intval($player_info['vip']) >= $config['min_vip'] && intval($player_info['vip']) <= $config['max_vip']) { $map_join_info = $config; break; } } if (!$map_join_info) { $this->throw_error(10222); } $price = $relive_cost = $map_join_info['relive_cost']; $ticket = 0; if ($player_info['ticket'] > 0) { if ($player_info['ticket'] >= $relive_cost) { $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', 'ticket', $relive_cost); $ticket = $relive_cost; $relive_cost = 0; } else { $ticket = $player_info['ticket']; $relive_cost = $relive_cost - $player_info['ticket']; $this->get_data('Player')->check_player_resource($player_id, $player_info, '-', 'ticket', $player_info['ticket']); } } $this->get_data('Player')->check_player_resource($player_id, $player_info, "-", "gold", $relive_cost); $arr_consume = array('price' => $price, 'gold' => $relive_cost, 'ticket' => $ticket, 'count' => 1); #数据中心推送 $this->start_trans(); $result = $this->get_data('Player')->update_player_resource($player_id, $player_info, 778, array(), $arr_consume); if (!$result) { $this->throw_error(10101); } else { $this->commit(); #数据中心推送 // if($relive_cost>0){ // $params['act'] = 778; // $params['price'] = $relive_cost; // $params['gold'] = $relive_cost; // $params['black_gold'] = 0; // $params['count'] = 1; // $params['time'] = time(); // Com_DataCenter::getInstance()->publish_data($player_id,'prop',$params); // } Protocol::input($player_id, 7, 4, 470, null); // Protocol_Player::p2c_part_update($player_id,array('gold'=>'')); } }
/** * C++ 杀怪接口 * @param $roles * @param $npc_sid * @param $npc_entity_id */ public function kill_monster($roles, $combo_num, $npc_sid, $npc_entity_id, $roles_attacker_of_resource_fight, $vip_type) { $out = array('roles' => $roles, 'loots' => array(), 'silver' => array(), 'exp' => array(), 'npc_entity_id' => $npc_entity_id, 'mojos' => array()); if (empty($roles) || empty($npc_sid)) { return $out; } if ($vip_type == 1) { $npc = Cache_UnionWantedNpc::getInstance()->get_union_wanted_npc($npc_sid); } else { $npc = Cache_Npc::getInstance()->get_npc_info_from_cache($npc_sid); } $exp_give = $npc['exp_give']; $arr_exp_give = explode("|", $exp_give); $item_id = intval($arr_exp_give[0]); $item_num = intval($arr_exp_give[1]); //挂机副本几人打怪 /* if(Com_Array::is_good_arr($roles_attacker_of_resource_fight)){ $out = $this->roles_attacker_of_resource_fight($out,$roles_attacker_of_resource_fight,$item_num); $out['roles'] = $roles_attacker_of_resource_fight; return $out; }else{ */ if ($roles) { foreach ($roles as $key => $player_id) { $exp_addition = Cache_Combo::getInstance()->get_combo_addition($combo_num[$key]); $drop_reward = array(); //挂机副本不加经验 if ($this->_begin_batch) { if (!isset($this->_player_infos[$player_id])) { $this->_player_infos[$player_id] = $this->get_data('Player')->get_player_info($player_id, array('name', 'map_id', 'level', 'exp', 'level_exp', 'career_type', 'vip', 'after_hero_hole', 'privilege_level')); } if (!isset($this->_player_detail[$player_id])) { $this->_player_detail[$player_id] = $this->get_data('PlayerDetail')->get_player_detail($player_id, array('buff_exp_addition')); } $player_info = $this->_player_infos[$player_id]; $player_detail = $this->_player_detail[$player_id]; } else { $player_info = $this->get_data('Player')->get_player_info($player_id, array('name', 'map_id', 'level', 'exp', 'level_exp', 'career_type', 'vip', 'after_hero_hole', 'privilege_level')); $player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id, array('buff_exp_addition')); } $map_id = $player_info['map_id']; $map_join_info = Cache_ResourceFight::getInstance()->get_resource_fight($map_id); if ($map_join_info) { /* $playerDailyTimeInfo = $this->get_data("PlayerDailyTime")->get_player_used_time($player_id,array("auto_pve_12hour_left_time")); if(intval($playerDailyTimeInfo["auto_pve_12hour_left_time"])>0){ $common_drop = Cache_ResourceFightPropLoot::getInstance()->get_resource_fight_prop_loot($player_info['level']); $arr_item = array(); if($common_drop > 0){ $item = Cache_PropLoot::getInstance()->get_prop_loot($common_drop,$player_info['career_type']); if($item){ $arr_item = array_merge($arr_item,$item); } } if($arr_item){ foreach($arr_item as $val){ $drop_reward[$val['item_id']] = array('type'=>Cache_FbLoot::getInstance()->get_item_key($val['item_id']),'item_id'=>$val['item_id'],'item_num'=>$val['item_num']); } } Com_Log::write('xgame.auto_pve_data',"npc_sid={$npc_sid}"); $this->get_game('AutoPve')->async_trigger_auto_pve($player_id,$item_num,array(),$drop_reward); } */ $out['loots'][] = array(); $out['silver'][] = 0; $out['exp'][] = 0; $out['mojos'][] = 0; } else { if ($this->_begin_batch) { if (!isset($this->_player_tasks[$player_id])) { $this->_player_tasks[$player_id] = $this->get_data('PlayerTask')->get_task_info($player_id); } $arr_player_task = $this->_player_tasks[$player_id]; } else { $arr_player_task = $this->get_data('PlayerTask')->get_task_info($player_id); } $task_info = reset($arr_player_task['main_val']); $is_update = false; $this->get_game('TaskTrigger')->trigger_task($player_id, 1, $npc_sid, 1, $arr_player_task, $player_info, $this->_begin_batch, $is_update); //杀怪任务 #$this->_player_tasks[$player_id] = $arr_player_task; if ($is_update) { $this->_update_tasks[$player_id] = 1; } if ($player_info['level'] > 20) { #减轻服务器压力,20级之后才有日常任务 $this->get_game('TaskTrigger')->trigger_task($player_id, 116, $npc_sid, 1, $arr_player_task); //杀怪日常任务 } $this->_player_tasks[$player_id] = $arr_player_task; # 必须放在日常任务触发之后,否则日常任务的进度不会更新 $arr_item = array(); #序章的怪物掉落是不是可以特殊处理? if ($npc['common_drop1'] > 0) { $item = Cache_PropLoot::getInstance()->get_prop_loot($npc['common_drop1'], $player_info['career_type']); if ($item) { $arr_item = array_merge($arr_item, $item); } } if ($npc['common_drop2'] > 0) { $item = Cache_PropLoot::getInstance()->get_prop_loot($npc['common_drop2'], $player_info['career_type']); if ($item) { $arr_item = array_merge($arr_item, $item); } } if ($npc['common_drop3'] > 0) { $item = Cache_PropLoot::getInstance()->get_prop_loot($npc['common_drop3'], $player_info['career_type']); if ($item) { $arr_item = array_merge($arr_item, $item); } } if ($npc['common_drop4'] > 0) { $item = Cache_PropLoot::getInstance()->get_prop_loot($npc['common_drop4'], $player_info['career_type']); if ($item) { $arr_item = array_merge($arr_item, $item); } } if ($npc['common_drop5'] > 0) { $item = Cache_PropLoot::getInstance()->get_prop_loot($npc['common_drop5'], $player_info['career_type']); if ($item) { $arr_item = array_merge($arr_item, $item); } } $loots = array(); $reward = array(); # 在序章某人人物下的道具默认进包裹 $silver = 0; $crystal = 0; $add_exp = 0; $type = Cache_FbLoot::getInstance()->get_item_key($item_id); if ($type == 'silver') { $silver += $item_num; //银两 } else { if ($type == 'exp') { $add_exp += $item_num; } elseif ($type == 'prop') { for ($i = 0; $i < $item_num; $i++) { array_push($loots, $item_id); } $reward[] = array('type' => $type, 'item_id' => $item_id, 'item_num' => $item_num); } } if ($arr_item) { foreach ($arr_item as $val) { if ($val['type'] == 'silver') { $silver += $val['item_num']; //银两 } elseif ($val['type'] == 'crystal') { $crystal += $val['item_num']; //魔晶 } elseif ($val['type'] == 'prop') { // Com_Log::write("monster_loot.".$player_id,"item_num:{$val['item_num']}"); for ($i = 0; $i < $val['item_num']; $i++) { array_push($loots, $val['item_id']); } // Com_Log::write("monster_loot.".$player_id,"loot:".var_export($loots,true)); $reward[] = array('type' => $val['type'], 'item_id' => $val['item_id'], 'item_num' => $val['item_num']); } elseif ($val['type'] == 'exp') { $add_exp += $val['item_num']; } } } $out['loots'][] = $loots; $out['silver'][] = $silver; $out['mojos'][] = $crystal; if ($player_info['map_id'] != 2100) { // $add_exp = $add_exp * (1+$exp_addition); } $buff_exp_addition = $player_detail['buff_exp_addition']['exp']; // Com_Log::write("buff_exp_addition.".$player_id,"buff_exp_addition:{$buff_exp_addition}"); // Com_Log::write("buff_exp_addition.".$player_id,"exp:{$add_exp}"); $add_exp += $add_exp * ($buff_exp_addition / 100); #buff药加成 // Com_Log::write("buff_exp_addition.".$player_id,"exp_buff:{$add_exp}"); $out['exp'][] = $add_exp; if ($add_exp > 0) { $this->batch_add_exp($player_id, $player_info, $add_exp); } } } } //} return $out; }