예제 #1
0
파일: test.php 프로젝트: uning/mall-back
<?php

/*
    require_once dirname(__FILE__)."/ItemConfig.php";
$item = ItemConfig::getItem( 10102 );
print_r( $item );
*/
require_once dirname(__FILE__) . "/UpgradeConfig.php";
/*
$level = UpgradeConfig::getLevel(1000);
print_r( $level );
*/
$all = UpgradeConfig::getUpgradeNeed(1000);
print_r($all);
예제 #2
0
 public function checkshop($params)
 {
     $uid = $params['u'];
     $sid = $params['sid'];
     $tu = new TTUser($uid);
     $shop_obj = $tu->getbyid($sid);
     if (!$shop_obj) {
         $ret['s'] = 'notexsit';
         return $ret;
     }
     $goods_list = $shop_obj['goods'];
     $condata = array();
     if (!$goods_list) {
         $ret['s'] = 'nogoods';
         return $ret;
     }
     foreach ($goods_list as $goods_id => $stime) {
         $goods_obj = $tu->getbyid($goods_id);
         $condata[$stime] = $goods_obj;
     }
     $ret['condata'] = $condata;
     $popu = $params[TT::POPU];
     $ret['bpopu'] = $popu;
     $ua = UpgradeConfig::getUpgradeNeed($params['exp']);
     $ret['ua'] = $ua;
     //算人气
     $shops = $tu->get(TT::SHOP_GROUP);
     foreach ($shops as $shop) {
         $ret['shop_num_shop'][] = $shop;
         if ($shop['pos'] != 's') {
             $item = ItemConfig::getItem($shop['tag']);
             $shop_num += $item['gridWidth'];
         }
     }
     $ret['ashopnum'] = $shop_num;
     if (!$shop_num) {
         $ret['s'] = 'noshopexist';
         return $ret;
     }
     $shop_popu = $shop_num * 15;
     //只算店面人气
     $popu += $shop_popu;
     if ($popu > $ua['maxpopu']) {
         $popu = $ua['maxpopu'];
     }
     $ret['apopu'] = $popu;
     $aid = $tu->getoid('advert', TT::OTHER_GROUP);
     $adv = $tu->getbyid($aid);
     $used_advert = $adv['use'];
     //		$ret['bbbbbadvert'] = $adv;
     $computetime = $params[TT::COMPUTE_PONIT];
     //		$ret['now'] = date( TM_FORMAT,$now );
     //		$ret['lastcomputetime'] = date( TM_FORMAT,$computetime );
     $selloutids = array();
     $income = 0;
     $special = 0;
     //特殊商店的收入
     $sale_count = 0;
     //销售份数
     $now = time();
     $sconfig = ItemConfig::getItem($shop_obj['tag']);
     //			$ret['sconfig'][$s] = $sconfig;
     ksort($condata);
     $curtime = 0;
     //可以售卖新商品时间
     $cgoods = array();
     foreach ($condata as $t => $g) {
         $gconfig = ItemConfig::getItem($g['tag']);
         $ctime = $g['ctime'];
         //上次结算时间
         if ($curtime < $t) {
             $curtime = $t;
         }
         //上架时间
         if ($curtime < $ctime) {
             $curtime = $ctime;
         }
         $g['ctime'] = $now;
         $ret['tloop'][$t] = date(TM_FORMAT, $curtime);
         $gaps = array();
         if ($used_advert) {
             $tmp = self::getTimeRates($tu, $gaps, $used_advert, $curtime, $popu, $ua['maxpopu'], $now, $shop_num);
             //			            $ret['advertisement'][$s][$t] = $tmp;
         } else {
             $gaps = array(array($now - $curtime, $popu / ($shop_num * 15)));
         }
         $ret['gaps'][$t] = $gaps;
         //			foreach($gaps as $gr){
         foreach ($gaps as $k => $gr) {
             //测试信息需要该索引值
             $stime = $gr[0];
             if ($sconfig['gridWidth']) {
                 $pertime = $gconfig['selltime'] / ($sconfig['gridWidth'] * $gr[1]);
             }
             if ($pertime) {
                 $snum = floor($stime / $pertime);
             }
             $ret['pertime'][$t][$k] = $pertime;
             if ($snum >= $g['num']) {
                 //卖完了
                 $asnum = $g['num'];
             } else {
                 $asnum = $snum;
             }
             //				$ret['asnum'][$s][$t][$k][$g['tag'] ] = $asnum;
             $ret['sell'][$g['tag']] += $asnum;
             $sale_count += $asnum;
             //记录销售份数,成就用
             $income += $asnum * $gconfig['sellmoney'];
             //sellmoney是单份物品的卖价
             $g['num'] -= $asnum;
             //				$g['scount'] += $asnum;
             if ($g['num'] == 0) {
                 //当前时间段卖光此箱货物,继续卖下一个货物
                 $cgoods[] = $g;
                 $selloutids[] = $g['id'];
                 unset($shop_obj['goods'][$g['id']]);
                 break;
                 //跳出时间段循环,继续卖同一商店下一个上架时间的货物(在同一商店,同一时间上架但售卖顺序不同的货物,已在上架时微调成不同上架时间)
             }
         }
         $tu->puto($shop_obj, TT::SHOP_GROUP);
         if ($g['num'] != 0) {
             $tu->puto($g, TT::GOODS_GROUP);
             //未卖完的商品需要保存回库,继续卖同一商店下一个上架时间的货物(在同一商店,一时间上架但售卖顺序不同的货物,已在上架时微调成不同上架时间)
             break;
             //跳出上架时间循环,但是继续店铺循环,终止同一店铺的货物队列中其他货物的结算
         }
     }
     //删除使用过的广告队列
     unset($adv['use']);
     if ($used_advert) {
         //如果是空数组
         $adv['use'] = $used_advert;
     }
     $adv['id'] = $aid;
     $tu->puto($adv, TT::ADVERT_GROUP, false);
     //总销售份数
     $now_sale_count = $tu->numch('total_count', $sale_count);
     //总销售额
     $now_total_sale = $tu->numch('total_sale', $income);
     $ret['s'] = 'OK';
     $ret['income'] = $income;
     $ret['money'] = $tu->numch('money', $income);
     $ret['t'] = $now;
     $tu->remove($selloutids);
     $tu->putf(TT::COMPUTE_PONIT, $now);
     return $ret;
 }
