年前,云豹在线直播源码更新时,我们为其添加了“大转盘功能”,该功能在直播间中,可实现“付费转动转盘获得礼物”的功能,那么该功能是如何实现的呢?
用户在使用该功能时,通过点击大转盘图标,触发该功能
$rs = array('code' => 0, 'msg' => '', 'info' => array()); $turntable_con=$this->getConfig(); //获取转盘转动次数和价格的配置 $times=0; //在线直播源码初始化转动次数 $total=0; //在线直播源码初始化价格
``
foreach($turntable_con as $k=>$v){ if($v['id']==$id){ //$id是传递过来的转动id,判断穿过来的id和转盘的id进行匹配,匹配到之后系统自动获取转动次数和转动价格 $times=$v['times']; $total=$v['coin']; break; } }
if($times<=0){ //在线直播源码判断转动次数配置是否正确 $rs['code'] = 1002; $rs['msg'] = '信息错误'; return $rs; } if($total<=0){ //判断转动价格是否配置正确 $rs['code'] = 1002; $rs['msg'] = '信息错误'; return $rs; } /* 更新用户余额 消费 */ $ifok =DI()->notorm->user ->where('id = ? and coin >=?', $uid,$total) //$uid是用户的唯一id ->update(array('coin' => new NotORM_Literal("coin - {$total}")) );
if(!$ifok){ //在线直播源码判断扣费是否成功 $rs['code'] = 1001; $rs['msg'] = '余额不足'; return $rs; }
/* 添加转盘记录 */ $model = new Model_Turntable(); //实例化 $insert2=array("uid"=>$uid,"liveuid"=>$liveuid,"showid"=>$showid,"coin"=>$total,"nums"=>$times,"addtime"=>$nowtime ); $log=$model->setlog($insert2);//转盘记录id $domain_pack = new Domain_Backpack(); $domain = new Domain_Live(); //实例化 $giftlist=$domain->getGiftList(); //在线直播源码获取礼物列表 $configpub=getConfigPub(); //获取公共配置 $list=$this->getTurntables(); //在线直播源码获取转盘所有的奖励 $win_list=[]; //初始化中奖列表 for($i=0;$i<$times;$i++){ //循环转盘 $win=rand(1,100*1000); //取一个随机数 $rate=0; foreach($list as $k=>$v){
if($v['type']!=0){ //判断如果不是空奖 $rate+=$v['rate']*1000; //中奖概率*1000 if($win <= $rate){ //判断如果随机数大于中奖概率证明中奖了 if(isset($win_list[$v['id']])){ //在线直播源码自动判断中奖的这个奖品,之前有没有中过 $win_list[$v['id']]['nums']++; //如果中过就加个数量
}else{ //如果没有中过 $data=[ 'id'=>$v['id'], 'type'=>$v['type'], 'type_val'=>$v['type_val'], 'name'=>'', 'thumb'=>'', 'nums'=>'1', ]; if($v['type']==1){ //如果中的是钻石 $data['name']=$configpub['name_coin'].$v['type_val']; $data['thumb']='/public/app/pay/coin.png'; } if($v['type']==2){ //如果中的是礼物 foreach($giftlist as $k2=>$v2){ if($v['type_val']==$v2['id']){ $data['name']=$v2['giftname']; $data['thumb']=$v2['gifticon']; } } } if($v['type']==3){ //如果中的是线下奖品 $data['name']=$v['type_val']; $data['thumb']=$v['thumb']; }
$win_list[$v['id']]=$data; //把奖品放入到中奖列表中 } break; } } }
}
$win_list=array_values($win_list); if($win_list){ $model->uplogwin($logid,1); //在线直播源码修改转盘记录状态为已中奖 }
/* 写入中奖纪录 */ foreach($win_list as $k=>$v){ $data=[ 'logid'=>$logid, 'uid'=>$uid, 'type'=>$v['type'], 'type_val'=>$v['type_val'], 'nums'=>$v['nums'], 'addtime'=>$nowtime, ]; if($v['type']==3){ /* 线下奖品 */ $data['thumb']=$v['thumb']; } $model->setWin($data);
if($v['type']==1){ /* 钻石奖品 添加余额 */ $win_coin=$v['type_val'] * $v['nums']; DI()->notorm->user ->where('id = ?', $uid) ->update(array('coin' => new NotORM_Literal("coin + {$win_coin}") ) ); }
if($v['type']==2){ /* 礼物放进背包 */ $domain_pack->addBackpack($uid,$v['type_val'],$v['nums']); } unset($v['type']); unset($v['type_val']); $v['thumb']=get_upload_path($v['thumb']); $win_list[$k]=$v; }
/* 余额 */ $userinfo2 =DI()->notorm->user ->select('consumption,coin') ->where('id = ?', $uid) ->fetchOne(); $rs['info'][0]['coin']=$userinfo2['coin']; $rs['info'][0]['list']=$win_list; return $rs;
在线直播源码需要经过不断的更新和优化才能更好地发展,云豹在线直播源码近期又更新了“付费短视频功能”和“直播小店功能”,有时间把部分源码放出来,和各位共同赏析。