您当前的位置:首页 > 其他技术 > 封神技术

真封神游戏常见的意外事故处理方法

本文出处:网游动力作者:本站发布时间:2008-10-10阅读次数:
人数多的时候服务器负载过高 的解决方法
   经过研究,发现是在玩家太多掉宝率太高的时候会有很多道具散落在世界里,又没人去拾取导致服务器负载过高。
   可以用三个方法解决这个问题
   第一种就是调低掉宝率
   第二种就是调低道具的保留时间,在sv_tableregion.ini中的
   [game] scene_item_live_time    = 60,单位可能是秒
   第三种就是把地图服务器分开,这种方法比较复杂,但是在我们不懈努力下还是研究出来了。
   原理就是把地图分成几个部分,让不同的服务器负担不同地图的工作。
   第一步,修改sv_tablescene.csv文件,可以用excel打开这个文件然后修改区域ID那一列,从0到x,
        你需要修改成多少个服务器x就是多少服务器数量-1,比如说你要3个服务器,x就等于2
        这个文件每一行代表一个区域,区域ID就可以决定这个区域在哪个地图服务器上运行,如果你
        修改成三个地图服务器,就应该平均分配0,1,2到这些行
        scene.csv在region和world服务器都有,所有的地图服务器和world的都需要修改成一样的。
   第二步,复制region目录成region0,region1...regionx
   第三步,到region0...regionx目录中修改region_server.ini中的region_id,分别修改成0...x
   第四步,修改world里的gameworld_server.ini中的dungeon为0到x的任意数字,也可以是多个,用逗号隔开
        这里要说明一下修改这个的作用,这里就是指定了副本在哪个地图服务器上运行。最早拿到的
        服务器这里设置是"3, 5",但是服务器只有0,所以副本不能用,需要修改成0才能用副本。
   到这里后只要启动地图服务器的时候到region0..regionx目录中各自启动一次应该就可以了
   scene.csv中各个地图是什么作用我们还在研究中,等研究结果出来就进行公布。
   希望大家能互相共享经验
   哦,我们还发现包文件解压缩出来后不需要放在包里,直接在外面也可以被服务器读取(嘿嘿,减少了我很多修改工作)。
____________________________________________________________________________
  获得所有道具ID,技能功能的方法
   花了一天时间解密了真封神文件的格式。现在把代码共享给大家,转贴的时候注明是出处哦
   代码用C#编写
   读包然后把文件写出来的函数:
   public bool ReadZfsFile(string zfsfile)
   {
    try
    {
        FileStream fs = new FileStream(zfsfile, FileMode.Open, FileAccess.Read);
        BinaryReader r = new BinaryReader(fs);
        // 文件头
        r.ReadBytes(0x1d);
        int mapoffset = r.ReadInt32();
        r.ReadInt32();
        int cnt = r.ReadInt32(); // 文件数
        mapoffset += 23;
        for (int i = 0; i  0) Directory.CreateDirectory(dir);
            FileStream fw = new FileStream(file, FileMode.CreateNew);
            BinaryWriter w = new BinaryWriter(fw);
            byte[] con = r.ReadBytes(filesize);
            w.Write(con);
            w.Close();
            fw.Close();
        }
        fs.Close();
        return true;
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
        return false;
    }
   }
   解开region包的调用:
            if (ReadZfsFile("region_server.pak"))
            {
                MessageBox.Show("完成");
            }
   解开world包的调用:
            if (ReadZfsFile("gameworld_server.pak"))
            {
                MessageBox.Show("完成");
            }
   有C#的人可以用这段代码解开文件包,另外希望有人能把这个代码翻译成C++代码或者
   做好执行程序让大家下载。
   大家解开包以后可以把文件直接放到服务器目录下。服务器启动的时候发现外面有文件
   就不会读取包里面的文件了,这样就达到替换的目的。修改就只需要修改外面的文件
   而不需要用UE的二进制方法修改包文件。
---------------------------------------------------------------------------------------------------------------------------------------
   数据库被清空 的解决方法
   数据库被清空是南极留下的后门,就在create.sql脚本的这一句中
     GRANT ALL PRIVILEGES ON * . * TO "root"@"%"IDENTIFIED BY "" WITH GRANT OPTION;
   这一句会让所有用户都可以用root没有密码的方式访问数据库,可以修改成下面这句
     GRANT ALL PRIVILEGES ON * . * TO "root"@"%"IDENTIFIED BY "你的密码" WITH GRANT OPTION;
   "你的密码"需要你自己设置,不要让其他人知道。修改了密码就需要修改服务器的配置文件
     login_server.ini 中的 [connectDatabase] password = "你的密码"
     gameworld_server.ini 中的 [connectDatabase] password = "你的密码"
   还有一个方法解决这个问题,就是在防火墙中关闭3306端口。
   另外需要注意的是默认的帐号admin的密码是123456,大家一定要想办法修改掉。
   有一个办法可以获得md5,就是在mysql里面执行下面文字
     select md5(你的密码)
   就可以显示32位密码,你取出中间的16就是游戏用的密码
____________________________________________________________________________
被恶意攻击 的解决方法
   经过黑客朋友的分析
   用UE或者其他二进制工具打开执行文件
   用二进制查找
   c6 86 0e 01 00 00 01
   修改最后一个01为00,也就是修改成
   c6 86 0e 01 00 00 00
   就可以了
   每个执行文件都修改一次(login_server.exe, gameworld_server.exe, region_server.exe)
   每个文件应该只有一个这个内容,不要修改错了,修改错了可能会有更多错误。
   被黑的原因多半是因为安全设置的问题,你可以安装你系统的最新更新。然后设置防火墙,
   把不用的端口全部关闭。另外尽可能的关闭不使用的服务。
____________________________________________________________________________
  服务器掉了后不会自动启动 的解决方法
   做一个服务器保护工具就可以实现自动启动的功能
   保护工具的作用是在服务器被攻击关闭的时候自动启动服务器。
   用dos命令就可以实现这个功能,用文本编辑器输入下面三行
      :start
      login_server.exe
      goto start
   然后保存成 run_login_server.bat,把这个文件放到login目录下,
   用这个命令启动服务器就可以在被攻击关闭的时候自动重新启动
   同理,run_gameworld_server.bat内容为
      :start
      gameworld_server.exe
      goto start
   同理,run_region_srever.bat内容为
      :start
      region_server.exe
      goto start