Пример #1
0
 protected function redis()
 {
     return Com_AdCache::factory('game');
     /*$settings = TenYear::get_val('redisConfig');
       if($settings['cross']['port'] == '6382')
           return Com_AdCache::factory('cross');
       else
           return Com_AdCache::factory('game');*/
 }
Пример #2
0
 protected function redis()
 {
     if (SERVER_ID == 2052310001) {
         #s1端口特殊处理下
         return Com_AdCache::factory('cross');
     } else {
         return Com_AdCache::factory('game');
     }
     //        $settings = TenYear::get_val('redisConfig');
     //        if($settings['cross']['port'] == '6382')
     //            return Com_AdCache::factory('cross');
     //        else
     //            return Com_AdCache::factory('game');
 }
Пример #3
0
 public function run()
 {
     $keys = Com_AdCache::factory('player')->keys("data|player:*");
     $default_bag_num = 42;
     if (!empty($keys)) {
         foreach ($keys as $key) {
             $player_info = Com_AdCache::factory('player')->hash_get($key, array('player_id', 'level', 'bag_num'));
             $player_id = intval($player_info['player_id']);
             $bag_num = intval($player_info['bag_num']);
             if ($bag_num > 0 && intval($bag_num) < $default_bag_num) {
                 $this->get_data("Player")->update_player_info($player_id, array("bag_num" => $default_bag_num));
                 echo "add:player_id={$player_id},old_bag_num={$bag_num},bag_num={$default_bag_num}<br/>";
             }
         }
     }
 }
Пример #4
0
 public function run()
 {
     $keys = Com_AdCache::factory('player')->keys("data|player:*");
     if (!empty($keys)) {
         foreach ($keys as $key) {
             $player_info = Com_AdCache::factory('player')->hash_get($key, array('player_id', 'level', 'union_id'));
             if (intval($player_info['player_id']) <= 0) {
                 continue;
             }
             if (intval($player_info['level']) < 9) {
                 continue;
             }
             $this->achieve_repair($player_info['player_id']);
         }
     }
 }
Пример #5
0
 public function run()
 {
     $player_keys = Com_AdCache::factory('player')->keys("data|player:*");
     foreach ($player_keys as $key) {
         $player_info = Com_AdCache::factory('player')->hash_get($key);
         $player_id = $player_info['player_id'];
         $player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id);
         if ($player_id) {
             $this->get_game('BuffData')->buff_attr($player_id, false);
             $objFpowerCalc = $this->get_game('FpowerCalc');
             $objPlayer = $this->get_data('Player');
             $objFpowerCalc->set_player_info($player_info);
             $objFpowerCalc->set_player_detail($player_detail);
             $player_fpower = $this->get_game('FpowerCalc')->calc_player_fpower($player_id);
             $player_info['fpower'] = $update_fpower['fpower'] = $player_fpower['fpower'];
             $update_fpower['buff_fpower'] = $syn_item['buff_fpower'] = $player_fpower['buff_fpower'];
             $update_fpower['equip_fpower'] = $objFpowerCalc->calc_equip_fpower($player_id);
             $player_info['equip_fpower'] = $update_fpower['equip_fpower'];
             $update_fpower['sq_fpower'] = $objFpowerCalc->calc_sq_fpower($player_id);
             $player_info['sq_fpower'] = $update_fpower['sq_fpower'];
             $update_fpower['fairy_fpower'] = $objFpowerCalc->calc_fairy_fpower($player_id);
             $player_info['fairy_fpower'] = $update_fpower['fairy_fpower'];
             $update_fpower['hero_fpower'] = $objFpowerCalc->calc_hero_fpower($player_id);
             $player_info['hero_fpower'] = $update_fpower['hero_fpower'];
             $update_fpower['skill_fpower'] = $objFpowerCalc->calc_skill_fpower($player_id);
             $player_info['skill_fpower'] = $update_fpower['skill_fpower'];
             $update_fpower['wing_fpower'] = $objFpowerCalc->calc_wing_fpower($player_id);
             $player_info['wing_fpower'] = $update_fpower['wing_fpower'];
             $update_fpower['fpower'] = $player_info['fpower'] + $player_info['sq_fpower'] + $player_info['skill_fpower'] + $player_info['equip_fpower'];
             $sum_fpower = $update_fpower['fpower'] + $player_info['hero_fpower'] + $player_info['fairy_fpower'] + $player_info['wing_fpower'] + $update_fpower['buff_fpower'];
             $update_fpower['sum_fpower'] = $sum_fpower;
             $result = $objPlayer->update_player_info($player_id, $update_fpower);
             if ($result) {
                 Protocol_Player::p2c_part_update($player_id, array('attr' => '', 'fairy_info' => '', 'hero_info' => '', 'skill_infos' => '', 'wing' => ''));
                 echo $player_id . "sync suc \n";
             }
         }
     }
 }
