天堂2单机论坛

 找回密码
 立即注册
查看: 7|回复: 1

让新手教官变状态大师(只适合L2C和L2OFF)

[复制链接]
  • TA的每日心情
    擦汗
    5 小时前
  • 签到天数: 515 天

    [LV.9]以坛为家II

    13

    主题

    820

    帖子

    3264

    积分

    论坛元老

    Rank: 8Rank: 8

    积分
    3264
    发表于 4 小时前 | 显示全部楼层 |阅读模式
    本帖最后由 zzh123 于 2026-11-13 03:58 编辑

           应ROplayer兄台之请,发个帖子谈一下怎么实现一键状态的一种方法,比较笨拙的方式,因为据我所知,有些大佬写的状态大师,都是秒加,我发的这个只是在尽量不改动原逻辑的状态下,把原来的新手教官的BUFF做了改动,所以加BUFF的时候,是有动作声音等待时间的,算是抛砖引玉献个丑了,这种方式应该也适用于官方六章和芙蕾雅的服务端,我在L2C官方四章服务端里尝试过,只有这种方法成功了,本想只增加一个NPC,再在ai.obj里添加修改的的代码,但l2Server.exe启动时卡在读取NPC那,无法成功,所以最后用了本文的方法才算通过。完成后如图:
                   

           这种方式主要是通过修改ai.obj里的class 1 newbie_guide类代码来实现状态大师,核心是和deepseek一起探讨出来的,“修改过的ai.obj里的class 1 newbie_guide类的片断代码”,这是一个所有的新手教官都会调用的新手BUFF状态代码,这个核心代码会放在本文的附件里,以便大家下载使用。大家也可以下载后,让AI帮你解析一下,加深对它的理解。如果只是使用,下载后替换ai.obj里的class 1 newbie_guide类代码即可。下面开始讲下步骤:
           第一步:在ai.obj里搜索:class 1 newbie_guide : citizen,找到这一段(很长,往下拉直到本节类结束):
    从这里开始:
    class 1 newbie_guide : citizen
    parameter_define_begin
        string fnHi ""
        string fnHighLevel ""
        string fnRaceMisMatch ""
        string fnGuideF05 ""
        string fnGuideF10 ""
        string fnGuideF15 ""
        string fnGuideF20 ""
        string fnGuideM07 ""
        string fnGuideM14 ""
        string fnGuideM20 ""
    parameter_define_end
    handler 3 113    //  TALKED
    到下面这段才结束:
    S1174.    "guide_for_newbie003.htm"
        push_string S1174
        func_call 184680516    //  func[ShowPage]
        shift_sp -2
        shift_sp -1
    L4839
    L4787
    L4784
    handler_end

    class_end

    全选这一段,用我和deepseek合作出来的“修改过的ai.obj里的class 1 newbie_guide类的片断代码”覆盖它,注意编码格式要用UTF16LE带签名的格式,如果是使用我附件提供了的代码,不需要再转码,已经是转好编码的状态,直接复制粘帖就行,当然最好用natepad3这样的专业文本编辑器打开复制粘帖是最好了。这个片断代码里的技能编码,不是我们常见常用的技能ID,而是都写在skill_pch.txt里来对应的,举例本片断代码里的情况如下:

    物理职业一键全状态:
    风之疾走   ID=1204   [s_wind_walk2] = 308226   
    保护盾     ID=1040   [s_shield3] = 266243      
    狂战士魂   ID=1062   [s_berserker_spirit2] = 271874   
    力量强化   ID=1068   [s_might3] = 273411   
    速度激发   ID=1086   [s_haste2] = 278018         
    吸血怒吸   ID=1268   [s_vampiric_rage4] = 324612      
    神佑之体   ID=1045   [s_bless_the_body6] = 267526   
    弱点侦测   ID=1077   [s_focus3] = 275715            
    死之呢喃   ID=1242   [s_death_whisper3] = 317955        
    导引          ID=1240   [s_guidance3] = 317443         
    敏捷术     ID=1087   [s_agility3] = 278275         
    抵抗冲击   ID=1259   [s_resist_shock4] = 322308        

    魔法职业一键全状态:
    风之疾走   ID=1204   [s_wind_walk2] = 308226     
    保护盾     ID=1040   [s_shield3] = 266243               
    狂战士魂   ID=1062   [s_berserker_spirit2] = 271874   
    灵活思绪   ID=1085   [s_arcane_acumen3] = 277763   
    精神专注   ID=1078   [s_concentration6] = 275974      
    狂热术     ID=1303   [s_wild_magic2] = 333570         
    神佑之魂   ID=1048   [s_bless_the_soul6] = 268294      
    魔力催化   ID=1059   [s_empower3] = 271107        
    魔法屏障   ID=1036   [s_magic_barrier2] = 265218         
    神佑之体   ID=1045   [s_bless_the_body6] = 267526      
    敏捷术     ID=1087   [s_agility3] = 278275               
    抵抗冲击   ID=1259   [s_resist_shock4] = 322308         
                               
    代码里用的都是:308226(风之疾走) 这样的代码:

    L200
        push_event
        push_const 704
        add
        fetch_i
        push_event
        push_const 40
        add
        fetch_i
        push_const 308226----------这里就是“风之疾走”
        push_const 1
        push_const 0
        push_const 1000000
        func_call 184877074    //  func[AddUseSkillDesire]
        shift_sp -5
        shift_sp -1

    因为在ai.obj里古鲁丁村和古鲁丁镇的两个全状态新手教官,还有各村庄的新手教官,都是定义使用newbie_guide
    class类的,如下:
    class 1 guide_gludin_nina : newbie_guide
    class_end
    class 1 guide_gludio_euria : newbie_guide
    class_end
    class 1 guide_human_cnacelot : newbie_guide
    class 1 guide_elf_roios : newbie_guide
    class 1 guide_delf_frankia : newbie_guide
    class 1 guide_dwarf_gullin : newbie_guide
    class 1 guide_orc_tanai : newbie_guide
    所以要改动newbie_guide class这个类,来实现状态大师。

    注意:
    尽量不要用普通的“记事本”直接保存,写入ai.obj的文件必须转成utf16格式。
    代码写入到ai.obj,必须注意文本格式
    非常非常关键! 在官方 C4 C++ 端修改 ai.obj(或者 ai.obj 对应的源码文件),格式要求极其严格。一旦格式不对,轻则服务端加载 AI 报错导致 NPC 无法对话,重则直接导致服务端崩溃(Crash)。
    必须遵守以下 5 条铁律:
    1. 缩进必须用“Tab”键,绝对不能用空格
    官方 C++ 端的脚本解析器对缩进非常敏感,而且只认 Tab 制表符。
        如果你从网页复制代码粘贴进去,很多编辑器会自动把 Tab 变成 4 个空格。
        后果:解析器读不到正确的层级,直接报语法错误(Syntax Error)。
        做法:粘贴后,建议在编辑器(如 Notepad++)里开启“显示不可见字符”,确保行首都是 →(Tab箭头),而不是一堆小点(空格)。

    2. 绝对不能有全角符号,行尾不能有多余的空格和乱码
    如果在 L102、jump L100 这种指令后面多敲了空格,或者混入了不可见的特殊字符(如零宽空格),解析器可能会把它们当成一个无效参数。
        做法:尽量在纯文本编辑器Notepad++ 或 VS Code里操作,不要用 Word。

    4. 如果你修改的是 .txt 源码文件,请用 UTF-16(或带 BOM 的 Unicode) 编码
    如果你修改的是明文源码(之后需要通过官方工具编译成 .obj),保存文件时,编码必须选择 UTF-16(或带 BOM 的 Unicode)。
        如果选了ANSI,或带 BOM 的 UTF-8,编译器会不认识文件头,直接报错。

    帖子放不下太多内容,后续转下一楼。


          附件是需要放入到HTML文件夹的buff_master.htm和核心新手状态的类代码,收个辛苦费,需要中级会员才可下载:
          



    本帖子中包含更多资源

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

    x
    岂有豪情似旧时
    花开花落两由之
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    5 小时前
  • 签到天数: 515 天

    [LV.9]以坛为家II

    13

    主题

    820

    帖子

    3264

    积分

    论坛元老

    Rank: 8Rank: 8

    积分
    3264
     楼主| 发表于 3 小时前 | 显示全部楼层
    第二步:把buff_master.htm对话文件放入服务器止录的html文件夹下:ServerC4\html\,buff_master.htm文件不要像网页文件一样写什么title标签什么的,会导致游戏内对话框无法显示,显示黑色背景的。

    第三步:在npcdata.txt里,修改古鲁丁村和古鲁丁镇的两个全状态新手教官的对话页面指向buff_master.htm页面:

    npc_begin    citizen    8076    [guide_gludin_nina]    level=70    acquire_exp_rate=0    acquire_sp=0    unsowing=1    clan={}    ignore_clan_list={}    clan_help_range=300    slot_chest=[]    slot_rhand=[]    slot_lhand=[]    shield_defense_rate=0    shield_defense=0    skill_list={@s_race_undead;@s_full_magic_defence}    npc_ai={[guide_gludin_nina];{[fnHi]=[guide_gludin_nina001.htm]};//这里是重点,修改成

    {[fnHi]=[buff_master.htm]},后面的不改也不管。
      npc_end

    npc_begin    citizen    8077    [guide_gludio_euria]    level=70    acquire_exp_rate=0    acquire_sp=0    unsowing=1    clan={}    ignore_clan_list={}    clan_help_range=300    slot_chest=[]    slot_rhand=[]    slot_lhand=[]    shield_defense_rate=0    shield_defense=0    skill_list={@s_race_undead;@s_full_magic_defence}    npc_ai={[guide_gludio_euria];{[fnHi]=[guide_gludio_euria001.htm]};//这里是重点,修改成

    {[fnHi]=[buff_master.htm]},后面的不改也不管。
      npc_end

    或者你也可以不改这两处,把html文件夹下的guide_gludin_nina001.htm和guide_gludio_euria001.htm这两个网页里面全改成如下内容:

    <html><head><body>状态大师:<br>请选择你的职业类型,我将会为你加满专属状态。<br><a action="bypass -h menu_select?ask=-7&reply=1">战士职业一键全状态</a><br><a action="bypass -h menu_select?ask=-7&reply=2">魔法职业一键全状态</a></body></html>

    特别注意:
    在npcdata.txt里指向的这个NPC对话页面buff_master.htm,在制作的时候不要踩这两个坑:
    .htm页面不能有title类等复杂标签语句,越简单越好,否则显示黑色背景框;
    .htm页面文件编码必须转成UTF-16格式,否则也黑给你看。

    第四步:更改各大村庄新手教官“得到辅助魔法的帮助”的链接为新的页面:buff_master.htm
    class 1 guide_human_cnacelot : newbie_guide
    说话岛新手教官的页面:
    ServerC4\html\guide_human_cnacelot001.htm
    打开,如下:

    <html><head><body>新手教官:<br>有什么不明白的尽管问我吧!我会尽我所能来帮你的。<br><a action="bypass -h menu_select?ask=-7&reply=1">求取建议</a><br><a action="bypass -h menu_select?ask=255&reply=10">NPC位置引导</a><br><a action="bypass -h menu_select?ask=-7&reply=2">得到辅助魔法的帮助</a><br><a action="link guide_for_newbie001.htm">询问新角色</a></body></html>

    把“得到辅助魔法的帮助”改成“魔法职业一键全状态”,把“求取建议”改成“战士职业一键全状态”,因为求取建议的reply=1,正好符合改过的class 1 guide_human_cnacelot : newbie_guide类的战士BUFF的问答返回标记,而“得到辅助魔法的帮助”的reply=2,也符合法师BUFF的问答返回标记。
    以下各大村庄的新手教官的页面如上依次更改:

    class 1 guide_elf_roios : newbie_guide
    ServerC4\html\guide_elf_roios001.htm

    class 1 guide_delf_frankia : newbie_guide
    ServerC4\html\guide_delf_frankia001.htm

    class 1 guide_dwarf_gullin : newbie_guide
    ServerC4\html\guide_dwarf_gullin001.htm

    class 1 guide_orc_tanai : newbie_guide
    ServerC4\html\guide_orc_tanai001.htm


    第五步:在服务端Script目录下找到npcpos.txt文件,打开,搜索guide_gludio_euria和 guide_gludin_nina,结果如下:
    npc_ex_begin    [guide_gludio_euria]    pos={-13920;121977;-2984;33000}    total=1    respawn=1min    npc_ex_end

    npc_ex_begin    [guide_gludin_nina]    pos={-83123;150868;-3120;0}    total=1    respawn=1min    npc_ex_end
    npcmaker_ex_end         
    将其中之一或两个的地理坐标都修改为奇岩大厅:

    npc_ex_begin    [guide_gludio_euria]    pos={83066;148406;-3464;32768}    total=1    respawn=1min    npc_ex_end
           这一套流程走下来,应该就可以正常一键添加BUFF了,如果你觉得每个职业加的十三个状态太少,你还可以试着扩充一下代码,把歌舞状态也加进去,修改一下BUFF等。
    岂有豪情似旧时
    花开花落两由之
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|监狱|天堂2单机论坛 ( 粤ICP备20030366号 )

    GMT+8, 2026-11-13 08:10 , Processed in 0.059724 second(s), 22 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表