From eb5e3a332316431af35728be7c661e7a5575c88a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 30 Nov 2021 15:17:41 +0800 Subject: [PATCH] 1 --- doc/Shop.py | 35 ++++++++- doc/_common.py | 23 +++++- third_party/phpcommon | 2 +- webapp/bootstrap/init.php | 2 +- webapp/controller/ShopController.class.php | 25 +++++- webapp/mt/Item.php | 90 +++++++++++++++++++--- 6 files changed, 156 insertions(+), 21 deletions(-) diff --git a/doc/Shop.py b/doc/Shop.py index 05974a3f..f6f54adb 100644 --- a/doc/Shop.py +++ b/doc/Shop.py @@ -21,10 +21,10 @@ class Shop(object): ] }, { - 'name': 'buy', - 'desc': '购买英雄', + 'name': 'buyGoods', + 'desc': '购买商品', 'group': 'Shop', - 'url': 'webapp/index.php?c=Shop&a=buy', + 'url': 'webapp/index.php?c=Shop&a=buyGoods', 'params': [ _common.ReqHead(), ['shop_id', 0, '商店id'], @@ -37,4 +37,33 @@ class Shop(object): ['property_chg', _common.PropertyChg(), '属性变更'], ] }, + { + 'name': 'outsideBuy', + 'desc': '购买道具(商店外购买)', + 'group': 'Shop', + 'url': 'webapp/index.php?c=Shop&a=outsideBuy', + 'params': [ + _common.ReqHead(), + ['item_id', 0, '商品id'], + ['cost_item_id', 0, '支付方式'], + ], + 'response': [ + _common.RspHead(), + ['award', _common.Award(), '奖励信息'], + ['property_chg', _common.PropertyChg(), '属性变更'], + ] + }, + { + 'name': 'getOutsidePriceInfo', + 'desc': '获取价格信息(商店外购买目前只有:英雄、英雄皮肤、枪支皮肤)', + 'group': 'Shop', + 'url': 'webapp/index.php?c=Shop&a=getOutsidePriceInfo', + 'params': [ + _common.ReqHead(), + ], + 'response': [ + _common.RspHead(), + ['!price_list', [_common.ItemPriceInfo()], '价格信息'], + ] + }, ] diff --git a/doc/_common.py b/doc/_common.py index 8cff6e72..e4fd2362 100644 --- a/doc/_common.py +++ b/doc/_common.py @@ -104,21 +104,38 @@ class PropertyChg(object): ['user_info', UserInfo(), '用户信息变更(用来更新本地客户端字段(有则更新无则不变))'] ] -class CostInfo(object): +class CostInfoItem(object): def __init__(self): self.fields = [ ['cost_item_id', 0, '购买需要消耗的道具id'], ['cost_item_num', 0, '购买需要消耗的道具数量'], + ['cost_item_is_discount', 0, '是否参与折扣'], + ] + +class CostInfo(object): + + def __init__(self): + self.fields = [ + ['!cost_group', [CostInfoItem()], '一组扣费项目,(金币、钻石视为道具,可能有多种价格)'], ] class PriceInfo(object): def __init__(self): self.fields = [ - ['!cost_items', [CostInfo()], '购买需要扣费道具信息(金币、钻石视为道具,可能有多种价格)'], + ['!cost_list', [CostInfo()], '扣费方式列表'], ['discount', 0, '折扣百分比(0-100)'], - ['discount_left_time', 0, '折扣剩余时间(单位秒)'], + ['discount_begin_time', 0, '折扣开始时间(utc时间)'], + ['discount_end_time', 0, '折扣结束时间(utc时间)'], + ] + +class ItemPriceInfo(object): + + def __init__(self): + self.fields = [ + ['item_id', 0, '道具id'], + ['price_info', PriceInfo(), '价格信息'], ] class Goods(object): diff --git a/third_party/phpcommon b/third_party/phpcommon index 52c4b5f9..6efb9d78 160000 --- a/third_party/phpcommon +++ b/third_party/phpcommon @@ -1 +1 @@ -Subproject commit 52c4b5f9309837f702d3ab36b30fef335094b1f6 +Subproject commit 6efb9d7831e4e69a2f7e7b75ce44ccfb13b9b685 diff --git a/webapp/bootstrap/init.php b/webapp/bootstrap/init.php index 6af4e249..f4948206 100644 --- a/webapp/bootstrap/init.php +++ b/webapp/bootstrap/init.php @@ -9,7 +9,7 @@ require_once('services/BaseService.php'); define('TEAMID_KEY', 'team_uuid:'); define('V_ITEM_GOLD', 10001); //金币 -define('V_ITEM_DIAMOND', 10003); //钻石 +define('V_ITEM_DIAMOND', 10002); //钻石 function getConfigBaseDir() { diff --git a/webapp/controller/ShopController.class.php b/webapp/controller/ShopController.class.php index c7806a69..89bfe6b8 100644 --- a/webapp/controller/ShopController.class.php +++ b/webapp/controller/ShopController.class.php @@ -72,9 +72,32 @@ class ShopController extends BaseAuthedController { )); } - public function buy() + public function outsideBuy() { } + public function getOutsidePriceInfo() + { + $items = array(); + { + $types = array(mt\Item::HERO_TYPE, + mt\Item::HERO_SKIN_TYPE, + mt\Item::GUN_SKIN_TYPE); + mt\Item::filter(function ($meta) use(&$items, &$types) { + if (in_array($meta['type'], $types)) { + array_push($items, $meta); + } + return true; + }); + } + $priceList = array(); + array_walk($items, function ($val) use(&$priceList) { + array_push($priceList, mt\Item::getPriceInfo($val)); + }); + $this->_rspData(array( + 'price_list' => $priceList + )); + } + } diff --git a/webapp/mt/Item.php b/webapp/mt/Item.php index 34856903..d6415ded 100644 --- a/webapp/mt/Item.php +++ b/webapp/mt/Item.php @@ -6,7 +6,52 @@ use phpcommon; class Item { - const SKIN_TYPE = 12; + /* + 0 无功能 + 1 金币 + 2 钻石 + 3 角色账号经验 + 4 权限类 + 5 英雄 + 6 皮肤 + 7 头像 + 8 头像框 + 9 枪械 + 10 材料 + 11 改名卡 + 12 喇叭 + 13 礼包 + 14 碎片 + 15 日活跃 + 16 周活跃 + 17 手册经验 + 18 工会经验 + 19 工会改名卡 + 20 英雄熟练度(预留) + */ + + const NONE_TYPE = 0; + const GOLD_TYPE = 1; + const DIAMOND_TYPE = 2; + const EXP_TYPE = 3; + const PERMISSION_TYPE = 4; + const HERO_TYPE = 5; + const HERO_SKIN_TYPE = 6; + const HEAD_TYPE = 7; + const HEAD_FRAME_TYPE = 8; + const GUN_TYPE = 9; + const GUN_SKIN_TYPE = 10; + const MATERIAL_TYPE = 11; + const HORN_TYPE = 12; + const RENAME_CARD_TYPE = 13; + const GIFT_PACKAGE_TYPE = 14; + const FRAGMENT_TYPE = 15; + const DAILY_ACTIVE_TYPE = 16; + const WEAKLY_ACTIVE_TYPE = 17; + const HANDBOOK_EXP_TYPE = 18; + const GUILD_EXP_TYPE = 19; + const GUILD_RENAME_CARD_TYPE = 20; + const HERO_EXP_TYPE = 21; public static function get($id) { @@ -18,20 +63,41 @@ class Item { return $meta['type'] == $type; } - public static function getOldItem($id) + public static function filter($cb) { - $meta = self::get($id); - if (!$meta) { - return null; + foreach (self::getMetaList() as $meta) { + if (!$cb($meta)) { + return; + } } - $item = array(); - foreach ($meta as $key => $val) { - $item[$key] = $val; + } + + public static function getPriceInfo($meta) + { + $info = array( + 'item_id' => $meta['id'], + 'price_info' => array( + 'cost_list' => array(), + 'discount' => (int)$meta['discount'], + 'discount_begin_time' => phpcommon\datetimeToTimestamp($meta['discount_begin']), + 'discount_end_time' => phpcommon\datetimeToTimestamp($meta['discount_end']) + ) + ); + if ($meta['gold'] > 0) { + array_push($info['price_info']['cost_list'], + array( + 'cost_item_id' => V_ITEM_GOLD, + 'cost_item_num' => $meta['gold'] + )); } - $item['type'] = $item['fuction']; - $item['price'] = $item['gold']; - $item['dprice'] = $item['diamond_price']; - return $item; + if ($meta['diamond_price'] > 0) { + array_push($info['price_info']['cost_list'], + array( + 'cost_item_id' => V_ITEM_DIAMOND, + 'cost_item_num' => $meta['diamond_price'] + )); + } + return $info; } protected static function getMetaList()