传奇之家 - 传奇开区一条龙服务网站

当前位置:传奇之家 > 开区脚本 > > 详细页面

世界BOSS · 全服讨伐系统

世界BOSS · 全服讨伐系统

世界BOSS · 全服讨伐系统

作者:传奇之家类别:开区脚本

更新:2026-10-29查看次数:148

// 世界BOSS讨伐系统
program WorldBossSystem;
 
const
  MAX_PLAYERS = 50;
  BOSS_MAX_HP = 5000000;
  BOSS_REFRESH_HOUR = 20; // 晚上8点刷新
 
type
  TPlayerDamage = record
    PlayerName: string;
    Damage: Int64;
    ClassType: string;
  end;
 
  TBoss = record
    Name: string;
    CurrentHP: Int64;
    MaxHP: Int64;
    Level: Integer;
    IsAlive: Boolean;
    LastHitPlayer: string;
  end;
 
var
  Boss: TBoss;
  DamageRanking: array[1..MAX_PLAYERS] of TPlayerDamage;
  PlayerCount: Integer;
 
procedure InitBoss;
begin
  Boss.Name := '暗黑魔龙王';
  Boss.MaxHP := BOSS_MAX_HP;
  Boss.CurrentHP := BOSS_MAX_HP;
  Boss.Level := 100;
  Boss.IsAlive := True;
  Boss.LastHitPlayer := '';
  Writeln('???? 世界BOSS「', Boss.Name, '」已刷新!');
  Writeln('   HP: ', Boss.CurrentHP, ' / ', Boss.MaxHP);
  Writeln('   等级: ', Boss.Level);
  Writeln('   刷新时间: 每日 ', BOSS_REFRESH_HOUR, ':00');
end;
 
procedure PlayerAttack(PlayerName, ClassType: string; Damage: Int64);
var
  i, InsertPos: Integer;
begin
  if not Boss.IsAlive then
  begin
    Writeln('BOSS已被击败!等待下次刷新。');
    Exit;
  end;
  
  // 记录伤害
  InsertPos := 0;
  for i := 1 to PlayerCount do
    if DamageRanking[i].PlayerName = PlayerName then
    begin
      DamageRanking[i].Damage := DamageRanking[i].Damage + Damage;
      InsertPos := i;
      Break;
    end;
    
  if InsertPos = 0 then
  begin
    Inc(PlayerCount);
    DamageRanking[PlayerCount].PlayerName := PlayerName;
    DamageRanking[PlayerCount].Damage := Damage;
    DamageRanking[PlayerCount].ClassType := ClassType;
    InsertPos := PlayerCount;
  end;
  
  // 更新BOSS血量
  Boss.CurrentHP := Boss.CurrentHP - Damage;
  if Boss.CurrentHP <= 0 then
  begin
    Boss.CurrentHP := 0;
    Boss.IsAlive := False;
    Boss.LastHitPlayer := PlayerName;
  end;
  
  Writeln('?? ', PlayerName, '(', ClassType, ') 对BOSS造成 ', Damage, ' 伤害!');
  Writeln('   BOSS剩余HP: ', Boss.CurrentHP, '/', Boss.MaxHP);
  
  if not Boss.IsAlive then
    Writeln('???? BOSS被击败!最后一击由「', Boss.LastHitPlayer, '」完成!');
end;
 
procedure ShowDamageRanking;
var
  i, j: Integer;
  Temp: TPlayerDamage;
begin
  Writeln('');
  Writeln('═══ 伤害排行榜 ═══');
  
  // 冒泡排序
  for i := 1 to PlayerCount - 1 do
    for j := 1 to PlayerCount - i do
      if DamageRanking[j].Damage < DamageRanking[j + 1].Damage then
      begin
        Temp := DamageRanking[j];
        DamageRanking[j] := DamageRanking[j + 1];
        DamageRanking[j + 1] := Temp;
      end;
  
  for i := 1 to PlayerCount do
    if DamageRanking[i].PlayerName <> '' then
      Writeln('  第', i, '名: ', DamageRanking[i].PlayerName,
              ' (', DamageRanking[i].ClassType, ')',
              ' 伤害:', DamageRanking[i].Damage);
end;
 
procedure DistributeRewards;
var
  i: Integer;
begin
  Writeln('');
  Writeln('???????????? 奖励发放 ????????????');
  
  for i := 1 to PlayerCount do
    if DamageRanking[i].PlayerName = '' then Break;
    
    case i of
      1: Writeln('  ???? ', DamageRanking[i].PlayerName, 
         ' → 神器碎片×10 + 元宝×50000 + 最后一击额外奖励!');
      2..3: Writeln('  ???? ', DamageRanking[i].PlayerName,
         ' → 神器碎片×5 + 元宝×20000');
      4..10: Writeln('  ???? ', DamageRanking[i].PlayerName,
         ' → 高级装备箱×1 + 元宝×5000');
      else Writeln('  ???? ', DamageRanking[i].PlayerName,
           ' → 参与奖:元宝×1000');
    end;
end;
 
begin
  PlayerCount := 0;
  InitBoss;
  
  // 模拟战斗
  PlayerAttack('战天', '战士', 150000);
  PlayerAttack('法神', '法师', 280000);
  PlayerAttack('道尊', '道士', 120000);
  PlayerAttack('法神', '法师', 350000);
  PlayerAttack('刺客无名', '刺客', 200000);
  PlayerAttack('战天', '战士', 180000);
  PlayerAttack('冰封王座', '法师', 420000);
  PlayerAttack('战天', '战士', 500000); // 最后一击
  
  ShowDamageRanking;
  DistributeRewards;
end.
功能说明:? 定时刷新世界BOSS,全服玩家可参与攻击,按伤害排名发放奖励,最后一击额外奖励。