登录
×
  • 首页
  • 传奇论坛
  • 传奇版本库
  • 传奇服务端
  • 传奇三端手游
  • 传奇素材网
  • 传奇客户端
  • 下载排行
  • 获取邀请码
  • 网络广告 风险自担
    111952

    [其它手游引擎] 91M2引擎如何实现充值平台对接,91M2传奇版本开区设置充值平台的方法

     火... [复制链接]

    [其它手游引擎] 91M2引擎如何实现充值平台对接,91M2传奇版本开区设置充值平台的方法

     火... [复制链接]
    趣游论坛

    1万

    主题

    9

    回帖

    11万

    积分

    管理员

    积分
    112172

    灌水之王活跃会员突出贡献优秀版主荣誉管理论坛元老

    趣游论坛 2019-8-15 06:24:28 / 显示全部楼层 /阅读模式
    111952
    20190815061741.png

    游戏中充值平台是一个很重要的环节,基于77访问文件及数据库的功能,通过变通处理能支持任何的充值平台,对于充值平台本身就是写文件或数据库的模式则更是易如反掌。

    在示范版本中我们只做了基于写文件的充值模式,下面则是玩家充值后领取元宝的核心代码:

    unit Q4;
    {
        充值模块说明:
      本模块适用于在"Mir200\Envir\QuestDiary\充值积分"文件夹里对应的文本中写入充值账号信息的充值方式
    }

    inte**ce
      uses Classes, SysUtils, DefiniensConst, ExtendFuns;

    procedure DoObtainGold(Npc: TNormNpc; Player: TPlayObject; Args: TArgs); //领取元宝入口函数

    implementation

    //检查账号在指定充值文件中存在的行数,并删除,返回行数*比例
    function CheckAccount(const TxtFile, Account: String; Rate: Double): Double;
    var
      LS: TStrings;
      Idx: Integer;   
      ASum: Integer;
    begin
      Result    :=    0;              
      //检查是否存在文件
      if FileExists(TxtFile) then
      begin
        LS    :=    TStringList.Create;     
        ASum:=    0; //初始取到的行数为0
        try            
          //将文件加载到TStrings对象
          LS.LoadFromFile(TxtFile);
          while true do
          begin
            Idx    :=    LS.IndexOf(Account);
            //取出一条账号记录
           if Idx <> -1 then
            begin            
              //如果取到了记录,则删除这条记录,并增加取到的行数
              LS.Delete(Idx);
              Inc(ASum);         
            end
            else   
              //没取到则直接跳出循环
              Break;
          end;      
          if ASum > 0 then
            //如果取到的行数大于0,则说明对列表有做过更新,需要保存
            LS.SaveToFile(TxtFile);
          //返回元宝数量(取到的行数x比例)   
          Result:= ASum    * Rate;
        finally
          LS.Free;
        end;   
      end;
    end;

    //领取充值元宝
    procedure DoObtainGold(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
    var
      AGoldSum: Double;
    begin
    if G_GoldLocked then
      begin
        //如果G_GoldLocked为True,则表示正在为其他玩家发放元宝,为了不引起并发读写问题,当前此次请求无效
        //此类处理方法可有效避免并发文本读写造成的数据错乱
        Player.SendCenterMessage('我正在为其他玩家发放元宝,请稍后!!!', 0);
        Exit;
      end;   
      //将G_GoldLocked置为True
      G_GoldLocked    :=    True;
      try      
        //初始化当前领取到的元宝总数为0,然后从每个文件中去读取元宝数量
        //示范版本中以常见的充值方式处理元宝处理,如果是读取数据库充值记录,则可以采用Gamelib.DBEngine对象来处理   
        AGoldSum    :=    0;
        AGoldSum    :=    AGoldSum + CheckAccount('Envir\QuestDiary\充值积分\yb01.txt', Player.Account, 0.1);
        AGoldSum    :=    AGoldSum + CheckAccount('Envir\QuestDiary\充值积分\yb02.txt', Player.Account, 0.2);
        AGoldSum    :=    AGoldSum + CheckAccount('Envir\QuestDiary\充值积分\yb1.txt', Player.Account, 1);
        AGoldSum    :=    AGoldSum + CheckAccount('Envir\QuestDiary\充值积分\yb2.txt', Player.Account, 2);
        AGoldSum    :=    AGoldSum + CheckAccount('Envir\QuestDiary\充值积分\yb6.txt', Player.Account, 6);
        //作为演示,这里省略更多的元宝比例文件
        if AGoldSum > 0 then
        begin
          //如果玩家领取到的元宝数量大于0   
          AGoldSum    :=    AGoldSum * 100;                          
          Player.GameGold    :=    Player.GameGold + Round(AGoldSum);
          Player.GoldChanged;
          Player.SendCenterMessage('元宝领取成功,一共领取元宝'+IntToStr(Round(AGoldSum))+'个!!!', 0);
        end
        else
          Player.SendCenterMessage('元宝领取失败,暂时没有你的充值信息!!!', 0);
      finally                  
        //领取结束,将G_GoldLocked置为False,此时其他玩家可执行元宝领取了
        G_GoldLocked    :=    False;
      end;
    end;

    end.
    上面代码中,CheckAccount函数就是检查文本文件中是否存在某账号记录,如果存在则全部取出来,算出对应的元宝数量并返回。

    DoObtainGold函数则是一个普通的入口函数,即玩家点击客户端界面可触发的函数,这个函数先是提取出玩家有多少元宝,然后将元宝发放给玩家

    回复

    使用道具 举报

    太执着

    0

    主题

    4818

    回帖

    1万

    积分

    年VIP会员

    积分
    11632
    太执着 2024-8-7 03:47:19 / 显示全部楼层
    回复 支持 反对

    使用道具 举报

    lyy6110

    0

    主题

    36

    回帖

    163

    积分

    注册用户

    积分
    163
    lyy6110 昨天 15:26 / 显示全部楼层
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫一扫加群沟通交流

    首页 论坛 !mobpost! 最新 我的