- 精华
- 阅读权限
- 180
- 好友
- 相册
- 分享
- 听众
- 收听
- 注册时间
- 2008-11-1
- 在线时间
- 小时
- 最后登录
- 1970-1-1
|
[77M2] 传奇引擎 VIP管理 脚本
给会使用的朋友. 我不做任何解答. 77M2上手难度++++++
引擎的链接具体大家可以搜索一下 就不发类似广告的链接了.
unit Q41;
interface
uses Classes, SysUtils, G_AddAbility, DateUtils, DefiniensConst;
procedure Main(Npc: TNormNPC; Player: TPlayObject; Args: TArgs);
procedure Buy(Npc: TNormNPC; Player: TPlayObject; Args: TArgs);
procedure Desc(Npc: TNormNPC; Player: TPlayObject; Args: TArgs);
implementation
procedure Main(Npc: TNormNPC; Player: TPlayObject; Args: TArgs);
const
S=
[[
你好:\
<$VIPInfo$>\
--------------------------------------------------------------\
<购买/@Buy(1)> {S=白银VIP;C=250} 价格{S=<$GOLD1$>;C=249}元宝<{S=查看特权;X=220}/@Desc(1)>\
<购买/@Buy(2)> {S=黄金VIP;C=251} 价格{S=<$GOLD2$>;C=249}元宝<{S=查看特权;X=220}/@Desc(2)>\
<购买/@Buy(3)> {S=至尊VIP;C=253} 价格{S=<$GOLD3$>;C=249}元宝<{S=查看特权;X=220}/@Desc(3)>\
--------------------------------------------------------------\\
<离开/@Exit>
]];
var
AMessage: String;
begin
case Player.MemberLevel of
1:
begin
AMessage := ReplaceStr(S, '<$VIPInfo$>', '你当前是{S=白银VIP;C=250}特权玩家,有效期至{S='+FormatDateTime('YYYY年MM月DD日', Player.VarDateTime('VIP效期').AsDateTime)+';C=254}。');
end;
2:
begin
AMessage := ReplaceStr(S, '<$VIPInfo$>', '你当前是{S=黄金VIP;C=251}特权玩家,有效期至{S='+FormatDateTime('YYYY年MM月DD日', Player.VarDateTime('VIP效期').AsDateTime)+';C=254}。');
end;
3:
begin
AMessage := ReplaceStr(S, '<$VIPInfo$>', '你当前是{S=至尊VIP;C=253}特权玩家,有效期至{S='+FormatDateTime('YYYY年MM月DD日', Player.VarDateTime('VIP效期').AsDateTime)+';C=254}。');
end;
else
AMessage := ReplaceStr(S, '<$VIPInfo$>', '你还不是VIP特权玩家。');
end;
//替换里面的金额信息
AMessage := ReplaceStr(AMessage, '<$GOLD1$>', IntToStr(V1_Price));
AMessage := ReplaceStr(AMessage, '<$GOLD2$>', IntToStr(V2_Price));
AMessage := ReplaceStr(AMessage, '<$GOLD3$>', IntToStr(V3_Price));
Npc.Say(Player, AMessage);
end;
procedure Buy(Npc: TNormNPC; Player: TPlayObject; Args: TArgs);
var
_Type,
AGold,
Limit: Integer;
begin
//取出表示VIP类型的第一个参数
_Type := Args.Int[0];
//先检查之前是否是VIP
if _Type < Player.MemberLevel then
begin
//新购买的VIP等级比当前等级低则不处理
Player.SendCenterMessage('{S=你当前拥有更高的VIP等级!!!;C=249}', 0);
Exit;
end;
//根据VIP类型不同,将金额和期限取出来
case _Type of
1:
begin
AGold := V1_Price;
Limit := V1_DAY_LIMIT;
end;
2:
begin
AGold := V2_Price;
Limit := V2_DAY_LIMIT;
end;
3:
begin
AGold := V3_Price;
Limit := V3_DAY_LIMIT;
end;
else
Exit; //如果类型不是1、2、3中的一个,则直接退出此函数
end;
if Player.GameGold >= AGold then
begin
//如果玩家的元宝足够,则减少元宝数量,并且设置VIP等级
Player.GameGold := Player.GameGold - AGold;
Player.GoldChanged;
if (_Type = Player.MemberLevel) and (Player.VarDateTime('VIP效期').AsDateTime > Now) then
begin
//如果VIP等级相同,则为续费
Player.VarDateTime('VIP效期').AsDateTime := DateUtils.IncDay(Player.VarDateTime('VIP效期').AsDateTime, Limit);
end
else
begin
//VIP等级高于当前等级,则为新的VIP,期限为即时起加上VIP期限
Player.VarDateTime('VIP效期').AsDateTime := DateUtils.IncDay(Now, Limit);
end;
Player.VarDateTime('VIP效期').Save; //保存新的VIP期限
Player.MemberLevel := _Type; //记录VIP类型
G_AddAbility.AddAbility(Player); //重置角色附加属性
Player.RecalcAbilitys; //M2重新计算角色的各项属性,对人物附加属性调整后必须调用此函数才能立即对调整生效
//客户端显示一条居中的提示信息
case _Type of
1: Player.SendCenterMessage('{S=恭喜你成功的购买了白银VIP,有效期至'+FormatDateTime('YYYY年MM月DD日', Player.VarDateTime('VIP效期').AsDateTime)+';C=253}', 0);
2: Player.SendCenterMessage('{S=恭喜你成功的购买了黄金VIP,有效期至'+FormatDateTime('YYYY年MM月DD日', Player.VarDateTime('VIP效期').AsDateTime)+';C=253}', 0);
3: Player.SendCenterMessage('{S=恭喜你成功的购买了至尊VIP,有效期至'+FormatDateTime('YYYY年MM月DD日', Player.VarDateTime('VIP效期').AsDateTime)+';C=253}', 0);
end;
Main(Npc, Player, Args); //重新调用入口函数,客户端显示新的VIP购买信息
end
else
begin
Player.SendCenterMessage('{S=对不起,你的元宝不足'+IntToStr(AGold)+';C=249}', 0);
end;
end;
procedure Desc(Npc: TNormNPC; Player: TPlayObject; Args: TArgs);
const
VIP_DESC=
[[
{S=$VIPNAME$;C=250}\
{S=---------------------------------------------------------------;C=11}\
物理防御增加:{S=$ACMIN$-$ACMAX$;C=254}\
魔法防御增加:{S=$MACMIN$-$MACMAX$;C=254}\
物理攻击增加:{S=$DCMIN$-$DCMAX$;C=254}\
魔法攻击增加:{S=$MCMIN$-$MCMAX$;C=254}\
道术攻击增加:{S=$SCMIN$-$SCMAX$;C=254}\
杀怪经验值额外增加:{S=$EXPADD$%;C=254}\
杀怪金币额外增加:{S=$GOLDADD$%;C=254}\
杀怪物品爆率额外增加:{S=$ITEMADD$%;C=254}\
持续有效时间{S=$LIMIT$天;C=249}\\\\\\\\\
<返回/@main>
]];
var
AMessage: String;
begin
AMessage := VIP_DESC;
//根据要查看的VIP信息的不同选择不同的信息数据
case Args.Int[0] of
1:
begin
AMessage := ReplaceStr(AMessage, '$VIPNAME$', '白银VIP');
AMessage := ReplaceStr(AMessage, '$ACMIN$', IntToStr(V1_AC_MIN));
AMessage := ReplaceStr(AMessage, '$ACMAX$', IntToStr(V1_AC_MAX));
AMessage := ReplaceStr(AMessage, '$MACMIN$', IntToStr(V1_MAC_MIN));
AMessage := ReplaceStr(AMessage, '$MACMAX$', IntToStr(V1_MAC_MAX));
AMessage := ReplaceStr(AMessage, '$DCMIN$', IntToStr(V1_DC_MIN));
AMessage := ReplaceStr(AMessage, '$DCMAX$', IntToStr(V1_DC_MAX));
AMessage := ReplaceStr(AMessage, '$MCMIN$', IntToStr(V1_MC_MIN));
AMessage := ReplaceStr(AMessage, '$MCMAX$', IntToStr(V1_MC_MAX));
AMessage := ReplaceStr(AMessage, '$SCMIN$', IntToStr(V1_SC_MIN));
AMessage := ReplaceStr(AMessage, '$SCMAX$', IntToStr(V1_SC_MAX));
AMessage := ReplaceStr(AMessage, '$EXPADD$', IntToStr(V1_EXP_ADD));
AMessage := ReplaceStr(AMessage, '$GOLDADD$', IntToStr(V1_GOLD_ADD));
AMessage := ReplaceStr(AMessage, '$ITEMADD$', IntToStr(V1_ITEM_ADD));
AMessage := ReplaceStr(AMessage, '$LIMIT$', IntToStr(V1_DAY_LIMIT));
end;
2:
begin
AMessage := ReplaceStr(AMessage, '$VIPNAME$', '黄金VIP');
AMessage := ReplaceStr(AMessage, '$ACMIN$', IntToStr(V2_AC_MIN));
AMessage := ReplaceStr(AMessage, '$ACMAX$', IntToStr(V2_AC_MAX));
AMessage := ReplaceStr(AMessage, '$MACMIN$', IntToStr(V2_MAC_MIN));
AMessage := ReplaceStr(AMessage, '$MACMAX$', IntToStr(V2_MAC_MAX));
AMessage := ReplaceStr(AMessage, '$DCMIN$', IntToStr(V2_DC_MIN));
AMessage := ReplaceStr(AMessage, '$DCMAX$', IntToStr(V2_DC_MAX));
AMessage := ReplaceStr(AMessage, '$MCMIN$', IntToStr(V2_MC_MIN));
AMessage := ReplaceStr(AMessage, '$MCMAX$', IntToStr(V2_MC_MAX));
AMessage := ReplaceStr(AMessage, '$SCMIN$', IntToStr(V2_SC_MIN));
AMessage := ReplaceStr(AMessage, '$SCMAX$', IntToStr(V2_SC_MAX));
AMessage := ReplaceStr(AMessage, '$EXPADD$', IntToStr(V2_EXP_ADD));
AMessage := ReplaceStr(AMessage, '$GOLDADD$', IntToStr(V2_GOLD_ADD));
AMessage := ReplaceStr(AMessage, '$ITEMADD$', IntToStr(V2_ITEM_ADD));
AMessage := ReplaceStr(AMessage, '$LIMIT$', IntToStr(V2_DAY_LIMIT));
end;
3:
begin
AMessage := ReplaceStr(AMessage, '$VIPNAME$', '至尊VIP');
AMessage := ReplaceStr(AMessage, '$ACMIN$', IntToStr(V3_AC_MIN));
AMessage := ReplaceStr(AMessage, '$ACMAX$', IntToStr(V3_AC_MAX));
AMessage := ReplaceStr(AMessage, '$MACMIN$', IntToStr(V3_MAC_MIN));
AMessage := ReplaceStr(AMessage, '$MACMAX$', IntToStr(V3_MAC_MAX));
AMessage := ReplaceStr(AMessage, '$DCMIN$', IntToStr(V3_DC_MIN));
AMessage := ReplaceStr(AMessage, '$DCMAX$', IntToStr(V3_DC_MAX));
AMessage := ReplaceStr(AMessage, '$MCMIN$', IntToStr(V3_MC_MIN));
AMessage := ReplaceStr(AMessage, '$MCMAX$', IntToStr(V3_MC_MAX));
AMessage := ReplaceStr(AMessage, '$SCMIN$', IntToStr(V3_SC_MIN));
AMessage := ReplaceStr(AMessage, '$SCMAX$', IntToStr(V3_SC_MAX));
AMessage := ReplaceStr(AMessage, '$EXPADD$', IntToStr(V3_EXP_ADD));
AMessage := ReplaceStr(AMessage, '$GOLDADD$', IntToStr(V3_GOLD_ADD));
AMessage := ReplaceStr(AMessage, '$ITEMADD$', IntToStr(V3_ITEM_ADD));
AMessage := ReplaceStr(AMessage, '$LIMIT$', IntToStr(V3_DAY_LIMIT));
end;
end;
Npc.SayEx(Player, 'Npc大窗口', AMessage);
end;
end.
|
|