浏览代码

fixed: 找不到这个英雄. Ps.给全队英雄加经验的时候未判断空位huid=0的情况.

gwang 5 年之前
父节点
当前提交
c0d63767ab

+ 4 - 0
Gameserver/Amfphp/main.php

@@ -49,6 +49,7 @@ function CPayInit() {
 /**
  * get dao instance,
  * @version 2019年12月23日 经过梦幻星工场2一年多的使用, 未发现特别明显的bug. 决定侧重使用. -- 王刚
+ *           2017.06.23     第一版 学习自禅道的开源框架.    -- 王刚
  * @staticvar type $a
  * @return \dao  注意: dao并非什么好东西,只是一些改进尝试, 稳定性, 性能, 效率尚未得到证明.-gwang 2017.06.23
  */
@@ -140,6 +141,9 @@ function InitZoneId() {
  * @param type $msg
  */
 function Err($err, $msg = "") {
+    if (ErrCode::ok == $err) {
+        CLog::err("Err()方法的参数err==ok, 那你还调个蛋的Err()!!!");
+    }
     if (Index::$isDebugging) {                                                  # 组织调试信息       
         Index::$debugMsg .= "<br/><font color='red'>发生错误逻辑中断($err):$msg</font>"; # 错误信息用红色显示    
         Index::$debugMsg .= '<br/>内存分配:' . number_format(memory_get_peak_usage() / 1024) . 'kb,';

+ 1 - 5
Gameserver/Amfphp/model/User/UserGameModel.php

@@ -345,16 +345,13 @@ class UserGameModel extends Object_ext {
         $user->xp += $amt;
         $curLevel = $user->level;
         $nextLevel = $curLevel + 1;
-
         while ($user->xp >= $cfgLVs->$nextLevel->xp_need) {                     # 超过升级所需经验
             if ($user->level < glc()->Game_MaxPlayerLevel) {                    # 如果未到达最大等级
                 $user->level++;
                 $user->xp -= $cfgLVs->$nextLevel->xp_need;
                 $curLevel = $user->level;
                 $nextLevel = $curLevel + 1;
-                if (!CommUtil::isPropertyExists($cfgLVs, $nextLevel)) {
-                    Err(ErrCode::err_const_no, "取英雄升级常量数据失败." . $nextLevel . "级");
-                }
+                my_Assert(CommUtil::isPropertyExists($cfgLVs, $nextLevel), ErrCode::err_const_no); // "取英雄升级常量数据失败." . $nextLevel . "级");
                 $user->maxXp = $cfgLVs->$nextLevel->xp_need;
 //                StatProc::UserLevel($nowlv);                                 // 等级统计
                 // todo:: 发发宝箱奖励, 如果有的话 
@@ -390,7 +387,6 @@ class UserGameModel extends Object_ext {
         my_Assert($user, "user为空");
         my_Assert($amt >= 0, "体力amt小于0");
         ActiveProc::ChangeTili($amt);
-        // $user->tili += $amt; 
     }
 
 // </editor-fold>

+ 6 - 2
Gameserver/Amfphp/process/FightProc/SweepGatesProc.php

@@ -44,7 +44,9 @@ class SweepGatesProc {
         $req->userInfo->game->gates->Times++;
 ///增加英雄经验 组长去掉
         foreach ($TeamObj as $heroUID) {
-            HeroProc::HeroAddEXP($heroUID, $tili);
+            if ($heroUID > 0) {
+                HeroProc::HeroAddEXP($heroUID, $tili);
+            }
         }
 
         $rewardsArr = explode(",", $rewards);                                   // 开箱子抽奖品
@@ -213,7 +215,9 @@ class SweepGatesProc {
 //        UserGameModel::Add_Exp($req->mem, $req->userInfo->game, $tili);         # 老的增加玩家经验的去掉
 //        
         foreach ($TeamObj as $heroUID) {
-            HeroProc::HeroAddEXP($heroUID, $heroExp);                           # 增加英雄经验 
+            if ($heroUID > 0) {
+                HeroProc::HeroAddEXP($heroUID, $heroExp);                       # 增加英雄经验 
+            }
         }
 
 

+ 5 - 19
Gameserver/Amfphp/process/StoreProc.php

@@ -346,11 +346,7 @@ class StoreProc {
                 break;
             }
         }
-
-//如果仓库道具移出时出错,则直接返回错误
-        if ($ok != ErrCode::ok) {
-            Err($ok);
-        }
+        my_Assert($ok == ErrCode::ok, $ok);    // 如果仓库道具移出时出错,则直接返回错误
         $gold = glc()->Compose_Pieces_Gold; ////临时用这个来算,等刷过数据再说
         echoLine($gold);
         $bDeal = UserGameModel::Consume_Gold($user, $gold);
@@ -1196,10 +1192,7 @@ class StoreProc {
 
         if ($type > 3 && $type < 8) {  // 从仓库出售宝石 出售可叠加的物品
             $ok = StoreProc::removeItemFromStore($store, $itemId, $count); // 支持移除指定数量
-//1.如果仓库道具移出时出错,则直接返回错误
-            if ($ok != ErrCode::ok) {
-                Err($ok);
-            }
+            my_Assert($ok == ErrCode::ok, $ok); //1.如果仓库道具移出时出错,则直接返回错误
             //   echo "弄弄";
             $gem = GameConfig::item_getItem($itemId); //  ConstProc::getItemConst($itemId);
             echo var_export($gem);
@@ -1215,10 +1208,7 @@ class StoreProc {
             UserProc::updateUserInfo();
         } else if ($type == 8) {  // 从仓库出售碎片 出售可叠加的物品
             $ok = StoreProc::removeItemFromStore($store, $itemId, $count); // 支持移除指定数量
-//1.如果仓库道具移出时出错,则直接返回错误
-            if ($ok != ErrCode::ok) {
-                Err($ok);
-            }
+            my_Assert($ok == ErrCode::ok, $ok); //1.如果仓库道具移出时出错,则直接返回错误
             //      echo "弄弄";
             $gem = GameConfig::segment_getItem($itemId); // ConstProc::getItemConst($itemId);
             //   echo var_export($gem);
@@ -1276,9 +1266,7 @@ class StoreProc {
             echoLine(":fs::");
             $ok = StoreProc::removeItemFromStore($store, $itemId, $count); // 支持移除指定数量
 //1.如果仓库道具移出时出错,则直接返回错误
-            if ($ok != ErrCode::ok) {
-                Err($ok);
-            }
+            my_Assert($ok == ErrCode::ok, $ok);
             echo "弄弄";
 
             $gem = GameConfig::item_getItem($itemId); // ConstProc::getItemConst($itemId);
@@ -1295,9 +1283,7 @@ class StoreProc {
         } else if ($type == 8) {  // 从仓库出售碎片 出售可叠加的物品
             $ok = StoreProc::removeItemFromStore($store, $itemId, $count); // 支持移除指定数量
 //1.如果仓库道具移出时出错,则直接返回错误
-            if ($ok != ErrCode::ok) {
-                Err($ok);
-            }
+            my_Assert($ok == ErrCode::ok, $ok);
             //      echo "弄弄";
             $gem = GameConfig::segment_getItem($itemId); // ConstProc::getItemConst($itemId);
             //   echo var_export($gem);

二进制
Gameserver/Docs/client.json


文件差异内容过多而无法显示
+ 0 - 0
Gameserver/Docs/client.txt


+ 0 - 71
Gameserver/Docs/improvements.md

@@ -1,71 +0,0 @@
-## 改进记录
-
-
-## 2017.11.12
-> author: gwang
- 
- 1. 添加阿里云短信SDK.
-
-## 2017.07.19
-> author: gwang
-> digest:  添加几个小优化点
-
-1. 类型智能感知问题, 增加了一个isEditor()方法, 永远返回false, 用法: isEditor() and $xx=new someClass();
-       比如: for($arr as $xx){
-           isEditor() and $xx=new someClass();
-           $xx->aaa; 后续代码中则可以按照someClass进行语法提示. 但是当程序运行的时候却不会受到赋值的影响.
-        }
-2. ClogHelper中增加一个Assert方法,  用法也同assert类似, 当条件不满足时将$errmsg写入日志, 
-      当条件满足的情况下,如果指定了$okmsg,则将$okmsg写入日志.否则无日志写入行为.
-
-
-## 2017.04.05
-> author: gwang
-> digest:  添加2个优化
-
-1. 常量数据增加了从代码中读取的方案.
-	1. 刷数据工具刷入数据的同时, 将数据写入PHP文件: return unserialize('datastr');
-	2. 刷数据工具输出一个总的获取配置数据的PHP类文件, 包含了获取所有配置信息的方法封装,  采用静态变量缓存来优化多次读取问题.
-	2. 读取数据的时候,先检查是否支持代码写入(define CodeGen_Enabled=false), true=>则 return include 'cfg_xxx.php'; 
-2. 简化了RedisConnect的传递方案, 采用global_mem()函数加静态变量的方法来取代通过参数传递. 
-
-## 2017.02.14
-
-> author: gwang
-> digest: 使框架真正成为了框架.
-
-1. 改进框架结构, 自动导入需要的proc和Model类,已经部分utils类也是按需加载.
-2. 效果: 减少每请求内存消耗, 提高程序单服务器并发性能. 
-3. 已经过对比测试: 按需加载模式相比原来并不会影响cpu效率, 也不会延长每请求的总处理时间长度.  
-
-
-## 2016-04-05
-> Author:gwang,
-> 
-> digest: 简要提几个近期的改进
-
-1. 通讯协议的改进
-	1. 原来的通讯协议数据层乃是amf,转入Unity后,就是普通的Querystring加上base64. base64对文本长度有3分之1的膨胀,因此是相当的浪费流量.经过考虑,利用Post协议中对流的规定.修改post方法中传输数据的格式,对QueryString进行deflate压缩后直接传给服务端.服务端接收到流之后,先解压为Querystring再继续后续处理. 这样的话,实际使用过程中,相对于base64,流量大幅压缩.
-		1. 可以提升玩家体验
-		2. 降低服务器带宽和配置要求,节省运营费用(指数级的)
-	2. 原来上一个版本,不管是post还是get,Querystring中都带有参数名.后来发现无需传参数名,可以直接给Querystring一个字符串即可.服务端完美接收.
-2.  请求响应时间监控,在index中添加了函数响应时间监控.
-	1.  所有请求的响应时间都做了监控.方便确认耗时函数,在开发期间即可有针对性的优化. 
-	2.  同时增加了智能化的判断,如果客户端来源不是调试模拟器,那么监控代码不运行.
-3.  取掉原AMFphp框架.如1中所说,现在已经没有使用AMF的条件了.所以去掉它,去掉的同时,也失去了它的后台调试页面,所以我([gwang]())自己仿制了一个后台调试页面,功能等同原来的.
-4.  在模块入口处的分发代码做了个小改动,不完美.能减少些预加载的文件数量,同时减少编码数量.
-5.  重点提一下Utils的改进.
-	1.  添加了OpensslUtil,能进行验签,保证发送方来自认证的客户端.
-	2.  添加时间辅助方法类,将原来散落于commonUtil的时间相关方法整理到里面.新增了毫秒和微秒的函数,还增加了一个用于统计渲染/逻辑执行消耗时间的辅助类.
-	3.  JsonUtil,在Json_decode的时候增加安全检查,以前若是参数不是合法的json串,执行过程会报错,现在则能够在遇到非Json格式的字符串时,直接返回原字符串.(意义:在Memc=>get()函数中的jsondecode时,遇到非json串也兼容了,可返回原值)
-	4.  添加HttpUtil,整理自腾讯平台给的SNSNetwork类和高健的HttpUtil类.
-		1.  提供Querystring的提取,解析操作.
-		2.  还提供封装了curl的服务端发送http请求的方法.
-		3.  提供了一个异步请求方法,未完善.
-	5.  commonUtil里面新增了压缩解压方法,用于刷后台数据程序的,暂时通用性不强.
-	6.  提取CMemutil,CmemdUtil,中共有方法为一个基类.
-		1.  让CMemutil,CmemdUtil和CRedisUtil继承自此基类.并统一实现原有方法.
-		2.  可以达到以前的旧项目完全兼容的地步,即,将以前的某个项目的实际数据库改为Redis,只在代码层面,切换一下CMemInit()中初始化的对象类型即可.
-	7.  CRedisUtil类扩展了自有特殊数据结构的操作方法.Hash,ZSet,Set,以及事务处理的相关方法.意义:
-		1.  以后的项目中使用高级数据结构可以极大的节省网络通信效率以及耗费在Json编解码上的CPU.可以节省运营费用.
-		2.  其高级数据结构对于开发上的便利性是非常巨大的.好多业务逻辑可以结合Redis提供的高级数据结构来实现,比如关系的实现就非常方便了.还有事务来解决一些竞争性的资源,还有排行榜的开发等等.

+ 4 - 1
Gameserver/Docs/改进记录.md

@@ -4,7 +4,10 @@
 > author: gwang
 > digets: 代码重整, 应用近两年来的改进
 
-1. 应用在近两年实践中的改进项.(各种精简、优化代码的写法)
+1. 应用在近两年实践中的改进项.(各种精简、优化代码的写法)  
+  1.1 比如Err(), my_assert(), my_default_obj(), my_default_arr()  
+  1.2 经过实践检验, ErrHandler和高性能Log模块已经更趋于实用.  
+  1.3 增加了PHP环境监察能力, PHP版本、基本模块检测.  
 2. 应用高健关于代码组织结构的思考.(参考openresty思想)
 
 

部分文件因为文件数量过多而无法显示