123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- <?php
- namespace loyalsoft;
- /**
- * 玩家基本信息
- * @author gwang(wanggangzero@qq.com)
- */
- class Info_UserBase 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 $headImg;
- /**
- * @var int 头像框Id
- */
- public $imgBorderId = 0;
- /**
- * @var string 形象(龙骨)
- */
- public $img;
- /**
- * @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;
- /**
- * @var int 历史充值总金额(单位:分)
- */
- public $charge_amt = 0;
- /**
- * @var int 游戏内赠送游戏币总额
- */
- public $gift_cash = 0;
- /**
- * 言灵等级消耗的资源点
- * @var type
- */
- public $resPoint = 0;
- /**
- * 充值功能充值记录--2022-10-18废弃字段 --晨叶
- * -- 2022.10.18 重新启用, 商城累充功能 --gwang 2022.10.19 再次废弃
- * @var type
- */
- public $rechargeFun_amt = 0;
- /**
- * 购买金币次数
- * @var type
- */
- public $buyGoldNum = 0;
- /**
- * 新解锁的头像框
- * @var type
- */
- #[ArrayType]
- public $headImgFrameList = array();
- public function initialize() {
- my_Assert(GameConfig::primordial_data(), "找不到账号初始化数据"); # 防御
- $this->gold = GameConfig::primordial_data()->User_Gold;
- $this->cash = GameConfig::primordial_data()->User_Cash;
- $this->xp = GameConfig::primordial_data()->User_XP;
- $this->tili = GameConfig::globalsettings()->TiliMaxVal; # 最大体力
- $this->maxXp = 0;
- $this->level = 1;
- $this->name = '步惊云';
- $this->spar = 0;
- $this->headImg = GameConfig::primordial_data()->User_head;
- $this->img = GameConfig::primordial_data()->User_img;
- }
- // <editor-fold defaultstate="collapsed" desc=" 方法 ">
- //
- /**
- * 增加资源点
- * @param int $amt
- */
- function Add_resPoint($amt) {
- my_Assert($amt >= 0, "参数为负");
- $this->resPoint += $amt;
- }
- /**
- * 扣除资源点
- * @param type $amt
- * @return boolean true:成功, false:资源点不足
- */
- function Consume_ResPoint($amt) {
- if ($amt > 0) {
- if ($this->resPoint - $amt >= 0) {
- $this->resPoint -= $amt;
- return true;
- }
- }
- return false;
- }
- /**
- * 给玩家增加体力
- * @param int $amt
- */
- function Add_tili($amt) {
- my_Assert($amt >= 0, "体力amt小于0");
- ActiveProc::ChangeTili($amt);
- }
- /**
- * 用户获得金币
- * @param int $amt
- */
- function Add_Gold($amt, $mask = 0) {
- my_Assert($amt >= 0, "参数为负");
- if ($mask == 1) {
- UserProc::CollectUserBaseParam(req()->cmd, 2, $this->gold, $amt, $this->gold + $amt, "关卡战斗掉落金币");
- } else {
- UserProc::CollectUserBaseParam(req()->cmd, 2, $this->gold, $amt, $this->gold + $amt, "获得金币");
- }
- $this->gold += $amt;
- }
- /**
- * 扣除玩家金币
- * @param int $amt
- * @return boolean true:成功, false:金币不足
- */
- function Consume_Gold($amt, $mask = 0) {
- if ($amt > 0) {
- if ($this->gold - $amt >= 0) {
- UserProc::CollectUserBaseParam(req()->cmd, 2, $this->gold, $amt, $this->gold - $amt, "消耗金币");
- $this->gold -= $amt;
- return true;
- }
- }
- return false;
- }
- /**
- * 增加用户钻石
- * @param type $amt
- */
- function Add_Cash($amt, $mask = 0) {
- my_Assert($amt >= 0, "amt值为负");
- if ($mask == 1) {
- UserProc::CollectUserBaseParam(req()->cmd, 3, $this->cash, $amt, $this->cash + $amt, "关卡战斗掉落钻石");
- } else {
- UserProc::CollectUserBaseParam(req()->cmd, 3, $this->cash, $amt, $this->cash + $amt, "获得钻石");
- }
- $this->cash += $amt;
- }
- /**
- * 扣除玩家钻石
- * @param int $amt
- * @return bool 成功与否
- */
- function Consume_Cash($amt, $mask = 0) {
- if ($amt >= 0) {
- if ($this->cash - $amt >= 0) {
- UserProc::CollectUserBaseParam(req()->cmd, 3, $this->cash, $amt, $this->cash - $amt, "消耗钻石");
- $this->cash -= $amt;
- return true;
- }
- }
- return false;
- }
- /**
- * 增加用户友情点
- * @param type $amt
- */
- function Add_FriendPoint($amt) {
- my_Assert($amt >= 0, "amt值为负");
- $this->friendPoint += $amt; # 业务逻辑
- }
- /**
- * 扣除玩家友情点
- * @param int $amt
- */
- function Consume_FriendShipPoint($amt) {
- if ($amt > 0) {
- if ($this->friendPoint - $amt >= 0) {
- $this->friendPoint -= $amt;
- return true;
- }
- }
- return false;
- }
- /**
- * 用户获得经验值
- * @param int $amt
- */
- function Add_Exp($amt) {
- my_Assert($amt >= 0, "amt值为负");
- $cfgLVs = GameConfig::playerlevel();
- UserProc::CollectUserBaseParam(req()->cmd, 1, $this->xp, $amt, $this->xp + $amt, "获得经验");
- $this->xp += $amt;
- $initLevel = $curLevel = $this->level;
- $nextLevel = $curLevel + 1;
- while ($this->xp >= $cfgLVs->$nextLevel->xp_need) { # 超过升级所需经验
- if ($this->level < glc()->Game_MaxPlayerLevel) { # 如果未到达最大等级
- $this->level++;
- $this->xp -= $cfgLVs->$nextLevel->xp_need;
- $curLevel = $this->level;
- $nextLevel = $curLevel + 1;
- my_Assert(CommUtil::isPropertyExists($cfgLVs, $nextLevel), ErrCode::err_const_no); // "取英雄升级常量数据失败." . $nextLevel . "级");
- $this->maxXp = $cfgLVs->$nextLevel->xp_need;
- // StatProc::UserLevel($nowlv); # 等级统计
- } else { # 如果已到达最大等级则仅补齐缺失的经验即可
- $this->xp = $this->maxXp; # 经验不能超过最大值
- break;
- }
- }
- if ($this->level != $initLevel) { # 插入玩家升级的系统消息
- SystemProc::UserLevelUp(req()->zoneid, $this, $this->level);
- TaskProc::OnUserLevelUp($this->level); # 通知任务模块,这里应该有事件模块
- EventProc::OnUserLevelup($initLevel, $this->level); # 事件模块
- RankProc::recordPlayerLevelInfo(req()->uid, $this->level, req()->zoneid);
- }
- }
- //
- // </editor-fold>
- }
|