Browse Source

补充世界boss奖励部分.

gwang 4 years ago
parent
commit
a503750018

+ 19 - 2
Gameserver/Amfphp/configs/GameConfig.php

@@ -1,11 +1,12 @@
 <?php
+namespace loyalsoft;
 ////////////////////
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2021-06-09 09:31:02
+ // 日期: 2021-06-09 10:59:55
 ////////////////////
-namespace loyalsoft;
+
 /**
  * 常量配置数据 
  */
@@ -1448,6 +1449,22 @@ class GameConfig {
         return self::get_hash_item('yanlingextra_level', $yanlingId)->$starLv;
     }
     /**
+    * 世界boss排名奖励
+    * @return \worldboss_rankreward
+    */
+    public static function worldboss_rankreward()
+    { 
+        static $a = null; 
+        return self::initValue($a, 'worldboss_rankreward');
+    }
+    /**
+    * @return \sm_worldboss_rankreward worldboss_rankreward item数据 
+    */
+    public static function worldboss_rankreward_getItem($itemid)
+    { 
+        return self::get_hash_item('worldboss_rankreward', $itemid);
+    }
+    /**
     * 当前版本(时间戳)
     * @return \ver
     */

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

@@ -3,7 +3,7 @@
  // 由CodeGenerator创建。
  // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
  // author: gwang 
- // 日期: 2021-06-09 09:31:02
+ // 日期: 2021-06-09 14:06:08
 ////////////////////
 
 /**
@@ -1448,6 +1448,22 @@ class GameConfig {
         return self::get_hash_item('yanlingextra_level', $yanlingId)->$starLv;
     }
     /**
+    * 世界boss排名奖励
+    * @return \worldboss_rankreward
+    */
+    public static function worldboss_rankreward()
+    { 
+        static $a = null; 
+        return self::initValue($a, 'worldboss_rankreward');
+    }
+    /**
+    * @return \sm_worldboss_rankreward worldboss_rankreward item数据 
+    */
+    public static function worldboss_rankreward_getItem($itemid)
+    { 
+        return self::get_hash_item('worldboss_rankreward', $itemid);
+    }
+    /**
     * 当前版本(时间戳)
     * @return \ver
     */

+ 47 - 0
Gameserver/Amfphp/model/Const/sm_worldboss_rankreward.php

@@ -0,0 +1,47 @@
+<?php
+////////////////////
+ // 由CodeGenerator创建。
+ // Copyright (C) gwang (wanggangzero@qq.com), Loyalsoft@sjz Inc
+ // author: gwang 
+ // 日期: 2021-06-03 11:06:46
+////////////////////
+
+
+/**
+ * Static Model worldboss_rankreward 世界boss排名奖励
+ */
+class sm_worldboss_rankreward
+{
+
+    /**
+    * @var Int32 用途未知!!请到数据库中添加字段注释。  
+    */
+    public $id;
+
+    /**
+    * @var String 当前排行奖励名称  
+    */
+    public $rankName;
+
+    /**
+    * @var Int32 最小排名  
+    */
+    public $minRank;
+
+    /**
+    * @var Int32 最大排名  
+    */
+    public $maxRank;
+
+    /**
+    * @var String 上榜_奖励内容(例: 399001,450)  
+    */
+    public $reward;
+
+    /**
+    * @var String 备注  
+    */
+    public $desc;
+
+}
+

+ 34 - 20
Gameserver/Amfphp/process/EmailProc.php

