Explorar o código

刷表,添加任务卡商店接口.

gwang %!s(int64=4) %!d(string=hai) anos
pai
achega
fb425550ad

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

@@ -310,7 +310,29 @@ class CmdCode {
      */
     const cmd_taskCard_reward = 6216;
 
+
+
+
     // 
+// </editor-fold>
+// <editor-fold defaultstate="collapsed" desc="任务卡商城">
+// 
+
+    /**
+     * 任务卡商城 - 开启商店
+     */
+    const cmd_taskcard_shop_open = 6231;
+
+    /**
+     * 任务卡商城 - 购买
+     */
+    const cmd_taskcard_shop_buy = 6232;
+
+    /**
+     * 任务卡商城 - 手动刷新
+     */
+    const cmd_taskcard_shop_refresh = 6233;
+// 
 // </editor-fold>
     // </editor-fold>
     //

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

@@ -561,6 +561,8 @@ class ErrCode {
      * 任务卡-状态错误
      */
     const taskCard_state = 3512;
+
+
 // </editor-fold>
     // 
     // <editor-fold defaultstate="collapsed" desc="    交互操作 36xx    ">

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

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-12-14 09:58:03
+ // 日期: 2020-12-14 14:56:27
 ////////////////////
 
 /**

+ 5 - 95
Gameserver/Amfphp/model/Const/globalsettings.php

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-11-06 12:51:31
+ // 日期: 2020-12-14 13:39:14
 ////////////////////
 
 
@@ -362,110 +362,20 @@ class globalsettings
     public $Box_NoCoolDown_Cash;
 
     /**
-    * @var Object 公会开启最小等级  
+    * @var Object 任务卡商城 - 手动刷新消耗钻石数量   
     */
-    public $Guild_Join_LeastLevel;
+    public $TaskCardShop_Refresh_Cash;
 
     /**
-    * @var Object 创建公会所需花费  
+    * @var Object 任务卡商城 - 自动刷新间隔(秒)  
     */
-    public $Guild_Found_CostGold;
-
-    /**
-    * @var Object 公会申请记录的容量限制  
-    */
-    public $Guild_ApplyCapacityLimit;
-
-    /**
-    * @var Object 公会副会长最多人数  
-    */
-    public $Guild_ViceChairManLimit;
-
-    /**
-    * @var Object 公会干部最多人数  
-    */
-    public $Guild_OfficerManLimit;
-
-    /**
-    * @var Object 公会申请被拒接后冷却时间  
-    */
-    public $Guild_ApplyrefuseCoolLimit;
-
-    /**
-    * @var Object 弹劾会长有效时间  
-    */
-    public $Guild_AccuseChairManTimeLimit;
-
-    /**
-    * @var Object 可弹劾公长所需时长  
-    */
-    public $Guild_ChairManLastLoginLimit;
-
-    /**
-    * @var Object 加入公会申请反复发送的时间间隔  
-    */
-    public $Guild_MoreApplyLimit;
-
-    /**
-    * @var Object 弹劾会长失败冷却时间  
-    */
-    public $Guild_AccuseFailCoolingTime;
-
-    /**
-    * @var Object 每次请求卡牌时间间隔  
-    */
-    public $Guild_RequestCardIntervalTime;
-
-    /**
-    * @var Object 不同种卡牌一次可以请求的数量  
-    */
-    public $Guild_RequsetCardNum;
-
-    /**
-    * @var Object 公会每天捐献总数量最大值  
-    */
-    public $Guild_EveryDayDonateTotalNumMax;
-
-    /**
-    * @var Object 公会捐献冷却时间  
-    */
-    public $Guild_DonateCoolingTime;
-
-    /**
-    * @var Object 公会等级及对应捐献度  
-    */
-    public $Guild_ContributeLevel;
-
-    /**
-    * @var Object 公会不开放请求的碎片类型  
-    */
-    public $Guild_NotOpenChipType;
-
-    /**
-    * @var Object 购买钻石礼包给公会成员额外奖励  
-    */
-    public $Guild_BuyCashGiftExtraReward;
-
-    /**
-    * @var Object 公会公告编辑冷却时间  
-    */
-    public $Guild_AnnouncementEditCoolingTime;
-
-    /**
-    * @var Object 公会公告显示时间  
-    */
-    public $Guild_AnnouncementShowTime;
+    public $TaskCardShop_Refresh_TS;
 
     /**
     * @var Object 新手引导中发放所需经验卡(id,num;id,num...)  
     */
     public $User_SetNewbieGuideExps;
 
-    /**
-    * @var Object 创建公会——加入公会的分数  
-    */
-    public $Guild_Found_ScoreLimit;
-
     /**
     * @var Object 游戏聊天功能——是否开放 1开放0 关闭  
     */

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

@@ -4,7 +4,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2020-12-14 09:14:43
+ // 日期: 2020-12-14 11:06:31
 ////////////////////
 
 

+ 8 - 0
Gameserver/Amfphp/model/User/Data_UserGame.php

@@ -54,6 +54,12 @@ class Data_UserGame extends HashSaver {
 //     */
 //    public $task;
 
+    /**
+     * 
+     * @var Info_TaskCard_Shop
+     */
+    public $taskCardShop;
+
     /**
      *
      * @var Info_UserPVP pvp信息
@@ -99,6 +105,7 @@ class Data_UserGame extends HashSaver {
         $this->heros->InitializeHero();                                         # 添加初始英雄
         $this->pvp = new Info_UserPVP();
 //        $this->task->initialize();                                              # 任务初始化
+        $this->taskCardShop = new Info_TaskCard_Shop();
     }
 
     /**
@@ -120,6 +127,7 @@ class Data_UserGame extends HashSaver {
 //            $this->pvp = new UserPVPModel();                                    # 初始化pvp模块
             $this->userSecretshop = new Info_UserSecretshop();                  # 神秘商店
 //            $this->task = new Info_UserTask();                                   # 任务数据
+            $this->taskCardShop = new Info_TaskCard_Shop();                     # 任务卡商店
         } else {                                                                # 实参
             parent::__construct($arg);                                          # 调用Object的构造函数
         }

+ 22 - 0
Gameserver/Amfphp/model/User/Info_TaskCard_Shop.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace loyalsoft;
+
+/**
+ * Description of Info_TaskCard_Shop
+ * 任务卡商店
+ * @author gwang
+ */
+class Info_TaskCard_Shop extends Object_ext {
+
+    /**
+     * @var int 上次刷新时间戳
+     */
+    public $lastRefreshTs = 0;
+
+    /**
+     * @var array 当前展示的卡片列表
+     */
+    public $curCards = array();
+
+}

+ 1 - 1
Gameserver/Amfphp/process/ActiveProc/CipheredBase32.php

@@ -30,7 +30,7 @@ class ActiveCode {
 /**
  * 在定制的Base32(去掉了 0 和 o, 1 和 l. 使用剩余的 24个小写字母和8个数字)基础上使用
  * 密码本算法打乱字母规律, 并对number进行了散列, 增加猜解难度.
- * @author gwang
+ * @author gwang 2016.2
  */
 class CipheredBase32 {
 

+ 0 - 5
Gameserver/Amfphp/process/ShopProc.php

@@ -1,9 +1,5 @@
 <?php
 
-/*
- *
- */
-
 namespace loyalsoft;
 
 /**
@@ -13,7 +9,6 @@ namespace loyalsoft;
  * @version 1.0.0  Created.  2020.8.19 -gwang
  */
 class ShopProc {
-    //put your code here
 
     /**
      * 逻辑分发

+ 1 - 0
Gameserver/Amfphp/process/StoreProc.php

@@ -461,6 +461,7 @@ class StoreProc {
             $taskCard->uid = $cid;
             $req->userInfo->game->store->taskcards->$cid = $taskCard;
         }
+        return $cid;
     }
 
     /**

+ 127 - 2
Gameserver/Amfphp/process/TaskProc.php

@@ -11,6 +11,8 @@ namespace loyalsoft;
  */
 class TaskProc {
 
+    const TaskCardShop_Refresh_ItemNum = 5;
+
     static function procMain($req) {
         switch ($req->cmd) {
             case CmdCode::cmd_task_getInfo:                                     # 6201 刷新任务状态
@@ -38,14 +40,137 @@ class TaskProc {
                 return self::OnKillMonsterEvent($req);
 
             case CmdCode::cmd_taskCard_active:                                  # 6215 激活任务卡
-
+                return self::OnTaskCard_active($req);
             case CmdCode::cmd_taskCard_reward:                                  # 6216 领取任务卡奖励
-
+                return self::OnTaskCard_reward($req);
+// --------------   任务卡商城 -----------------------------                
+            case CmdCode::cmd_taskcard_shop_open:                               # 6231 任务卡商店 - 开启
+                return self::OnTaskCardShopOpen($req);
+            case CmdCode::cmd_taskcard_shop_buy:                                # 6232 任务卡商店 - 购买
+                return self::OnTaskCardShopBuy($req);
+            case CmdCode::cmd_taskcard_shop_refresh:                            # 6233 任务卡商店 - 手动刷新
+                return self::OnTaskCardShopRefresh($req);
             default:
                 return Err(ErrCode::cmd_err);
         }
     }
 
+    // <editor-fold defaultstate="collapsed" desc="  任务卡商店">
+
+    /**
+     * [6231] 任务卡商店 - 开启
+     * @param req $req
+     */
+    static function OnTaskCardShopOpen($req) {
+        $userInfo = $req->userInfo->game;
+        if (null == $userInfo->taskCardShop) {                                  # 防御
+            $userInfo->taskCardShop = new Info_TaskCard_Shop();
+        }
+        $nextTs = $userInfo->taskCardShop->lastRefreshTs + GameConfig::globalsettings()->TaskCardShop_Refresh_TS;
+        if ($nextTs <= now()) {                                                 # 已经到达刷新时间, 刷新任务卡
+            $arr = (array) GameConfig::taskcard_shop();                         # 奖池配置
+            $arr = self::FilterPrizepool($req, $arr);                           # 利用玩家等级进行过滤
+            $rewardStr = "";
+            $err = self::Dice($arr, self::TaskCardShop_Refresh_ItemNum, $rewardStr);  # 获得随机结果
+            my_Assert(ErrCode::ok == $err, $err);
+
+            $userInfo->taskCardShop->curCards = $rewardStr;                     # 更新任务卡列表
+            $req->userInfo->game = $userInfo;
+            UserProc::updateUserInfo();                                         # 回写玩家数据 
+        }
+        return \Resp::ok(array('taskCardShop' => $userInfo->taskCardShop));     # 返回最新任务卡列表
+    }
+
+    /**
+     * [6232] 任务卡商店 - 购买
+     * @param req $req
+     */
+    static function OnTaskCardShopBuy($req) {
+        list($typeId, $num) = $req->paras;                                      # 提取参数: 任务卡类型ID,数量(暂时默认为1)
+        $shopItemMo = GameConfig::taskcard_shop_getItem($typeId);
+        my_Assert(null != $shopItemMo, ErrCode::err_const_no);                  # 常量异常
+        my_Assert($num == 1, ErrCode::paras_err);                               # 数量异常
+        my_Assert($shopItemMo->pricetype == 1, ErrCode::pay_m_type_err);        # 定价类型异常
+        $userInfo = $req->userInfo->game;
+        my_Assert($userInfo->Consume_Cash($userInfo, $shopItemMo->price), ErrCode::notenough_cash_msg); # 扣除费用
+        $cid = StoreProc::PutTaskCardInStore($typeId, $req);                    # 添加任务卡到背包
+        NormalEventProc::OnTaskBag_new_Card($cid, $num);                        # 播放获得任务卡事件
+        return Resp::ok(array('store' => $req->userInfo->game->store));         # 返回成功
+    }
+
+    /**
+     * [6233] 任务卡商店 - 手动刷新
+     * @param req $req
+     */
+    public static function OnTaskCardShopRefresh($req) {
+        $cost = GameConfig::globalsettings()->TaskCardShop_Refresh_Cash;        # 消耗
+        $userInfo = $req->userInfo->game;
+        my_Assert($userInfo->Consume_Cash($userInfo, $cost), ErrCode::notenough_cash_msg); # 扣除费用
+        // 刷新任务卡
+        $arr = (array) GameConfig::taskcard_shop();                             # 奖池配置
+        $arr = self::FilterPrizepool($req, $arr);                               # 利用玩家等级进行过滤
+        $rewardStr = "";
+        $err = self::Dice($arr, self::TaskCardShop_Refresh_ItemNum, $rewardStr); # 获得随机结果
+        my_Assert(ErrCode::ok == $err, $err);
+        if (null == $userInfo->taskCardShop) {                                  # 防御
+            $userInfo->taskCardShop = new Info_TaskCard_Shop();
+        }
+        $userInfo->taskCardShop->curCards = $rewardStr;                         # 更新任务卡列表
+        $req->userInfo->game = $userInfo;
+        UserProc::updateUserInfo();                                             # 回写玩家数据 
+        return \Resp::ok(array('taskCardShop' => $userInfo->taskCardShop));     # 返回最新任务卡列表
+    }
+
+    /**
+     * 过滤奖池
+     * @param Req $req
+     * @param array $arr 奖池
+     */
+    static function FilterPrizepool($req, $arr) {
+        # 等级限制
+        $ret = array_filter($arr, function ($value) use($req) {
+            return($req->userInfo->game->baseInfo->level >= $value->unlock_level);
+        });
+        return $ret;
+    }
+
+    /**
+     * 投骰子
+     * @param assoc_array $arr 抽奖物品概率
+     * @param int $number 连抽次数
+     * @return string itemid,num;itemid,num;...
+     */
+    static function Dice($arr, $number, &$rewardstr) {
+        $max = 0;                                                               # 计算物品权重总和
+        array_walk($arr, function ($value) use(&$max) {
+            $max += $value->probability;
+        });
+        if (!$max) {                                                            # 配置数据有问题
+            return ErrCode::err_const_no;
+        }
+        $reward = ArrayInit();
+        for ($i = 0; $i < $number; $i++) {
+            $rnd = CommUtil::random(1, $max);                                   # 投骰子
+            $start = 0;
+            $rew = null;
+            foreach ($arr as $item) {                                           # 循环判断落入那个物品上
+                if ($start < $rnd && $rnd <= $start + $item->probability) {     # 落入区间
+                    $rew = $item;                                               # 记录物品
+                    break;
+                }
+                $start += $item->probability;                                   # 继续判断是否落入下一物品的区间
+            } # foreach end
+            if (!$rew) {
+                return ErrCode::lottery_noselecteditem;
+            }
+            $reward[] = $rew->typeId;
+        } # for end
+        $rewardstr = implode(',', $reward);
+        return ErrCode::ok;
+    }
+
+    // 
+// </editor-fold>
     // <editor-fold defaultstate="collapsed" desc="  任务卡接口">
     // 
 

+ 7 - 15
Gameserver/nbproject/private/private.xml

@@ -12,23 +12,15 @@
     </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/Enum_EventType.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/model/User/Enum_TaskCmdType.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/del_Ins_MissEventCode.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/process/del_MissProc.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/Ins_TaskEventArgs.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/del_Ins_MisStatus.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/Ins_TaskCard.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/Ins_TaskInfo.php</file>
             <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/base/CmdCode.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/del_Ins_MissEventInfo.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/ActiveProc.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/process/ShopProc.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/Info_UserShop.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/model/User/Ins_TaskStep.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/Enum_PropelType.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/Enum_TaskCardStateType.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/process/EventProc/NormalEventProc.php</file>
-            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/Ins_TaskParams.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/Info_TaskCard_Shop.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/Const/globalsettings.php</file>
+            <file>file:/D:/local_svn/0_ylsj2019/ylsj2019Server/Gameserver/Amfphp/model/User/Data_UserGame.php</file>
         </group>
     </open-files>
 </project-private>