/**
* @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;
}
//
//
//
}