- 精华
- 阅读权限
- 180
- 好友
- 相册
- 分享
- 听众
- 收听
- 注册时间
- 2008-11-1
- 在线时间
- 小时
- 最后登录
- 1970-1-1
|
[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.
|
|