ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

在线直播源码中直播间内大转盘功能的实现

2021-06-04 18:57:29  阅读:162  来源: 互联网

标签:直播间 win data 大转盘 源码 coin type id


年前,云豹在线直播源码更新时,我们为其添加了“大转盘功能”,该功能在直播间中,可实现“付费转动转盘获得礼物”的功能,那么该功能是如何实现的呢?
用户在使用该功能时,通过点击大转盘图标,触发该功能

$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;

在线直播源码需要经过不断的更新和优化才能更好地发展,云豹在线直播源码近期又更新了“付费短视频功能”和“直播小店功能”,有时间把部分源码放出来,和各位共同赏析。

标签:直播间,win,data,大转盘,源码,coin,type,id
来源: https://blog.51cto.com/yunbaokj/2863964

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有