抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

配置游戏中心GameCenter

  1. 打开软件游戏引擎目录\MirServer\GameCenter.exe,选中自动配置服务器目录,确认后重启软件
    博客传奇游戏开发配置GameCenter1
  2. 配置登录网关,如下图,剩下的一直点下一步即可.
    博客传奇游戏开发配置GameCenter2

    生成登录器

  3. 引擎目录\MirServer目录下创建文件夹登录器XXX(可以是任意名字)
  4. MakeGameLogin.exe同级补丁文件夹目录下的文件夹复制到登录器XXX,一般只需要如下图几个文件夹
    博客传奇游戏开发生成登录器移动补丁文件夹所需文件夹
  5. 打开MakeGameLogin.exe,配置步骤如下:
    1. 博客传奇游戏开发登录器生成1
    2. 点击客户端界面配置
      博客传奇游戏开发登录器生成2
    3. 点击生成登录器,选中刚刚创建的登录器XXX目录
      博客传奇游戏开发登录器生成3

      更新MakeGameLogin

  6. 前往haom2下周更新包
  7. HaoM2[XXX]\登录器下的MakeGameLogin.exe,GuiEdit.dll,D3DX81ab.dll复制到老版本登录器生成器覆盖.
  8. 打开HaoM2[XXX]\登录器\自定义UI升级工具(xxx).exe选中老版本登录器 正式开区\NewUI进行修复
  9. 打开HaoM2[XXX]\开始更新程序.bat文件夹编辑,将所有D:\Mirserver的XXX更换为老版本的启动器路径,保存后执行.

    添加地图

  10. 准备工作:准备缩略图(bmp文件),Objects(编号).pak,SmTiles(编号).pak,Tiles(编号).pak(地图名称).map地图文件.
    博客传奇游戏开发素材目录示例
  11. 确认密码:查看和修改pak文件密码,.pak是加密资源文件,在使用它们时需要正确的密码,查看和修改密码为以下几个步骤.

    1. 如下图:每一个pak文件对应着一个密码.一般的,在项目中存在文件游戏引擎目录\Mirserver\(自定义登录器)\Pak.txt,打开文件,会发现文件路径|密码这样的格式,每一个Pak都对应着一个密码,游戏在读取资源时会使用文件中的密码,若密码错误则无法加载文件.
      博客传奇游戏开发资源文件密码
    2. 修改新密码:打开软件V8M2资源编辑器打开需要被修改密码的文件,会提示输入密码,输入旧密码即可,然后点击修改密码,保存即可,修改完毕记得在游戏引擎目录\Mirserver\(自定义登录器)\Pak.txt更新改文件的密码
      博客传奇开发修改pak新密码
  12. 修改地图文件资源指向:使用软件AnduNet.MapIdxChanger.exe打开.map文件,查看地图文件指向的三个文件编号是否正确.
    博客传奇游戏开发检查地图资源编号
    若是不正确则修改为正确的编号,例如下方编号不能一一对应,则可以将地图指向的248改为32,或者将文件夹中的文件重命名为248.
    博客传奇游戏开发检查地图资源编号错误示例
    博客传奇游戏开发检查地图编号修改为正确的编号示例

  13. 移动资源:接着将文件Objects(编号).pak,SmTiles(编号).pak,Tiles(编号).pak复制到:游戏引擎目录\MirServer\(自定义登录器文件夹)\(自定义资源文件夹)\Data

  14. 移动地图(需重启服务器,需重新打包客户端):将地图文件(.map)分别复制到游戏引擎目录\MirServer\Mir200\Map游戏引擎目录\MirServer\(自定义登录器)\(自定义资源文件夹)\Map下.如何修改文件游戏引擎目录\MirServer\Mir200\Envir\MapInfo.txt,添加内容[地图别名|地图编号 玩家所见地图名] .并且打开文件游戏引擎目录\MirServer\登录器\Map.txt添加新内容(如:G:\热血传奇\mafa003\Map\at73.map)

    1. 其中地图编号值得就是刚刚素材中地图文件的文件名
    2. 其中玩家所见地图名指的是地图在游戏中的名称,例如:比奇城,盟重城,沙巴克城,等等.
  15. 添加小地图:使用软件V8M2资源编辑器打开目录游戏引擎目录\MirServer\(自定义登录器文件夹)\(自定义资源文件夹)\Data\mmap10.pak文件,同样的输入密码解密,然后点击导入,选中需要导入的小地图.bmg文件,选中尾部添加点击确认.
    博客传奇游戏开发添加小地图
    接着打开文件游戏引擎目录\MirServer\Mir200\Envir\MiniMap.txt,添加内容地图 小地图编号

    1. 地图指的就是map的文件名
    2. 小地图编号就是在V8M2资源编辑器中显示的编号头部变为1,尾部加一.如:在软件中显示00266,则小地图编号为10267.

      快速寻找项目中使用到的地图列表

  16. 打开文件项目目录\MirServer\Mir200\Envir\MonGen.txt,复制文件内部的所有内容
  17. 打开网站,将复制的内容粘贴入内容框.
  18. 在正则表达式输入框输入\n([\u4e00-\u9fa5a-zA-Z0-9]+(?:[、,]|\d+)?)
  19. 复制匹配结果
    博客传奇游戏开发寻找地图列表1
  20. 打开网站,将复制的内容粘贴入内容框,点击去重.
    博客传奇游戏开发寻找地图列表2

    导出怪物素材

  21. 使用软件V8M2资源编辑器打开游戏引擎目录\MirServer\(自定义登录器文件夹)\(自定义资源文件夹)\Data\MonXXX.pak文件,输入密码解密
  22. 寻找怪物名称步骤(两种方法)
    1. 方法一
      1. 找到数据库文件游戏引擎\MirServer\Mud2\DB\数据库文件.db
      2. 打开网站,导入找到的数据库文件
      3. 输入SQL语句SELECT * FROM 'Monster' where Appr = 编号.编号的规则为
        MonXXX.Pak其中XXX加1,加上怪物首张图片编号乘360,例如Mon147.Pak文件中编号为00360的怪物编号为:1481
      4. 查询即可得到怪物名称
    2. 方法二
      1. 打开软件WJ4.0 4.2.1.9.exe,版本目录设置为素材项目的根目录,点击怪物数据库
        博客传奇游戏开发导出怪物素材2
      2. 如下图所示,要在文件Mon147.Pak找到00360号怪物
        博客传奇游戏开发导出怪物素材3
      3. 编号规则如下
        博客传奇游戏开发导出怪物素材4
  23. 确认好要导出的怪物的编号起始
    博客传奇游戏开发导出怪物素材1
  24. 一般怪物图片有以下几种状态
    1. 站立
      博客传奇游戏开发导出怪物素材站立状态
    2. 行走
      博客传奇游戏开发导出怪物素材行走状态
    3. 默认攻击
      博客传奇游戏开发导出怪物素材默认攻击状态
    4. 被攻击
      博客传奇游戏开发导出怪物素材被攻击状态
      博客传奇游戏开发导出怪物素材被死亡状态

      添加怪物

  25. 打开软件Wzl编辑器,打开目录游戏引擎目录\MirServer\自定义登陆器\自定义资源\Data
  26. 点击新建,入下图所示步骤
    博客传奇游戏开发添加怪物1
    博客传奇游戏开发添加怪物2
  27. 将新创建的Pak文件的密码添加到登录器生成器\Pak.txt文件.
  28. 打开软件Wzl编辑器点击密码管理将旧密码全部清空,重新导入密码文件
  29. Wzl编辑器打开文件D游戏引擎目录\MirServer\自定义登陆器\自定义资源\Data\新添加.Pak文件.
  30. 添加素材
    博客传奇游戏开发添加怪物3
  31. 编辑怪物数据(两种方法)

    1. 方法一
      1. 打开软件WJ4.0 4.2.1.9.exe,编码规则如Mon493.Pak,编号为00000.,则编号为493-1=492,360/0=0,加起来为4920
        博客传奇游戏开发添加怪物5
        博客传奇游戏开发添加怪物6
    2. 方法二
      1. 打开软件WJ4.0 4.2.1.9.exe,图片有错误怪物外观只要不与其它编号冲突即可.
        博客传奇添加怪物7
      2. 打开游戏控制台的怪物设置
        博客传奇游戏开发添加怪物8
        博客传奇游戏开发添加怪物6
        若确定配置无误没有显示怪物,可以重启引擎尝试
  32. 添加MonXXX.Pak文件
    博客传奇添加怪物8

  33. 在Pak.txt配置新添加的Monxxx.pak的密码

    传奇物品相关

    物品代码表

    | 物品代码(Stdmode) | 物品类型 | 相关说明 |
    |—————————-|————————|—————————————————————————————————————————————|
    | 0 | 药品 | |
    | 1 | 食物 | |
    | 2 | | |
    | 3 | 卷类 | |
    | 4 | 技能书 | |
    | 5 | 武器 | |
    | 6 | 武器 | |
    | 7 | 技能书 | |
    | 8 | | |
    | 9 | | |
    | 10 | 衣服(男) | |
    | 11 | 衣服(女) | |
    | 12 | 盾牌 | (支持外观)位置代码=16 变量<$SHIELD> |
    | 15 | 头盔 | |
    | 16 | 斗笠 | |
    | 19 | 项链 | |
    | 20 | 项链 | |
    | 21 | 项链 | |
    | 22 | 戒指 | |
    | 23 | 戒指 | |
    | 24 | 手镯 | |
    | 25 | 符、毒药 | |
    | 26 | 手镯 | |
    | 28 | 马牌 | (支持外观)位置代码=15 变量<$HORSE> |
    | 29 | 天使翼 | ——翅膀 |
    | 30 | 照明物 | 物品数据内Source字段为1时不随时间掉持久,为0随时间掉持久 |
    | 31 | 捆装物品 | |
    | 40 | 宝箱钥匙 | 游戏开宝箱功能,宝箱所需的钥匙 |
    | 46 | 宝石镶嵌 | 装备打孔镶嵌的宝石 |
    | 49 | 聚灵珠 | |
    | 53 | 宝石 | 有气血石功能 Anicount=1,2,3 分别对应三种石头 |
    | 55,56,57,58,59 | 宝石 | 宝石升级所需物品 |
    | 62 | 鞋子 | Anicount控制腰带、靴子、宝石的负重属性 |
    | 63 | 宝石 | Anicount控制腰带、靴子、宝石的负重属性 |
    | 64 | 腰带 | Anicount控制腰带、靴子、宝石的负重属性 |
    | 65 | 军鼓 | 装备位置 14 |
    | 90 | 灵玉 | 物品位置代码=17 |
    | 66 | 时装衣服(男) | 物品位置代码=18 |
    | 67 | 时装衣服(女) | 物品位置代码=18 |
    | 68、69 | 时装武器 | 物品位置代码=19 |
    | 70 - 74 | 称号系统 | 称号系统 |
    | 75、76、77 | 时装项链 | 物品位置代码=20 |
    | 78 | 时装头盔 | 物品位置代码=21 |
    | 79、80 | 时装左手镯 | 物品位置代码=22 |
    | 79、80 | 时装右手镯 | 物品位置代码=23 |
    | 81、82 | 时装左戒指 | 物品位置代码=24 |
    | 81、82 | 时装右戒指 | 物品位置代码=25 |
    | 83 | 时装勋章 | 物品位置代码=26 |
    | 84、85 | 时装腰带 | 物品位置代码=27 |
    | 86, 87 | 时装靴子 | 物品位置代码=28 |
    | 88, 89 | 时装宝石 | 物品位置代码=29 |
    | 96 | 祝福罐 | 祝福罐、魔族指令、火龙之心填充物数据库设置 |