예제 #3
0
파일: Advert.php 프로젝트: uning/mall-back
 /**
  * 使用广告
  * @param $params
  *   require  u      --  玩家id
  *            tag    --  某类广告id;
  *            
  * @return 
  *            s      --  OK,other failed
  *            s      --  nofind,没有该广告
  *            s      --  error,
  */
 public function set($params)
 {
     $uid = $params['u'];
     $adv_tag = $params['tag'];
     $adv = AdvertConfig::getAdvert($adv_tag);
     if (!$adv) {
         $ret['s'] = 'notexsit';
         return $ret;
     }
     $tu = new TTUser($uid);
     //增加扣钱操作和加人气值
     $id = $tu->getoid('advert', TT::OTHER_GROUP);
     $advbag = $tu->getbyid($id);
     if (!$advbag || $advbag['bag'][$adv_tag] < 1) {
         $ret['s'] = 'notexsit';
         $ret['r'] = $advbag;
         return $ret;
     }
     $now = time();
     $advbag['use'][$now] = $adv_tag;
     $advbag['bag'][$adv_tag] -= 1;
     $exp = $tu->getf(TT::EXP_STAT);
     $ua = UpgradeConfig::getUpgradeNeed($exp);
     $maxpopu = $ua['maxpopu'] + $adv['maxpopular'];
     if ($maxpopu > $tu->getf('max_popu')) {
         $tu->putf('maxpopu', $maxpopu);
     }
     //使用广告次数
     $ret['s'] = 'OK';
     $ret['t'] = $now;
     $ret['tag'] = $adv_tag;
     $tu->puto($advbag, TT::ADVERT_GROUP, false);
     return $ret;
 }
예제 #4
0
파일: TTUser.php 프로젝트: uning/mall-back
 /**
  * 转换
  * @param $exp
  * @return unknown_type
  */
 public function getLevel($exp = 0)
 {
     if (!$exp) {
         $exp = $this->getf(TT::EXP_STAT);
     }
     return UpgradeConfig::getLevel($exp);
 }
