function readLine($file, $ServerInfo) { if (file_exists($file)) { $fd = fopen($file, "r"); while ($buffer = fgets($fd)) { $data = explode(":", substr($buffer, 20, strlen($buffer))); if (strstr($buffer, "addcash")) { $function = explode(";", $data[0]); } else { if (strstr($buffer, "pickitem")) { $function = explode(";", $data[1]); } else { $function = explode(";", $data[2]); } } $log = array(); $log['time'] = substr($buffer, 0, 19); $log['type'] = $function[0]; $log['function'] = $function[1]; $log['text'] = $buffer; unset($function[0], $function[1]); foreach ($function as $k => $v) { $newdata = explode("=", $v); $log['data'][$newdata[0]] = $newdata[1]; } $result = array(); // if($log['function'] != 'logout') // { //continue; // print_R($log['data']); // } //echo "\n".$log['function']; switch ($log['function']) { //登陆 case "login": $oUser = new Lm_User(); $oLogin = new Lm_Login(); $UserInfo = $oUser->GetUserById($log['data']['AccountID']); if ($UserInfo['UserId']) { $FirstLogin = $oLogin->getFirstLogin($UserInfo['UserId'], $ServerInfo['AppId'], $ServerInfo['PartnerId'], $ServerInfo['ServerId']); $DataArr = array('UserId' => $log['data']['AccountID'], 'UserLoginIP' => $log['data']['IP'], 'LoginTime' => strtotime($log['time']), 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId'], 'UserSourceId' => $UserInfo['UserSourceId'], 'UserSourceDetail' => $UserInfo['UserSourceDetail'], 'UserSourceActionId' => $UserInfo['UserSourceActionId'], 'UserSourceProjectId' => $UserInfo['UserSourceProjectId'], 'UserRegTime' => $UserInfo['UserRegTime'], 'FirstLoginTime' => $FirstLogin ? $FirstLogin : strtotime($log['time'])); $insertLog = $oLogin->InsertLoginLog($DataArr, $UserInfo['UserName']); } else { break; } break; //创建角色 //创建角色 case "newname": $DataArr = array('UserId' => $log['data']['AccountID'], 'CharacterLevel' => 1, 'CharacterName' => iconv('GBK', 'UTF-8//IGNORE', $log['data']['Name']), 'CharacterCreateTime' => strtotime($log['time']), 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId']); $oCharacter = new Lm_Character(); $insertLog = $oCharacter->CreateCharacter($DataArr); break; //获得永久英雄 //获得永久英雄 case "addhero": $DataArr = array('UserId' => $log['data']['AccountID'], 'CharacterLevel' => $log['data']['Level'], 'HeroId' => $log['data']['HeroID'], 'AddReason' => $log['data']['Reason'], 'HeroNum' => $log['data']['HeroNum'], 'TimeLimit' => 0, 'HeroAddTime' => strtotime($log['time']), 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId']); $oHerolog = new Lm_Hero(); //$insertLog = $oHerolog->InsertHeroAddLog($DataArr); break; //获得时效英雄 //获得时效英雄 case "addtimehero": $DataArr = array('UserId' => $log['data']['AccountID'], 'CharacterLevel' => $log['data']['Level'], 'HeroId' => $log['data']['HeroID'], 'AddReason' => $log['data']['Reason'], 'HeroNum' => $log['data']['HeroNum'], 'TimeLimit' => $log['data']['validtime'], 'HeroAddTime' => strtotime($log['time']), 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId']); $oHerolog = new Lm_Hero(); //$insertLog = $oHerolog->InsertHeroAddLog($DataArr); break; //切换英雄 //切换英雄 case "changehero": $DataArr = array('UserId' => $log['data']['AccountID'], 'CharacterLevel' => $log['data']['Level'], 'CurHeroId' => $log['data']['CurHeroID'], 'NewHeroId' => $log['data']['NewHeroID'], 'HeroChangeTime' => strtotime($log['time']), 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId']); $oHerolog = new Lm_Hero(); //$insertLog = $oHerolog->InsertHeroChangeLog($DataArr); break; //接取任务 //接取任务 case "accepttask": $DataArr = array('UserId' => $log['data']['AccountID'], 'CharacterLevel' => $log['data']['Level'], 'TaskId' => $log['data']['TaskID'], 'TaskType' => $log['data']['TaskType'], 'HeroAcceptTaskTime' => strtotime($log['time']), 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId']); $oTask = new Lm_Task(); $insertLog = $oTask->InsertCharacterAcceptTaskLog($DataArr); break; //完成任务 //完成任务 case "taskcomplete": $DataArr = array('UserId' => $log['data']['AccountID'], 'TaskId' => $log['data']['TaskID'], 'TaskType' => $log['data']['TaskType'], 'HeroTaskCompleteTime' => strtotime($log['time']), 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId']); $oTask = new Lm_Task(); $insertLog = $oTask->InsertCharacterTaskCompleteLog($DataArr); break; //商城购买 //商城购买 case "shopitem": $DataArr = array('UserId' => $log['data']['AccountID'], 'CharacterLevel' => $log['data']['Level'], 'ItemId' => $log['data']['ItemID'], 'ItemNum' => $log['data']['ItemNum'], 'AppCoin' => $log['data']['Gold'], 'AppCoinLast' => $log['data']['LastGold'], 'ItemPrice' => intval($log['data']['Gold'] / $log['data']['ItemNum']), 'PurchaseTime' => strtotime($log['time']), 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId']); $oPurchase = new Lm_Purchase(); $insertLog = $oPurchase->InsertPurchaseLog($DataArr); $replaceArr = array('UserId' => $log['data']['AccountID'], 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId'], 'LastMoney' => $log['data']['LastGold'], 'MoneyType' => 1); $replace = $oPurchase->ReplaceUserLastmoney($replaceArr); $insertLog = $insertLog * $replace; break; //npc购买 //npc购买 case "npcitem": $DataArr = array('UserId' => $log['data']['AccountID'], 'CharacterLevel' => $log['data']['Level'], 'NpcID' => $log['data']['NpcID'], 'ItemId' => $log['data']['ItemID'], 'ItemNum' => $log['data']['ItemNum'], 'Money' => $log['data']['Money'], 'MoneyType' => $log['data']['MoneyType'], 'LastMoney' => $log['data']['LastMoney'], 'NpcPurchaseTime' => strtotime($log['time']), 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId']); $oPurchase = new Lm_Purchase(); $insertLog = $oPurchase->InsertNpcPurchaseLog($DataArr); $replaceArr = array('UserId' => $log['data']['AccountID'], 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId'], 'LastMoney' => $log['data']['LastMoney'], 'MoneyType' => $log['data']['MoneyType']); $replace = $oPurchase->ReplaceUserLastmoney($replaceArr); $insertLog = $insertLog * $replace; break; //角色死亡日志 //角色死亡日志 case "dead": $DataArr = array('UserId' => $log['data']['AccountID'], 'CharacterLevel' => $log['data']['Level'], 'MonsterId' => $log['data']['MonsterSlkID'], 'HeroId' => $log['data']['HeroID'], 'SlkId' => $log['data']['SlkID'], 'CharacterDeadTime' => strtotime($log['time']), 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId']); $oCharacter = new Lm_Character(); //$insertLog = $oCharacter->InsertCharacterDeadLog($DataArr); break; //角色进入副本 //角色进入副本 case "enterectype": $DataArr = array('UserId' => $log['data']['AccountID'], 'CharacterLevel' => $log['data']['Level'], 'HeroId' => $log['data']['HeroID'], 'TeamNum' => $log['data']['TeamNum'], 'SlkId' => $log['data']['SlkID'], 'EctypeId' => $log['data']['EctypeID'], 'CharacterSlkEnterTime' => strtotime($log['time']), 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId']); $oTask = new Lm_Task(); $insertLog = $oTask->InsertCharacterSlkLog($DataArr); break; //角色离开副本 //角色离开副本 case "leaveectype": $bindArr = array($log['data']['AccountID'], $log['data']['SlkID'], $log['data']['EctypeID'], $ServerInfo['AppId'], $ServerInfo['PartnerId'], $ServerInfo['ServerId']); $DataArr = array('CharacterSlkLeaveTime' => strtotime($log['time']), 'CharacterLeaveType' => intval($log['data']['Reason'])); $oTask = new Lm_Task(); $CharacterSlkEnterTime = $oTask->GetSlkIdMapLog($bindArr, 'CharacterSlkEnterTime'); if ($CharacterSlkEnterTime) { $updateLog = $oTask->LeaveSlk($CharacterSlkEnterTime, $DataArr, $bindArr, $log['data']['AccountID']); $insertLog = $updateLog; } break; //登出 //登出 case "logout": $oUser = new Lm_User(); $oLogin = new Lm_Login(); $UserInfo = $oUser->GetUserById($log['data']['AccountID']); if ($UserInfo['UserId']) { $DataArr = array('UserId' => $log['data']['AccountID'], 'LogoutTime' => strtotime($log['time']), 'LoginTime' => $log['data']['TimeStamp'], 'ServerId' => $ServerInfo['ServerId']); $insertLog = $oLogin->LogoutByTime($DataArr, $UserInfo['UserName']); } else { break; } break; // $DataArr = array( // 'UserId'=>$log['data']['AccountID'], // 'LogoutTime'=>strtotime($log['time']), // 'AppId'=>$ServerInfo['AppId'], // 'PartnerId'=>$ServerInfo['PartnerId'], // 'ServerId'=>$ServerInfo['ServerId'], // 'LoginId'=>$log['data']['LoginID'], // 'LogoutLevel'=>$log['data']['Level'], // 'LogoutReason'=>$log['data']['Reason'], // 'MaxPing'=>$log['data']['MaxPing'], // 'MinPing'=>$log['data']['MinPing'], // ); // // $oCharacter = new Lm_Character(); // $insertLog = $oCharacter->InsertCharacterLogoutLog($DataArr); // break; // $DataArr = array( // 'UserId'=>$log['data']['AccountID'], // 'LogoutTime'=>strtotime($log['time']), // 'AppId'=>$ServerInfo['AppId'], // 'PartnerId'=>$ServerInfo['PartnerId'], // 'ServerId'=>$ServerInfo['ServerId'], // 'LoginId'=>$log['data']['LoginID'], // 'LogoutLevel'=>$log['data']['Level'], // 'LogoutReason'=>$log['data']['Reason'], // 'MaxPing'=>$log['data']['MaxPing'], // 'MinPing'=>$log['data']['MinPing'], // ); // // $oCharacter = new Lm_Character(); // $insertLog = $oCharacter->InsertCharacterLogoutLog($DataArr); // break; case "levelup": $DataArr = array('UserId' => $log['data']['AccountID'], 'CharacterLevel' => $log['data']['Level'], 'CharacterLevelUpTime' => strtotime($log['time']), 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId']); $oCharacter = new Lm_Character(); $insertLog = $oCharacter->InsertcharacterLevelUpLog($DataArr); $updateLog = $oCharacter->updateCharacterInfo($log['data']['AccountID'], $ServerInfo['ServerId'], array('CharacterLevel' => $log['data']['Level'])); echo "\tupdate:" . $updateLog . "\n"; break; case "tower": $DataArr = array('UserId' => $log['data']['AccountID'], 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'ServerId' => $ServerInfo['ServerId'], 'EctypeID' => $log['data']['EctypeID'], 'CreateTowerTime' => strtotime($log['time']) - $log['data']['RunTime'] / 1000, 'EndTowerTime' => strtotime($log['time']), 'CharacterLevel' => $log['data']['Level'], 'HeroID' => $log['data']['HeroID'], 'SlkID' => $log['data']['SlkID'], 'TowerIndex' => $log['data']['Index'], 'PlayerIndex' => $log['data']['PlayerIndex'], 'PlayerNum' => $log['data']['PlayerNum'], 'RunTime' => $log['data']['RunTime']); $oTask = new Lm_Task(); $insertLog = $oTask->insertTowerLog($DataArr); break; } // if($insertLog) // { // echo "\tinsert:".$insertLog."\n"; // } } fclose($fd); } else { echo iconv("utf-8", "gbk", "文件" . $file . "不存在\n"); } }
public function createExchangeQueueByUser($UserId, $ServerId, $Coin) { $oServer = new Config_Server(); $oApp = new Config_App(); $ServerInfo = $oServer->getRow($ServerId); //服务器存在 if ($ServerInfo['ServerId']) { $AppInfo = $oApp->getRow($ServerInfo['AppId']); if ($AppInfo['AppId']) { $oUser = new Lm_User(); $UserInfo = $oUser->GetUserById($UserId); //用户存在 if ($UserInfo['UserId']) { $time = time(); //初始化兑换信息 $ExchangeInfo = array('OrderId' => 0, 'AppId' => $ServerInfo['AppId'], 'PartnerId' => $ServerInfo['PartnerId'], 'Coin' => $Coin, 'ServerId' => $ServerInfo['ServerId'], 'UserId' => $UserInfo['UserId'], 'AppCoin' => $Coin * $AppInfo['exchange_rate'], 'UserSourceId' => $UserInfo['UserSourceId'], 'UserSourceDetail' => $UserInfo['UserSourceDetail'], 'UserSourceProjectId' => $UserInfo['UserSourceProjectId'], 'UserSourceActionId' => $UserInfo['UserSourceActionId'], 'UserRegTime' => $UserInfo['UserRegTime'], 'ExchangeStatus' => 0, 'ReTryCount' => 0, 'ExchangeType' => 3, 'CreateExchangeTime' => $time, 'ExchangeId' => date("YmdHis", $time) . sprintf("%04d", rand(1, 9999)), 'ToSendTime' => $time); $this->db->begin(); $queueTable = Base_Widget::getDbTable($this->table_exchange_queue); //添加兑换队列 $addQueue = $this->db->insert($queueTable, $ExchangeInfo); $coinUpdate = $oUser->updateUserCoin($UserInfo['UserId'], $Coin * -1); //扣款 if ($addQueue && $coinUpdate) { //执行 $this->db->commit(); return $ExchangeInfo['ExchangeId']; } else { $this->db->rollBack(); return false; } } else { return false; } } else { return false; } } else { return false; } }
public function SocketCreateCharacter($buff) { $oCharacter = new Lm_Character(); $oUser = new Lm_User(); $ServerList = @(include __APP_ROOT_DIR__ . "/etc/Server.php"); $format = "V1uLength/V1uID/v1Type/C1MsgLevel/C1Line/V1UserID/V1ZoneID/C*"; $unpackArr = @unpack($format, $buff); $arrName = ""; foreach ($unpackArr as $key => $value) { if (is_int($key)) { $arrName .= chr($value); } } $Character['UserId'] = $unpackArr['UserID']; $Character['CharacterName'] = str_replace("", "", iconv('GBK', 'UTF-8//IGNORE', $arrName)); $Character['ServerId'] = $unpackArr['ZoneID']; $Character['CharacterLevel'] = 1; $Character['CharacterCreateTime'] = time(); if ($Character['UserId']) { //验证用户名有效性 if (strlen($Character['CharacterName']) >= 4 && strlen($Character['CharacterName']) <= 20) { //查询用户 $UserInfo = $oUser->GetUserById($Character['UserId']); if ($UserInfo['UserId']) { //判断用户所选服务器大区是否存在 $ServerInfo = $ServerList[$Character['ServerId']]; if ($ServerInfo['ServerId']) { $Character['AppId'] = $ServerInfo['AppId']; $Character['PartnerId'] = $ServerInfo['PartnerId']; $CharacterInfo = $oCharacter->getCharacterInfoByUser($Character['UserId'], $Character['ServerId']); if (count($CharacterInfo) == 0) { $AddLog = $oCharacter->CreateCharacter($Character); if ($AddLog) { $result = array('return' => 1, 'comment' => "角色创建成功"); } else { $result = array('return' => 0, 'comment' => "角色创建失败"); } } else { $result = array('return' => 0, 'comment' => "您已经在此服务器有角色,无法重复创建"); } } else { $result = array('return' => 0, 'comment' => "您所选择的服务器不存在"); } } else { $result = array('return' => 2, 'comment' => "无此用户"); } } else { $result = array('return' => 0, 'comment' => "请输入合法的用户名"); } } else { $result = array('return' => 0, 'comment' => "请选择用户"); } return $result; }