Browse Source

言灵召唤相关代码.

gwang 4 năm trước cách đây
mục cha
commit
9650ddef7e
28 tập tin đã thay đổi với 707 bổ sung299 xóa
  1. 15 0
      Gameserver/Amfphp/base/CmdCode.php
  2. 10 0
      Gameserver/Amfphp/base/ErrCode.php
  3. 0 1
      Gameserver/Amfphp/base/HashSaver.php
  4. 49 1
      Gameserver/Amfphp/configs/GameConfig.php
  5. 9 8
      Gameserver/Amfphp/configs/GameConstants.php
  6. 6 0
      Gameserver/Amfphp/configs/defines/const_and.php
  7. 6 0
      Gameserver/Amfphp/configs/defines/const_ios.php
  8. 15 15
      Gameserver/Amfphp/configs/defines/const_web.php
  9. 2 2
      Gameserver/Amfphp/model/Const/primordial_data.php
  10. 1 1
      Gameserver/Amfphp/model/Const/sm_gatelevel.php
  11. 39 3
      Gameserver/Amfphp/model/Const/sm_item_base.php
  12. 1 1
      Gameserver/Amfphp/model/Const/sm_item_segment.php
  13. 2 2
      Gameserver/Amfphp/model/Const/sm_item_yanling.php
  14. 38 0
      Gameserver/Amfphp/model/Const/sm_item_yanlingbook.php
  15. 2 2
      Gameserver/Amfphp/model/Const/sm_task.php
  16. 38 0
      Gameserver/Amfphp/model/Const/sm_task_active_reward.php
  17. 83 0
      Gameserver/Amfphp/model/Const/sm_task_daily.php
  18. 8 8
      Gameserver/Amfphp/model/Const/sm_task_node.php
  19. 7 0
      Gameserver/Amfphp/model/User/EnumTaskType.php
  20. 5 3
      Gameserver/Amfphp/model/User/TaskInfo.php
  21. 1 88
      Gameserver/Amfphp/model/User/UserGameModel.php
  22. 30 0
      Gameserver/Amfphp/model/User/UserTaskInfo.php
  23. 102 114
      Gameserver/Amfphp/process/StoreProc.php
  24. 202 22
      Gameserver/Amfphp/process/TaskProc.php
  25. 3 2
      Gameserver/Amfphp/process/UserProc.php
  26. 15 0
      Gameserver/Amfphp/test.php
  27. 15 18
      Gameserver/Amfphp/util/msmapi/api_sdk/vendor/sebastian/diff/tests/ParserTest.php
  28. 3 8
      Gameserver/nbproject/private/private.xml

+ 15 - 0
Gameserver/Amfphp/base/CmdCode.php