예제 #5
0
 /**
  * 结算卖货 with goods
  * @param $params
  *   u   - userid
  *   sids  - shop ids
  * @return 
  *   s  - OK,noneed(短期内没有需要结算的商品),busy(太快)
  *   income  - 获得金币
  *   money   - 总金币
  *   selloutids - 卖完删除的id
  *   goods   --数量有辩护的商品列表
  */
 public static function checkout($params)
 {
     $uid = $params['u'];
     $sids = $params['sids'];
     $now = time();
     $tu = new ttuser($uid);
     //获取人气和宣传值
     $goods = $tu->get(TT::GOODS_GROUP);
     foreach ($goods as $g) {
         $shopid = $g['pos']['y'];
         if (!$shopid || $shopid == 's') {
             continue;
         }
         $shop = $condata[$shopid]['shop'];
         if (!$condata[$shopid]['shop']) {
             $shop = $tu->getbyid($shopid);
             if (!$shop) {
                 $shop = $tu->getbyid($shopid);
                 //error log
                 continue;
             }
             $condata[$shopid]['shop'] = $shop;
             $item = ItemConfig::getItem($shop['tag']);
             $condata[$shopid]['sconfig'] = $item;
             $total_width += $item['gridWidth'];
         }
         $stime = $g['stime'];
         //上架时间
         $condata[$shopid]['goods'][$stime] = $g;
     }
     if (!$condata || !$total_width) {
         $ret['s'] = 'OK';
         $ret['msg'] = 'nogoods';
         return $ret;
     }
     $params = $tu->getf(array(TT::POPU, TT::EXP_STAT));
     $popu = $params[TT::POPU];
     if ($popu < 0) {
         $popu = 0;
     }
     $ua = UpgradeConfig::getUpgradeNeed($params['exp']);
     $maxpopu = $ua['maxpopu'];
     $aid = $tu->getoid('advert', TT::OTHER_GROUP);
     $adv = $tu->getbyid($aid);
     $used_advert = $adv['use'];
     if (!$used_advert) {
         $used_advert = array();
     }
     //处理广告
     foreach ($used_advert as $k => $v) {
         $adv = AdvertConfig::getAdvert($tag);
         if ($start + $adv['allTime'] < $now) {
             continue;
         }
         $savead[$k] = $v;
     }
     if ($savead) {
         $adv['use'] = $savead;
         $tu->puto($adv);
     } else {
         if ($used_advert) {
             unset($adv['use']);
             $tu->puto($adv);
         }
     }
     $selloutids = array();
     $income = 0;
     $sale_count = 0;
     //销售份数
     $popu += 15 * $total_width;
     foreach ($condata as $s => $vvv) {
         $sconfig =& $vvv['sconfig'];
         $gs =& $vvv['goods'];
         ksort($gs);
         $shop =& $vvv['shop'];
         $curtime = $shop['ctime'];
         //可以售卖新商品时间
         $cgoods = array();
         $shop_changed = false;
         $shop_empty = true;
         foreach ($gs as $t => $g) {
             $gconfig = ItemConfig::getItem($g['tag']);
             if (!$gconfig) {
                 continue;
             }
             $ctime = $g['ctime'];
             //上次结算时间
             if ($curtime < $t) {
                 $curtime = $t;
             }
             //上架时间
             if ($curtime < $ctime) {
                 $curtime = $ctime;
             }
             if ($curtime < $g['stime']) {
                 $curtime = $g['stime'];
             }
             $gaps = self::getTimeRates($used_advert, $curtime, $now, $popu, $maxpopu, $total_width);
             foreach ($gaps as $k => $gr) {
                 //测试信息需要该索引值
                 //$snum = floor( $gr[0]/$gconfig['selltime']*$gr[1] );
                 $pertime = $gconfig['selltime'] / $gr[1] / $sconfig['gridWidth'];
                 $snum = floor($gr[0] / $pertime);
                 if ($snum >= $g['num']) {
                     //卖完了
                     $asnum = $g['num'];
                 } else {
                     $asnum = $snum;
                 }
                 if ($asnum == 0) {
                     break;
                 }
                 $ret['sell'][$g['tag']] += $asnum;
                 $sale_count += $asnum;
                 //记录销售份数,成就用
                 $income += $asnum * $gconfig['sellmoney'];
                 //sellmoney是单份物品的卖价
                 $g['num'] -= $asnum;
                 $curtime += floor($asnum * $pertime);
                 //
                 $g['ctime'] = $curtime;
                 $shop_changed = true;
                 $shop['ctime'] = $curtime;
                 if ($g['num'] == 0) {
                     //当前时间段卖光此箱货物,继续卖下一个货物
                     $cgoods[] = $g;
                     $selloutids[] = $g['id'];
                     unset($shop['goods'][$g['id']]);
                     break;
                     //跳出时间段循环,继续卖同一商店下一个上架时间的货物(在同一商店,同一时间上架但售卖顺序不同的货物,已在上架时微调成不同上架时间)
                 }
             }
             //foreach group
             if ($g['num'] != 0) {
                 $tu->puto($g, TT::GOODS_GROUP);
                 $shop_empty = false;
                 break;
                 //跳出上架时间循环,但是继续店铺循环,终止同一店铺的货物队列中其他货物的结算
             }
         }
         //foreach goods
         if ($shop_changed) {
             $shop['_s'] = 'goods';
             if ($shop_empty) {
                 $shop['_s'] = 'empty';
                 unset($shop['goods']);
             }
             $tu->puto($shop, TT::GOODS_GROUP, false);
         }
     }
     //foreach shop
     //总销售份数
     $now_sale_count = $tu->numch('total_count', $sale_count);
     //总销售额
     $now_total_sale = $tu->numch('total_sale', $income);
     //记录玩家每一种物品卖出量
     if ($ret['sell']) {
         foreach ($ret['sell'] as $gid => $num) {
             $tu->numch("sale_goods_{$gid}", $num);
         }
     }
     $ret['s'] = 'OK';
     $ret['income'] = $income;
     $ret['money'] = $tu->chMoney($income);
     $ret['t'] = $now;
     $ret['rids'] = $selloutids;
     $ret['total_width'] = $total_width;
     $ret['popu'] = $popu;
     $ret['maxpopu'] = $maxpopu;
     TTLog::record(array('m' => __METHOD__, 'u' => $uid, 'tm' => $_SERVER['REQUEST_TIME'], 'p' => json_encode($ret)));
     $tu->remove($selloutids);
     return $ret;
 }