Beispiel #1
0
 /**
  * 复活
  * @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'=>''));
     }
 }
Beispiel #2
0
 /**
  * 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;
 }