@@ -75,7 +75,7 @@ class EmailProc {
 // <editor-fold defaultstate="collapsed" desc="   API   ">
 
     /**
-     * 6707  发放测试用道具 
+     * 6707  发放测试用道具
      */
     static function SendTestItems() {
 //        Err(ErrCode::err_method_obsoleted, "此功能仅测试期间可用");
@@ -105,31 +105,31 @@ class EmailProc {
     }
 
     /**
-     * 【6701】拉取最新邮件列表 
+     * 【6701】拉取最新邮件列表
      */
     public static function RefreshEmailList() {
         $uid = req()->uid;
         $zoneid = req()->zoneid;
         self::refreshSysMail($zoneid, $uid);                                    # 更新下系统邮件
         self::clearExpireMails($zoneid, $uid);                                  # 清理过期邮件, 以及超过容量的邮件
-        $mails = self::getMailQueue($zoneid, $uid);                             # 拉取邮件列表 
+        $mails = self::getMailQueue($zoneid, $uid);                             # 拉取邮件列表
         return Resp::ok(array('mailQueue' => $mails));                          # 返回值
     }
 
     /**
-     * 【6702】读取一封邮件, 更新readts 
+     * 【6702】读取一封邮件, 更新readts
      */
     public static function ReadEmail() {
 
         $uid = req()->uid;
         $zoneid = req()->zoneid;
-        $mailId = req()->paras[0];                                               # 传递参数,邮件的id字符串 
+        $mailId = req()->paras[0];                                               # 传递参数,邮件的id字符串
         my_Assert($mailId, ErrCode::email_wrongid);                             # 普通读取一封邮件的逻辑
 
         $mail = self::getMail($zoneid, $uid, $mailId);
         $mail->readts = now();
         self::updateMail($zoneid, $uid, $mail);                                 # 更新邮件数据
-        self::logMailReaded(array($mailId), $uid, $zoneid);                     # 更新数据库中邮件的read记录 
+        self::logMailReaded(array($mailId), $uid, $zoneid);                     # 更新数据库中邮件的read记录
         return Resp::ok(array("rewardstr" => $mail->appendix));
     }
 
@@ -140,14 +140,14 @@ class EmailProc {
     public static function DrawEmailAppendix() {
         $uid = req()->uid;
         $zoneid = req()->zoneid;
-        $mailId = req()->paras[0];                                               # 传递参数,邮件的id字符串  
+        $mailId = req()->paras[0];                                               # 传递参数,邮件的id字符串
         my_Assert($mailId, ErrCode::email_wrongid);                             # 邮件id
 
         $mail = self::getMail($zoneid, $uid, $mailId);                          # 取出对应的邮件数据
         my_Assert($mail->readts > 0, ErrCode::err_innerfault);                  # 未打开的不可能调用领取接口
         my_Assert($mail->isExistReward(), ErrCode::email_no_appendix);          # 先判断邮件,是否存在有效的奖励物品
         my_Assert($mail->drawedts <= 0, ErrCode::email_appendix_drawed);        # 邮件不可重复领取
-        $err = StoreProc::AddMultiItemInStore($mail->appendix, 4);              # 发放奖励  
+        $err = StoreProc::AddMultiItemInStore($mail->appendix, 4);              # 发放奖励
 
         my_Assert(ErrCode::ok == $err, $err);                                   # 发奖成功
         $mail->drawedts = now();                                                # 更新领取时间戳
@@ -155,9 +155,9 @@ class EmailProc {
         if ($mail->sender_name == '系统') {
             TaskProc::OnDrawSysMail($mail->sender_uid);
         }
-        self::logMailDrawed(array($mailId), $uid, $zoneid);                     # 更新数据库中邮件的领取记录 
+        self::logMailDrawed(array($mailId), $uid, $zoneid);                     # 更新数据库中邮件的领取记录
         UserProc::updateUserInfo();
-        return Resp::ok(array(#                                                 # 同步数据   
+        return Resp::ok(array(#                                                 # 同步数据
                     'store' => ctx()->store,
                     'hero' => ctx()->heros,
                     'baseInfo' => ctx()->base(),
@@ -167,7 +167,7 @@ class EmailProc {
     }
 
     /**
-     * 【6704】 领取所有邮件附件奖励 
+     * 【6704】 领取所有邮件附件奖励
      * @return type
      */
     public static function DrawAllEmailAppendixes() {
@@ -176,7 +176,7 @@ class EmailProc {
         $arr = ArrayInit();                                                     # 记录奖励字符串
         $rewardEmailIds = ArrayInit();                                          # 记录领取邮件id
         $mails = self::getMailQueue($zoneid, $uid);                             # 提取邮件列表
-        // 有奖励的邮件,全部处理,领取奖励。无奖励的邮件,不处理。因为全部领取邮件功能只限于处理有奖励的物品,无奖励的不管 
+        // 有奖励的邮件,全部处理,领取奖励。无奖励的邮件,不处理。因为全部领取邮件功能只限于处理有奖励的物品,无奖励的不管
         foreach ($mails as $m) {                                                # 遍历所有邮件
             isEditor() and $m = new Ins_Email;
             if ($m->isExistReward()) {                                          # 先判断邮件,是否存在附件
@@ -203,12 +203,12 @@ class EmailProc {
         }
         $n = count($rewardEmailIds);                                            # 计数,领取邮件数量
         if ($n > 0) {
-            self::updateMails($zoneid, $uid, $asocMails);                       # 批量更新邮件 
+            self::updateMails($zoneid, $uid, $asocMails);                       # 批量更新邮件
             self::logMailDrawed($rewardEmailIds, $uid, $zoneid);                # 更新数据库中邮件的领取记录
         }
         $reward = implode(';', $arr);                                           # 拼接下奖励字符串
         UserProc::updateUserInfo();
-        return Resp::ok(array(#                                                 # 同步数据        
+        return Resp::ok(array(#                                                 # 同步数据
                     'baseInfo' => ctx()->base(),
                     'store' => ctx()->store,
                     'hero' => ctx()->heros,
@@ -218,7 +218,7 @@ class EmailProc {
     }
 
     /**
-     * 【6705】 删除所有已读邮件 
+     * 【6705】 删除所有已读邮件
      * @return type
      */
     public static function DelReadedEmail() {
@@ -243,9 +243,23 @@ class EmailProc {
     }
 
 // </editor-fold>
-// 
+//
 // <editor-fold defaultstate="collapsed" desc="  插入邮件">
 
+    /**
+     * 系统邮件 - 发送世界boss结算奖励
+     * @param type $zoneid
+     * @param type $uid
+     * @param type $index 排名
+     * @param type $rewardName 奖励阶段名称
+     * @param type $reward 奖励内容
+     */
+    public static function SendWorldBossReward($zoneid, $uid, $index, $rewardName, $reward) {
+        $mail = new Ins_Email(null, enum_Mail_Type::SysTemMail, "世界boss奖励", #
+                "恭喜您在世界boss战斗中输出伤害排{$index}名,获得{$rewardName}奖励!", $reward);
+        self::InsertMail($zoneid, $uid, $mail);
+    }
+
     /**
      * 系统邮件 - 发送月卡奖励
      * @param type $zoneid
@@ -387,7 +401,7 @@ class EmailProc {
     }
 
 // </editor-fold>
-// 
+//
 // <editor-fold defaultstate="collapsed" desc="    辅助方法    ">
 
     /**
@@ -410,7 +424,7 @@ class EmailProc {
             }
         }
         self:: logMail($zoneid, $uid, $mail);                                   # 将邮件写入Mysql中
-        CornerSignEventProc::OnNewMails();
+//        CornerSignEventProc::OnNewMails();
         return $mail->mailId;
     }
 
@@ -435,7 +449,7 @@ class EmailProc {
     }
 
     /**
-     * 
+     *
      * @param type $zoneid
      * @param type $uid
      * @param Ins_Email $mail
@@ -549,7 +563,7 @@ class EmailProc {
      */
     private static function getMailQueue($zoneid, $uid) {
         $key = MemKey_User::Mail_Queue_hash($zoneid, $uid);                     # redis-key:= 玩家邮件列表
-        $keys = gMem()->hkeys($key);                                            # 拉取所有id 
+        $keys = gMem()->hkeys($key);                                            # 拉取所有id
 //        var_dump($keys);
         sort($keys);                                                            # 排序
         $mkeys = array_slice($keys, 0, self::MaxMailContent);                   # 取固定数量100

+ 29 - 0
Gameserver/Amfphp/process/FightProc.php

@@ -91,6 +91,35 @@ class FightProc {
         return Resp::ok(array('rank' => $rank));
     }
 
+    static function SettleWorldBoss($zoneId) {
+        $dateHour = date('YmdH');
+        $key = "gamerun-BossFight-byDateHour-zone$zoneId-$dateHour";
+        $range = gMem()->zrange($key, 0, -1);                                   # 全部取出(暂时这么写吧)
+        $i = 1;
+        foreach ($range as $uid_name) {
+            $rwd = self::getWorldbossRankReward($i);
+            $uid = substr($uid_name, 0, strpos($uid_name, "__"));
+            EmailProc::SendWorldBossReward($zoneId, $uid, $i++, $rwd->rankName, $rwd->reward);
+        }
+        CLog::info("世界Boss已结算,未更新结算标记(防止重复发放).");
+    }
+
+    /**
+     * 按排名查询上榜奖励配置对象
+     * @param type $index
+     * @return \sm_worldboss_rankreward
+     */
+    static function getWorldbossRankReward($index) {
+        $arr = (array) GameConfig::worldboss_rankreward();
+        foreach ($arr as $i => $v) {
+            isEditor() and $v = new \sm_worldboss_rankreward();
+            if ($index >= $v->minRank && $index <= $v->maxRank) {
+                return $v;
+            }
+        }
+        return $arr[max(array_keys($arr))];
+    }
+
 // </editor-fold>
 //
 // <editor-fold defaultstate="collapsed" desc=" 无尽塔 ">

+ 12 - 0
Gameserver/Amfphp/service_call/InquireApi/WorldBosSettle.php

@@ -0,0 +1,12 @@
+<?php
+
+namespace loyalsoft;
+
+include_once __DIR__ . '/../../main.php';
+
+$data = query_paras();
+
+$zoneId = $data["zoneid"];
+
+FightProc::SettleWorldBoss($zoneId);
+echo 'ok';

+ 23 - 6
Gameserver/Amfphp/test.php

@@ -13,9 +13,26 @@ echoLine("phpver: " . PHP_VERSION . PHP_EOL);
 //var_dump(TimeUtil::Hour());
 //
 //var_dump(date('YmdH'));
-$index = 2;
-$mo = GameConfig::endless_tower_getItem($index);                        # 取配置信息
-my_Assert(isset($mo), ErrCode::err_const_no);                           # 防御
-$rsArr = str_replace(',', ';', $mo->rewardList);                                    # 拆解
-$rsArr = str_replace('_', ',', $rsArr);
-var_dump($rsArr);
+$index = 785555550;
+
+//$mo = GameConfig::endless_tower_getItem($index);                        # 取配置信息
+//my_Assert(isset($mo), ErrCode::err_const_no);                           # 防御
+//$rsArr = str_replace(',', ';', $mo->rewardList);                                    # 拆解
+//$rsArr = str_replace('_', ',', $rsArr);
+//var_dump($rsArr);
+//function getWorldbossRankReward($index) {
+//    $arr = (array) GameConfig::worldboss_rankreward();
+//    foreach ($arr as $i => $v) {
+//        isEditor() and $v = new \sm_worldboss_rankreward();
+//        if ($index >= $v->minRank && $index <= $v->maxRank) {
+//            return $v;
+//        }
+//    }
+//    return $arr[max(array_keys($arr))];
+//}
+//
+//var_dump(getWorldbossRankReward($index));
+$uid_name = "wanggang-uc__小小鸟";
+
+$uid = substr($uid_name, 0, strpos($uid_name, "__"));
+var_dump($uid);