Пример #6
0
 public function run()
 {
     $keys = Com_AdCache::factory('cross')->keys("data|cache_key_arena_rank_user_list_cache:1:*");
     foreach ($keys as $key) {
         $user_info = $this->redis()->hash_get($key);
         $player_info = $this->get_data('Player')->get_player_info($user_info['player_id']);
         $rank_data = array();
         $rank_data['player_id'] = $user_info['player_id'];
         $rank_data['player_name'] = $player_info['name'];
         $rank_data['career_type'] = $player_info['career_type'];
         $rank_data['player_level'] = $player_info['level'];
         $rank_data['union_name'] = $player_info['union_name'];
         $rank_data['sum_fpower'] = $player_info['sum_fpower'];
         $rank_data['server_id'] = SERVER_ID;
         $rank_data['server_name'] = SHOW_TITLE;
         $res = Com_AdCache::factory('cross')->hash_set($key, $rank_data);
         if ($res == true) {
             echo "{$user_info['player_id']} suc\n";
         } else {
             echo "{$user_info['player_id']} fail\n";
         }
     }
 }
Пример #7
0
 public function run()
 {
     $keys = Com_AdCache::factory('player')->keys("data|player:*");
     if (!empty($keys)) {
         foreach ($keys as $key) {
             $player_info = $this->redis()->hash_get($key, array('player_id', 'level', 'union_id'));
             if (intval($player_info['player_id']) <= 0) {
                 continue;
             }
             if (intval($player_info['level']) < 20) {
                 continue;
             }
             $objPlayerProp = TenYear::getInstance(TenYear::data_name('PlayerProp'));
             $player_props = $objPlayerProp->get_player_all_prop($player_info['player_id']);
             foreach ($player_props as $prop) {
                 if (isset($prop['intensive_level'])) {
                     echo "player_id={$player_info['player_id']}|player_prop_id={$prop['player_prop_id']}\n";
                     $objPlayerAchieve = TenYear::getInstance(TenYear::game_name('PlayerAchieve'));
                     $objPlayerAchieve->async_trigger_achieve_target($player_info['player_id'], 6, "1:" . $prop['quality'] . ":" . $prop['star_level'] . ":" . intval($prop['intensive_level']) . ":{$prop['player_prop_id']}", 4);
                 }
             }
         }
     }
 }
Пример #8
0
<?php

/**
 * 异步GloryShop日志备份服务 
 * @author wanghui@uuzu.com
 * @date 2015-4-20
 */
