藏宝湾网游单机站

 找回密码
 注册

QQ登录

只需一步,快速开始

★【黑暗之光SF★我是大主宰SF】【神将三国SF】★

★【0.1折】★【变态网页游戏私服】★

★神将三国网页版上线送V5 5w元宝 5000w铜币 我是大主宰上线满v,80万元宝,小怪都爆元宝,耐玩长久稳定★

【原始传奇SF/维京传奇SF】【GM包站手游】

★【原始传奇SF/维京传奇SF】【GM包站手游】★

★2025火爆『传奇岁月+赤焰号角+维京传奇+原始传奇』爆战力称号BUFF+神装99999999万人PK★

首创可以单机 可以互动 可以赚烟钱的传奇

★全网独家 可以单机 可以互动的传奇!★

★全网唯一持续更新的可单机游戏!每15-25天更新一次内容,保持游戏新鲜度!! 众多独家的功能特色,众多你没见过的全新玩法,有能力的赚点烟钱,还能偶尔沙城战斗!★

★承接推广★
★承接推广★

★承接推广★

☆六一新区开放-放置传奇☆

★六一新区开放-放置传奇★

★可白嫖 上班摸鱼类 放置文字传奇游戏(放置休闲)qq群756025698★

★三职业复古★开局送神装★爆率100%★散人逆袭★

★三职业复古★开局送神装★爆率100%★散人逆袭★

★〖双线〗〖无忧传奇〗〖每日新区〗〖开局送神装 100%高爆率 装备元宝打怪爆〗★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★DNF★全职业平衡★公益服★
★DNF★全职业平衡★公益服★

【dnf86版本】【怀旧服】【全职业平衡】【非变态服】【非商业服】【775016356】

★承接推广★

★承接推广★

★承接推广★

★梦幻16门派全新大唐九黎★

★梦幻16门派全新大唐九黎★

★★新增全新门派九黎城,★不做垃圾,力争什么都做到最好★持续更新,长久稳定★

★承接推广★

★承接推广★

★承接推广★

查看: 828|回复: 2

[分享] [77M2] 传奇引擎 天下镖局 脚本

[复制链接]
发表于 2015-6-24 10:24:13 | 显示全部楼层 |阅读模式

[77M2] 传奇引擎 天下镖局 脚本

给会使用的朋友. 我不做任何解答. 77M2上手难度++++++

引擎的链接具体大家可以搜索一下 就不发类似广告的链接了.

unit Q37;

interface
  uses Classes, SysUtils, DefiniensConst, DateUtils;

