勤奋小狗 发表于 2026-3-29 08:57:20

研究MONGEN.TXT的参数“集中坐标刷怪”发现了引擎源码的错误


本想利用集中坐标刷怪,方便把大地图刷成一堆一堆的怪物方便玩家群怪就研究了下这个参数。网络寻觅无果后打开了以前下载过的源码。
搜索Mongen.txt关键字,发现nMissionGenRate代表此参数。下边是相关代码




复制代码
重点区域用红色标注了,用我三脚猫的英语和仅能写个一键回收NPC的脚步知识读懂大概意思:如果RANDOM(100-集中坐标变量)如果成立,则执行在随机20范围内随机刷怪,否则在MONGEN.TXT里设置的范围内随机刷怪。
然鹅,发现一个奇怪的地方:红字((nX - 10) + Random(20))里的nX已经做过 (MonGen.nX - MonGen.nRange) + Random(MonGen.nRange * 2 + 1);
运算了。也就是说,他是在随机了坐标的基础上再做20的随机坐标。此时猜想韩国程序员当年就写错了代码导致这个功能不正确。
于是我设置了祖玛卫士和祖玛雕像刷怪范围0来验证是否正确,其中祖玛雕像100%触发集中坐标刷新


D505 154 172 祖玛卫士 0 10 120 0

D505 154 172 祖玛雕像 0 10 120 100

复制代码
一进游戏果然:雕像在20范围内刷新,祖玛卫士全部叠在154.172坐标。
file:///C:/Users/Administrator/AppData/Roaming/Tencent/Users/332022126/QQ/WinTemp/RichOle/A_%25KOBX)AZ%7BZ]PG$AVK9SSK.png
补充内容 (2021-7-23 15:11):
begin
  Result := True;
  nCode := 0;
  dwStartTick := GetTickCount();
  try
    nCode := 1;
    if MonGen <> nil then begin
      nCode := 2;
      if MonGen.nRace > 0 then begin
        ...

善良月亮 发表于 2026-3-29 08:57:20

可爱小狗 发表于 2026-3-29 08:57:20

xiaoshushe 发表于 2021-7-23 12:59
膜拜大神,,,能帮忙看看角色网关加壳了没么。。

大方小狗 发表于 2026-3-29 08:57:20

begin
  Result := True;
  nCode := 0;
  dwStartTick := GetTickCount();
  try
    nCode := 1;
    if MonGen <> nil then begin
      nCode := 2;
      if MonGen.nRace > 0 then begin
        nCode := 3;
        if Random(100) < MonGen.nMissionGenRate then begin
          nCode := 4;
          nX := (MonGen.nX - MonGen.nRange) + Random(MonGen.nRange * 2 + 1);
          nY := (MonGen.nY - MonGen.nRange) + Random(MonGen.nRange * 2 + 1);
          nCode := 5;
          for I := 0 to nCount - 1 do begin
            nCode := 6;
            Cert := AddBaseObject(nil, MonGen.sMapName, ((nX - 10) + Random(20)), ((nY - 10) + Random(20)), MonGen.nRace, MonGen.sMonName);
            nCode := 7;
            if Cert <> nil then begin
              nCode := 8;
              Cert.m_nChangeColorType := MonGen.nChangeColorType; //是否变色
              nCode := 9;
              MonGen.CertList.Add(Cert);
              Cert.AddMapCount;
            end;
            nCode := 10;
            if (GetTickCount - dwStartTick) > g_dwZenLimit then begin
              Result := False;
              Break;
            end;
          end;
        end else begin
          for I := 0 to nCount - 1 do begin
            nCode := 11;
            nX := (MonGen.nX - MonGen.nRange) + Random(MonGen.nRange * 2 + 1);
            nY := (MonGen.nY - MonGen.nRange) + Random(MonGen.nRange * 2 + 1);
            nCode := 12;
            Cert := AddBaseObject(nil, MonGen.sMapName, nX, nY, MonGen.nRace, MonGen.sMonName);
            nCode := 13;
            if Cert <> nil then begin
              nCode := 14;
              Cert.m_nChangeColorType := MonGen.nChangeColorType; //是否变色
              nCode := 15;
              MonGen.CertList.Add(Cert);
              Cert.AddMapCount;
              nCode := 16;
            end;
            if (GetTickCount - dwStartTick) > g_dwZenLimit then begin
              Result := False;
              Break;
            end;
          end;
        end;
      end;
    end;
  except
    MainOutMessage(sExceptionMsg + \' Code:\' + IntToStr(nCode));
  end;
end;
复制代码

聪明云朵 发表于 2026-3-29 08:57:20

大佬,改下引擎吧

开心小鱼 发表于 2026-3-29 08:57:20

gee引擎的未来就靠你了。

坚强太阳 发表于 2026-3-29 08:57:20

GEE官方正在招兵买马的。。。。

机智小猪 发表于 2026-3-29 08:57:20

pai哥 发表于 2021-7-24 09:01 GEE官方正在招兵买马的。。。。
我这属于推理学范畴……和编程关系不大

坚强小鱼 发表于 2026-3-29 08:57:20

刷怪一直让人头大,只能多写几个坐标,好累。写少了么,怪刷出来,就是一条直线 。。。

快乐小鱼 发表于 2026-3-29 08:57:20

caiking 发表于 2021-7-25 08:46 刷怪一直让人头大,只能多写几个坐标,好累。写少了么,怪刷出来,就是一条直线 。。。
不应该吧,不都是随机散落的么
页: [1]
查看完整版本: 研究MONGEN.TXT的参数“集中坐标刷怪”发现了引擎源码的错误