123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421 |
- <?php
- namespace loyalsoft;
- /**
- * Description of UserGameModel
- * 游戏数据
- * @author gwang (mail@wanggangzero.cn)
- */
- class UserGameModel extends Object_ext
- {
- /**
- * 第一次登录时间
- * @var int
- */
- public $firstLogin;
- /**
- * 上次登录时间
- * @var int
- */
- public $lastLogin;
- /**
- * 上次活动时间
- * @var int
- */
- public $lastSaveTs;
- /**
- * @var int 当前等级
- */
- public $level; //
- /**
- * @var string 昵称
- */
- public $name; // 昵称
- /**
- * @var string 头像
- */
- public $img; // 头像
- /**
- * @var int 头像框Id
- */
- public $imgBorderId = 0;
- /**
- * @var int 金币
- */
- public $gold; // 金币
- /**
- * 钻石
- * @var int
- */
- public $cash; //
- /**
- * 分解后得倒的晶石
- * @var int
- */
- public $spar;
- /**
- * 体力值
- * @var int
- */
- public $tili = 120; //体力
- /**
- * 当前经验
- */
- public $xp = 0;
- /**
- * 升级经验
- * @var type
- */
- public $maxXp = 0;
- /**
- * @var int 好友赠送友情点数
- */
- public $friendPoint = 0;
- //
- // <editor-fold defaultstate="collapsed" desc=" 统计字段 ">
- /**
- * @var int 历史充值总金额(单位:分)
- */
- public $charge_amt = 0; //
- /**
- * @var int 游戏内赠送游戏币总额
- */
- public $gift_cash = 0; //
- // </editor-fold>
- //
- // ------------字段声明-------------
- /**
- * 玩家仓库
- * @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(); # 初始化用户画像模块
- }
- // <editor-fold defaultstate="collapsed" desc=" functions ">
- /**
- * 设置钻石数
- * @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;
- }
- // </editor-fold>
- // <editor-fold defaultstate="collapsed" desc="私有方法">
- // </editor-fold>
- }
|