//接镖NPC  
procedure Main(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure LoadList(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure Update(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure UpdateTime(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure Req(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure Abandon(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);

//镖车目的NPC
procedure Main1(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
         
implementation

const UPDATE_GOLD = 20;
            MAX_COUNT    =    3;

function GetExp(Player: TPlayObject; _Type: Integer): Integer;
var
    BaseExp: Integer;   
  Rate: Integer;
begin
  //_Type 0:初级镖车 1:中级镖车 2:高级镖车
    case Player.Level of
        0..30:    BaseExp    :=    100000;
      31..50:    BaseExp    :=    200000;
       51..60:    BaseExp    :=    300000;
       61..70:    BaseExp    :=    400000;
       71..80:    BaseExp    :=    500000;
       81..90:    BaseExp    :=    600000;
       91..100:BaseExp    :=    700000;
  else
       BaseExp    :=    700000;
     end;
  Rate    :=    Player.ReNewLevel * 10{每级转生+10%} + _Type * 50{每个等次的镖车+50%};      
  Result:=    BaseExp + Round(BaseExp * Rate / 100);
end;

function GetGold(Player: TPlayObject; _Type: Integer): Integer;
var
    BaseGold: Integer;   
  Rate: Integer;
begin
  //_Type 0:初级镖车 1:中级镖车 2:高级镖车
    case Player.Level of
        0..30:    BaseGold    :=    50000;
      31..50:    BaseGold    :=    100000;
       51..60:    BaseGold    :=    150000;
       61..70:    BaseGold    :=    200000;
       71..80:    BaseGold    :=    250000;
       81..90:    BaseGold    :=    300000;
       91..100:BaseGold    :=    350000;
  else
       BaseGold    :=    350000;
     end;
  Rate    :=    Player.ReNewLevel * 10{每级转生+10%} + _Type * 20{每个等次的镖车+20%};      
  Result:=    BaseGold + Round(BaseGold * Rate / 100);
end;

procedure GetLineInfo(Player: TPlayObject; Line: Byte; out nType, nState: Integer);
begin   
    case Line of
      1:
      begin
        nType        :=    Player.VarInteger('第一辆镖车').AsInteger;
          nState    :=    Player.VarInteger('第一辆镖车状态').AsInteger;
      end;
    2:
      begin
        nType        :=    Player.VarInteger('第二辆镖车').AsInteger;
          nState    :=    Player.VarInteger('第二辆镖车状态').AsInteger;
      end;
    3:
      begin
        nType        :=    Player.VarInteger('第三辆镖车').AsInteger;
          nState    :=    Player.VarInteger('第三辆镖车状态').AsInteger;
      end;
    4:
      begin
        nType        :=    Player.VarInteger('第四辆镖车').AsInteger;
          nState    :=    Player.VarInteger('第四辆镖车状态').AsInteger;
      end;
  end;  
end;

function InProgress(Player: TPlayObject): Boolean;
begin
    Result    :=    (Player.VarInteger('第一辆镖车状态').AsInteger = 1) or
                          (Player.VarInteger('第二辆镖车状态').AsInteger = 1) or
              (Player.VarInteger('第三辆镖车状态').AsInteger = 1) or
              (Player.VarInteger('第四辆镖车状态').AsInteger = 1);
end;

function DoFinished(Player: TPlayObject; out AExp, AGold: Integer): Boolean;
begin
    if Player.VarInteger('第一辆镖车状态').AsInteger = 1 then
  begin
    Player.VarInteger('第一辆镖车状态').AsInteger    :=    2;
    Player.VarInteger('第一辆镖车状态').Save;
    AExp    :=    GetExp(Player, Player.VarInteger('第一辆镖车').AsInteger);
    AGold    :=    GetGold(Player, Player.VarInteger('第一辆镖车').AsInteger);  
    Result    :=    True;
  end
  else if Player.VarInteger('第二辆镖车状态').AsInteger = 1 then
  begin
    Player.VarInteger('第二辆镖车状态').AsInteger    :=    2;
    Player.VarInteger('第二辆镖车状态').Save;
    AExp    :=    GetExp(Player, Player.VarInteger('第二辆镖车').AsInteger);
    AGold    :=    GetGold(Player, Player.VarInteger('第二辆镖车').AsInteger);
    Result    :=    True;
  end
  else if Player.VarInteger('第三辆镖车状态').AsInteger = 1 then
  begin
    Player.VarInteger('第三辆镖车状态').AsInteger    :=    2;
    Player.VarInteger('第三辆镖车状态').Save;
    AExp    :=    GetExp(Player, Player.VarInteger('第三辆镖车').AsInteger);
    AGold    :=    GetGold(Player, Player.VarInteger('第三辆镖车').AsInteger);
    Result    :=    True;
  end
  else if Player.VarInteger('第四辆镖车状态').AsInteger = 1 then
  begin
    Player.VarInteger('第四辆镖车状态').AsInteger    :=    2;
    Player.VarInteger('第四辆镖车状态').Save;
    AExp    :=    GetExp(Player, Player.VarInteger('第四辆镖车').AsInteger);
    AGold    :=    GetGold(Player, Player.VarInteger('第四辆镖车').AsInteger);
    Result    :=    True;
  end
end;

procedure Main(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
const
S=
[[
 看什么看,没见过长的这么帅的镖头啊?看你的样子也不像贼,有\
没有兴趣跟我一起押镖啊?\
  {S=镖车规则:;C=251}每隔两小时系统自动刷新4辆镖车,分为白色、绿色和紫\
色3种等级。{S=奖励规则:;C=251}根据人物等级以及镖车等级的不同,押镖的经\
验和金币奖励也不同。\
  每日可押镖{S=<$V1$>;C=250}次,你今日已押镖 {S=<$V2$>;C=249} 次。\
  <选择镖车/@LoadList>{S=【押镖】;C=250}\\
<没兴趣/@exit>\
]];
var
    AMessage: String;
begin
    AMessage    :=    ReplaceStr(S, '<$V1$>', IntToStr(MAX_COUNT));   
    AMessage    :=    ReplaceStr(AMessage, '<$V2$>', IntToStr(Player.N[_P_LBCS]));     
    Npc.Say(Player, AMessage);
end;

procedure DoRefresh(Player: TPlayObject; IsFree: Boolean);

    function RandUpdate: Byte;
  var
      V: Integer;
  begin
        V    :=    Random(100);
    case V of
      0..59:    Result    :=    0;
      60..89:    Result    :=    1;
      90..99:    Result    :=    2;
    end;   
  end;

begin
    Player.VarInteger('第一辆镖车').AsInteger    :=    RandUpdate;  
    Player.VarInteger('第二辆镖车').AsInteger    :=    RandUpdate;  
    Player.VarInteger('第三辆镖车').AsInteger    :=    RandUpdate;  
    Player.VarInteger('第四辆镖车').AsInteger    :=    RandUpdate;   
  Player.VarInteger('第一辆镖车').Save;
  Player.VarInteger('第二辆镖车').Save;
  Player.VarInteger('第三辆镖车').Save;
  Player.VarInteger('第四辆镖车').Save;
  
    Player.VarInteger('第一辆镖车状态').AsInteger    :=    0;  
    Player.VarInteger('第二辆镖车状态').AsInteger    :=    0;  
    Player.VarInteger('第三辆镖车状态').AsInteger    :=    0;  
    Player.VarInteger('第四辆镖车状态').AsInteger    :=    0;   
  Player.VarInteger('第一辆镖车状态').Save;
  Player.VarInteger('第二辆镖车状态').Save;
  Player.VarInteger('第三辆镖车状态').Save;
  Player.VarInteger('第四辆镖车状态').Save;
  
  Player.VarDateTime('镖车刷新时间').AsDateTime    :=    Now;
  Player.VarDateTime('镖车刷新时间').Save;
end;

function GetListMessage(Player: TPlayObject): String;
const
S=
[[
\                      {S=可接镖车信息;C=254}\
{S=---------------------------------------------------------------;C=11}\
<$Line1$>\
{S=---------------------------------------------------------------;C=11}\
<$Line2$>\
{S=---------------------------------------------------------------;C=11}\
<$Line3$>\
{S=---------------------------------------------------------------;C=11}\
<$Line4$>\
{S=---------------------------------------------------------------;C=11}\\
<刷新镖车/@Update>{S=(扣除<$UPDATEGOLD$>元宝或礼金);C=249}\
<返回/@main>\\
提示:距离下次镖车刷新时间还有 <<$Time$>/@UpdateTime> 分钟\
]];
S_Line = '  <$Name$>{S=经验:<$EXP$>;X=80}\ {S=金币:<$Gold$>;X=80}<$State$>';

  function GetLine(Line: Byte): String;
  var
      nState, nType: Integer;   
    sName, sState: String;
  begin        
      GetLineInfo(Player, Line, nType, nState);
    case nType of
      0:    sName    :=    '{S=初级镖车;OY=8}';
      1:    sName    :=    '{S=中级镖车;OY=8;C=250}';
      2:    sName    :=    '{S=高级镖车;OY=8;C=253}';
    end;   
   
    case nState of
      0: sState    :=    '<{S=【领取】;OY=-8;X=250}/@Req('+ IntToStr(Line) +')>';
      1: sState    :=    '{S=【进行中】;OY=-8;X=250;C=242}<{S=【放弃】;OY=-8}/@Abandon('+ IntToStr(Line) +')>';        
      2: sState    :=    '{S=【已完成】;OY=-8;X=250;C=250}';
    end;   
    Result    :=    ReplaceStr(S_Line, '<$Name$>', sName);
    Result    :=    ReplaceStr(Result, '<$EXP$>', IntToStr( GetExp(Player, nType) ));
    Result    :=    ReplaceStr(Result, '<$Gold$>', IntToStr( GetGold(Player, nType) ));
    Result    :=    ReplaceStr(Result, '<$State$>', sState);
  end;  
  
var
    I: Integer;
begin                                       
  I    :=    7200 - SecondsBetween(Now, Player.VarDateTime('镖车刷新时间').AsDateTime);
  if I < 0 then
      I := 0
  else  
      I    :=    I div 60;

  Result    :=    ReplaceStr(S, '<$Line1$>', GetLine(1));  
  Result    :=    ReplaceStr(Result, '<$Line2$>', GetLine(2));  
  Result    :=    ReplaceStr(Result, '<$Line3$>', GetLine(3));  
  Result    :=    ReplaceStr(Result, '<$Line4$>', GetLine(4));  
  Result    :=    ReplaceStr(Result, '<$UPDATEGOLD$>', IntToStr(UPDATE_GOLD));
  Result    :=    ReplaceStr(Result, '<$Time$>', IntToStr(I));   
end;

procedure LoadList(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
begin
    if Player.N[_P_LBCS] >= MAX_COUNT then
  begin  
      Npc.MessageBox(Player, '你今日的拉镖次数已用完,请明日再来!!!');
    Exit;
  end;
  if not InProgress(Player) and (SecondsBetween(Now, Player.VarDateTime('镖车刷新时间').AsDateTime) > 7200) then
      DoRefresh(Player, True);
    Npc.SayEx(Player, 'Npc大窗口', GetListMessage(Player));
end;

procedure Update(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
begin
    if InProgress(Player) then
  begin
      Npc.MessageBox(Player, '你当前有正在进行中的押镖任务,请先完成当前任务!!!');
    Exit;
  end;
    if (Player.GamePoint >= UPDATE_GOLD) or (Player.GameGold >= UPDATE_GOLD) then
  begin
      if Player.GamePoint >= UPDATE_GOLD then
        Player.GamePoint :=    Player.GamePoint - UPDATE_GOLD
    else
        Player.GameGold :=    Player.GameGold - UPDATE_GOLD;
    Player.GoldChanged;
      DoRefresh(Player, True);
        Npc.SayEx(Player, 'Npc大窗口', GetListMessage(Player));   
  end
  else
      Npc.MessageBox(Player, '你的元宝或礼金不足 ' + IntToStr(UPDATE_GOLD) + ' ,刷新失败!!!');
end;

procedure UpdateTime(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
begin
    Npc.SayEx(Player, 'Npc大窗口', GetListMessage(Player));
end;

procedure Req(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
var
    nLine, nType, nState: Integer;
begin
    if (Player.VarInteger('第一辆镖车状态').AsInteger = 1) or
       (Player.VarInteger('第二辆镖车状态').AsInteger = 1) or
     (Player.VarInteger('第三辆镖车状态').AsInteger = 1) or
     (Player.VarInteger('第四辆镖车状态').AsInteger = 1) then
      Npc.MessageBox(Player, '你当前有正在进行中的押镖任务。。。')
  else
  begin
        nLine    :=    Args.Int[0];
      GetLineInfo(Player, nLine, nType, nState);
        if nState = 0 then
      begin
        case nType of
        0:    Player.Recallmob('初级镖车');
        1:    Player.Recallmob('中级镖车');
        2:    Player.Recallmob('高级镖车');
      end;
      case nLine of
        1: Player.VarInteger('第一辆镖车状态').AsInteger    :=    1;
        2: Player.VarInteger('第二辆镖车状态').AsInteger    :=    1;
        3: Player.VarInteger('第三辆镖车状态').AsInteger    :=    1;
        4: Player.VarInteger('第四辆镖车状态').AsInteger    :=    1;
      end;
      LoadList(Npc, Player, Args);      
      end;     
  end;
end;

procedure Abandon(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
var
    nLine, nType, nState: Integer;
begin
    nLine    :=    Args.Int[0];
  GetLineInfo(Player, nLine, nType, nState);
    if nState = 1 then
  begin   
      Player.KillSlave('初级镖车');  
      Player.KillSlave('中级镖车');  
      Player.KillSlave('高级镖车');
    case nLine of
      1:
      begin
          Player.VarInteger('第一辆镖车状态').AsInteger    :=    0;
        Player.VarInteger('第一辆镖车状态').Save;
      end;
      2:
      begin
          Player.VarInteger('第二辆镖车状态').AsInteger    :=    0;
        Player.VarInteger('第二辆镖车状态').Save;
      end;
      3:
      begin
          Player.VarInteger('第三辆镖车状态').AsInteger    :=    0;
        Player.VarInteger('第三辆镖车状态').Save;      
      end;
      4:
      begin
          Player.VarInteger('第四辆镖车状态').AsInteger    :=    0;        
        Player.VarInteger('第四辆镖车状态').Save;
      end;
    end;               
    LoadList(Npc, Player, Args);
  end;   
end;

//==============================================================================
procedure Main1(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
const
S=
[[
    不错嘛,带来了我想要的东西,这些奖励是给你的。以后谁敢欺负\
你你就报哥的名字啊,哥替你摆平!!!\\
 {S=此趟镖车让你获得了以下奖励:;C=243}\
  {S=经验:;C=250}<$EXP$>\
  {S=金币:;C=250}<$GOLD$>\
\\<离开/@exit>
]];
S1=
[[
 话说从前有个二货,接了一趟镖,千里迢迢的赶往目的地后,才发现\
镖车居然跟丢了,哎。。。看什么看,说的就是你啊,你的镖车呢?\\\\\\\
<离开/@exit>
]];
S2=
[[
嗯,我看你骨骼惊奇,是个好材料,愿意加入我们虎头帮不?\\\\\\\\<离开/@exit>
]];
S3=[[请离我近点好吗?我又不会吃了你。。。]];
var
    AExp, AGold: Integer;
  AMessage: String;
begin
    if (ABS(Player.MapX - Npc.MapX) <= 3) and (ABS(Player.MapY - Npc.MapY) <= 3) then
  begin
        if InProgress(Player) then
      begin               
          if (Player.GetSideSlaveCount(3, '初级镖车') > 0) or (Player.GetSideSlaveCount(3, '中级镖车') > 0) or (Player.GetSideSlaveCount(3, '高级镖车') > 0) then
        begin
              if DoFinished(Player, AExp, AGold) then
            begin      
                  Player.KillSlave('初级镖车');  
                  Player.KillSlave('中级镖车');  
                  Player.KillSlave('高级镖车');
            Player.AddExp(AExp);
            Player.Gold    :=    Player.Gold + AGold;
            Player.GoldChanged;      
          Player.N[_P_LBCS]    :=    Player.N[_P_LBCS] + 1;            
            AMessage    :=    ReplaceStr(S, '<$EXP$>', IntToStr(AExp));
            AMessage    :=    ReplaceStr(AMessage, '<$GOLD$>', IntToStr(AGold));
                  Npc.Say(Player, AMessage);      
            end;        
        end
        else
            Npc.Say(Player, S1);
      end
      else
          Npc.Say(Player, S2);
  end
  else
      Npc.Say(Player, S3);
end;

end.



 楼主| 发表于 2015-6-24 10:24:51 | 显示全部楼层
常用变量记得加上
unit DefiniensConst;
const _P_LBCS        =        7; //今日已拉镖次数
const _P_XSCS = 8; //今日已完成悬赏任务次数



发表于 2015-6-24 12:04:48 | 显示全部楼层
不明觉厉~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

本站内容如若侵犯到您的权益,请来电来函告知,我们会尽快处理!
联系QQ:1953150286,2251387361,123784736,免责申明

排行榜|联系我们|小黑屋|手机版|Archiver|游戏藏宝湾 |

GMT+8, 2025-5-29 06:06 , Processed in 0.052440 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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