原端物品表格

点击这里访问

快速找到原端物品并且统计数量

  1. 使用任意一款能打开SqLite的数据库软件(例如:HeidiSQL)打开MirServer\Mud2\DB\数据库文件.DB
  2. 如图所示,打开Sql表执行语句SELECT * FROM StdItems WHERE StdMode = 物品编号 ORDER BY Looks
    博客传奇游戏开发查询物品类型统计数量

    需要注意的是查询结果包含了原端的物品,需要减去.

快速添加另一个端的物品资源步骤(以添加武器为例)

  1. 将素材端的所以文件(ItemsXXX,DnitemsXXX,StateItemsXXX),直接复制到自己的端,并且将文件名修改为自己端没有被使用的名字,并且保证三个文件的文件名序号和文件内部图片序号一一对应.
  2. 将复制过来的文件密码添加到Pak,重新打包客户端.
  3. 打开引擎控制台,将新加入的文件添加入列表
    博客传奇游戏开发添加物品资源步骤1
  4. 打开数据库软件(HeidiSql),加载Sqlite数据库,文件在MirServer\Mud2\DB\数据库文件.db.自己的端和素材的数据库都打开.
  5. (这里需要什么物品就写对应的Sql语句)先选中数据库,然后点击查询输入下面的Sql语句,即可返回能使用的素材表格,检查素材是否正确能使用,若不能使用自己修改Sql条件.
    SELECT *
         FROM StdItems
         WHERE stdmode IN (5, 6) -- 物品类型编号
           AND name NOT IN (
             '木剑', '青铜剑', '青铜斧', '短剑', '凌风', '匕首', '铁剑',
             '斩马刀', '银蛇', '罗刹', '修罗', '炼狱', '魔杖', '乌木剑',
             '八荒', '凝霜', '半月', '降魔', '井中月', '破魂', '无极棍',
             '血饮', '祈祷之刃', '龙纹剑', '屠龙', '命运之刃', '霸者之刃',
             '赤血魔剑', '家传宝刀', '怒斩', '逍遥扇', '海魂', '偃月',
             '鹤嘴锄', '裁决之杖', '嗜魂法杖', '骨玉权杖', '龙牙', '赤月',
             '无限狂刀', '十步血剑', '封魔'
           ) -- 原端物品名字,排除原端物品
           AND looks IS NOT NULL
           AND looks >= 10000 -- Intems编号,一般都是大于10000
           ORDER BY looks
           --LIMIT 12 -- 返回个数
    
    博客传奇游戏开发添加物品资源步骤2
  6. 将下面代码的数据库地址/文件编号/Sql语句修改就可以执行.