@@ -254,6 +254,11 @@ class CmdCode {
      * [6203]普通任务 - 设置关注任务
      */
     const cmd_Task_setAttentionTask = 6203;
+
+    /**
+     * [6204]日常任务 - 领取活跃度奖励
+     */
+    const cmd_Task_getActiveReward = 8204;
     // </editor-fold>
     //
     // <editor-fold defaultstate="collapsed" desc="英雄操作码 - 63xx">
@@ -465,6 +470,16 @@ class CmdCode {
      * 卸下言灵
      */
     const cmd_store_UnWieldYanling = 6417;
+
+    /**
+     * 言灵召唤书碎片合成召唤书
+     */
+    const cmd_store_mergeYanlingbook = 6418;
+
+    /**
+     * 利用言灵召唤书召唤言灵
+     */
+    const cmd_store_callyanling = 6419;
 // </editor-fold>
     //
     // <editor-fold defaultstate="collapsed" desc="活动操作码 - 65xx">

+ 10 - 0
Gameserver/Amfphp/base/ErrCode.php

@@ -493,6 +493,11 @@ class ErrCode {
      * 未知装备类型
      */
     const store_equip_type = 3411;
+
+    /**
+     * 言灵召唤书常量数据有误
+     */
+    const store_book_info = 3412;
 // </editor-fold>
     //  
     // <editor-fold defaultstate="collapsed" desc="   任务错误码 35xx系列   ">
@@ -511,6 +516,11 @@ class ErrCode {
      * 任务奖励已经领取
      */
     const task_reward_geted = 3503;
+
+    /**
+     * 日常任务活跃点数不足
+     */
+    const task_activePoint_notenough = 3504;
 // </editor-fold>
 // 
     // <editor-fold defaultstate="collapsed" desc="    交互操作 36xx    ">

+ 0 - 1
Gameserver/Amfphp/base/HashSaver.php

@@ -9,7 +9,6 @@ namespace loyalsoft;
  * @version 1.0.0 创建. 2年以前就跟高健讨论过的理念,我一直没有落到实处(高健已经使用了). --gwang 2020.4.24
  */
 class HashSaver extends Object_ext {
-    //
     //
     // <editor-fold defaultstate="collapsed">
 

+ 49 - 1
Gameserver/Amfphp/configs/GameConfig.php

@@ -6,7 +6,7 @@ namespace loyalsoft;
 // 由CodeGenerator创建。
 // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
 // author: gwang 
-// 日期: 2020-07-08 16:38:44
+// 日期: 2020-07-22 14:26:25
 ////////////////////
 
 /**
@@ -430,6 +430,22 @@ class GameConfig {
         return self::get_hash_item('gate_carbon', $itemid);
     }
 
+    /**
+     * 活跃点奖励表
+     * @return \task_active_reward
+     */
+    public static function task_active_reward() {
+        static $a = null;
+        return self::initValue($a, 'task_active_reward');
+    }
+
+    /**
+     * @return \sm_task_active_reward task_active_reward item数据 
+     */
+    public static function task_active_reward_getItem($itemid) {
+        return self::get_hash_item('task_active_reward', $itemid);
+    }
+
     /**
      * 竞技场 上榜单奖励
      * @return \pvp_rankreward
@@ -510,6 +526,22 @@ class GameConfig {
         return self::get_hash_item('gate_carbon_content', $itemid);
     }
 
+    /**
+     * 每日任务
+     * @return \task_daily
+     */
+    public static function task_daily() {
+        static $a = null;
+        return self::initValue($a, 'task_daily');
+    }
+
+    /**
+     * @return \sm_task_daily task_daily item数据 
+     */
+    public static function task_daily_getItem($itemid) {
+        return self::get_hash_item('task_daily', $itemid);
+    }
+
     /**
      * 抽奖保底数据
      * @return \choujiang_baodi
@@ -1200,6 +1232,22 @@ class GameConfig {
         return self::get_hash_item('rankreward_passgate', $itemid);
     }
 
+    /**
+     * 言灵召唤书
+     * @return \item_yanlingbook
+     */
+    public static function item_yanlingbook() {
+        static $a = null;
+        return self::initValue($a, 'item_yanlingbook');
+    }
+
+    /**
+     * @return \sm_item_yanlingbook item_yanlingbook item数据 
+     */
+    public static function item_yanlingbook_getItem($itemid) {
+        return self::get_hash_item('item_yanlingbook', $itemid);
+    }
+
     /**
      * 当前版本(时间戳)
      * @return \ver

+ 9 - 8
Gameserver/Amfphp/configs/GameConstants.php

@@ -73,15 +73,16 @@ class GameConstants {
 // </editor-fold>
 }
 
-//                                                                            <=> 元数据定义 <=>
-define("META_CASH_ITEMID", 399001);                                             # 宝石物品id
-define("META_GOLD_ITEMID", 399002);                                             # 金币物品id
-define("META_tili_ITEMID", 399004);                                             # 体力的物品ID
-define('META_FriendShipPoit_ItemId', 399005);                                   # 友情点的物品ID
-define("META_SPAE_ITEMID", 3);                                                  # Spar(能量晶石)物品id
+//                                                            <=> 元数据定义 <=>
+define("META_EXP", 0);                                                          # 指挥官经验
+define("META_GOLD_ITEMID", 1);                                                  # 金币物品id
+define("META_CASH_ITEMID", 2);                                                  # 宝石物品id
+define("META_tili_ITEMID", 3);                                                  # 体力的物品ID
+define('META_FriendShipPoit_ItemId', 4);                                        # 友情点的物品ID
+define("META_PVPCOIN_ITEMID", 5);                                               # Spar(能量晶石)物品id
 define("META_YUANBAOITEMID", 7);                                                # 元宝物品ID
-//                                                                          TODO: config the c-s offset data
-define("OFFSET_TIMESPAN", -6);                                                  # 服务端相对于客户端的偏移时间戳
+//                                                            TODO: config the c-s offset data
+define("OFFSET_TIMESPAN", -3);                                                  # 服务端相对于客户端的偏移时间戳
 define("OFFSET_MSGTIME", 30);                                                   # 客户端服务端时间戳偏移最大误差
 
 if (GAME_ONLINE) {                                                              # 线上版本配置文件

+ 6 - 0
Gameserver/Amfphp/configs/defines/const_and.php

@@ -1,2 +1,8 @@
 <?php
 
+/**
+ * 用于安卓平台的特定常量
+ * @author gwang <wanggangzero@qq.com>
+ */
+
+// put your code here

+ 6 - 0
Gameserver/Amfphp/configs/defines/const_ios.php

@@ -1,2 +1,8 @@
 <?php
 
+/**
+ * 用于IOS平台的特定常量
+ * @author gwang <wanggangzero@qq.com>
+ */
+
+// put your code here

+ 15 - 15
Gameserver/Amfphp/configs/defines/const_web.php

@@ -6,27 +6,27 @@ namespace loyalsoft;
  * 常量, 用于WEB(qzoen)平台
  * @author gwang (mail@wanggangzero.cn)
  */
-define("Sandbox", false);                                 # 是否使用沙箱
-define("V3_APPID", "1105051445");                         # 应用appid
-define("V3_APPKEY", "YZPU1tiuh0m93TlF");                  # 应用appkey
+define("Sandbox", false);                                                       # 是否使用沙箱
+define("V3_APPID", "1105051445");                                               # 应用appid
+define("V3_APPKEY", "YZPU1tiuh0m93TlF");                                        # 应用appkey
 //                                                    TODO: config the 活动 data
-define("ACT_VIP_OPEN", "UM130621161914261");              # 开通包月礼包活动号 【待换】
-define("ACT_VIP_DAY", "UM160201122324671");               # 黄钻每日礼包活动号 √
-define("ITEM_VIPNEWER", 8000);                            # 黄钻新手礼包id
+define("ACT_VIP_OPEN", "UM130621161914261");                                    # 开通包月礼包活动号 【待换】
+define("ACT_VIP_DAY", "UM160201122324671");                                     # 黄钻每日礼包活动号 √
+define("ITEM_VIPNEWER", 8000);                                                  # 黄钻新手礼包id
 //                                                    TODO: config the PAY data 赠送游戏币
-define("PAY_PRESENTCASH_ACTID", "UM130621161914261");     # 赠送游戏币的活动号
-define("PAY_PRESENTCSAH_GIFTID", "UM131024195342422");    # 赠送游戏币的礼包ID
-define("ITEM_YEARVIPNEWER", 8010);                        # 黄钻新手礼包id
+define("PAY_PRESENTCASH_ACTID", "UM130621161914261");                           # 赠送游戏币的活动号
+define("PAY_PRESENTCSAH_GIFTID", "UM131024195342422");                          # 赠送游戏币的礼包ID
+define("ITEM_YEARVIPNEWER", 8010);                                              # 黄钻新手礼包id
 //
 if (Sandbox) {
-    define("V3_HOST", "119.147.19.43");                   # 沙箱测试用v3地址
+    define("V3_HOST", "119.147.19.43");                                         # 沙箱测试用v3地址
 } else {
-    define("V3_HOST", "openapi.tencentyun.com");          # 正式发布时v3地址
+    define("V3_HOST", "openapi.tencentyun.com");                                # 正式发布时v3地址
 }
 
-if (GAME_ONLINE) {                                        # 外网
-#                                                         # CDN资源服务器地址
+if (GAME_ONLINE) {                                                              # 外网
+#                                                                               # CDN资源服务器地址
     define("CDN_HOST", "http://app1105051445.imgcache.qzoneapp.com/app1105051445/qzone/");
-} else {                                                  # 内网
-    define("CDN_HOST", "http://192.168.10.1:89/"); // CDN资源服务器地址
+} else {                                                                        # 内网
+    define("CDN_HOST", "http://192.168.10.1:89/");                              # CDN资源服务器地址
 }

+ 2 - 2
Gameserver/Amfphp/model/Const/primordial_data.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-05-14 17:05:07
+ // 日期: 2020-07-09 15:04:23
 ////////////////////
 
 
@@ -40,7 +40,7 @@ class primordial_data
     public $User_img;
 
     /**
-    * @var Object 初始英雄  
+    * @var Object 初始英雄_附加言灵id  
     */
     public $User_Heros;
 

+ 1 - 1
Gameserver/Amfphp/model/Const/sm_gatelevel.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-07-03 17:06:21
+ // 日期: 2020-07-08 18:48:12
 ////////////////////
 
 

+ 39 - 3
Gameserver/Amfphp/model/Const/sm_item_base.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-05-28 10:33:25
+ // 日期: 2020-07-22 14:22:05
 ////////////////////
 
 
@@ -45,12 +45,48 @@ class sm_item_base
     public $itemDesc;
 
     /**
-    * @var Int32 物品大归类 1武器,2碎片,3材料, 4 言灵 default(0) 
+    * @var Int32 物品大归类 0 系统 1武器,2碎片,3材料, 4 言灵 default(0) 
     */
     public $itemType;
 
     /**
-    * @var Int32 物品小分类,详细区分每类物品的作用: 101武器, 201碎片, 301buff卡, 302礼包, 303箱子, 304药剂, 305成长基因,306强化石,307合成素材 default(0) 
+    * @var Int32 物品大归类 0 系统 1武器,2碎片,3材料, 4 言灵
+    *  物品小分类,
+    *  详细区分每类物品的作用: 
+    *      Gold = 1, // 金币
+    *      Gem = 2,  // 钻石
+    *      Weapon = 101,             // 武器
+    *      Segment = 201,            // 英雄碎片
+    *      YanlingBookSegement =202, // 言灵书碎片
+    *      BuffCard = 301,           // 消耗品 
+    *   经验卡
+    *      Package = 302,            // 消耗品 
+    *   礼包
+    *      Pill = 303,               // 药品(体力)
+    *      Gene = 311,               // 基础材料 
+    *   基因(角色经验丹)
+    *      StrengthStone = 312,      // 基础材料 
+    *   强化石(用于武器、言灵强化)
+    *      AdvancedStone = 321,      // 进阶材料 
+    *   进阶石(用于武器、言灵升阶)
+    *      AdvancedFineStone = 322,  // 进阶材料 
+    *   进阶 精华石(用于武器、言灵的升阶)
+    *      ForgingMaterial = 323,    // 锻造材料 
+    *   用于武器言灵锻造
+    *      Box = 331,                 // 活动道具 
+    *   宝箱
+    *      // 备注
+    *      BattleItem_HP = 341,       // 战场道具 
+    *   血瓶
+    *      BattleItem_MP = 342,       // 战场道具 
+    *   蓝瓶
+    *      BattleItem_Box = 343,      // 战场道具 
+    *   箱子
+    *      YanlingBook =351,          // 言灵召唤书 
+    *   
+    *      YanlingCallMaterials =361, // 言灵召唤/进阶材料
+    *      //...合成素材等...
+    *      YanLing = 401,            // 言灵 default(0) 
     */
     public $subType;
 

+ 1 - 1
Gameserver/Amfphp/model/Const/sm_item_segment.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-02-12 08:05:17
+ // 日期: 2020-07-22 09:41:19
 ////////////////////
 
 

+ 2 - 2
Gameserver/Amfphp/model/Const/sm_item_yanling.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-05-28 10:34:04
+ // 日期: 2020-07-22 13:55:34
 ////////////////////
 
 
@@ -35,7 +35,7 @@ class sm_item_yanling
     public $roleType;
 
     /**
-    * @var Int32 武器初始星级  
+    * @var Int32 初始星级,(升阶用的)  
     */
     public $star;
 

+ 38 - 0
Gameserver/Amfphp/model/Const/sm_item_yanlingbook.php

@@ -0,0 +1,38 @@
+<?php
+
+////////////////////
+ // 由CodeGenerator创建。
+ // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
+ // author: gwang 
+ // 日期: 2020-07-22 14:23:02
+////////////////////
+
+
+/**
+ * Static Model item_yanlingbook 言灵召唤书
+ */
+class sm_item_yanlingbook
+{
+
+    /**
+    * @var Int32 查询用的ID  
+    */
+    public $typeId;
+
+    /**
+    * @var Int32 可以召唤的言灵ID default(0) 
+    */
+    public $yanling_id;
+
+    /**
+    * @var String 合成召唤书需要的碎片数量: itemid,num default(0) 
+    */
+    public $seg_num;
+
+    /**
+    * @var String 消耗的材料清单: itemId,num;itemId,num;....  
+    */
+    public $cost_materials;
+
+}
+

+ 2 - 2
Gameserver/Amfphp/model/Const/sm_task.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-07-08 10:45:38
+ // 日期: 2020-07-16 14:40:42
 ////////////////////
 
 
@@ -15,7 +15,7 @@ class sm_task
 {
 
     /**
-    * @var String 任务id  
+    * @var Int32 任务id  
     */
     public $typeId;
 

+ 38 - 0
Gameserver/Amfphp/model/Const/sm_task_active_reward.php

@@ -0,0 +1,38 @@
+<?php
+
+////////////////////
+ // 由CodeGenerator创建。
+ // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
+ // author: gwang 
+ // 日期: 2020-07-17 14:09:25
+////////////////////
+
+
+/**
+ * Static Model task_active_reward 活跃点奖励表
+ */
+class sm_task_active_reward
+{
+
+    /**
+    * @var UInt32 用途未知!!请到数据库中添加字段注释。  
+    */
+    public $id;
+
+    /**
+    * @var String 节点名称  
+    */
+    public $name;
+
+    /**
+    * @var String 领取奖励要求的活跃点数  
+    */
+    public $num;
+
+    /**
+    * @var String 奖励:id,num;id,num;...  
+    */
+    public $reward;
+
+}
+

+ 83 - 0
Gameserver/Amfphp/model/Const/sm_task_daily.php

@@ -0,0 +1,83 @@
+<?php
+
+////////////////////
+ // 由CodeGenerator创建。
+ // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
+ // author: gwang 
+ // 日期: 2020-07-17 13:46:56
+////////////////////
+
+
+/**
+ * Static Model task_daily 每日任务
+ */
+class sm_task_daily
+{
+
+    /**
+    * @var Int32 用途未知!!请到数据库中添加字段注释。  
+    */
+    public $id;
+
+    /**
+    * @var Int32 任务id, 这里和剧情任务的id段分开  
+    */
+    public $typeId;
+
+    /**
+    * @var Int32 完成任务后指挥官获得经验 default(0) 
+    */
+    public $exp;
+
+    /**
+    * @var Int32 完成任务后的奖励物品id,num;id,num default(0) 
+    */
+    public $activePoint;
+
+    /**
+    * @var String [废弃2020年7月8日10:49:06]按面板查询任务: 剧情, 每日,挑战,新手, 副本。  
+    */
+    public $ban;
+
+    /**
+    * @var String 任务名称  
+    */
+    public $name;
+
+    /**
+    * @var String 前往功能模块  
+    */
+    public $goto_module;
+
+    /**
+    * @var String 任务描述  
+    */
+    public $desc;
+
+    /**
+    * @var String [废弃2020年7月8日10:49:12]任务的阶段(10,20)代表10级到20级之间会接到  (0,10)代表10级之前会接到  
+    */
+    public $taskrank;
+
+    /**
+    * @var String 任务类型:  
+    */
+    public $tasktype;
+
+    /**
+    * @var String 完成任务所需的第一个参数  
+    */
+    public $canshu1;
+
+    /**
+    * @var String 完成任务所需的第二个参数  
+    */
+    public $canshu2;
+
+    /**
+    * @var String 【废弃】奖励字符串""  
+    */
+    public $reward;
+
+}
+

+ 8 - 8
Gameserver/Amfphp/model/Const/sm_task_node.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-07-08 11:14:25
+ // 日期: 2020-07-09 15:58:40
 ////////////////////
 
 
@@ -15,15 +15,20 @@ class sm_task_node
 {
 
     /**
-    * @var String 节点id  
+    * @var Int32 节点id  
     */
     public $typeId;
 
     /**
-    * @var String 该节点的前置节点(解锁)  
+    * @var Int32 该节点的前置节点(解锁)  
     */
     public $preNode;
 
+    /**
+    * @var Int32 指挥官最低等级要求  
+    */
+    public $lvlLimit;
+
     /**
     * @var String 节点名称  
     */
@@ -39,11 +44,6 @@ class sm_task_node
     */
     public $taskList;
 
-    /**
-    * @var String 指挥官最低等级要求  
-    */
-    public $lvlLimit;
-
     /**
     * @var String 提示图标(小)  
     */

+ 7 - 0
Gameserver/Amfphp/model/User/EnumTaskType.php

@@ -18,5 +18,12 @@ class EnumTaskType extends Enum {
     const PvPScoreTo = 32;
     const UserPowerTo = 33;
     const UserCollectScoreTo = 34;
+    // ----------- 每日任务 -------
+    const DailyLogin = 101;
+    const DailyHeroImprove = 102;
+    const DailyGatesWin = 103;
+    const DailyPVP = 104;
+    const DailyRankChalenge = 105;
+    const DailyShopping = 106;
 
 }

+ 5 - 3
Gameserver/Amfphp/model/User/TaskInfo.php

@@ -12,9 +12,6 @@ namespace loyalsoft;
  * 任务信息
  */
 class TaskInfo extends Object_ext {
-//    public function __construct($tid) {
-//        $this->taskId = $tid;
-//    }
 
     /**
      *
@@ -34,6 +31,11 @@ class TaskInfo extends Object_ext {
     public $tag1;
     public $tag2;
 
+    /**
+     * @var int 计数器
+     */
+    public $counter = 0;
+
     /**
      * @var int 奖励是否已领取 0/1
      */

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

@@ -8,84 +8,6 @@ namespace loyalsoft;
  * @author gwang (mail@wanggangzero.cn)
  */
 class UserGameModel extends HashSaver {
-//
-//    /**
-//     * 第一次登录时间
-//     * @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 UserBaseInfo 基础数据
@@ -166,16 +88,7 @@ class UserGameModel extends HashSaver {
      * @return \UserGameModel
      */
     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->maxXp = 0;
-//        $this->level = 1;
-//        $this->name = '聂风';
-//        $this->spar = 0;
-//        $this->img = GameConfig::primordial_data()->User_img;
-
+        my_Assert(GameConfig::primordial_data(), "找不到账号初始化数据");         # 防御 
         $this->baseInfo = new UserBaseInfo();
         $this->baseInfo->initialize();
 

+ 30 - 0
Gameserver/Amfphp/model/User/UserTaskInfo.php

@@ -33,6 +33,21 @@ class UserTaskInfo extends Object_ext {
      */
     public $taskListDaily;
 
+    /**
+     * @var int 每日重置记录
+     */
+    public $dailyResetTs = 0;
+
+    /**
+     * @var int 每日活跃点数
+     */
+    public $dailyActivePoint = 0;
+
+    /**
+     * @var array 日常任务活跃度阶段奖励领取记录
+     */
+    public $dailyActiveGetedRewardArr = array();
+
     public function __construct($args = null) {
         parent::__construct($args);
         if (null == $args) {
@@ -53,6 +68,21 @@ class UserTaskInfo extends Object_ext {
         $this->AfterInit();
     }
 
+    public function resetDailyTask() {
+        if (tsDay($this->dailyResetTs - 18000) < tsDay() || $this->dailyResetTs <= 0) { # 每天5点
+            $dts = GameConfig::task_daily();
+            $this->taskListDaily = ObjectInit();
+            foreach ($dts as $tid => $t) {
+                $task = new TaskInfo();
+                $task->taskId = $tid;
+                $this->taskListDaily->$tid = $task;
+            }
+            $this->dailyActivePoint = 0;
+            $this->dailyActiveGetedRewardArr = array();
+            $this->dailyResetTs = now();                                        # 更新刷新时间
+        }
+    }
+
     function AddPlotTask($taskId) {
         $tmo = GameConfig::task_getItem($taskId);
         my_Assert(null != $tmo, ErrCode::err_const_no);

+ 102 - 114
Gameserver/Amfphp/process/StoreProc.php

@@ -30,6 +30,8 @@ class StoreProc {
                 return StoreProc::refreshStore($req);
 //            case CmdCode::cmd_store_decomposeItem:                              # 6406 分解道具
 //                return StoreProc::decomposeItem($req);
+            case CmdCode::cmd_store_Testcmd:                                    # 6407 测试方法
+                return StoreProc::Test($req);
 //            case CmdCode::cmd_store_ItemUpgrade:                                # 6408 装备升级
 //                return StoreProc::ItemUpgrade($req);
 //            case CmdCode::cmd_store_GemCompose:                                 # 6408 装备合成
@@ -39,10 +41,7 @@ class StoreProc {
                 return StoreProc::WearEquipToHero($req);
             case CmdCode::cmd_store_UnWieldEquip:                               # 6411 将该装备从指定英雄上脱下
                 return StoreProc::UnWieldEquip($req);
-            case CmdCode::cmd_store_WearYanling:                                # 6416 装备言灵
-                return StoreProc::WearYanlingToHero($req);
-            case CmdCode::cmd_store_UnWieldYanling:                             # 6417 卸下言灵
-                return StoreProc::UnWieldYanling($req);
+
 // 
             case CmdCode::cmd_store_AddMaxPacketNum:                            # 6412 扩展包裹格子数量
                 return StoreProc::AddPacketNum($req);
@@ -51,13 +50,68 @@ class StoreProc {
 ////                return StoreProc::MeltEquip($req);
 //            case CmdCode::cmd_store_PiecesCompose:                              # 6415 碎片合成
 //                return StoreProc::composePieces($req);
-            case CmdCode::cmd_store_Testcmd:                                    # 6407 测试方法
-                return StoreProc::Test($req);
+            case CmdCode::cmd_store_WearYanling:                                # 6416 装备言灵
+                return StoreProc::WearYanlingToHero($req);
+            case CmdCode::cmd_store_UnWieldYanling:                             # 6417 卸下言灵
+                return StoreProc::UnWieldYanling($req);
+            case CmdCode::cmd_store_mergeYanlingbook:                           # 6418 利用言灵召唤书碎片合成召唤书
+                return self::MergeYanlingBook($req);
+            case CmdCode::cmd_store_callyanling:                                # 6419 利用言灵召唤书召唤言灵
+                return self::CallYanlingByBook($req);
             default:
                 Err(ErrCode::cmd_err);
         }
     }
 
+    /**
+     * [6418] 利用言灵召唤书碎片合成召唤书
+     * @param req $req
+     */
+    static function MergeYanlingBook($req) {
+        list($bookId) = $req->paras;                                            # 参数 言灵召唤书id
+        $user = $req->userInfo->game;
+        $bookIdCfg = GameConfig::item_yanlingbook_getItem($bookId);
+        my_Assert(null != $bookIdCfg, ErrCode::err_const_no);                   # 找不到言灵书常量
+        list($segId, $num) = explode(',', $bookIdCfg->seg_num);                 # 解析所需碎片信息
+        $err = self::removeItemFromStore($user->store, $segId, $num);           # 扣除 碎片
+        my_Assert(ErrCode::ok == $err, $err);                                   # 防御扣除碎片失败
+        self::PutOverlyingItemInStore($bookId);                                 # 添加召唤书
+        UserProc::updateUserInfo();                                             # 回写数据 
+        return Resp::ok(array(
+                    "store" => $req->userInfo->game->store, #                   # 目前来看只涉及到items变化
+        ));
+    }
+
+    /**
+     * [6419] 利用言灵召唤书召唤言灵
+     * @param req $req
+     */
+    static function CallYanlingByBook($req) {
+        // 参数: 言灵id
+        // 扣除并检查召唤书数量
+        // 扣除并检查消耗材料数量
+        // 添加言灵
+        // 返回 新的store->item数据
+        list($bookId) = $req->paras;                                            # 参数 利用的言灵召唤书id
+        $user = $req->userInfo->game;
+        $bookIdCfg = GameConfig::item_yanlingbook_getItem($bookId);
+        my_Assert(null != $bookIdCfg, ErrCode::err_const_no);                   # 找不到言灵书常量
+        $err = self::removeItemFromStore($user->store, $bookId);                # 扣除 召唤书
+        my_Assert(ErrCode::ok == $err, $err);                                   # 防御扣除召唤书失败
+        $costs = explode(';', $bookIdCfg->cost_materials);
+        my_Assert(count($costs) > 0, ErrCode::store_book_info);                 # 召唤书数据有误
+        foreach ($costs as $c) {
+            list($itemId, $num) = explode(',', $bookIdCfg->cost_materials);     # 消耗材料
+            $err = self::removeItemFromStore($user->store, $itemId, $num);      # 扣除 材料
+            my_Assert(ErrCode::ok == $err, $err);                               # 防御扣除材料失败
+        }
+        self::PutOverlyingItemInStore($bookIdCfg->yanling_id);                  # 添加言灵
+        UserProc::updateUserInfo();                                             # 回写数据 
+        return Resp::ok(array(
+                    "store" => $req->userInfo->game->store, #                   # 目前来看只涉及到items变化
+        ));
+    }
+
     /**
      * 测试方法
      * @param Req $req
@@ -144,81 +198,20 @@ class StoreProc {
      * @param type $itemcount
      * @return type
      */
-    static function removeItemFromStore($store, $itemId, $itemcount) {
-        $typeId = substr($itemId, 0, 3);
-        switch ($typeId) {
-            case '307':                                     #经验书
-            case '305':                                     #扫荡券
-            case '304':                                         # 宝石
-                if (CommUtil::isPropertyExists($store->items, $itemId)) { //
-                    if ($store->items->$itemId >= $itemcount) {  // 数量足够
-                        $store->items->$itemId -= $itemcount;
-                        if ($store->items->$itemId == 0) {
-                            unset($store->items->$itemId);
-                        }
-                        return ErrCode::ok;
-                    } else {
-                        return ErrCode::store_itemnotenough; // 道具数量不足
-                    }
-                } else {
-                    return ErrCode::store_itemno_err;
-                }
-                break;
-            case '310':                                         # 碎片
-            case '311':                                         # 碎片
-            case '312':                                         # 碎片
-            case '313':                                         #装备 碎片
-            case '314':                                         #装备 碎片
-            case '315':                                         #装备 碎片
-                if (CommUtil::isPropertyExists($store->segement, $itemId)) { //
-                    if ($store->segement->$itemId >= $itemcount) {  // 数量足够
-                        $store->segement->$itemId -= $itemcount;
-                        if ($store->segement->$itemId == 0) {
-                            unset($store->segement->$itemId);
-                        }
-                        return ErrCode::ok;
-                    } else {
-                        return ErrCode::store_itemnotenough; // 道具数量不足
-                    }
-                } else {
-                    return ErrCode::store_itemno_err;
+    static function removeItemFromStore($store, $itemId, $itemcount = 1) {
+        if (CommUtil::isPropertyExists($store->items, $itemId)) {
+            if ($store->items->$itemId >= $itemcount) {                         # 数量足够
+                $store->items->$itemId -= $itemcount;
+                if ($store->items->$itemId == 0) {
+                    unset($store->items->$itemId);
                 }
-                break;
-            default :                                           # 其他
-                Err(ErrCode::store_itemcantuse);
-                break;
-        }
-    }
-
-    /**
-     * 从仓库移出
-     * @param type $itemId
-     * @param StoreModel $store
-     * @return boolean
-     */
-    static function removeFromStore($itemId, &$store) {
-//return ErrCode::succeed;
-        $typid = substr("$itemId", 0, 3);  # 取道具分类
-        $ok = false;
-        switch ($typid) {
-            case "101": # 英雄 错误了的路径
-                break;
-            case '102': # 英雄碎片
-                if (CommUtil::isPropertyExists($store->segement, "$itemId") && $store->segement->$itemId > 0) {
-                    $store->segement->$itemId -= 1;
-                    $ok = true;
-                }
-                break;
-            case "203": # 宝箱
-                if (CommUtil::isPropertyExists($store->boxes, "$itemId") && $store->boxes->$itemId > 0) {
-                    $store->boxes->$itemId -= 1;
-                    $ok = true;
-                }
-                break;
-            default:
-                break;
+                return ErrCode::ok;
+            } else {
+                return ErrCode::store_itemnotenough;                            # 道具数量不足
+            }
+        } else {
+            return ErrCode::store_itemno_err;                                   # 没有这个道具
         }
-        return $ok;
     }
 
     /**
@@ -228,16 +221,11 @@ class StoreProc {
      * @return boolean
      */
     static function removeEquipFromStore($uid, $typeId, &$req) {
-
         $ok = false;
         echo var_export($uid);
         if (CommUtil::isPropertyExists($req->userInfo->game->store->equipment, $uid)) {
-
-            //  $con=  ConstProc::getItemConst($req->mem, $req->userInfo->game->store->equipment->$uid->typeId);
-
-
+//  $con=  ConstProc::getItemConst($req->mem, $req->userInfo->game->store->equipment->$uid->typeId); 
             echo var_export($req->userInfo->game->store->equipment->$uid->typeId);
-
             if ($typeId == $req->userInfo->game->store->equipment->$uid->typeId) {
                 echo "typeid相同";
                 unset($req->userInfo->game->store->equipment->$uid);
@@ -246,8 +234,6 @@ class StoreProc {
                 echo "typeid检验错误";
             }
         }
-
-
         return $ok;
     }
 
@@ -358,20 +344,23 @@ class StoreProc {
             list( $itemId, $num) = $val;                                        # ID, 数量
             $smItem = GameConfig::item_base_getItem($itemId);                   # 道具mo
             switch ($smItem->subType) {                                         # 根据类型分别添加到容器中
-                case 1:                                                         # 金币
+                case META_EXP:                                                  # 指挥官经验
+                    UserGameModel::Add_Exp($user->baseInfo, $num);
+                    break;
+                case META_GOLD_ITEMID:                                          # 金币
                     UserGameModel::Add_Gold($user->baseInfo, $num);
                     break;
-                case 2:                                                         # 钻石
+                case META_CASH_ITEMID:                                          # 钻石
                     UserGameModel::Add_Cash($user->baseInfo, $num);
                     break;
-                case 3:                                                         # 体力       
+                case META_tili_ITEMID:                                          # 体力       
                     UserGameModel::Add_tili($req, $num);
                     break;
-                case 4:                                                         # 友情值
+                case META_FriendShipPoit_ItemId:                                # 友情值
                     UserGameModel::Add_FriendPoint($user->baseInfo, $num);
                     break;
-                case 5:
-                    $user->pvp->pvpCoins += $num;                               # 竞技币
+                case META_PVPCOIN_ITEMID:                                       # 竞技币
+                    $user->pvp->pvpCoins += $num;
                     break;
                 case 101:                                                       # 武器 
                     StoreProc::PutEquipInStore($itemId, $req);
@@ -395,7 +384,6 @@ class StoreProc {
                     Err(ErrCode::err_innerfault, "落入包裹时,出现了非法物品");
             }
         }
-//        UserProc::updateUserInfo();
         return ErrCode::ok;                                                     // 返回
     }
 
@@ -449,7 +437,7 @@ class StoreProc {
      * @param int $itemId
      * @param int $num
      */
-    static function PutOverlyingItemInStore($itemId, $num) {
+    static function PutOverlyingItemInStore($itemId, $num = 1) {
         $items = req()->userInfo->game->store->items;                           # dic: itemid=>number
         if (CommUtil::isPropertyExists($items, $itemId)) {                      # 如果仓库中已经有这种元素,则其数目+=num
             $items->$itemId += $num;
@@ -463,6 +451,7 @@ class StoreProc {
      * @param GoodsItemModel $itemModel
      * @param Req $req
      * @return type
+     * @deprecated since version now
      */
     static function addSeprateItem($itemModel, $req) {
         Err(ErrCode::err_method_obsoleted, "未更新包裹操作");
@@ -650,7 +639,7 @@ class StoreProc {
         $SegementObj = $req->userInfo->game->store->segement;
         $HeroObj = $req->userInfo->game->heros->collectHeros;
         $ItemNum = 0;
-        ////检查宝石类可叠加物品的格子占用
+////检查宝石类可叠加物品的格子占用
         if ($ItemObj) {
             foreach ($ItemObj as $value) {
                 $ItemNum++;
@@ -661,13 +650,13 @@ class StoreProc {
                 $ItemNum++;
             }
         }
-        ////检测装备类物品格子占用
+////检测装备类物品格子占用
         if ($EquipObj) {
             foreach ($EquipObj as $value) {
                 $ItemNum++;
             }
         }
-        ////检测英雄装备到身上的情况,装备到英雄身上不占格子,要减去.
+////检测英雄装备到身上的情况,装备到英雄身上不占格子,要减去.
         if ($HeroObj) {
             foreach ($HeroObj as $value) {
                 //  echo var_dump($HeroObj);
@@ -724,8 +713,7 @@ class StoreProc {
     }
 
 // </editor-fold>
-//
-// -------------- 已废弃的代码 -------------------------------
+// 
 //
 //
 // <editor-fold defaultstate="collapsed" desc="   出售   ">
@@ -740,7 +728,7 @@ class StoreProc {
         Err(ErrCode::err_method_obsoleted, "代码需要更新");
         $resp = new Resp();
         $mem = $req->mem;
-        //  $user = $req->userInfo->user;
+//  $user = $req->userInfo->user;
         $store = $req->userInfo->game->store; //$req->userInfo->game->store->items
 //客户端参数解析
         $type = $req->paras[0]; //1=神兽 2=建筑   //需要判断是否叠加
@@ -752,19 +740,19 @@ class StoreProc {
             $count = 1;
             $uid = $req->paras[2];
         }//物品的uid
-        ////0是type 1是itemid,2是uid或者是数量
+////0是type 1是itemid,2是uid或者是数量
 
         if ($type > 3 && $type < 8) {  // 从仓库出售宝石 出售可叠加的物品
             $ok = StoreProc::removeItemFromStore($store, $itemId, $count); // 支持移除指定数量
             my_Assert($ok == ErrCode::ok, $ok); //1.如果仓库道具移出时出错,则直接返回错误
-            //   echo "弄弄";
+//   echo "弄弄";
             $gem = GameConfig::item_getItem($itemId); //  ConstProc::getItemConst($itemId);
             echo var_export($gem);
 //2.检测是否存在该物品的原始物种
             if ($gem == null) {
                 Err(ErrCode::err_godpet_noconst);
             }
-            // 发金币
+// 发金币
 
             UserGameModel::Add_Gold($req->userInfo->game->baseInfo, $gem->maijia * $count);
             $ret = array('resp' => "succeed!");
@@ -773,14 +761,14 @@ class StoreProc {
         } else if ($type == 8) {  // 从仓库出售碎片 出售可叠加的物品
             $ok = StoreProc::removeItemFromStore($store, $itemId, $count); // 支持移除指定数量
             my_Assert($ok == ErrCode::ok, $ok); //1.如果仓库道具移出时出错,则直接返回错误
-            //      echo "弄弄";
+//      echo "弄弄";
             $gem = GameConfig::segment_getItem($itemId); // ConstProc::getItemConst($itemId);
-            //   echo var_export($gem);
+//   echo var_export($gem);
 //2.检测是否存在该物品的原始物种
             if ($gem == null) {
                 Err(ErrCode::err_godpet_noconst);
             }
-            // 发金币
+// 发金币
 
             UserGameModel::Add_Gold($req->userInfo->game->baseInfo, $gem->saleGoldPrice * $count);
             $ret = array('resp' => "succeed!");
@@ -822,10 +810,10 @@ class StoreProc {
         Err(ErrCode::err_method_obsoleted, "代码需要更新");
         $resp = new Resp();
         $mem = $req->mem;
-        //  $user = $req->userInfo->user;
+//  $user = $req->userInfo->user;
         $store = $req->userInfo->game->store; //$req->userInfo->game->store->items
 //客户端参数解析
-        ////0是type 1是itemid,2是uid或者是数量
+////0是type 1是itemid,2是uid或者是数量
 
         if ($type > 3 && $type < 8) {  // 从仓库出售宝石 出售可叠加的物品
             echoLine(":fs::");
@@ -840,7 +828,7 @@ class StoreProc {
             if ($gem == null) {
                 Err(ErrCode::err_godpet_noconst);
             }
-            // 发金币
+// 发金币
 
             UserGameModel::Add_Gold($req->userInfo->game->baseInfo, $gem->maijia * $count);
             $ret = array('resp' => "succeed!");
@@ -849,14 +837,14 @@ class StoreProc {
             $ok = StoreProc::removeItemFromStore($store, $itemId, $count); // 支持移除指定数量
 //1.如果仓库道具移出时出错,则直接返回错误
             my_Assert($ok == ErrCode::ok, $ok);
-            //      echo "弄弄";
+//      echo "弄弄";
             $gem = GameConfig::segment_getItem($itemId); // ConstProc::getItemConst($itemId);
-            //   echo var_export($gem);
+//   echo var_export($gem);
 //2.检测是否存在该物品的原始物种
             if ($gem == null) {
                 Err(ErrCode::err_godpet_noconst);
             }
-            // 发金币
+// 发金币
 
             UserGameModel::Add_Gold($req->userInfo->game->baseInfo, $gem->saleGoldPrice * $count);
             $ret = array('resp' => "succeed!");
@@ -898,7 +886,7 @@ class StoreProc {
         foreach ($obj as $value) {
             $type = $value[0];
             $itemId = $value[1];
-            ////先判断一下物品类型,如果是可叠加的,就按数量取值,如果是不可叠加的就按uid取值
+////先判断一下物品类型,如果是可叠加的,就按数量取值,如果是不可叠加的就按uid取值
             if ($type > 3) {
                 $count = intval($value[2]);  // 数量
                 $uid = 0;

+ 202 - 22
Gameserver/Amfphp/process/TaskProc.php

@@ -19,11 +19,42 @@ class TaskProc {
                 return TaskProc::GetTaskReward($req);
             case CmdCode::cmd_Task_setAttentionTask:                            # 6203 设置关注任务
                 return TaskProc::setAttentionTask($req);
+            case CmdCode::cmd_Task_getActiveReward:                             # 6204 领取日常任务活跃度阶段奖励
+                return TaskProc::getActiveReward($req);
             default:
                 return Err(ErrCode::cmd_err);
         }
     }
 
+    /**
+     * [6204] 领取日常任务活跃度阶段奖励
+     * @param req $req
+     */
+    static function getActiveReward($req) {
+        list($num) = $req->paras;                                               # 提取参数: 领奖的阶段
+        $userTask = $req->userInfo->game->task;
+        $rewardCfg = GameConfig::task_active_reward_getItem($num);              # 查找奖励配置
+        my_Assert(null != $rewardCfg, ErrCode::err_const_no);
+        // 判断尚未领取
+        my_Assert(!in_array($num, $userTask->dailyActiveGetedRewardArr), ErrCode::task_reward_geted);
+        // 判断活跃点数足够
+        my_Assert($userTask->dailyActivePoint > $num, ErrCode::task_activePoint_notenough);
+        // 按照配置发放奖励
+        $ok = StoreProc::AddMultiItemInStore($req, $rewardCfg->reward);
+        my_Assert($ok == ErrCode::ok, $ok);                                     # 发放成功
+        // 添加领取记录
+        $userTask->dailyActiveGetedRewardArr[] = $num;
+        // 回存数据
+        UserProc::updateUserInfo();
+        return Resp::ok(array(//                                                # 返回
+                    "gold" => $req->userInfo->game->baseInfo->gold,
+                    "cash" => $req->userInfo->game->baseInfo->cash,
+                    "tili" => $req->userInfo->game->baseInfo->tili,
+                    "store" => $req->userInfo->game->store,
+                    "task" => $req->userInfo->game->task
+        ));
+    }
+
     /**
      * [6203] 设置关注任务
      * @param req $req
@@ -36,7 +67,7 @@ class TaskProc {
         $taskItem = new TaskInfo($userTask->taskListPlot->$taskId);
         my_Assert($taskItem->rewardGeted < 1, ErrCode::task_reward_geted);      # 任务奖励尚未领取
         $userTask->curTaskId = $taskId;
-        var_dump($userTask);
+//        var_dump($userTask);
         UserProc::updateUserInfo();
         return Resp::ok(array("task" => $req->userInfo->game->task));
     }
@@ -58,26 +89,43 @@ class TaskProc {
     static function GetTaskReward($req) {
         list($taskId) = $req->paras;                                            # 提取参数: 任务id
         $userTask = new UserTaskInfo($req->userInfo->game->task);
-        # 根据任务类型分支不同任务容器 暂时未添加每日任务分支
-//        var_dump($userTask->taskListPlot);
-//        var_dump($req->userInfo->game->task);
-        my_Assert(StlUtil::dictHasProperty($userTask->taskListPlot, $taskId), ErrCode::task_no); #判断是否存在指定任务
-        $task = new TaskInfo($userTask->taskListPlot->$taskId);
-        my_Assert($task->progress >= 1, ErrCode::task_progress_not_complete);   # 判断任务进度是否已完成>=1f
-        my_Assert($task->rewardGeted < 1, ErrCode::task_reward_geted);          # 奖励不可重复领取
-        $taskCfg = GameConfig::task_getItem($taskId);                           # 任务配置数据
-        my_Assert($taskCfg != null, ErrCode::err_const_no);
-        $ok = StoreProc::AddMultiItemInStore($req, $taskCfg->reward);           # 发放任务奖励
-        my_Assert($ok == ErrCode::ok, $ok);
-        $task->rewardGeted = 1;
-        $userTask->taskListPlot->$taskId = $task;
-        if ($userTask->IsAllPlotTaskOver()) {
-            $userTask->curTaskNode += 1;
-            $userTask->taskListPlot = ObjectInit();
-            $userTask->initialize();
+        $mask = 100000;                                                         # 根据id段来区分任务和每日任务.
+        $type = intval($taskId / $mask);                                        # 取出taskId第一位判断任务类型
+        switch ($type) {                                                        # 
+            case 4:                                                             # 剧情任务
+                my_Assert(StlUtil::dictHasProperty($userTask->taskListPlot, $taskId), ErrCode::task_no); #判断是否存在指定任务
+                $task = new TaskInfo($userTask->taskListPlot->$taskId);
+                my_Assert($task->progress >= 1, ErrCode::task_progress_not_complete);   # 判断任务进度是否已完成>=1f
+                my_Assert($task->rewardGeted < 1, ErrCode::task_reward_geted);          # 奖励不可重复领取
+                $taskCfg = GameConfig::task_getItem($taskId);                           # 任务配置数据
+                my_Assert($taskCfg != null, ErrCode::err_const_no);
+                $ok = StoreProc::AddMultiItemInStore($req, $taskCfg->reward);           # 发放任务奖励
+                my_Assert($ok == ErrCode::ok, $ok);
+                $task->rewardGeted = 1;
+                $userTask->taskListPlot->$taskId = $task;
+                if ($userTask->IsAllPlotTaskOver()) {                           # 检查当前节点任务是否已经全部清空
+                    $userTask->curTaskNode += 1;
+                    $userTask->taskListPlot = ObjectInit();
+                    $userTask->initialize();
+                }
+                break;
+            case 5:                                                             # 每日任务
+                my_Assert(StlUtil::dictHasProperty($userTask->taskListDaily, $taskId), ErrCode::task_no);
+                $task = new TaskInfo($userTask->taskListDaily->$taskId);
+                my_Assert($task->progress >= 1, ErrCode::task_progress_not_complete);   # 判断任务进度是否已完成>=1f
+                my_Assert($task->rewardGeted < 1, ErrCode::task_reward_geted);          # 奖励不可重复领取
+                $taskCfg = GameConfig::task_daily_getItem($taskId);                     # 任务配置数据
+                my_Assert($taskCfg != null, ErrCode::err_const_no);
+                UserGameModel::Add_Exp($taskCfg->exp, $req->userInfo->game->baseInfo);  # 发放任务奖励
+                $userTask->dailyActivePoint += $taskCfg->activePoint;
+                $task->rewardGeted = 1;
+                $userTask->taskListDaily->$taskId = $task;                      # 回存下
+                break;
+            default:
+                break;
         }
-        $req->userInfo->game->task = $userTask;                                 # 回存
-//        var_dump($userTask);
+
+        $req->userInfo->game->task = $userTask;                                 # 回存 
         UserProc::updateUserInfo();
         return Resp::ok(array(//                                                # 返回
                     "gold" => $req->userInfo->game->baseInfo->gold,
@@ -90,6 +138,17 @@ class TaskProc {
 
 // 每日任务, 自动刷新
 // 
+
+    /**
+     * 重置每日任务
+     * @param Req $req
+     */
+    static function ResetDailyTask($req) {
+        $userTask = new UserTaskInfo($req->userInfo->game->task);
+        $userTask->resetDailyTask();
+        $req->userInfo->game->task = $userTask;
+    }
+
 // 
     // <editor-fold defaultstate="collapsed" desc="辅助方法-比对判断">
 
@@ -139,8 +198,42 @@ class TaskProc {
                 }
             }
         }
+        if ($bUpdate) {
+            Resp::addTag("isTaskUpdated", true);                                # 附加tag信息, 任务有更新
+        }
+    }
+
+    /**
+     * 检查任务条件是否达成
+     * @param TaskParams $taskParam Description
+     */
+    static function CheckDailyTaskConditions($taskParam) {
+        $bUpdate = false;
+        $req = req();
+        $daily = $req->userInfo->game->task->taskListDaily;
+        foreach ($daily as $tid => &$task) {
+            $taskCfg = GameConfig::task_daily_getItem($tid);
+            my_Assert($taskCfg != null, ErrCode::err_const_no);                 # 获取任务配置数据    
+            if ($taskCfg->tasktype != $taskParam->taskType) {                   # 任务类型必须匹配
+                continue;
+            }
+            $task = new TaskInfo($task);
+            if ($task->progress >= 1) {                                         # 已完成的不再更新处理
+                continue;
+            }
+            $task->counter++;                                                   # 计数器
+            if (is_null($taskCfg->canshu1) || $taskCfg->canshu1 == 0) {
+                $task->progress = 1;
+                $bUpdate = true;
+                continue;
+            }
+            if ($taskCfg->canshu1 == $task->counter) {
+                $task->progress = 1;
+                $bUpdate = true;
+                continue;
+            }
+        }
 
-        // meiri
         if ($bUpdate) {
             Resp::addTag("isTaskUpdated", true);                                # 附加tag信息, 任务有更新
         }
@@ -159,43 +252,77 @@ class TaskProc {
         self::CheckTaskConditions($taskParam);
     }
 
+    /**
+     * 英雄升级
+     * @param type $heroMoId
+     * @param type $newLvl
+     */
     static function OnHeroLevelUp($heroMoId, $newLvl) {
         $taskParam = new TaskParams(EnumTaskType::HeroLevelUpTo, $heroMoId, $newLvl);
         self::CheckTaskConditions($taskParam);
     }
 
+    /**
+     * 英雄升阶
+     * @param type $heroMoId
+     * @param type $newGrade
+     */
     static function OnHeroGradeUp($heroMoId, $newGrade) {
         $taskParam = new TaskParams(EnumTaskType::HeroGradeUpTo, $heroMoId, $newGrade);
         self::CheckTaskConditions($taskParam);
     }
 
+    /**
+     * 英雄碎片数量达到指定值
+     * @param type $heroMoId
+     * @param type $num
+     */
     static function OnHeroSegmengNum($heroMoId, $num) {
         $taskParam = new TaskParams(EnumTaskType::HeroSegmentNumberTo, $heroMoId, $num);
         self::CheckTaskConditions($taskParam);
     }
 
+    /**
+     * 英雄解锁技能
+     * @param type $heroMoId
+     * @param type $skillId
+     */
     static function OnHeroUnlocSkill($heroMoId, $skillId) {
         $taskParam = new TaskParams(EnumTaskType::HeroSkillUnlock, $heroMoId, $skillId);
         self::CheckTaskConditions($taskParam);
     }
 
+    /**
+     * 通关剧情关卡
+     * @param type $gateId
+     * @param type $difficulty
+     */
     static function OnPassGateN($gateId, $difficulty) {
         $taskParam = new TaskParams(EnumTaskType::PassGateN, $gateId, $difficulty);
         self::CheckTaskConditions($taskParam);
     }
 
+    /**
+     * 通关副本关卡
+     * @param type $gateId
+     * @param type $difficulty
+     */
     static function OnPassCarboN($gateId, $difficulty) {
         $taskParam = new TaskParams(EnumTaskType::passCarbonN, $gateId, $difficulty);
         self::CheckTaskConditions($taskParam);
     }
 
+    /**
+     * 竞技场胜利场次
+     * @param type $num
+     */
     static function OnPvPWinN($num) {
         $taskParam = new TaskParams(EnumTaskType::PvPWinNumberTo, $num);
         self::CheckTaskConditions($taskParam);
     }
 
     /**
-     * 
+     * 竞技场积分
      * @param type $score
      */
     static function OnPvPScoreN($score) {
@@ -224,4 +351,57 @@ class TaskProc {
     // 
 // </editor-fold>
     //
+    // <editor-fold defaultstate="collapsed" desc="每日任务条件检查">
+    // 
+
+    /**
+     * 每日登陆
+     */
+    static function OnUserLogin() {
+        $taskParam = new TaskParams(EnumTaskType::DailyLogin);
+        self::CheckDailyTaskConditions($taskParam);
+    }
+
+    /**
+     * 英雄强化(升级或升阶)n次
+     */
+    static function OnHeroImprove() {
+        $taskParam = new TaskParams(EnumTaskType::DailyHeroImprove);
+        self::CheckDailyTaskConditions($taskParam);
+    }
+
+    /**
+     * 剧情关卡,胜利n次
+     */
+    static function OnPassGate() {
+        $taskParam = new TaskParams(EnumTaskType::DailyGatesWin);
+        self::CheckDailyTaskConditions($taskParam);
+    }
+
+    /**
+     * 竞技场每日挑战,胜负均可
+     */
+    static function OnPvp() {
+        $taskParam = new TaskParams(EnumTaskType::DailyPVP);
+        self::CheckDailyTaskConditions($taskParam);
+    }
+
+    /**
+     * 每日挑战,胜负均可
+     */
+    static function OnRankChalenge() {
+        $taskParam = new TaskParams(EnumTaskType::DailyRankChalenge);
+        self::CheckDailyTaskConditions($taskParam);
+    }
+
+    /**
+     * 每日购买商品
+     */
+    static function OnShopping() {
+        $taskParam = new TaskParams(EnumTaskType::DailyShopping);
+        self::CheckDailyTaskConditions($taskParam);
+    }
+
+    // 
+// </editor-fold>
 }

+ 3 - 2
Gameserver/Amfphp/process/UserProc.php

@@ -7,8 +7,7 @@ define("USER_Backup_MaxRecords", 10);
 define("USER_ActiveRecord_Days", 108);                                          // 玩家记录集维持的最大天数
 define("USER_RANDOM_DAYS", 7);                                                  // 玩家记录集随机的最大天数
 define("USER_ACTION_DAYS", 108);                                                // 玩家行为集维持的最大天数
-define("INIT_TUTORIAL", 1);                                                     // 新手引导是否开启 0.否 1.是
-define("INIT_GODPETMANUAL", '{"exp":0,"godpetDic":{"101001":[0],"101002":[0],"101003":[0]}}'); // 初始化设定
+define("INIT_TUTORIAL", 1);                                                     // 新手引导是否开启 0.否 1.是 
 //
 
 /**
@@ -396,6 +395,8 @@ class UserProc {
         } else if ($ret >= 2) {                                                 # 隔天登录
         }
         $req->userInfo->game->baseInfo->lastLogin = now();                                # 更新下访问时间
+        TaskProc::ResetDailyTask($req);                                         # 重置每日任务
+        TaskProc::OnUserLogin();
         return $ret;
     }
 

+ 15 - 0
Gameserver/Amfphp/test.php

@@ -9,5 +9,20 @@ include __DIR__ . '/main.php';
 echoLine("phpver:" . PHP_VERSION);
 
 
+$int = 400001;
+$mask = 100000;
+
+function mask($num, $mask) {
+//    return intval($num / $mask) * $mask;
+    return intval($num / $mask);
+}
+
+$str = <<<AAA
+        mm
+        ll
+AAA;
+echo $str;
 
 var_dump(0 == "0");
+var_dump(is_null("0"));
+var_dump(mask($int, $mask));

+ 15 - 18
Gameserver/Amfphp/util/msmapi/api_sdk/vendor/sebastian/diff/tests/ParserTest.php

@@ -1,4 +1,5 @@
 <?php
+
 /*
  * This file is part of sebastian/diff.
  *
@@ -19,20 +20,18 @@ use PHPUnit\Framework\TestCase;
  * @uses SebastianBergmann\Diff\Diff
  * @uses SebastianBergmann\Diff\Line
  */
-class ParserTest extends TestCase
-{
+class ParserTest extends TestCase {
+
     /**
      * @var Parser
      */
     private $parser;
 
-    protected function setUp()
-    {
+    protected function setUp() {
         $this->parser = new Parser;
     }
 
-    public function testParse()
-    {
+    public function testParse() {
         $content = \file_get_contents(__DIR__ . '/fixtures/patch.txt');
 
         $diffs = $this->parser->parse($content);
@@ -52,8 +51,7 @@ class ParserTest extends TestCase
         $this->assertCount(4, $chunks[0]->getLines());
     }
 
-    public function testParseWithMultipleChunks()
-    {
+    public function testParseWithMultipleChunks() {
         $content = \file_get_contents(__DIR__ . '/fixtures/patch2.txt');
 
         $diffs = $this->parser->parse($content);
@@ -72,9 +70,8 @@ class ParserTest extends TestCase
         $this->assertCount(4, $chunks[2]->getLines());
     }
 
-    public function testParseWithRemovedLines()
-    {
-        $content = <<<A
+    public function testParseWithRemovedLines() {
+        $content = <<<AAA
 diff --git a/Test.txt b/Test.txt
 index abcdefg..abcdefh 100644
 --- a/Test.txt
@@ -82,7 +79,7 @@ index abcdefg..abcdefh 100644
 @@ -49,9 +49,8 @@
  A
 -B
-A;
+AAA;
         $diffs = $this->parser->parse($content);
         $this->assertInternalType('array', $diffs);
         $this->assertContainsOnlyInstancesOf('SebastianBergmann\Diff\Diff', $diffs);
@@ -115,9 +112,8 @@ A;
         $this->assertSame(Line::REMOVED, $line->getType());
     }
 
-    public function testParseDiffForMulitpleFiles()
-    {
-        $content = <<<A
+    public function testParseDiffForMulitpleFiles() {
+        $content = <<<AAA
 diff --git a/Test.txt b/Test.txt
 index abcdefg..abcdefh 100644
 --- a/Test.txt
@@ -126,14 +122,14 @@ index abcdefg..abcdefh 100644
  A
 -B
 
-diff --git a/Test123.txt b/Test123.txt
+diff--git a/Test123.txt b/Test123.txt
 index abcdefg..abcdefh 100644
 --- a/Test2.txt
 +++ b/Test2.txt
-@@ -1,2 +1,3 @@
+@@ -1, 2 +1, 3 @@
  A
 +B
-A;
+AAA;
         $diffs = $this->parser->parse($content);
         $this->assertCount(2, $diffs);
 
@@ -148,4 +144,5 @@ A;
         $this->assertSame('b/Test2.txt', $diff->getTo());
         $this->assertCount(1, $diff->getChunks());
     }
+
 }

+ 3 - 8
Gameserver/nbproject/private/private.xml

@@ -12,15 +12,10 @@
     </editor-bookmarks>
     <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
         <group>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/UserTaskInfo.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/process/HeroProc.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/test.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/base/ErrCode.php</file>
             <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/process/StoreProc.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/process/TaskProc.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/base/Req.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/UserGameModel.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/process/UserProc.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/process/FightProc/SweepGatesProc.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/TaskInfo.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/base/CmdCode.php</file>
         </group>
     </open-files>
 </project-private>