require dirname(__FILE__) . '/../global.php';
TenYear::getInstance();
ini_set('default_socket_timeout', -1);
Com_AdCache::factory()->set_timeout(0);
Com_Replication::set_interval_time(300);
//注册player_detail同步方法
$objPlayerDetail = new Data_GloryShop();
Com_Replication::register('player_glory_shop', array($objPlayerDetail, 'get_player_log'), array($objPlayerDetail, 'replace_to_mysql'));
//开始执行同步
Com_Replication::start();
Пример #9
0
sleep(1);
if ($auto_player_id) {
    //    echo "auto_player_id:".$auto_player_id."\n";
    Com_AdCache::factory()->set('auto_player_id', $auto_player_id);
}
if ($auto_player_max_id) {
    //    echo "auto_player_max_id:".$auto_player_max_id."\n";
    Com_AdCache::factory()->set('auto_player_max_id', $auto_player_max_id);
}
if ($auto_union_id) {
    //    echo "auto_union_id:".$auto_union_id."\n";
    Com_AdCache::factory()->set('auto_union_id', $auto_union_id);
}
if ($auto_union_max_id) {
    //    echo "auto_union_max_id:".$auto_union_max_id."\n";
    Com_AdCache::factory()->set('auto_union_max_id', $auto_union_max_id);
}
shell_exec("/etc/init.d/php-fpm restart");
sleep(1);
shell_exec("/etc/init.d/memcached restart");
sleep(1);
Com_Cache::factory('game')->flush();
Com_Cache::factory('setting')->flush();
sleep(1);
shell_exec("sudo -u nobody /usr/local/webserver/php/bin/php " . PROJECT_ROOT . "/crontab/process.php");
sleep(1);
/*
//初始化setting,game,log库
$files = array(
	'setting' => dirname(__FILE__).'/tenyear2_settings.sql',
	'game' => dirname(__FILE__).'/tenyear2_game.sql',
Пример #10
0
 /**
  * 如果玩家没有出序章 在遇到C++服务器重启的时候 重置这写玩家的任务
  */
 public function reset_task()
 {
     Com_Log::write('x_reset', "=============================[start]=========================");
     $keys = Com_AdCache::factory('player')->keys("data|player:*");
     if (!empty($keys)) {
         $syndata['city_id'] = 2100;
         $syndata['city_x'] = 3382;
         $syndata['city_y'] = 3538;
         $role_init_data = array();
         foreach ($keys as $key) {
             $player_info = Com_AdCache::factory('player')->hash_get($key, array('player_id', 'level', 'vip', 'map_id', 'career_type'));
             //                if($player_info['player_id'] != 980564) continue;
             if ($player_info['level'] >= 10) {
                 continue;
             }
             Com_Log::write('x_reset', "player_id:{$player_info['player_id']}");
             if (!isset($role_init_data[$player_info['career_type']]) && empty($role_init_data[$player_info['career_type']])) {
                 $role_init_data[$player_info['career_type']] = Cache_RoleAttrInit::getInstance()->get_role_attr_init($player_info['career_type']);
             }
             if ($player_info['map_id'] == 2100 && $player_info['level'] < 10) {
                 $this->init_set_task($player_info['player_id'], explode(":", $role_init_data[$player_info['career_type']]['default_task_id']));
                 //                    $this->get_data('PlayerTaskLog')->del_player_task_log($player_info['player_id']);
                 $syndata['level'] = 1;
                 $level_exp = Cache_RoleExp::getInstance()->get_role_exp(1);
                 $syndata['level_exp'] = intval($level_exp['need_exp']);
                 $syndata['exp'] = 0;
                 $this->get_data('Player')->update_player_info($player_info['player_id'], $syndata);
                 $update_fields = $this->get_game('PlayerSkill')->extend_set($player_info['player_id'], $player_info['career_type'], 1, false);
                 $update_fields['guide'] = '';
                 try {
                     $update_fields['wing_info'] = $this->get_game('PlayerWing')->create_player_wing($player_info['player_id'], false);
                     $update_fields['equip_wing'] = 0;
                 } catch (Exception $e) {
                     Com_Log::write('reset_del', "del wing error ##" . var_export($e, true));
                 }
                 $this->get_data('PlayerDetail')->update_player_detail($player_info['player_id'], $update_fields);
                 try {
                     $this->get_game('Fairy')->set_fairy_state_interface($player_info['player_id']);
                 } catch (Exception $e) {
                     Com_Log::write('reset_del', "del fairy error ##" . var_export($e, true));
                 }
                 $props = $this->get_data('PlayerProp')->get_player_all_prop($player_info['player_id']);
                 if ($props) {
                     foreach ($props as $ppid => $val) {
                         Com_Log::write('reset_del', "del prop player_id:{$player_info['player_id']} ##" . var_export($val, true));
                         $result = $this->get_data('PlayerProp')->delete_player_prop($player_info['player_id'], $val, true, array('cmd_id' => 107, 'level' => $player_info['level'], 'vip' => $player_info['vip']));
                         if (!$result) {
                             Com_Log::write('reset_del', "del prop error ##" . var_export($val, true));
                         }
                     }
                 }
             }
         }
     }
     Com_Log::write('x_reset', "=============================[end]=========================");
 }
