GM-爱好者

 找回密码
 立即注册

在线
客服

在线客服服务时间: 10:00-20:00{不定期回复}

选择下列客服马上在线沟通:

快速
发帖

客服
热线

290016403
7*24小时客服服务热线

关注
微信

关注Q群二维码
顶部
查看: 396|回复: 15

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

[复制链接]
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
42
帖子
1281
金币
10132

建功勋章

热心会员突出贡献最佳新人活跃会员

发表于 2023-4-30 11:20:22 | 显示全部楼层 |阅读模式

马上注册 立即下载

您需要 登录 才可以下载或查看,没有账号?立即注册

x
游戏中充值平台是一个很重要的环节,基于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函数则是一个普通的入口函数,即玩家点击客户端界面可触发的函数,这个函数先是提取出玩家有多少元宝,然后将元宝发放给玩家
等级头衔

等級:经略使

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11

积分成就
精华
0
G币
0
主题
32
帖子
326
金币
4169

建功勋章

最佳新人活跃会员

发表于 2023-4-30 12:19:19 | 显示全部楼层
论坛不能没有像楼主这样的人才啊!我会一直支持GM爱好者:www.gmahz.com
等级头衔

等級:司马

Rank: 6Rank: 6Rank: 6

积分成就
精华
0
G币
0
主题
0
帖子
451
金币
7523

建功勋章

最佳新人活跃会员

发表于 2023-4-30 12:19:26 | 显示全部楼层
楼主,大恩不言谢了!GM爱好者:www.gmahz.com是最棒的!
等级头衔

等級:等待验证会员

积分成就
精华
0
G币
0
主题
0
帖子
457
金币
7606

建功勋章

发表于 2023-4-30 12:25:40 | 显示全部楼层
金币我要攒金币!!!
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
0
帖子
5562
金币
94617

建功勋章

热心会员推广达人宣传达人灌水之王突出贡献最佳新人活跃会员

发表于 2023-4-30 12:51:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
等级头衔

等級:等待验证会员

积分成就
精华
0
G币
0
主题
0
帖子
8798
金币
149702

建功勋章

发表于 2023-5-1 08:45:19 | 显示全部楼层
感谢楼主的无私分享!要想GM爱好者:www.gmahz.com好 就靠你我他
等级头衔

等級:提辖

Rank: 10Rank: 10Rank: 10Rank: 10

积分成就
精华
0
G币
0
主题
28
帖子
524
金币
8456

建功勋章

最佳新人活跃会员

发表于 2023-5-1 11:03:46 | 显示全部楼层
既然你诚信诚意的推荐了,那我就勉为其难的看看吧!GM爱好者:www.gmahz.com不走平凡路。
等级头衔

等級:等待验证会员

积分成就
精华
0
G币
0
主题
0
帖子
8798
金币
149702

建功勋章

发表于 2023-5-3 05:53:41 | 显示全部楼层
这东西我收了!谢谢楼主!GM爱好者:www.gmahz.com真好!
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
0
帖子
5562
金币
94617

建功勋章

热心会员推广达人宣传达人灌水之王突出贡献最佳新人活跃会员

发表于 2023-5-4 03:20:14 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
等级头衔

等級:经略使

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11

积分成就
精华
0
G币
0
主题
34
帖子
512
金币
8296

建功勋章

最佳新人活跃会员

发表于 2023-5-5 07:44:42 | 显示全部楼层
路过支持一下
*滑块验证:
懒得打字嘛,点击右侧快捷回复 【GM爱好者:www.gmahz.com】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|GM-爱好者 ( 赣ICP备20009465号-1 )|网站地图

GMT+8, 2024-4-27 10:58 , Processed in 0.186390 second(s), 39 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表