import sqlite3

def get_table_schema(db_connection, table_name):
    cursor = db_connection.cursor()
    cursor.execute(f"PRAGMA table_info({table_name})")
    columns = cursor.fetchall()
    return {column[1].lower(): column[1] for column in columns} 

def main():
    conn_db1 = sqlite3.connect(r'D:\玛法大陆\MirServer\Mud2\DB\GEEM2.db') # 自己端的数据库

    conn_db2 = sqlite3.connect(r'D:\欲火素材\4月独家百年沉默复古三职业传奇版本\百年沉默解压密码是ruciwan\百年沉默Mirserver\Mirserver\Mud2\DB\ApexM2.db') # 需要查询的数据库也就是数据来源
    specified_digit = None  # Items的编号例如Items5,则输入 5。输入None则保持原数据不变

    try:
        # 获取表结构
        columns_db1 = get_table_schema(conn_db1, "StdItems")
        columns_db2 = get_table_schema(conn_db2, "StdItems")

        cur_db1 = conn_db1.cursor()
        cur_db2 = conn_db2.cursor()

        actual_columns_db1 = list(columns_db1.values())
        insert_query = f'''
        INSERT INTO StdItems ({', '.join(actual_columns_db1)})
        VALUES ({', '.join(['?' for _ in actual_columns_db1])})
        '''

        # 注意语句需要SELECT 使用*号
        query_db2 = '''
 SELECT *
        FROM StdItems
        WHERE stdmode IN (64)
          AND name NOT IN ('铁手镯','避邪手镯','银手镯','夏普儿手镯','记忆手镯','钢手镯','幽灵手套','阎罗手套111','死神手套','皮制手套','坚固手套','小手镯','天尊手镯','圣战手镯','法神手镯','道士手镯','大手镯','魔法手镯','金手镯','三眼手镯','骑士手镯','思贝儿手镯','黑檀手镯','祈祷手镯','龙之手镯','神秘腰带','魔力手镯','心灵手镯','魔血手镯','虹魔手镯')
          AND looks IS NOT NULL
          AND looks >= 10000
          ORDER BY looks
      LIMIT 5
        '''

        cur_db2.execute(query_db2)
        items_to_insert = cur_db2.fetchall()

        cur_db2.execute('PRAGMA table_info(StdItems)')
        col_info_db2 = cur_db2.fetchall()
        columns_db2 = [info[1].lower() for info in col_info_db2]

        cur_db1.execute('SELECT MAX(Idx) FROM StdItems')
        max_idx = cur_db1.fetchone()[0] or 0

        for i, row in enumerate(items_to_insert):
            record_dict = dict(zip(columns_db2, row))
            new_record = []
            for column in actual_columns_db1:
                if column.lower() == "idx":
                    new_record.append(max_idx + i + 1)
                elif column.lower() == "looks":
                    looks_value = record_dict.get(column.lower(), 0)
                    if specified_digit is not None and looks_value != 0:
                        new_looks_value = int(str(specified_digit) + str(looks_value)[1:]) 
                    else:
                        new_looks_value = looks_value
                    new_record.append(new_looks_value)
                else:
                    new_record.append(record_dict.get(column.lower(), 0))
            cur_db1.execute(insert_query, new_record)

        conn_db1.commit()
        print("数据插入成功!")

    except (sqlite3.Error, ValueError) as e:
        print("错误:", e)

    finally:
        conn_db1.close()
        conn_db2.close()

if __name__ == "__main__":
    main()

EffectList.txt参数含义

没写的直接去软件里调整就行,就不写全了

; 特效编号 物品内观特效资源编号(关闭特效为-1)    -1    物品在包裹中的特效资源编号(关闭特效为-1) 物品内观特效开始图片 物品外观特效开始图片 物品在包裹中的特效开始图片 物品内观特效数量 0 物品在包裹中的特效数量 物品内观特效速度 0 物品在包裹中的特效速度 物品内观特效X坐标 物品内观特效Y坐标 0 0 物品在包裹中的特效X坐标 物品在包裹中的特效Y坐标 0 0 1 0 -1 -1 外观特效开始图片 外观特效数量 外观特效速度 0    0    0    0    0    -1 物品在地上特效开始图片 地上数量 物品在地上特效速度 物品在地上特效X坐标 物品在地上特效Y坐标 0 0 0 备注

评论