找回密码
 立即注册
查看: 367|回复: 21

研究源码兄弟们来看看。。

[复制链接]

2797

主题

3万

回帖

2801

积分

金牌会员

积分
2801
发表于 2026-3-27 09:59:51 | 显示全部楼层 |阅读模式




求发个传奇怪物AI的源码看看!!!??感谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

2797

主题

3万

回帖

2801

积分

金牌会员

积分
2801
 楼主| 发表于 2026-3-27 09:59:51 | 显示全部楼层
发个祖玛教主的吧
祖玛教主类定义
TScultureKingMonster = class (TMonster)
   private
      DangerLevel: integer;
      childlist: TList;  //父甸绢 辰 何窍狼 府胶飘
   public
      BoCallFollower: Boolean;
      constructor Create;
      destructor Destroy; override;
      procedure CallFollower; dynamic;
      procedure MeltStone;
      procedure Attack (target: TCreature; dir: byte); override;
      procedure Run; override;
   end;
类中的一些函数实现
constructor TScultureKingMonster.Create;
begin
   inherited Create;
   SearchRate := 1500 + longword(Random(1500));
   ViewRange := 8;
   BoStoneMode := TRUE; //贸澜俊绰 倒肺 被绢廉 乐澜...
   CharStatusEx := STATE_STONE_MODE;
   Dir := 5;
   DangerLevel := 5; //5锅狼 困扁..
   childlist := TList.Create;
   BoCallFollower := TRUE;
end;
destructor TScultureKingMonster.Destroy;
begin
   childlist.Free;
   inherited Destroy;
end;
procedure TScultureKingMonster.MeltStone;
var
   i: integer;
   cret: TCreature;
   event: TEvent;
