/** * @var int 历史充值总金额(单位:分) */ public $charge_amt = 0; // /** * @var int 游戏内赠送游戏币总额 */ public $gift_cash = 0; // // // // ------------字段声明------------- /** * 玩家仓库 * @var StoreModel */ public $store; /** * 建筑 * @var {} */ public $buildings; /** * 英雄 * @var UserGameHeroModel */ public $heros; /** * 私有字段 * @var PrivateStateModel */ public $privateState; /** * @var UserSecretShopModel 玩家神秘商城数据 */ public $userSecretshop; /** * 关卡 * @var UserGateDifficulty */ public $gates; /** * * @var UserPVPModel pvp信息 */ public $pvp; /** * 战斗队伍配置信息 * @var UserGateDifficulty */ public $heroTeamConfig; /** * 神兽图鉴数据 * @var HeroManualModel */ public $heroManual; /** * 新手引导 * @var object */ public $NewbieGuide; /** * @var UserProfile 角色画像 */ public $profile; /** * 用于给各个字段赋默认初始值 * @return \UserGameModel */ public function initialize() { if (!GameConfig::primordial_data()) { throw new \Exception("常量错误!"); } $this->gold = GameConfig::primordial_data()->User_Gold; $this->cash = GameConfig::primordial_data()->User_Cash; $this->xp = GameConfig::primordial_data()->User_XP; $this->maxXp = 0; $this->level = 1; $this->name = '聂风'; $this->spar = 0; $this->img = GameConfig::primordial_data()->User_img; # 添加默认战队设置 $this->heroTeamConfig = JsonUtil::encode(GameConfig::primordial_data()->User_HeroTeamConfig); } /** * 构造函数 * @param type $arg */ public function __construct($arg = null) { if (null === $arg) { # 未传参数的情况下 $this->buildings = ObjectInit(); # 建筑数据 $this->heros = new UserGameHeroModel(); # 英雄数据 $this->heros->InitializeHero(); # 添加初始英雄 $this->store = new StoreModel(); # 背包数据 $this->store->initialize(); # 添加默认物品 $this->privateState = new PrivateStateModel(); # 私有字段 $this->privateState->initialize(); # 初始化默认数据 $this->gates = new UserGateDifficulty(); # 初始化关卡默认数据 $this->heroManual = new HeroManualModel(); # 初始化图鉴数据结构 $this->NewbieGuide = ObjectInit(); # 初始化新手引导结构 $this->pvp = new UserPVPModel(); # 初始化pvp模块 } else { # 实参 parent::__construct($arg); # 调用Object的构造函数 } $this->profile = new UserProfile(); # 初始化用户画像模块 } // /** * 设置钻石数 * @param UserGameModel $user * @param int $amt 数量 */ static public function set_Cash($user, $amt) { if ($amt > 0 && isset($user) && isset($user->cash)) { $user->cash = $amt; return true; } return false; } /** * 扣除玩家晶石 * @param UserGameModel $user * @param int $amt */ static public function Consume_Spar($user, $amt) { if ($amt > 0 && isset($user) && isset($user->spar)) { if ($user->spar - $amt >= 0) { $user->spar -= $amt; return true; } } return false; } /** * 扣除玩家钻石 * @param UserGameModel $user * @param int $amt * @return bool 成功与否 */ static public function Consume_Cash($user, $amt) { if ($amt > 0 && isset($user) && isset($user->cash)) { if ($user->cash - $amt >= 0) { $user->cash -= $amt; return true; } } return false; } /** * 扣除玩家金币 * @param UserGameModel $user * @param int $amt */ static public function Consume_Gold($user, $amt) { if ($amt > 0 && isset($user) && isset($user->gold)) { if ($user->gold - $amt >= 0) { $user->gold -= $amt; return true; } } return false; } /** * 扣除玩家友情点 * @param UserGameModel $user * @param int $amt */ static public function Consume_FriendShipPoint($user, $amt) { if ($amt > 0 && isset($user) && isset($user->friendPoint)) { if ($user->friendPoint - $amt >= 0) { $user->friendPoint -= $amt; return true; } } return false; } /** * 扣除玩家碎片 * @param UserGameModel $user * @param int $segmentId 碎片ID * @param int $amt 数量 * @return boolean true 成功, false 失败 */ static public function Consume_HeroSegment($user, $segmentId, $amt) { if ($amt > 0 && isset($user)) { if (CommUtil::isPropertyExists($user->store->segement, $segmentId)) { if ($user->store->segement->$segmentId - $amt >= 0) { $user->store->segement->$segmentId -= $amt; return true; } } } return false; } /** * 增加用户钻石 * @param UserGameModel $user * @param type $amt * @return type */ static function Add_Cash($user, $amt) { // 防御代码,异常情况记录日志后直接返回 if (!$user || $amt <= 0) { CLog::err("增加用户钻石出现错误: $user, $amt", "UserGameModel"); return ErrCode::err_innerfault; } $user->cash += $amt; return ErrCode::ok; } /** * 增加用户友情点 * @param UserGameModel $user * @param type $amt * @return type */ static function Add_FriendPoint($user, $amt) { // 防御代码,异常情况记录日志后直接返回 if (!$user || $amt <= 0) { CLog::err("增加用户友情点出现错误: $user, $amt", "UserGameModel"); return ErrCode::err_innerfault; } $user->friendPoint += $amt; return ErrCode::ok; } /** * 用户获得经验值 * @param Req $req Description * @param int $amt */ static function Add_Exp($req, $amt) { $user = $req->userInfo->game; if (!$user || $amt <= 0) {// 防御代码,异常情况记录日志后直接返回 CLog::err("增加用户经验出错: $user,$amt", "UserGameModel"); return; } $cfgLVs = GameConfig::playerlevel(); $user->xp += $amt; $curLevel = $user->level; $nextLevel = $curLevel + 1; while ($user->xp >= $cfgLVs->$nextLevel->xp_required) { // 超过升级所需经验 if ($user->level < glc()->Game_MaxPlayerLevel) {// 如果未到达最大等级 $user->level++; $curLevel = $user->level; $nextLevel = $curLevel + 1; if (!CommUtil::isPropertyExists($cfgLVs, $curLevel)) { throw new \Exception("取英雄升级常量数据失败." . $curLevel . "级"); } // $user->level = $nextLevel; $user->maxXp = $cfgLVs->$nextLevel->xp_required; // StatProc::UserLevel($nowlv); // 等级统计 // todo:: 发发宝箱奖励, 如果有的话 if (false !== strpos($cfgLVs->$nextLevel->boxReward, ',')) { $boxes = split(',', $cfgLVs->$nextLevel->boxReward); foreach ($boxes as $boxId) { StoreProc::putBoxexInStore($user->store, $boxId, 1); } } } else {// 如果已到达最大等级则仅补齐缺失的经验即可 $user->xp = $user->maxXp; # 经验不能超过最大值 break; } } if ($user->level != $curLevel) { # 插入玩家升级的系统消息 SystemProc::UserLevelUp($req->zoneid, $user, $user->level); } } /** * 用户获得金币 * @param UserGameModel $user 玩家数据 * @param int $amt */ static function Add_Gold($mem, $user, $amt) { if (!$user || $amt <= 0) {// 防御代码,异常情况记录日志后直接返回 CLog::err("增加用户金币出错: $user , $amt", "UserGameModel"); return ErrCode::err_innerfault; } $user->gold += $amt; return ErrCode::ok; } /** * 给玩家增加体力 * @param UserGameModel $user * @param int $amt * @return type */ static function Add_tili($req, $amt) { $user = $req->userInfo->game; if (!$user || $amt <= 0) {// 防御代码,异常情况记录日志后直接返回 CLog::err("增加用户体力出错. : ($user,$amt)", "UserGameModel"); return ErrCode::err_innerfault; } ActiveProc::ChangeTili($amt, $req); // $user->tili += $amt; return ErrCode::ok; } // // // }