Пример #11
0
$objName = new Player_PlayerNameBase();
$objName->start();
//同步黑白名单
$db_global = Com_Db::factory('global_game');
$db_global->query("select * from global_ip where id =1");
$ip_white = "";
$ip_black = "";
if ($db_global->nextrecord()) {
    $pData = $db_global->record;
    $ip_white = $pData['ip_white'];
    $ip_black = $pData['ip_black'];
}
file_put_contents($logFile, "获取黑白名单 white:" . $ip_white . " black:" . $ip_black . "···\n", FILE_APPEND);
Com_AdCache::factory()->hash_set('data|server_status', 'status', "0");
Com_AdCache::factory()->hash_set('data|server_status', 'black_id', $ip_black);
Com_AdCache::factory()->hash_set('data|server_status', 'write_ip', $ip_white);
# ----------------------------------------------------------------------------
# 生成天梯与竞技场假人数据
# ----------------------------------------------------------------------------
file_put_contents($logFile, "生成天梯与竞技场假人数据...\n", FILE_APPEND);
$output = array();
exec("/usr/local/webserver/php/bin/php " . PROJECT_ROOT . "/test/generate_dummy_role.php 0", $output, $return_val);
if ($return_val) {
    # return_val不为0表示脚本报异常,执行失败
    file_put_contents($logFile, "生成天梯与竞技场假人数据失败...\n", FILE_APPEND);
    exit;
}
file_put_contents($logFile, "生成天梯与竞技场假人数据成功...\n", FILE_APPEND);
# ----------------------------------------------------------------------------
# 对空天梯榜前20名插入机器人
# ----------------------------------------------------------------------------
Пример #12
0
 /**
  * 一键出售道具
  * @param $player_id
  * @return array
  * @throws Exception]
  */
 public function batch_sell_prop($player_id)
 {
     $sell_id = array();
     $objPlayerPropData = $this->get_data('PlayerProp');
     $prop_list = $objPlayerPropData->get_player_prop_by_item_position($player_id);
     //冲从包裹取出道具
     if ($prop_list) {
         $props = array();
         foreach ($prop_list as $prop) {
             $props[] = $prop['prop_id'];
         }
         $prop_configs = Cache_Prop::getInstance()->get_prop_info($props);
         foreach ($prop_list as $key => $prop) {
             if ($prop_configs[$prop['prop_id']]['type'] == 3 && $prop_configs[$prop['prop_id']]['sub_type'] == 21 && $prop_configs[$prop['prop_id']]['quality'] <= 4) {
                 $sell_id[$prop['player_prop_id']] = $prop;
             } elseif ($prop_configs[$prop['prop_id']]['type'] == 1 && $prop_configs[$prop['prop_id']]['sub_type'] <= 12 && $prop_configs[$prop['prop_id']]['quality'] <= 2) {
                 $sell_id[$prop['player_prop_id']] = $prop;
             }
         }
     }
     if ($sell_id) {
         $get_silver = 0;
         foreach ($sell_id as $prop) {
             if ($prop_configs[$prop['prop_id']]['sale_price'] > 0) {
                 $get_silver += $prop_configs[$prop['prop_id']]['sale_price'] * $prop['item_num'];
             }
         }
         if ($get_silver) {
             $player_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'vip', 'silver', 'privilege_level'));
             $this->get_data('Player')->check_player_resource($player_id, $player_info, "+", 'silver', $get_silver);
             $result = true;
             $objPlayerPropData->start_watch($player_id);
             $this->start_trans();
             $log_param = array('level' => $player_info['level'], 'vip' => $player_info['vip'], 'cmd_id' => 804);
             foreach ($sell_id as $player_prop_id => $val) {
                 $result = $objPlayerPropData->update_prop_num($player_id, $val, $val['item_num'], "-", $log_param);
                 $sell_id[$player_prop_id] = 0;
                 if (!$result) {
                     $this->throw_error(80003, '10180062601');
                 }
             }
             if ($result) {
                 $result = $this->get_data('Player')->update_player_resource($player_id, $player_info, 804);
             }
             if ($result) {
                 Com_AdCache::set_pipe(false);
                 $this->commit();
                 $out['result'] = 1;
                 $out['item'] = array('pos' => 1, 'index' => array());
                 $asyData = array();
                 foreach ($sell_id as $arr_prop_detail) {
                     $out['item']['index'][] = $arr_prop_detail['grid'];
                 }
                 $out['silver'] = Cache_Currency::getInstance()->get_index('silver') . ":" . $get_silver;
                 Protocol_Prop::prop_806($player_id, $sell_id);
                 return $out;
             }
         }
     }
     return array('result' => 1, array());
 }
