- 精华
- 阅读权限
- 180
- 好友
- 相册
- 分享
- 听众
- 收听
- 注册时间
- 2008-11-1
- 在线时间
- 小时
- 最后登录
- 1970-1-1
|
[77M2] 传奇引擎 文采考官 脚本
给会使用的朋友. 我不做任何解答. 77M2上手难度++++++
引擎的链接具体大家可以搜索一下 就不发类似广告的链接了.
unit Q3;
interface
uses Classes, SysUtils, G_RankNameUnit, DefiniensConst;
procedure Main(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure Q3_1(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure Q3_2(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure Q3_3(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure Q3_4(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure Q_N(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure Q_Y(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure handover(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure exam(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
implementation
var
QSize: Integer; //题库数量
Questions: TStrings; //题库
//随机提取题目
function RandomGetQuestion: String;
var
Idx: Integer;
begin
if QSize < 1 then Exit;
Idx := Random(QSize - 1);
Result := Questions[Idx];
end;
//获取经验值
function GetRewardExp(Player: TPlayObject): Integer;
begin
Result := 0;
end;
//是否已经完成今日答题次数
function CheckFinished(Player: TPlayObject): Boolean;
begin
end;
//获取今日剩余答题次数
function GetOddDTCS(Player: TPlayObject): Integer;
begin
Result := 0;
end;
procedure Main(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
const
S=
[[
{S=<$UserName$>;C=70}\
成为玛法大陆一个文武双全的勇士是很有必要的,如果不想被人\
说成四肢发达,头脑简单的人,那么你来找我就是摆脱前者冠以文人\
的第一步。\
<开始答题/@Q3_1>\
<存取考证/@Q3_2> {S=当前文采值:;C=251}{S=<$Value$>;C=250}\
<文官品位对照/@Q3_3>{S=【必读】;C=249} {S=当前文官品位:;C=251}{S=<$OfficialRank$>;C=253}\
<奖励介绍/@Q3_4>{S=【奖励】;C=250} {S=今日已答题次数:;C=251}{S=<$AddValue$>;C=250}\
<关闭/@exit>\
]];
var
AMessage: String;
begin
AMessage := ReplaceStr(S, '<$UserName$>', Player.Name);
AMessage := ReplaceStr(AMessage, '<$Value$>', Player.N[_P_WC]);
AMessage := ReplaceStr(AMessage, '<$AddValue$>', Player.N[_P_YDTCS]);
AMessage := ReplaceStr(AMessage, '<$OfficialRank$>', GetOfficialRank(Player.N[_P_WC]));
Npc.Say(Player, AMessage);
end;
procedure Q3_1(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
const
S=
[[
{S=<$NPCName$>;C=243}:\
{S=你当前的文采值为:;C=251}{S=<$Value$>;C=250}\
文官品位为:{S=<$OfficialRank$>;C=253}\
全部剩余答题数为:{S=<$Count$>;C=251} 次\
今日已答题次数:{S=<$Value1$>;C=250} 次\
今日剩余答题次数:{S=<$Value2$>;C=250} 次\
<$Command$>\\
<返回上一页/@Main>\
]];
var
AMessage: String;
begin
AMessage := ReplaceStr(S, '<$NPCName$>', Npc.Name);
AMessage := ReplaceStr(AMessage, '<$Count$>', IntToStr(Player.N[_P_DTCS]));
AMessage := ReplaceStr(AMessage, '<$Value$>', IntToStr(Player.N[_P_WC]));
AMessage := ReplaceStr(AMessage, '<$Value1$>', IntToStr(Player.N[_P_YDTCS]));
AMessage := ReplaceStr(AMessage, '<$Value2$>', IntToStr(GetOddDTCS(Player)));
AMessage := ReplaceStr(AMessage, '<$OfficialRank$>', GetOfficialRank(Player.N[_P_WC]));
AMessage := ReplaceStr(AMessage, '<$Command$>', IIF(Player.N[_P_DTCS] = 0, '<{S=递交准考证书;C=250}/@handover>', '<开始答题/@exam>'));
Npc.Say(Player, AMessage);
end;
procedure Q3_2(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
const
S=[[
{S=<$UserName$>;C=70}:\
如果你有很多考证没地方放,可以存放到我这里。{S=警告:存放的考;C=249}\
{S=证将被绑定。;C=249}\
你当前寄存准考证数为:{S=<$Count$>;C=250}个\ \
<存放准考证书/@Q3_5>\
<取回准考证书/@Q3_6>\\
<返回/@main>
]];
var
AMessage: String;
begin
AMessage := ReplaceStr(S, '<$UserName$>', Player.Name);
AMessage := ReplaceStr(AMessage, '<$Count$>', IntToStr(Player.N[_P_ZKZCF]));
Npc.Say(Player, AMessage);
end;
procedure Q3_3(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
const
S=
[[
{S=<$UserName$>;C=243}:\
每正确回答我提出的问题,我将会给你一定{S=经验和声望;C=251}作为奖励,{S=同;C=250}\
{S=时你的文采值也会相应增加十点;C=250}。{S=文采值可以激发经验加成;C=254},文采值越\
高激发的经验倍数就越高。{S=官位对照表:;C=243}\
{S=81-400;C=254} {S=书生;C=251} {S=32001-45000;C=254} {S=状元;C=251}\
{S=401-800;C=254} {S=秀才;C=251} {S=45001-60000;C=254} {S=编修;C=251}\
{S=801-2000;C=254} {S=举人;C=251} {S=60001-100000;C=254} {S=府丞;C=251}\
{S=2001-4000;C=254} {S=解元;C=251} {S=100001-150000;C=254} {S=翰林学士;C=251}\
{S=4001-7000;C=254} {S=贡士;C=251} {S=150001-250000;C=254} {S=御史中丞;C=251}\
{S=7001-10000;C=254} {S=会元;C=251} {S=250001-400000;C=254} {S=詹士;C=251}\
{S=10001-14000;C=254} {S=同进士出身;C=251} {S=400001-700000;C=254} {S=侍郎;C=251}\
{S=14001-18000;C=254} {S=进士出身;C=251} {S=700001-1000000;C=254} {S=大学士;C=251}\
{S=18001-22000;C=254} {S=探花;C=251} {S=1000000以上;C=254} {S=文曲星;C=251}\
{S=22001-32000;C=254} {S=榜眼;C=251}\\\\\
[ <返回/@Main> ]
]];
var
AMessage: String;
begin
AMessage := ReplaceStr(S, '<$UserName$>', Player.Name);
Npc.SayEx(Player, 'Npc大窗口', AMessage);
end;
procedure Q3_4(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
const
S=[[
出题费用= 1000 + 等级 X 1.1 X 100\\
<返回/@Main>
]];
begin
end;
procedure Q3_5(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
begin
if Player.GetItemCount('准考证书') = 0 then
Player.SendCenterMessage('对不起,你身上没有准考证书了!', 0)
else
begin
Npc.Take(Player, '准考证书', 1);
Player.N[_P_ZKZCF] := Player.N[_P_ZKZCF] + 1;
Q3_2(Npc, Player, Args);
end;
end;
procedure Q3_6(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
var
AItem: TUserItem;
begin
if Player.N[_P_ZKZCF] = 0 then
Player.SendCenterMessage('你已经没有存放的准考证书了', 0)
else
begin
AItem := Npc.GiveItem(Player, '准考证书');
if AItem <> nil then
begin
AItem.Bind := True;
Player.UpdateItem(AItem);
Player.N[_P_ZKZCF] := Player.N[_P_ZKZCF] - 1;
end;
Q3_2(Npc, Player, Args);
end;
end;
procedure handover(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
begin
if Player.GetItemCount('准考证书') > 0 then
begin
Npc.Take(Player, '准考证书');
Player.N[_P_DTCS] := Player.N[_P_DTCS] + 10;
Q3_1(Npc, Player, Args);
end
else
Npc.MessageBox(Player, '你的准考证呢,我怎么没看到?');
end;
procedure exam(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
var
AQuestion: String;
begin
if QSize > 0 then
begin
if not CheckFinished(Player) then
begin
if Player.N[_P_DTCS] > 0 then
begin
AQuestion := RandomGetQuestion;
if AQuestion <> '' then
begin
Player.Check[_P_CHECK_INExam] := True; //设置当前处于答题状态
Player.N[_P_DTCS] := Player.N[_P_DTCS] - 1;
Npc.Say(Player, AQuestion);
end
else
Npc.MessageBox(Player, '无效的题目!!!');
end
else
Q3_1(Npc, Player, Args);
end
else
Npc.MessageBox(Player, '你今天的答题次数已满,请明天再来吧!!!');
end
else
Npc.MessageBox(Player, '题库为空,请稍候再来试试!');
end;
procedure Q_N(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
const
S=[[
\\\
{S=很遗憾,回答错误。;C=249}\
你还有{S=<$Count$>次;C=250}答题机会。\\
<继续答题/@exam> <返回/@Q3_1>\
]];
begin
if Player.Check[_P_CHECK_INExam] then //先检查是否处于答题状态,可以防止客户端数据包欺骗
begin
Player.N[_P_YDTCS] := Player.N[_P_YDTCS] + 1; //已答次数+1
Player.Check[_P_CHECK_INExam] := False; //答题结束
Npc.Say(Player, ReplaceStr(S, '<$Count$>', IntToStr(Player.N[_P_DTCS])));
end;
end;
procedure Q_Y(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
const
S=[[
\\
{S=恭喜你,回答正确。;C=250}\\
{S=你当前的文采值为:;C=251}{S=<$WC$>;C=250}\
你还有{S=<$Count$>次;C=250}答题机会。\\
<继续答题/@exam> <返回/@Q3_1>\
]];
var
AMessage: String;
AOldWC: Integer;
begin
if Player.Check[_P_CHECK_INExam] then //先检查是否处于答题状态,可以防止客户端数据包欺骗
begin
Player.N[_P_YDTCS] := Player.N[_P_YDTCS] + 1; //已答次数+1
Player.Check[_P_CHECK_INExam] := False; //答题结束
AOldWC := Player.N[_P_WC];
Player.N[_P_WC] := Player.N[_P_WC] + 10; //增加文采
Player.AddExp(GetRewardExp(Player));
AMessage := ReplaceStr(S, '<$WC$>', IntToStr(Player.N[_P_WC]));
AMessage := ReplaceStr(AMessage, '<$Count$>', IntToStr(Player.N[_P_DTCS]));
if not SameOfficialRank(AOldWC, Player.N[_P_WC]) then
SetPlayRankName(Player);
Npc.Say(Player, AMessage);
end;
end;
procedure LoadQuestions;
var
ASource: TStrings;
S: String;
I: Integer;
begin
Questions.Clear;
ASource := Gamelib.TryGetResource('文采题库');
if ASource <> nil then
begin
for I := 0 to ASource.Count - 1 do
begin
S := ASource[I];
//以";"开始的行被忽略掉
if (Trim(S)<>'') and (S[1]<>';') then
Questions.Add(S);
end;
end;
QSize := Questions.Count;
end;
initialization
Questions := TStringList.Create;
LoadQuestions;
finalization
FreeAndNil(Questions);
end.
常量记得加上:
unit DefiniensConst;
const _P_CHECK_INExam = 1; //是否处于答题状态
const _P_WC = 2; //文采值
const _P_DTCS = 3; //答题次数
const _P_YDTCS = 4; //今日已答题次数
const _P_ZKZCF = 5; //准考证存放数量
|
|