begin
   event := TEvent.Create (PEnvir, CX, CY, ET_SCULPEICE, 5 * 60 * 1000, TRUE);
   if ( event <> nil ) and ( event.IsAddToMap = true ) then
   begin
     CharStatusEx := 0;
     CharStatus := GetCharStatus;
     SendRefMsg (RM_DIGUP, Dir, CX, CY, 0, \'\');
     BoStoneMode := FALSE;
     EventMan.AddEvent (event);
     Exit;
   end;
   if event <> nil then event.Free;
end;
procedure TScultureKingMonster.CallFollower;
const
   MAX_FOLLOWERS = 4;
var
   i, count, nx, ny: integer;
   monname: string;
   mon: TCreature;
   followers: array[0..MAX_FOLLOWERS-1] of string; // = (林付龋过\', 林付脚厘\', 付泵荤\', 禁扁唱规\');
begin
   count := 6 + Random (6);
   GetFrontPosition (self, nx, ny);
   followers[0] := __ZumaMonster1;
   followers[1] := __ZumaMonster2;
   followers[2] := __ZumaMonster3;
   followers[3] := __ZumaMonster4;
   for i:=1 to count do begin
      if childlist.Count < 30 then begin
         monname := followers[Random(MAX_FOLLOWERS)];
         mon := UserEngine.AddCreatureSysop (MapName, nx, ny, monname);
         if mon <> nil then
            childlist.Add (mon);
      end;
   end;
end;
procedure TScultureKingMonster.Attack (target: TCreature; dir: byte);
var
   pwr: integer;
begin
   with WAbil do
      pwr := GetAttackPower (Lobyte(DC), ShortInt(Hibyte(DC)-Lobyte(DC)));
   {inherited} HitHit2 (target, 0, pwr, TRUE);
end;
procedure TScultureKingMonster.Run;
var
   i, dis, d, targdir: integer;
   cret, nearcret: TCreature;
begin
//   if (not BoGhost) and (not Death) and
//      (StatusArr[POISON_STONE] = 0) and (StatusArr[POISON_ICE] = 0) and
//      (StatusArr[POISON_STUN] = 0) then begin
  if IsMoveAble then begin
      if GetCurrentTime - WalkTime > GetNextWalkTime then begin
         nearcret := nil;
         //WalkTime := GetTickCount;  惑加罐篮 run俊辑 犁汲沥窃
         if BoStoneMode then begin //酒流 葛嚼阑 唱鸥郴瘤 臼疽澜.
            for i:=0 to VisibleActors.Count-1 do begin
               cret := TCreature (PTVisibleActor(VisibleActors).cret);
               if (not cret.Death) and (IsProperTarget(cret)) and (not cret.BoHumHideMode or BoViewFixedHide) then begin
                  if (abs(CX-cret.CX) <= 2) and (abs(CY-cret.CY) <= 2) then begin
                     MeltStone; //籍惑惑怕俊辑 踌绰促
                     WalkTime := GetCurrentTime + 2000;
                     break;
                  end;
               end;
            end;
         end else begin
            if (GetTickCount - SearchEnemyTime > 8000) or ((GetTickCount - SearchEnemyTime > 1000) and (TargetCret = nil)) then begin
               SearchEnemyTime := GetTickCount;
               MonsterNormalAttack;
            end;
            if BoCallFollower then begin
               //5锅狼 矫访
               if ((WAbil.HP / WAbil.MaxHP * 5) < DangerLevel) and (DangerLevel > 0) then begin
                  Dec (DangerLevel);
                  CallFollower;
               end;
               if WAbil.HP = WAbil.MaxHP then DangerLevel := 5;  //檬扁拳
            end;
         end;
         for i:=childlist.Count-1 downto 0 do begin
            if (TCreature(childlist).Death) or (TCreature(childlist).BoGhost) then begin
               childlist.Delete(i);
            end;
         end;
      end;
   end;
   inherited Run;
end;

2797

主题

3万

回帖

2801

积分

金牌会员

积分
2801
 楼主| 发表于 2026-3-27 09:59:51 | 显示全部楼层
怪物的ai设计一般都是在ObjMon.pas这个文件里 源码区代码很多你自己可以去下载看看。
ai编号也就是race值可以查看UsrEngn.pas文件下面的AddBaseObject这个函数

2797

主题

3万

回帖

2801

积分

金牌会员

积分
2801
 楼主| 发表于 2026-3-27 09:59:51 | 显示全部楼层
mgkx999 发表于 2024-5-7 12:40 怪物的ai设计一般都是在ObjMon.pas这个文件里 源码区代码很多你自己可以去下载看看。
ai编号也就是race值 ...
  老兄啊 你有玩这个吗 可以帮忙发出来吗 随便发一个怪我就行了 我就是参考下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

2797

主题

3万

回帖

2801

积分

金牌会员

积分
2801
 楼主| 发表于 2026-3-27 09:59:51 | 显示全部楼层
            protected override void ProcessAI()
            {
                if (Dead) return;
                
                if (Stats[Stat.HP] >= 7)
                {
                    byte stage = (byte)(HP / (Stats[Stat.HP] / 7));

                    if (stage < _stage) SpawnSlaves();
                    _stage = stage;
                }

                base.ProcessAI();
            }

复制代码

2797

主题

3万

回帖

2801

积分

金牌会员

积分
2801
 楼主| 发表于 2026-3-27 09:59:51 | 显示全部楼层
mgkx999 发表于 2024-5-6 19:18 发个祖玛教主的吧
祖玛教主类定义
谢谢老哥

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

2797

主题

3万

回帖

2801

积分

金牌会员

积分
2801
 楼主| 发表于 2026-3-27 09:59:51 | 显示全部楼层
geliang0120 发表于 2024-5-7 22:07
兄弟 我已经没金币买啦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

2797

主题

3万

回帖

2801

积分

金牌会员

积分
2801
 楼主| 发表于 2026-3-27 09:59:51 | 显示全部楼层
geliang0120 发表于 2024-5-7 22:07
C# 服务端的代码.  不是页游, 支持Unity. 3端

2797

主题

3万

回帖

2801

积分

金牌会员

积分
2801
 楼主| 发表于 2026-3-27 09:59:51 | 显示全部楼层
发个祖玛教主的吧
祖玛教主类定义
TScultureKingMonster = class (TMonster)
   private
      DangerLevel: integer;
      childlist: TList;  //父甸绢 辰 何窍狼 府胶飘
   public
      BoCallFollower: Boolean;
      constructor Create;
      destructor Destroy; override;
      procedure CallFollower; dynamic;
      procedure MeltStone;
      procedure Attack (target: TCreature; dir: byte); override;
      procedure Run; override;
   end;
类中的一些函数实现
constructor TScultureKingMonster.Create;
begin
   inherited Create;
   SearchRate := 1500 + longword(Random(1500));
   ViewRange := 8;
   BoStoneMode := TRUE; //贸澜俊绰 倒肺 被绢廉 乐澜...
   CharStatusEx := STATE_STONE_MODE;
   Dir := 5;
   DangerLevel := 5; //5锅狼 困扁..
   childlist := TList.Create;
   BoCallFollower := TRUE;
end;
destructor TScultureKingMonster.Destroy;
begin
   childlist.Free;
   inherited Destroy;
end;
procedure TScultureKingMonster.MeltStone;
var
   i: integer;
   cret: TCreature;
   event: TEvent;
begin
   event := TEvent.Create (PEnvir, CX, CY, ET_SCULPEICE, 5 * 60 * 1000, TRUE);
   if ( event <> nil ) and ( event.IsAddToMap = true ) then
   begin
     CharStatusEx := 0;
     CharStatus := GetCharStatus;
     SendRefMsg (RM_DIGUP, Dir, CX, CY, 0, \'\');
     BoStoneMode := FALSE;
     EventMan.AddEvent (event);
     Exit;
   end;
   if event <> nil then event.Free;
end;
procedure TScultureKingMonster.CallFollower;
const
   MAX_FOLLOWERS = 4;
var
   i, count, nx, ny: integer;
   monname: string;
   mon: TCreature;
   followers: array[0..MAX_FOLLOWERS-1] of string; // = (林付龋过\', 林付脚厘\', 付泵荤\', 禁扁唱规\');
begin
   count := 6 + Random (6);
   GetFrontPosition (self, nx, ny);
   followers[0] := __ZumaMonster1;
   followers[1] := __ZumaMonster2;
   followers[2] := __ZumaMonster3;
   followers[3] := __ZumaMonster4;
   for i:=1 to count do begin
      if childlist.Count < 30 then begin
         monname := followers[Random(MAX_FOLLOWERS)];
         mon := UserEngine.AddCreatureSysop (MapName, nx, ny, monname);
         if mon <> nil then
            childlist.Add (mon);
      end;
   end;
end;
procedure TScultureKingMonster.Attack (target: TCreature; dir: byte);
var
   pwr: integer;
begin
   with WAbil do
      pwr := GetAttackPower (Lobyte(DC), ShortInt(Hibyte(DC)-Lobyte(DC)));
   {inherited} HitHit2 (target, 0, pwr, TRUE);
end;
procedure TScultureKingMonster.Run;
var
   i, dis, d, targdir: integer;
   cret, nearcret: TCreature;
begin
//   if (not BoGhost) and (not Death) and
//      (StatusArr[POISON_STONE] = 0) and (StatusArr[POISON_ICE] = 0) and
//      (StatusArr[POISON_STUN] = 0) then begin
  if IsMoveAble then begin
      if GetCurrentTime - WalkTime > GetNextWalkTime then begin
         nearcret := nil;
         //WalkTime := GetTickCount;  惑加罐篮 run俊辑 犁汲沥窃
         if BoStoneMode then begin //酒流 葛嚼阑 唱鸥郴瘤 臼疽澜.
            for i:=0 to VisibleActors.Count-1 do begin
               cret := TCreature (PTVisibleActor(VisibleActors).cret);
               if (not cret.Death) and (IsProperTarget(cret)) and (not cret.BoHumHideMode or BoViewFixedHide) then begin
                  if (abs(CX-cret.CX) <= 2) and (abs(CY-cret.CY) <= 2) then begin
                     MeltStone; //籍惑惑怕俊辑 踌绰促
                     WalkTime := GetCurrentTime + 2000;
                     break;
                  end;
               end;
            end;
         end else begin
            if (GetTickCount - SearchEnemyTime > 8000) or ((GetTickCount - SearchEnemyTime > 1000) and (TargetCret = nil)) then begin
               SearchEnemyTime := GetTickCount;
               MonsterNormalAttack;
            end;
            if BoCallFollower then begin
               //5锅狼 矫访
               if ((WAbil.HP / WAbil.MaxHP * 5) < DangerLevel) and (DangerLevel > 0) then begin
                  Dec (DangerLevel);
                  CallFollower;
               end;
               if WAbil.HP = WAbil.MaxHP then DangerLevel := 5;  //檬扁拳
            end;
         end;
         for i:=childlist.Count-1 downto 0 do begin
            if (TCreature(childlist).Death) or (TCreature(childlist).BoGhost) then begin
               childlist.Delete(i);
            end;
         end;
      end;
   end;
   inherited Run;
end;

2797

主题

3万

回帖

2801

积分

金牌会员

积分
2801
 楼主| 发表于 2026-3-27 09:59:51 | 显示全部楼层
怪物的ai设计一般都是在ObjMon.pas这个文件里 源码区代码很多你自己可以去下载看看。
ai编号也就是race值可以查看UsrEngn.pas文件下面的AddBaseObject这个函数

© 2026 折翼天使社区 版权所有