Пример #13
0
 public function cache_close()
 {
     Com_Cache::close();
     Com_AdCache::close();
 }
Пример #14
0
 public function setRunStat($dateKey, $process_id, $time = null)
 {
     if ($time == null) {
         $time = time();
     }
     return Com_AdCache::factory()->hset('process_control_' . $dateKey, $process_id, $time);
 }
Пример #15
0
chdir(PROCESS_PATH);
//cpunum
$cpuNum = Process_Server::getCpuNum();
//上次检测时间
$lastRunTime = 0;
//当前检测时间
$nowRunTime = time();
//上次domain执行时间
$damonRunTime = 0;
$damonCheckLife = 30;
//进程列表
$processList = array();
$processUpdateTime = 0;
$processUpdateLife = 300;
//每日已经启动进程LIST 避免没有启动
$redis = Com_AdCache::factory();
$dateKey = date('Y-m-d');
$processRunList = array();
$processRunList[$dateKey] = $objProcess->getRunStat($dateKey);
$firstLoop = true;
while (true) {
    $restart = false;
    if ($restart = Com_Queued::receive_byrpop("process")) {
        # 从队列process表尾获取元素,返回nil或者队列名与元素组成的数组
        $processList = $objProcess->getProcessList();
        foreach ($processList as $process) {
            if ($process['process_interval']) {
                continue;
            }
            if (!$mainProcess && $process['process_flag']) {
                continue;
Пример #16
0
 protected function redis()
 {
     return Com_AdCache::factory('player');
 }
Пример #17
0
 /**
  * 同步玩家总战力
  */
 public function sys_player_sum_fpower()
 {
     $keys = Com_AdCache::factory('player')->keys("data|player:*");
     if (!empty($keys)) {
         foreach ($keys as $key) {
             $player_info = $this->redis()->hash_get($key, array('player_id', 'level', 'sum_fpower'));
             if (intval($player_info['player_id']) <= 0) {
                 continue;
             }
             echo "add:player_id={$player_info['player_id']},sum_fpower={$player_info['sum_fpower']}<br/>";
             $this->set_player_sum_fpower($player_info['player_id'], $player_info['sum_fpower']);
         }
     }
 }
Пример #18
0
 protected function redis()
 {
     return Com_AdCache::factory('cross');
 }
Пример #19
0
 /**
  * 一般情况下 在触发同步成功后更新为最新更新时间
  *
  * @param unknown_type $key
  * @param unknown_type $field
  * @param unknown_type $time
  * @return unknown
  */
 protected static function set_rep_time($key, $field, $time)
 {
     return Com_AdCache::factory()->hash_set($key, $field, $time);
 }
Пример #20
0
 /**
  * 从所有队列接收消息
  *
  */
 public static function receive_all()
 {
     //需要强制执行超时回调者
     $forceCalls = array();
     foreach (self::$queues as $queue => $forceTime) {
         if ($forceTime) {
             $forceCalls[$queue] = 0;
         }
     }
     $queues = array_keys(self::$queues);
     $start_time = time();
     while (true) {
         $return = Com_AdCache::factory(self::$group)->brpoplpush(self::$queue, self::$queueBakup, self::$waittime);
         if (empty($return)) {
             if (empty($forceCalls)) {
                 continue;
             } else {
                 $exec_time = time();
                 $run_time = $exec_time - $start_time;
                 $start_time = $exec_time;
                 foreach ($forceCalls as $queue => $forceTime) {
                     $forceCalls[$queue] += $run_time;
                     echo "{$queue} now wait time {$forceCalls[$queue]}\r\n";
                     //当前无消息时 会根据次数强制回调注册方法
                     if ($forceCalls[$queue] >= self::$queues[$queue]) {
                         $forceCalls[$queue] = 0;
                         echo "force call func {$queue}\r\n";
                         call_user_func_array(self::$callBacks[$queue], array());
                         //	break;
                     }
                 }
                 continue;
             }
         }
         $return = json_decode($return, true);
         if (isset($forceCalls[$return[0]])) {
             $forceCalls[$return[0]] = 0;
         }
         echo "receive call func {$return[0]}\r\n";
         if (call_user_func_array(self::$callBacks[$return[0]], array($return[1]))) {
             Com_AdCache::factory(self::$group)->rPop(self::$queueBakup);
         } else {
             //回调处理失败 将备份消息回传给消息队列头
             Com_AdCache::factory(self::$group)->rPoplpush(self::$queueBakup, self::$queue);
         }
     }
 }
Пример #21
0
 public static function set_pipe($flag)
 {
     self::$_pipe = $flag;
 }
Пример #22
0
 public function rollback()
 {
     if ($this->trans) {
         $this->trans--;
     }
     if (!$this->trans) {
         if ($this->realTrans) {
             mysql_query('rollback', $this->linkid);
             $this->trans = $this->realTrans = 0;
         }
         Com_Cache::flush_cache();
         Com_AdCache::flush_cache();
     }
     return true;
 }
Пример #23
0
 /**
  * 从所有队列接收消息
  *
  */
 public static function receive_all($force = false)
 {
     //需要强制执行超时回调者
     $forceCalls = array();
     foreach (self::$queues as $queue => $forceTime) {
         if ($forceTime) {
             $forceCalls[$queue] = 0;
         }
     }
     $queues = array_keys(self::$queues);
     $start_time = time();
     if ($force) {
         self::$waittime = 1;
     }
     while (true) {
         //			Com_Db::ping();
         Com_Db::factory('game')->clear_trans();
         //	echo "get ".var_export($queues,true)." queues | wailt ".self::$waittime."\r\n";
         $return = Com_AdCache::factory(self::$group)->brPop($queues, self::$waittime);
         if (empty($return)) {
             if ($force) {
                 break;
             }
             if (empty($forceCalls)) {
                 continue;
             } else {
                 $exec_time = time();
                 $run_time = $exec_time - $start_time;
                 $start_time = $exec_time;
                 foreach ($forceCalls as $queue => $forceTime) {
                     $forceCalls[$queue] += $run_time;
                     echo "{$queue} now wait time {$forceCalls[$queue]}\r\n";
                     //当前无消息时 会根据次数强制回调注册方法
                     if ($forceCalls[$queue] >= self::$queues[$queue]) {
                         $forceCalls[$queue] = 0;
                         echo "force call func {$queue}\r\n";
                         call_user_func_array(self::$callBacks[$queue], array());
                         //	break;
                     }
                 }
                 continue;
             }
         }
         if (isset($forceCalls[$return[0]])) {
             $forceCalls[$return[0]] = 0;
         }
         echo "receive call func {$return[0]} time=" . date('Y-m-d H:i:s', time()) . "\r\n";
         $callstarttime = microtime(true);
         call_user_func_array(self::$callBacks[$return[0]], array($return[1]));
         echo "call func run " . (microtime(true) - $callstarttime) . "\n";
     }
 }